]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cpufreq: scmi: Account for malformed DT in scmi_dev_used_by_cpus()
authorFlorian Fainelli <florian.fainelli@broadcom.com>
Mon, 18 Aug 2025 15:50:48 +0000 (08:50 -0700)
committerViresh Kumar <viresh.kumar@linaro.org>
Tue, 19 Aug 2025 05:30:16 +0000 (11:00 +0530)
Broadcom STB platforms were early adopters (2017) of the SCMI framework and as
a result, not all deployed systems have a Device Tree entry where SCMI
protocol 0x13 (PERFORMANCE) is declared as a clock provider, nor are the
CPU Device Tree node(s) referencing protocol 0x13 as their clock
provider. This was clarified in commit e11c480b6df1 ("dt-bindings:
firmware: arm,scmi: Extend bindings for protocol@13") in 2023.

For those platforms, we allow the checks done by scmi_dev_used_by_cpus()
to continue, and in the event of not having done an early return, we key
off the documented compatible string and give them a pass to continue to
use scmi-cpufreq.

Fixes: 6c9bb8692272 ("cpufreq: scmi: Skip SCMI devices that aren't used by the CPUs")
Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
drivers/cpufreq/scmi-cpufreq.c

index ef078426bfd51af6a8a4b803278dfae5d323db48..38c165d526d144bd5d6d72c8bec0b813d5070b07 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/energy_model.h>
 #include <linux/export.h>
 #include <linux/module.h>
+#include <linux/of.h>
 #include <linux/pm_opp.h>
 #include <linux/pm_qos.h>
 #include <linux/slab.h>
@@ -424,6 +425,15 @@ static bool scmi_dev_used_by_cpus(struct device *scmi_dev)
                        return true;
        }
 
+       /*
+        * Older Broadcom STB chips had a "clocks" property for CPU node(s)
+        * that did not match the SCMI performance protocol node, if we got
+        * there, it means we had such an older Device Tree, therefore return
+        * true to preserve backwards compatibility.
+        */
+       if (of_machine_is_compatible("brcm,brcmstb"))
+               return true;
+
        return false;
 }