Re: [PATCH 06/11] mfd: bcm2835-pm: Use 'reg-names' to get resources

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Peter,

Am 31.05.22 um 16:54 schrieb Peter Robinson:
On Sun, May 15, 2022 at 9:21 PM Stefan Wahren <stefan.wahren@xxxxxxxx> wrote:
From: Nicolas Saenz Julienne <nsaenzjulienne@xxxxxxx>

If available in firmware, find resources by their 'reg-names' position
instead of relying on hardcoded offsets. Care is taken to support old
firmware nonetheless.
So this patch has changed a little over Nicolas's last one, which was
what I based my patch on [1] but there's no changelog

[1] https://patchwork.kernel.org/project/linux-arm-kernel/patch/20220213225646.67761-7-pbrobinson@xxxxxxxxx/

yes my favorite changelog style is "within the cover letter". Since i started a new and split out series a version reference doesn't make sense. But yes, very unfortunate for a reviewer. Keeping the version number would have been better.

Here the changes since v4 afterwards:

- fix copy & paste issue in else branch
- don't use devm_platform_ioremap_resource_byname for optional register to avoid confusing log error
- pull out asb handling to avoid copy & paste


Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@xxxxxxx>
Signed-off-by: Stefan Wahren <stefan.wahren@xxxxxxxx>
Minor comment inline, else:
Reviewed-by: Peter Robinson <pbrobinson@xxxxxxxxx>
---
  drivers/mfd/bcm2835-pm.c | 59 +++++++++++++++++++++++++++-------------
  1 file changed, 40 insertions(+), 19 deletions(-)

diff --git a/drivers/mfd/bcm2835-pm.c b/drivers/mfd/bcm2835-pm.c
index 42fe67f1538e..1656d786993a 100644
--- a/drivers/mfd/bcm2835-pm.c
+++ b/drivers/mfd/bcm2835-pm.c
@@ -25,9 +25,41 @@ static const struct mfd_cell bcm2835_power_devs[] = {
         { .name = "bcm2835-power" },
  };

+static int bcm2835_pm_get_pdata(struct platform_device *pdev,
+                               struct bcm2835_pm *pm)
+{
+       /* If no 'reg-names' property is found we can assume we're using old
+        * firmware.
+        */
+       if (!of_find_property(pm->dev->of_node, "reg-names", NULL)) {
+               dev_warn(pm->dev, "Old devicetree detected, please update your firmware.\n");
If they're using an upstream kernel DT and an old firmware this may be
confusing, maybe tweak the wording a little?

"reg-names are missing, please update your DTB.\ņ"

+               pm->base = devm_platform_ioremap_resource(pdev, 0);
+               if (IS_ERR(pm->base))
+                       return PTR_ERR(pm->base);
+
+               pm->asb = devm_platform_ioremap_resource(pdev, 1);
+       } else {
+               struct resource *res;
+
+               pm->base = devm_platform_ioremap_resource_byname(pdev, "pm");
+               if (IS_ERR(pm->base))
+                       return PTR_ERR(pm->base);
+
+               res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+                                                   "asb");
+               if (res)
+                       pm->asb = devm_ioremap_resource(&pdev->dev, res);
+       }
+
+       if (IS_ERR(pm->asb))
+               pm->asb = NULL;
+
+       return 0;
+}
+
  static int bcm2835_pm_probe(struct platform_device *pdev)
  {
-       struct resource *res;
         struct device *dev = &pdev->dev;
         struct bcm2835_pm *pm;
         int ret;
@@ -39,10 +71,9 @@ static int bcm2835_pm_probe(struct platform_device *pdev)

         pm->dev = dev;

-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       pm->base = devm_ioremap_resource(dev, res);
-       if (IS_ERR(pm->base))
-               return PTR_ERR(pm->base);
+       ret = bcm2835_pm_get_pdata(pdev, pm);
+       if (ret)
+               return ret;

         ret = devm_mfd_add_devices(dev, -1,
                                    bcm2835_pm_devs, ARRAY_SIZE(bcm2835_pm_devs),
@@ -54,20 +85,10 @@ 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.
          */
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-       if (res) {
-               pm->asb = devm_ioremap_resource(dev, res);
-               if (IS_ERR(pm->asb))
-                       return PTR_ERR(pm->asb);
-
-               ret = devm_mfd_add_devices(dev, -1,
-                                          bcm2835_power_devs,
-                                          ARRAY_SIZE(bcm2835_power_devs),
-                                          NULL, 0, NULL);
-               if (ret)
-                       return ret;
-       }
-
+       if (pm->asb)
+               return devm_mfd_add_devices(dev, -1, bcm2835_power_devs,
+                                           ARRAY_SIZE(bcm2835_power_devs),
+                                           NULL, 0, NULL);
         return 0;
  }

--
2.25.1

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux