* [PATCH v5 0/1] cpufreq: ti: Fix probe ordering with k3-socinfo
@ 2026-06-03 7:24 Akashdeep Kaur
2026-06-03 7:24 ` [PATCH v5 1/1] cpufreq: ti: Add EPROBE_DEFER for K3 SoCs Akashdeep Kaur
0 siblings, 1 reply; 3+ messages in thread
From: Akashdeep Kaur @ 2026-06-03 7:24 UTC (permalink / raw)
To: zhongqiu.han, praneeth, nm, vigneshr, rafael, viresh.kumar,
linux-pm, linux-kernel
Cc: vishalm, sebin.francis, k-willis, a-kaur
For K3 SoCs, ti-cpufreq depends on k3-socinfo to provide SoC revision
information via soc_device_match(). If ti-cpufreq probes before
k3-socinfo, soc_device_match() returns NULL, causing incorrect
revision detection and OPP table initialization failures.
Add a needs_k3_socinfo flag to ti_cpufreq_soc_data to properly handle
probe deferral when k3-socinfo hasn't registered the SoC device yet.
Changes in v5
- Use dev_err_probe() instead of dev_dbg() with updated error message
- Link to v4: https://lore.kernel.org/all/20260528090510.829513-1-a-kaur@ti.com/
Changes in v4
- Use needs_k3_socinfo flag in soc_data
- Link to v3: https://lore.kernel.org/all/20260527062534.1808422-1-a-kaur@ti.com/
Changes in v3
- Simplified to single patch (EPROBE_DEFER only)
- Changed the logic to detect whether the probe is for am62 family SoCs
- Dropped device link patch after analysis as revision information is
cached after successful probe. Module reload also works as k3-socinfo
stays bound during normal operation
- Link to v2: https://lore.kernel.org/all/20260401105404.1194717-1-a-kaur@ti.com/
Changes in v2
- Added DT bindings documentation for ti,soc-info property
- Reordered patches: bindings first, then driver changes, then DTS
- Link to v1: https://lore.kernel.org/all/20260330120105.2985200-1-a-kaur@ti.com/
Testing
- Verified correct probe ordering on AM625, AM62A7, AM62P5 platforms
Signed-off-by: Akashdeep Kaur <a-kaur@ti.com>
---
Akashdeep Kaur (1):
cpufreq: ti: Add EPROBE_DEFER for K3 SoCs
drivers/cpufreq/ti-cpufreq.c | 10 ++++++++++
1 file changed, 10 insertions(+)
--
2.34.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v5 1/1] cpufreq: ti: Add EPROBE_DEFER for K3 SoCs
2026-06-03 7:24 [PATCH v5 0/1] cpufreq: ti: Fix probe ordering with k3-socinfo Akashdeep Kaur
@ 2026-06-03 7:24 ` Akashdeep Kaur
2026-06-03 13:52 ` Zhongqiu Han
0 siblings, 1 reply; 3+ messages in thread
From: Akashdeep Kaur @ 2026-06-03 7:24 UTC (permalink / raw)
To: zhongqiu.han, praneeth, nm, vigneshr, rafael, viresh.kumar,
linux-pm, linux-kernel
Cc: vishalm, sebin.francis, k-willis, a-kaur
On K3 SoCs, ti-cpufreq relies on k3-socinfo to register the SoC
device before soc_device_match() can return valid revision
information. If ti-cpufreq probes before k3-socinfo,
soc_device_match() returns NULL, leading to incorrect CPU frequency
scaling behavior.
Add a needs_k3_socinfo flag to ti_cpufreq_soc_data (similar to
the existing multi_regulator pattern) to defer probe when k3-socinfo
hasn't registered the SoC device yet.
Signed-off-by: Akashdeep Kaur <a-kaur@ti.com>
---
drivers/cpufreq/ti-cpufreq.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/cpufreq/ti-cpufreq.c b/drivers/cpufreq/ti-cpufreq.c
index a01abc1622eb..f2c8d9e3a1b5 100644
--- a/drivers/cpufreq/ti-cpufreq.c
+++ b/drivers/cpufreq/ti-cpufreq.c
@@ -99,6 +99,7 @@ struct ti_cpufreq_soc_data {
unsigned long efuse_shift;
unsigned long rev_offset;
bool multi_regulator;
+ bool needs_k3_socinfo;
/* Backward compatibility hack: Might have missing syscon */
#define TI_QUIRK_SYSCON_MAY_BE_MISSING 0x1
/* Backward compatibility hack: new syscon size is 1 register wide */
@@ -347,6 +348,7 @@ static struct ti_cpufreq_soc_data am625_soc_data = {
.efuse_mask = 0x07c0,
.efuse_shift = 0x6,
.multi_regulator = false,
+ .needs_k3_socinfo = true,
.quirks = TI_QUIRK_SYSCON_IS_SINGLE_REG,
};
@@ -356,6 +358,7 @@ static struct ti_cpufreq_soc_data am62a7_soc_data = {
.efuse_mask = 0x07c0,
.efuse_shift = 0x6,
.multi_regulator = false,
+ .needs_k3_socinfo = true,
};
static struct ti_cpufreq_soc_data am62l3_soc_data = {
@@ -364,6 +367,7 @@ static struct ti_cpufreq_soc_data am62l3_soc_data = {
.efuse_mask = 0x07c0,
.efuse_shift = 0x6,
.multi_regulator = false,
+ .needs_k3_socinfo = true,
};
static struct ti_cpufreq_soc_data am62p5_soc_data = {
@@ -372,6 +376,7 @@ static struct ti_cpufreq_soc_data am62p5_soc_data = {
.efuse_mask = 0x07c0,
.efuse_shift = 0x6,
.multi_regulator = false,
+ .needs_k3_socinfo = true,
};
/**
@@ -443,6 +448,11 @@ static int ti_cpufreq_get_rev(struct ti_cpufreq_data *opp_data,
goto done;
}
+ /* Defer if k3-socinfo hasn't registered the SoC device yet */
+ if (opp_data->soc_data->needs_k3_socinfo)
+ return dev_err_probe(opp_data->cpu_dev, -EPROBE_DEFER,
+ "SoC device not registered by k3-socinfo\n");
+
ret = regmap_read(opp_data->syscon, opp_data->soc_data->rev_offset,
&revision);
if (opp_data->soc_data->quirks & TI_QUIRK_SYSCON_MAY_BE_MISSING && ret == -EIO) {
--
2.34.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v5 1/1] cpufreq: ti: Add EPROBE_DEFER for K3 SoCs
2026-06-03 7:24 ` [PATCH v5 1/1] cpufreq: ti: Add EPROBE_DEFER for K3 SoCs Akashdeep Kaur
@ 2026-06-03 13:52 ` Zhongqiu Han
0 siblings, 0 replies; 3+ messages in thread
From: Zhongqiu Han @ 2026-06-03 13:52 UTC (permalink / raw)
To: Akashdeep Kaur, praneeth, nm, vigneshr, rafael, viresh.kumar,
linux-pm, linux-kernel
Cc: vishalm, sebin.francis, k-willis, zhongqiu.han
On 6/3/2026 3:24 PM, Akashdeep Kaur wrote:
> On K3 SoCs, ti-cpufreq relies on k3-socinfo to register the SoC
> device before soc_device_match() can return valid revision
> information. If ti-cpufreq probes before k3-socinfo,
> soc_device_match() returns NULL, leading to incorrect CPU frequency
> scaling behavior.
>
> Add a needs_k3_socinfo flag to ti_cpufreq_soc_data (similar to
> the existing multi_regulator pattern) to defer probe when k3-socinfo
> hasn't registered the SoC device yet.
>
> Signed-off-by: Akashdeep Kaur <a-kaur@ti.com>
Looks good to me with small one nit inline.
Reviewed-by: Zhongqiu Han <zhongqiu.han@oss.qualcomm.com>
> ---
> drivers/cpufreq/ti-cpufreq.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/cpufreq/ti-cpufreq.c b/drivers/cpufreq/ti-cpufreq.c
> index a01abc1622eb..f2c8d9e3a1b5 100644
> --- a/drivers/cpufreq/ti-cpufreq.c
> +++ b/drivers/cpufreq/ti-cpufreq.c
> @@ -99,6 +99,7 @@ struct ti_cpufreq_soc_data {
> unsigned long efuse_shift;
> unsigned long rev_offset;
> bool multi_regulator;
> + bool needs_k3_socinfo;
> /* Backward compatibility hack: Might have missing syscon */
> #define TI_QUIRK_SYSCON_MAY_BE_MISSING 0x1
> /* Backward compatibility hack: new syscon size is 1 register wide */
> @@ -347,6 +348,7 @@ static struct ti_cpufreq_soc_data am625_soc_data = {
> .efuse_mask = 0x07c0,
> .efuse_shift = 0x6,
> .multi_regulator = false,
> + .needs_k3_socinfo = true,
> .quirks = TI_QUIRK_SYSCON_IS_SINGLE_REG,
> };
>
> @@ -356,6 +358,7 @@ static struct ti_cpufreq_soc_data am62a7_soc_data = {
> .efuse_mask = 0x07c0,
> .efuse_shift = 0x6,
> .multi_regulator = false,
> + .needs_k3_socinfo = true,
> };
>
> static struct ti_cpufreq_soc_data am62l3_soc_data = {
> @@ -364,6 +367,7 @@ static struct ti_cpufreq_soc_data am62l3_soc_data = {
> .efuse_mask = 0x07c0,
> .efuse_shift = 0x6,
> .multi_regulator = false,
> + .needs_k3_socinfo = true,
> };
>
> static struct ti_cpufreq_soc_data am62p5_soc_data = {
> @@ -372,6 +376,7 @@ static struct ti_cpufreq_soc_data am62p5_soc_data = {
> .efuse_mask = 0x07c0,
> .efuse_shift = 0x6,
> .multi_regulator = false,
> + .needs_k3_socinfo = true,
> };
>
> /**
> @@ -443,6 +448,11 @@ static int ti_cpufreq_get_rev(struct ti_cpufreq_data *opp_data,
> goto done;
> }
>
> + /* Defer if k3-socinfo hasn't registered the SoC device yet */
> + if (opp_data->soc_data->needs_k3_socinfo)
> + return dev_err_probe(opp_data->cpu_dev, -EPROBE_DEFER,
> + "SoC device not registered by k3-socinfo\n");
Nit: dev_err_probe() attaches the defer reason to cpu_dev instead of the
ti-cpufreq platform device, so devices_deferred won't show it, right
That said, this matches the existing pattern in ti_cpufreq_probe() where
all dev_err/dev_dbg calls use opp_data->cpu_dev.
If so, maybe it could be cleaned up in a separate patch.
> +
> ret = regmap_read(opp_data->syscon, opp_data->soc_data->rev_offset,
> &revision);
> if (opp_data->soc_data->quirks & TI_QUIRK_SYSCON_MAY_BE_MISSING && ret == -EIO) {
> --
> 2.34.1
>
--
Thx and BRs,
Zhongqiu Han
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-06-03 13:52 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-03 7:24 [PATCH v5 0/1] cpufreq: ti: Fix probe ordering with k3-socinfo Akashdeep Kaur
2026-06-03 7:24 ` [PATCH v5 1/1] cpufreq: ti: Add EPROBE_DEFER for K3 SoCs Akashdeep Kaur
2026-06-03 13:52 ` Zhongqiu Han
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®