]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Oct 2025 09:56:26 +0000 (11:56 +0200)
[ Upstream commit cd5d4621ba846dad9b2e6b0c2d1518d083fcfa13 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/cpufreq/scmi-cpufreq.c

index 6ff77003a96eace1ef2c354ebb9d9223d12b62e6..68325ebd56fe3704edafe0228b30810c9edfa3d9 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/slab.h>
 #include <linux/scmi_protocol.h>
@@ -330,6 +331,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;
 }