mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [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®