mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
linux (Allwinner): drop upstreamed patches in 6.9
This commit is contained in:
parent
1b3e8f7e21
commit
8ce18e623f
@ -1,61 +0,0 @@
|
||||
Subject: [PATCH] drm: Call drm_atomic_helper_shutdown() at shutdown time for misc drivers
|
||||
From: Douglas Anderson <dianders@chromium.org>
|
||||
Date: Fri, 01 Sep 2023 16:39:53 -0700
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 7bit
|
||||
|
||||
Based on grepping through the source code these drivers appear to be
|
||||
missing a call to drm_atomic_helper_shutdown() at system shutdown
|
||||
time. Among other things, this means that if a panel is in use that it
|
||||
won't be cleanly powered off at system shutdown time.
|
||||
|
||||
The fact that we should call drm_atomic_helper_shutdown() in the case
|
||||
of OS shutdown/restart comes straight out of the kernel doc "driver
|
||||
instance overview" in drm_drv.c.
|
||||
|
||||
All of the drivers in this patch were fairly straightforward to fix
|
||||
since they already had a call to drm_atomic_helper_shutdown() at
|
||||
remove/unbind time but were just lacking one at system shutdown. The
|
||||
only hitch is that some of these drivers use the component model to
|
||||
register/unregister their DRM devices. The shutdown callback is part
|
||||
of the original device. The typical solution here, based on how other
|
||||
DRM drivers do this, is to keep track of whether the device is bound
|
||||
based on drvdata. In most cases the drvdata is the drm_device, so we
|
||||
can just make sure it is NULL when the device is not bound. In some
|
||||
drivers, this required minor code changes. To make things simpler,
|
||||
drm_atomic_helper_shutdown() has been modified to consider a NULL
|
||||
drm_device as a noop in the patch ("drm/atomic-helper:
|
||||
drm_atomic_helper_shutdown(NULL) should be a noop").
|
||||
|
||||
Suggested-by: Maxime Ripard <mripard@kernel.org>
|
||||
Signed-off-by: Douglas Anderson <dianders@chromium.org>
|
||||
Acked-by: Maxime Ripard <mripard@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20230901163944.RFT.2.I9115e5d094a43e687978b0699cc1fe9f2a3452ea@changeid
|
||||
---
|
||||
<snip>
|
||||
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
|
||||
index 6a8dfc022d3c..35d7a7ffd208 100644
|
||||
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
|
||||
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
|
||||
@@ -413,6 +413,11 @@ static void sun4i_drv_remove(struct platform_device *pdev)
|
||||
component_master_del(&pdev->dev, &sun4i_drv_master_ops);
|
||||
}
|
||||
|
||||
+static void sun4i_drv_shutdown(struct platform_device *pdev)
|
||||
+{
|
||||
+ drm_atomic_helper_shutdown(platform_get_drvdata(pdev));
|
||||
+}
|
||||
+
|
||||
static const struct of_device_id sun4i_drv_of_table[] = {
|
||||
{ .compatible = "allwinner,sun4i-a10-display-engine" },
|
||||
{ .compatible = "allwinner,sun5i-a10s-display-engine" },
|
||||
@@ -437,6 +442,7 @@ MODULE_DEVICE_TABLE(of, sun4i_drv_of_table);
|
||||
static struct platform_driver sun4i_drv_platform_driver = {
|
||||
.probe = sun4i_drv_probe,
|
||||
.remove_new = sun4i_drv_remove,
|
||||
+ .shutdown = sun4i_drv_shutdown,
|
||||
.driver = {
|
||||
.name = "sun4i-drm",
|
||||
.of_match_table = sun4i_drv_of_table,
|
||||
<snip>
|
@ -1,29 +0,0 @@
|
||||
From 667a93ec571a2a8f2487c258c928936d73b7fa14 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
Date: Sun, 19 Feb 2023 13:02:31 +0100
|
||||
Subject: [PATCH] ARM: dts: sun8i-r40: Add interconnect to video-codec
|
||||
|
||||
Video codec needs interconnect, so driver knows that it needs to adjust
|
||||
DMA addresses.
|
||||
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
---
|
||||
arch/arm/boot/dts/allwinner/sun8i-r40.dtsi | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/allwinner/sun8i-r40.dtsi b/arch/arm/boot/dts/allwinner/sun8i-r40.dtsi
|
||||
index 4ef26d8f5340..a5b1f1e3900d 100644
|
||||
--- a/arch/arm/boot/dts/allwinner/sun8i-r40.dtsi
|
||||
+++ b/arch/arm/boot/dts/allwinner/sun8i-r40.dtsi
|
||||
@@ -338,6 +338,8 @@ video-codec@1c0e000 {
|
||||
resets = <&ccu RST_BUS_VE>;
|
||||
interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
|
||||
allwinner,sram = <&ve_sram 1>;
|
||||
+ interconnects = <&mbus 4>;
|
||||
+ interconnect-names = "dma-mem";
|
||||
};
|
||||
|
||||
mmc0: mmc@1c0f000 {
|
||||
--
|
||||
2.39.2
|
||||
|
@ -1,66 +0,0 @@
|
||||
From edfe1a6c99aff85e97dc1600355a66bbcb417531 Mon Sep 17 00:00:00 2001
|
||||
From: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
Date: Thu, 12 Oct 2023 20:25:42 +0200
|
||||
Subject: [PATCH 22/25] clk: sunxi-ng: h6: Reparent CPUX during PLL CPUX rate
|
||||
change
|
||||
|
||||
While PLL CPUX clock rate change when CPU is running from it works in
|
||||
vast majority of cases, now and then it causes instability. This leads
|
||||
to system crashes and other undefined behaviour. After a lot of testing
|
||||
(30+ hours) while also doing a lot of frequency switches, we can't
|
||||
observe any instability issues anymore when doing reparenting to stable
|
||||
clock like 24 MHz oscillator.
|
||||
|
||||
Fixes: 524353ea480b ("clk: sunxi-ng: add support for the Allwinner H6 CCU")
|
||||
Link: https://forum.libreelec.tv/thread/27295-orange-pi-3-lts-freezes/
|
||||
Reported-by: Chad Wagner <wagnerch42@gmail.com>
|
||||
Tested-by: Chad Wagner <wagnerch42@gmail.com>
|
||||
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
|
||||
---
|
||||
drivers/clk/sunxi-ng/ccu-sun50i-h6.c | 19 +++++++++++++++++--
|
||||
1 file changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c
|
||||
index 42568c616181..892df807275c 100644
|
||||
--- a/drivers/clk/sunxi-ng/ccu-sun50i-h6.c
|
||||
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-h6.c
|
||||
@@ -1181,11 +1181,18 @@ static const u32 usb2_clk_regs[] = {
|
||||
SUN50I_H6_USB3_CLK_REG,
|
||||
};
|
||||
|
||||
+static struct ccu_mux_nb sun50i_h6_cpu_nb = {
|
||||
+ .common = &cpux_clk.common,
|
||||
+ .cm = &cpux_clk.mux,
|
||||
+ .delay_us = 1,
|
||||
+ .bypass_index = 0, /* index of 24 MHz oscillator */
|
||||
+};
|
||||
+
|
||||
static int sun50i_h6_ccu_probe(struct platform_device *pdev)
|
||||
{
|
||||
void __iomem *reg;
|
||||
+ int i, ret;
|
||||
u32 val;
|
||||
- int i;
|
||||
|
||||
reg = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(reg))
|
||||
@@ -1252,7 +1259,15 @@ static int sun50i_h6_ccu_probe(struct platform_device *pdev)
|
||||
val |= BIT(24);
|
||||
writel(val, reg + SUN50I_H6_HDMI_CEC_CLK_REG);
|
||||
|
||||
- return devm_sunxi_ccu_probe(&pdev->dev, reg, &sun50i_h6_ccu_desc);
|
||||
+ ret = devm_sunxi_ccu_probe(&pdev->dev, reg, &sun50i_h6_ccu_desc);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Reparent CPU during PLL CPUX rate changes */
|
||||
+ ccu_mux_notifier_register(pll_cpux_clk.common.hw.clk,
|
||||
+ &sun50i_h6_cpu_nb);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id sun50i_h6_ccu_ids[] = {
|
||||
--
|
||||
2.42.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user