Skip to contentSkip to conversation

Add Power Management support for BCM2712

PATCH Applied Andrea della Porta 3 participants 6 messages Mar 6 – Mar 19

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

cover Add Power Management support for BCM2712

Hi all,

This patchset adds support for the BCM2712 Power Management (PM) block, which is necessary to power the domain of the V3D graphic block.

The implementation is done in two steps:
- Patch 1: Adds the SoC identifier to distinguish between hardware variants.
- Patch 2: Adds the specific PM support for the BCM2712.

Many thanks,
Andrea

Phil Elwell (2):
mfd: bcm2835-pm: Introduce SoC-specific type identifier
mfd: bcm2835-pm: Add BCM2712 PM device support

 drivers/mfd/bcm2835-pm.c       | 9 +++++----
 include/linux/mfd/bcm2835-pm.h | 7 +++++++
 2 files changed, 12 insertions(+), 4 deletions(-)
Signature · 1 line
2.35.3
#1 lore raw

PATCH 1/2 mfd: bcm2835-pm: Introduce SoC-specific type identifier

From: Phil Elwell <[email protected]>

Power management blocks across the BCM2835 family share a common base but require variant-specific handling. For instance, the BCM2712 lacks ASB register space, yet it manages the power domain for the V3D graphics block.

Add a hardware type identifier to the driver's private data. This allows the driver to distinguish between SoC models and implement custom quirks or features as needed.

---
 drivers/mfd/bcm2835-pm.c       | 7 ++++---
 include/linux/mfd/bcm2835-pm.h | 7 +++++++
 2 files changed, 11 insertions(+), 3 deletions(-)
drivers/mfd/bcm2835-pm.c +4 -3
index 8bed59816e82e..2d5dc521b623d 100644
@@ -81,6 +81,7 @@ static int bcm2835_pm_probe(struct platform_device *pdev)
 	platform_set_drvdata(pdev, pm);
 
 	pm->dev = dev;
+	pm->soc = (uintptr_t)device_get_match_data(dev);
 
 	ret = bcm2835_pm_get_pdata(pdev, pm);
 	if (ret)
@@ -106,9 +107,9 @@ static int bcm2835_pm_probe(struct platform_device *pdev)
 
 static const struct of_device_id bcm2835_pm_of_match[] = {
 	{ .compatible = "brcm,bcm2835-pm-wdt", },
-	{ .compatible = "brcm,bcm2835-pm", },
-	{ .compatible = "brcm,bcm2711-pm", },
-	{ .compatible = "brcm,bcm2712-pm", },
+	{ .compatible = "brcm,bcm2835-pm", .data = (void *)BCM2835_PM_SOC_BCM2835 },
+	{ .compatible = "brcm,bcm2711-pm", .data = (void *)BCM2835_PM_SOC_BCM2711 },
+	{ .compatible = "brcm,bcm2712-pm", .data = (void *)BCM2835_PM_SOC_BCM2712 },
 	{},
 };
 MODULE_DEVICE_TABLE(of, bcm2835_pm_of_match);
include/linux/mfd/bcm2835-pm.h +7 -0
index f70a810c55f7d..d2e17ab1dbfc5 100644
@@ -5,11 +5,18 @@
 
 #include <linux/regmap.h>
 
+enum bcm2835_soc {
+	BCM2835_PM_SOC_BCM2835,
+	BCM2835_PM_SOC_BCM2711,
+	BCM2835_PM_SOC_BCM2712,
+};
+
 struct bcm2835_pm {
 	struct device *dev;
 	void __iomem *base;
 	void __iomem *asb;
 	void __iomem *rpivid_asb;
+	enum bcm2835_soc soc;
 };
 
 #endif /* BCM2835_MFD_PM_H */
Signature · 1 line
2.35.3
maintainer Reviewed-by on v1 1/2
#2 lore raw

Re: [PATCH 1/2] mfd: bcm2835-pm: Introduce SoC-specific type identifier

Quoted 7 lines · Andrea della Porta

From: Phil Elwell <[email protected]>

Power management blocks across the BCM2835 family share a common base but require variant-specific handling. For instance, the BCM2712 lacks ASB register space, yet it manages the power domain for the V3D graphics block.

Quoted 8 lines

Add a hardware type identifier to the driver's private data. This allows the driver to distinguish between SoC models and implement custom quirks or features as needed.

Signature · 1 line
Florian
#3 lore raw

PATCH 2/2 mfd: bcm2835-pm: Add BCM2712 PM device support

In reply to Andrea della Porta

From: Phil Elwell <[email protected]>

The BCM2712 SoC includes a power management block that serves as the power domain for the V3D graphics block. Unlike other PM blocks in the BCM2835 family, it does not feature an ASB register space.

Conditionally register the PM device depending on the SoC variant.

---
 drivers/mfd/bcm2835-pm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/mfd/bcm2835-pm.c +1 -1
index 2d5dc521b623d..9e8e3dcf4bceb 100644
@@ -98,7 +98,7 @@ static int bcm2835_pm_probe(struct platform_device *pdev)
 	 * bcm2835-pm binding as the key for whether we can reference
 	 * the full PM register range and support power domains.
 	 */
-	if (pm->asb)
+	if (pm->asb || pm->soc == BCM2835_PM_SOC_BCM2712)
 		return devm_mfd_add_devices(dev, -1, bcm2835_power_devs,
 					    ARRAY_SIZE(bcm2835_power_devs),
 					    NULL, 0, NULL);
Signature · 1 line
2.35.3
maintainer Reviewed-by on v1 2/2
#4 lore raw

Re: [PATCH 2/2] mfd: bcm2835-pm: Add BCM2712 PM device support

Quoted 6 lines · Andrea della Porta

From: Phil Elwell <[email protected]>

The BCM2712 SoC includes a power management block that serves as the power domain for the V3D graphics block. Unlike other PM blocks in the BCM2835 family, it does not feature an ASB register space.

Quoted 6 lines

Conditionally register the PM device depending on the SoC variant.

Signature · 1 line
Florian
maintainer Applied
#5 lore raw
In reply to Andrea della Porta
Quoted 9 lines · Andrea della Porta

This patchset adds support for the BCM2712 Power Management (PM) block, which is necessary to power the domain of the V3D graphic block.

The implementation is done in two steps:
- Patch 1: Adds the SoC identifier to distinguish between hardware variants.
- Patch 2: Adds the specific PM support for the BCM2712.

[...]

Applied, thanks!

[1/2] mfd: bcm2835-pm: Introduce SoC-specific type identifier

      commit: a1c5073dac90aa5cbf187697401d9b3eff2bc269
[2/2] mfd: bcm2835-pm: Add BCM2712 PM device support
      commit: 5849d8afe131012bfefaee34dde87fe5c82ddce0

--
Lee Jones [李琼斯]