mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
sunxi-6.13: panfrost: rework power-domain patches to v2
Also re-export the megous and drm patches to v6.13.9
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
From 278eb0c7c55813efa78f8d32afd559c1121bc9d4 Mon Sep 17 00:00:00 2001
|
||||
From ce56f3f385e0830a1e242f9fca9a82c3067ba03f Mon Sep 17 00:00:00 2001
|
||||
From: Philippe Simons <simons.philippe@gmail.com>
|
||||
Date: Thu, 13 Mar 2025 00:23:18 +0100
|
||||
Subject: drm/panfrost: Add PM runtime flags
|
||||
@@ -23,32 +23,30 @@ core genpd disable and enable it when gpu enter and leave runtime suspend.
|
||||
Some power-domain requires a sequence before disabled,
|
||||
and the reverse when enabled.
|
||||
|
||||
Add PM flags for CLK and RST, and implement in
|
||||
Add GPU_PM_RT flag, and implement in
|
||||
panfrost_device_runtime_suspend/resume.
|
||||
|
||||
Signed-off-by: Philippe Simons <simons.philippe@gmail.com>
|
||||
---
|
||||
drivers/gpu/drm/panfrost/panfrost_device.c | 37 ++++++++++++++++++++++
|
||||
drivers/gpu/drm/panfrost/panfrost_device.h | 4 +++
|
||||
2 files changed, 41 insertions(+)
|
||||
drivers/gpu/drm/panfrost/panfrost_device.c | 33 ++++++++++++++++++++++
|
||||
drivers/gpu/drm/panfrost/panfrost_device.h | 3 ++
|
||||
2 files changed, 36 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/panfrost/panfrost_device.c
|
||||
index a45e4addcc19..189ad2ad2b32 100644
|
||||
index a45e4addcc19..93d48e97ce10 100644
|
||||
--- a/drivers/gpu/drm/panfrost/panfrost_device.c
|
||||
+++ b/drivers/gpu/drm/panfrost/panfrost_device.c
|
||||
@@ -406,11 +406,38 @@ void panfrost_device_reset(struct panfrost_device *pfdev)
|
||||
@@ -406,11 +406,36 @@ void panfrost_device_reset(struct panfrost_device *pfdev)
|
||||
static int panfrost_device_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct panfrost_device *pfdev = dev_get_drvdata(dev);
|
||||
+ int ret;
|
||||
+
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT_RST_ASRT)) {
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) {
|
||||
+ ret = reset_control_deassert(pfdev->rstc);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT_CLK_DIS)) {
|
||||
+ ret = clk_enable(pfdev->clock);
|
||||
+ if (ret)
|
||||
+ goto err_clk;
|
||||
@@ -66,48 +64,45 @@ index a45e4addcc19..189ad2ad2b32 100644
|
||||
return 0;
|
||||
+
|
||||
+err_bus_clk:
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT_CLK_DIS))
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT))
|
||||
+ clk_disable(pfdev->clock);
|
||||
+err_clk:
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT_RST_ASRT))
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT))
|
||||
+ reset_control_assert(pfdev->rstc);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int panfrost_device_runtime_suspend(struct device *dev)
|
||||
@@ -426,6 +453,16 @@ static int panfrost_device_runtime_suspend(struct device *dev)
|
||||
@@ -426,6 +451,14 @@ static int panfrost_device_runtime_suspend(struct device *dev)
|
||||
panfrost_gpu_suspend_irq(pfdev);
|
||||
panfrost_gpu_power_off(pfdev);
|
||||
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT_CLK_DIS)) {
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT)) {
|
||||
+ if (pfdev->bus_clock)
|
||||
+ clk_disable(pfdev->bus_clock);
|
||||
+
|
||||
+ clk_disable(pfdev->clock);
|
||||
+ }
|
||||
+
|
||||
+ if (pfdev->comp->pm_features & BIT(GPU_PM_RT_RST_ASRT))
|
||||
+ reset_control_assert(pfdev->rstc);
|
||||
+ }
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/panfrost/panfrost_device.h
|
||||
index cffcb0ac7c11..f372d4819262 100644
|
||||
index cffcb0ac7c11..861555ceea65 100644
|
||||
--- a/drivers/gpu/drm/panfrost/panfrost_device.h
|
||||
+++ b/drivers/gpu/drm/panfrost/panfrost_device.h
|
||||
@@ -36,10 +36,14 @@ enum panfrost_drv_comp_bits {
|
||||
@@ -36,10 +36,13 @@ enum panfrost_drv_comp_bits {
|
||||
* enum panfrost_gpu_pm - Supported kernel power management features
|
||||
* @GPU_PM_CLK_DIS: Allow disabling clocks during system suspend
|
||||
* @GPU_PM_VREG_OFF: Allow turning off regulators during system suspend
|
||||
+ * @GPU_PM_RT_CLK_DIS: Allow disabling clocks during system runtime suspend
|
||||
+ * @GPU_PM_RST_ASRT: Allow asserting the reset control during runtime suspend
|
||||
+ * @GPU_PM_RT: Allow disabling clocks and asserting the reset control during
|
||||
+ * system runtime suspend
|
||||
*/
|
||||
enum panfrost_gpu_pm {
|
||||
GPU_PM_CLK_DIS,
|
||||
GPU_PM_VREG_OFF,
|
||||
+ GPU_PM_RT_CLK_DIS,
|
||||
+ GPU_PM_RT_RST_ASRT
|
||||
+ GPU_PM_RT
|
||||
};
|
||||
|
||||
struct panfrost_features {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
From b4b55cd1e58bc396b011f747116db0cfef38f27b Mon Sep 17 00:00:00 2001
|
||||
From 2e800a8620fb78ed4422e8ef8c3741a3ce474bea Mon Sep 17 00:00:00 2001
|
||||
From: Philippe Simons <simons.philippe@gmail.com>
|
||||
Date: Thu, 13 Mar 2025 00:23:19 +0100
|
||||
Subject: drm/panfrost: add h616 compatible string
|
||||
|
||||
Tie the Allwinner compatible string to the two features bits that will
|
||||
Tie the Allwinner compatible string to the GPU_PM_RT feature bits that will
|
||||
toggle the clocks and the reset line whenever the power domain is changing
|
||||
state.
|
||||
|
||||
@@ -13,7 +13,7 @@ Signed-off-by: Philippe Simons <simons.philippe@gmail.com>
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c
|
||||
index ee3864476eb9..a511edc3c045 100644
|
||||
index ee3864476eb9..ecb081e497f0 100644
|
||||
--- a/drivers/gpu/drm/panfrost/panfrost_drv.c
|
||||
+++ b/drivers/gpu/drm/panfrost/panfrost_drv.c
|
||||
@@ -777,6 +777,13 @@ static const struct panfrost_compatible default_data = {
|
||||
@@ -24,7 +24,7 @@ index ee3864476eb9..a511edc3c045 100644
|
||||
+ .num_supplies = ARRAY_SIZE(default_supplies) - 1,
|
||||
+ .supply_names = default_supplies,
|
||||
+ .num_pm_domains = 1,
|
||||
+ .pm_features = BIT(GPU_PM_RT_CLK_DIS) | BIT(GPU_PM_RT_RST_ASRT),
|
||||
+ .pm_features = BIT(GPU_PM_RT),
|
||||
+};
|
||||
+
|
||||
static const struct panfrost_compatible amlogic_data = {
|
||||
|
||||
@@ -0,0 +1,106 @@
|
||||
From 37f8be7eaca786f85cf2a17dfd33227e2ff45780 Mon Sep 17 00:00:00 2001
|
||||
From: Philippe Simons <simons.philippe@gmail.com>
|
||||
Date: Thu, 3 Apr 2025 07:52:10 +0200
|
||||
Subject: drm/panfrost: reorder pd/clk/rst sequence
|
||||
|
||||
According to Mali manuals, the powerup sequence should be
|
||||
enable pd, asserting the reset then enabling the clock and
|
||||
the reverse for powerdown.
|
||||
|
||||
Signed-off-by: Philippe Simons <simons.philippe@gmail.com>
|
||||
---
|
||||
drivers/gpu/drm/panfrost/panfrost_device.c | 38 +++++++++++-----------
|
||||
1 file changed, 19 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/panfrost/panfrost_device.c
|
||||
index 93d48e97ce10..5d35076b2e6d 100644
|
||||
--- a/drivers/gpu/drm/panfrost/panfrost_device.c
|
||||
+++ b/drivers/gpu/drm/panfrost/panfrost_device.c
|
||||
@@ -209,10 +209,20 @@ int panfrost_device_init(struct panfrost_device *pfdev)
|
||||
|
||||
spin_lock_init(&pfdev->cycle_counter.lock);
|
||||
|
||||
+ err = panfrost_pm_domain_init(pfdev);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ err = panfrost_reset_init(pfdev);
|
||||
+ if (err) {
|
||||
+ dev_err(pfdev->dev, "reset init failed %d\n", err);
|
||||
+ goto out_pm_domain;
|
||||
+ }
|
||||
+
|
||||
err = panfrost_clk_init(pfdev);
|
||||
if (err) {
|
||||
dev_err(pfdev->dev, "clk init failed %d\n", err);
|
||||
- return err;
|
||||
+ goto out_reset;
|
||||
}
|
||||
|
||||
err = panfrost_devfreq_init(pfdev);
|
||||
@@ -229,25 +239,15 @@ int panfrost_device_init(struct panfrost_device *pfdev)
|
||||
goto out_devfreq;
|
||||
}
|
||||
|
||||
- err = panfrost_reset_init(pfdev);
|
||||
- if (err) {
|
||||
- dev_err(pfdev->dev, "reset init failed %d\n", err);
|
||||
- goto out_regulator;
|
||||
- }
|
||||
-
|
||||
- err = panfrost_pm_domain_init(pfdev);
|
||||
- if (err)
|
||||
- goto out_reset;
|
||||
-
|
||||
pfdev->iomem = devm_platform_ioremap_resource(pfdev->pdev, 0);
|
||||
if (IS_ERR(pfdev->iomem)) {
|
||||
err = PTR_ERR(pfdev->iomem);
|
||||
- goto out_pm_domain;
|
||||
+ goto out_regulator;
|
||||
}
|
||||
|
||||
err = panfrost_gpu_init(pfdev);
|
||||
if (err)
|
||||
- goto out_pm_domain;
|
||||
+ goto out_regulator;
|
||||
|
||||
err = panfrost_mmu_init(pfdev);
|
||||
if (err)
|
||||
@@ -268,16 +268,16 @@ int panfrost_device_init(struct panfrost_device *pfdev)
|
||||
panfrost_mmu_fini(pfdev);
|
||||
out_gpu:
|
||||
panfrost_gpu_fini(pfdev);
|
||||
-out_pm_domain:
|
||||
- panfrost_pm_domain_fini(pfdev);
|
||||
-out_reset:
|
||||
- panfrost_reset_fini(pfdev);
|
||||
out_regulator:
|
||||
panfrost_regulator_fini(pfdev);
|
||||
out_devfreq:
|
||||
panfrost_devfreq_fini(pfdev);
|
||||
out_clk:
|
||||
panfrost_clk_fini(pfdev);
|
||||
+out_reset:
|
||||
+ panfrost_reset_fini(pfdev);
|
||||
+out_pm_domain:
|
||||
+ panfrost_pm_domain_fini(pfdev);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -287,11 +287,11 @@ void panfrost_device_fini(struct panfrost_device *pfdev)
|
||||
panfrost_job_fini(pfdev);
|
||||
panfrost_mmu_fini(pfdev);
|
||||
panfrost_gpu_fini(pfdev);
|
||||
- panfrost_pm_domain_fini(pfdev);
|
||||
- panfrost_reset_fini(pfdev);
|
||||
panfrost_devfreq_fini(pfdev);
|
||||
panfrost_regulator_fini(pfdev);
|
||||
panfrost_clk_fini(pfdev);
|
||||
+ panfrost_reset_fini(pfdev);
|
||||
+ panfrost_pm_domain_fini(pfdev);
|
||||
}
|
||||
|
||||
#define PANFROST_EXCEPTION(id) \
|
||||
--
|
||||
2.35.3
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
From a0484e86baba6a57768a5161bcf85c1b8f916cae Mon Sep 17 00:00:00 2001
|
||||
From 8f5892bd7362c8654d19055ba9f2e32171627713 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Thorne <Thomas.Thorne@Net2Edge.com>
|
||||
Date: Tue, 20 Sep 2022 20:34:57 -0400
|
||||
Subject: usb: serial: option: add 'reset_resume' callback for WWAN devices
|
||||
@@ -17,10 +17,10 @@ However the rest of the patch is not needed/already upstreamed.
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
||||
index 58bd54e8c483..09b9c19a5178 100644
|
||||
index 5cd26dac2069..f65c1d78a2cc 100644
|
||||
--- a/drivers/usb/serial/option.c
|
||||
+++ b/drivers/usb/serial/option.c
|
||||
@@ -2455,6 +2455,7 @@ static struct usb_serial_driver option_1port_device = {
|
||||
@@ -2471,6 +2471,7 @@ static struct usb_serial_driver option_1port_device = {
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = usb_wwan_suspend,
|
||||
.resume = usb_wwan_resume,
|
||||
|
||||
@@ -290,6 +290,7 @@
|
||||
patches.drm/arm64-dts-allwinner-h616-Add-Mali-GPU-node.patch
|
||||
patches.drm/drm-panfrost-Add-PM-runtime-flags.patch
|
||||
patches.drm/drm-panfrost-add-h616-compatible-string.patch
|
||||
patches.drm/drm-panfrost-reorder-pd-clk-rst-sequence
|
||||
|
||||
################################################################################
|
||||
#
|
||||
|
||||
@@ -37,3 +37,4 @@
|
||||
patches.drm/arm64-dts-allwinner-h616-Add-Mali-GPU-node.patch
|
||||
patches.drm/drm-panfrost-Add-PM-runtime-flags.patch
|
||||
patches.drm/drm-panfrost-add-h616-compatible-string.patch
|
||||
patches.drm/drm-panfrost-reorder-pd-clk-rst-sequence.patch
|
||||
|
||||
Reference in New Issue
Block a user