public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/1] cpufreq: qcom: handle ipq806x with no SMEM
@ 2025-11-04 14:06 Christian Marangi
  2025-11-04 14:06 ` [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for " Christian Marangi
  0 siblings, 1 reply; 7+ messages in thread
From: Christian Marangi @ 2025-11-04 14:06 UTC (permalink / raw)
  To: Ilia Lin, Rafael J. Wysocki, Viresh Kumar, linux-pm,
	linux-arm-msm, linux-kernel
  Cc: Christian Marangi

This small series handle a small device family of ipq806x
devices (Google OnHub) that doesn't have SMEM init.

We improve the SMEM driver and apply a workaround in
the cpufreq driver.

(I didn't add the review tag as the patch changed
 with the new implementation)

Changes v3:
- Drop first 2 patch as they got merged
- Use of_match_node
Changes v2:
- Rename error macro to INIT_ERR_PTR
- Return -ENODEV from smem probe
- Restructure if condition in cpufreq driver

Christian Marangi (1):
  cpufreq: qcom-nvmem: add compatible fallback for ipq806x for no SMEM

 drivers/cpufreq/qcom-cpufreq-nvmem.c | 35 ++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

-- 
2.51.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for no SMEM
  2025-11-04 14:06 [PATCH v3 0/1] cpufreq: qcom: handle ipq806x with no SMEM Christian Marangi
@ 2025-11-04 14:06 ` Christian Marangi
  2025-11-04 14:15   ` Konrad Dybcio
                     ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Christian Marangi @ 2025-11-04 14:06 UTC (permalink / raw)
  To: Ilia Lin, Rafael J. Wysocki, Viresh Kumar, linux-pm,
	linux-arm-msm, linux-kernel
  Cc: Christian Marangi, Dmitry Baryshkov

On some IPQ806x SoC SMEM might be not initialized by SBL. This is the
case for some Google devices (the OnHub family) that can't make use of
SMEM to detect the SoC ID.

To handle these specific case, check if the SMEM is not initialized (by
checking if the qcom_smem_get_soc_id returns -ENODEV) and fallback to
OF machine compatible checking to identify the SoC variant.

Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
 drivers/cpufreq/qcom-cpufreq-nvmem.c | 35 ++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c
index 3a8ed723a23e..17c79955ff2f 100644
--- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
+++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
@@ -252,13 +252,22 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,
 	return ret;
 }
 
+static const struct of_device_id qcom_cpufreq_ipq806x_match_list[] = {
+	{ .compatible = "qcom,ipq8062", .data = (const void *)QCOM_ID_IPQ8062 },
+	{ .compatible = "qcom,ipq8064", .data = (const void *)QCOM_ID_IPQ8064 },
+	{ .compatible = "qcom,ipq8065", .data = (const void *)QCOM_ID_IPQ8065 },
+	{ .compatible = "qcom,ipq8066", .data = (const void *)QCOM_ID_IPQ8066 },
+	{ .compatible = "qcom,ipq8068", .data = (const void *)QCOM_ID_IPQ8068 },
+	{ .compatible = "qcom,ipq8069", .data = (const void *)QCOM_ID_IPQ8069 },
+};
+
 static int qcom_cpufreq_ipq8064_name_version(struct device *cpu_dev,
 					     struct nvmem_cell *speedbin_nvmem,
 					     char **pvs_name,
 					     struct qcom_cpufreq_drv *drv)
 {
+	int msm_id = -1, ret = 0;
 	int speed = 0, pvs = 0;
-	int msm_id, ret = 0;
 	u8 *speedbin;
 	size_t len;
 
@@ -275,8 +284,30 @@ static int qcom_cpufreq_ipq8064_name_version(struct device *cpu_dev,
 	get_krait_bin_format_a(cpu_dev, &speed, &pvs, speedbin);
 
 	ret = qcom_smem_get_soc_id(&msm_id);
-	if (ret)
+	if (ret == -ENODEV) {
+		const struct of_device_id *match;
+		struct device_node *root;
+
+		root = of_find_node_by_path("/");
+		if (!root) {
+			ret = -ENODEV;
+			goto exit;
+		}
+
+		/* Fallback to compatible match with no SMEM initialized */
+		match = of_match_node(qcom_cpufreq_ipq806x_match_list, root);
+		of_node_put(root);
+		if (!match) {
+			ret = -ENODEV;
+			goto exit;
+		}
+
+		/* We found a matching device, get the msm_id from the data entry */
+		msm_id = (int)match->data;
+		ret = 0;
+	} else if (ret) {
 		goto exit;
+	}
 
 	switch (msm_id) {
 	case QCOM_ID_IPQ8062:
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for no SMEM
  2025-11-04 14:06 ` [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for " Christian Marangi
@ 2025-11-04 14:15   ` Konrad Dybcio
  2025-11-05  8:05   ` Krzysztof Kozlowski
  2025-11-05 10:27   ` kernel test robot
  2 siblings, 0 replies; 7+ messages in thread
From: Konrad Dybcio @ 2025-11-04 14:15 UTC (permalink / raw)
  To: Christian Marangi, Ilia Lin, Rafael J. Wysocki, Viresh Kumar,
	linux-pm, linux-arm-msm, linux-kernel
  Cc: Dmitry Baryshkov

On 11/4/25 3:06 PM, Christian Marangi wrote:
> On some IPQ806x SoC SMEM might be not initialized by SBL. This is the
> case for some Google devices (the OnHub family) that can't make use of
> SMEM to detect the SoC ID.
> 
> To handle these specific case, check if the SMEM is not initialized (by
> checking if the qcom_smem_get_soc_id returns -ENODEV) and fallback to
> OF machine compatible checking to identify the SoC variant.
> 
> Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
> ---

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>

Konrad

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for no SMEM
  2025-11-04 14:06 ` [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for " Christian Marangi
  2025-11-04 14:15   ` Konrad Dybcio
@ 2025-11-05  8:05   ` Krzysztof Kozlowski
  2025-11-05  9:12     ` Konrad Dybcio
  2025-11-05 10:27   ` kernel test robot
  2 siblings, 1 reply; 7+ messages in thread
From: Krzysztof Kozlowski @ 2025-11-05  8:05 UTC (permalink / raw)
  To: Christian Marangi, Ilia Lin, Rafael J. Wysocki, Viresh Kumar,
	linux-pm, linux-arm-msm, linux-kernel
  Cc: Dmitry Baryshkov

On 04/11/2025 15:06, Christian Marangi wrote:
> On some IPQ806x SoC SMEM might be not initialized by SBL. This is the
> case for some Google devices (the OnHub family) that can't make use of
> SMEM to detect the SoC ID.
> 
> To handle these specific case, check if the SMEM is not initialized (by
> checking if the qcom_smem_get_soc_id returns -ENODEV) and fallback to
> OF machine compatible checking to identify the SoC variant.
> 
> Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
> ---
>  drivers/cpufreq/qcom-cpufreq-nvmem.c | 35 ++++++++++++++++++++++++++--
>  1 file changed, 33 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c
> index 3a8ed723a23e..17c79955ff2f 100644
> --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
> +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
> @@ -252,13 +252,22 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,
>  	return ret;
>  }
>  
> +static const struct of_device_id qcom_cpufreq_ipq806x_match_list[] = {
> +	{ .compatible = "qcom,ipq8062", .data = (const void *)QCOM_ID_IPQ8062 },
> +	{ .compatible = "qcom,ipq8064", .data = (const void *)QCOM_ID_IPQ8064 },
> +	{ .compatible = "qcom,ipq8065", .data = (const void *)QCOM_ID_IPQ8065 },
> +	{ .compatible = "qcom,ipq8066", .data = (const void *)QCOM_ID_IPQ8066 },
> +	{ .compatible = "qcom,ipq8068", .data = (const void *)QCOM_ID_IPQ8068 },
> +	{ .compatible = "qcom,ipq8069", .data = (const void *)QCOM_ID_IPQ8069 },
> +};
> +
>  static int qcom_cpufreq_ipq8064_name_version(struct device *cpu_dev,
>  					     struct nvmem_cell *speedbin_nvmem,
>  					     char **pvs_name,
>  					     struct qcom_cpufreq_drv *drv)
>  {
> +	int msm_id = -1, ret = 0;
>  	int speed = 0, pvs = 0;
> -	int msm_id, ret = 0;
>  	u8 *speedbin;
>  	size_t len;
>  
> @@ -275,8 +284,30 @@ static int qcom_cpufreq_ipq8064_name_version(struct device *cpu_dev,
>  	get_krait_bin_format_a(cpu_dev, &speed, &pvs, speedbin);
>  
>  	ret = qcom_smem_get_soc_id(&msm_id);
> -	if (ret)
> +	if (ret == -ENODEV) {
> +		const struct of_device_id *match;
> +		struct device_node *root;
> +
> +		root = of_find_node_by_path("/");
> +		if (!root) {
> +			ret = -ENODEV;
> +			goto exit;
> +		}
> +
> +		/* Fallback to compatible match with no SMEM initialized */
> +		match = of_match_node(qcom_cpufreq_ipq806x_match_list, root);

Aren't you re-implementing matching machine? Or actually - the socinfo
driver? You are doing the matching of compatible into SOC ID second
time. Just do it once - via socinfo driver.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for no SMEM
  2025-11-05  8:05   ` Krzysztof Kozlowski
@ 2025-11-05  9:12     ` Konrad Dybcio
  2025-11-05  9:28       ` Krzysztof Kozlowski
  0 siblings, 1 reply; 7+ messages in thread
From: Konrad Dybcio @ 2025-11-05  9:12 UTC (permalink / raw)
  To: Krzysztof Kozlowski, Christian Marangi, Ilia Lin,
	Rafael J. Wysocki, Viresh Kumar, linux-pm, linux-arm-msm,
	linux-kernel
  Cc: Dmitry Baryshkov

On 11/5/25 9:05 AM, Krzysztof Kozlowski wrote:
> On 04/11/2025 15:06, Christian Marangi wrote:
>> On some IPQ806x SoC SMEM might be not initialized by SBL. This is the
>> case for some Google devices (the OnHub family) that can't make use of
>> SMEM to detect the SoC ID.
>>
>> To handle these specific case, check if the SMEM is not initialized (by
>> checking if the qcom_smem_get_soc_id returns -ENODEV) and fallback to
>> OF machine compatible checking to identify the SoC variant.
>>
>> Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
>> ---
>>  drivers/cpufreq/qcom-cpufreq-nvmem.c | 35 ++++++++++++++++++++++++++--
>>  1 file changed, 33 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c
>> index 3a8ed723a23e..17c79955ff2f 100644
>> --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
>> +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
>> @@ -252,13 +252,22 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,
>>  	return ret;
>>  }
>>  
>> +static const struct of_device_id qcom_cpufreq_ipq806x_match_list[] = {
>> +	{ .compatible = "qcom,ipq8062", .data = (const void *)QCOM_ID_IPQ8062 },
>> +	{ .compatible = "qcom,ipq8064", .data = (const void *)QCOM_ID_IPQ8064 },
>> +	{ .compatible = "qcom,ipq8065", .data = (const void *)QCOM_ID_IPQ8065 },
>> +	{ .compatible = "qcom,ipq8066", .data = (const void *)QCOM_ID_IPQ8066 },
>> +	{ .compatible = "qcom,ipq8068", .data = (const void *)QCOM_ID_IPQ8068 },
>> +	{ .compatible = "qcom,ipq8069", .data = (const void *)QCOM_ID_IPQ8069 },
>> +};
>> +
>>  static int qcom_cpufreq_ipq8064_name_version(struct device *cpu_dev,
>>  					     struct nvmem_cell *speedbin_nvmem,
>>  					     char **pvs_name,
>>  					     struct qcom_cpufreq_drv *drv)
>>  {
>> +	int msm_id = -1, ret = 0;
>>  	int speed = 0, pvs = 0;
>> -	int msm_id, ret = 0;
>>  	u8 *speedbin;
>>  	size_t len;
>>  
>> @@ -275,8 +284,30 @@ static int qcom_cpufreq_ipq8064_name_version(struct device *cpu_dev,
>>  	get_krait_bin_format_a(cpu_dev, &speed, &pvs, speedbin);
>>  
>>  	ret = qcom_smem_get_soc_id(&msm_id);
>> -	if (ret)
>> +	if (ret == -ENODEV) {
>> +		const struct of_device_id *match;
>> +		struct device_node *root;
>> +
>> +		root = of_find_node_by_path("/");
>> +		if (!root) {
>> +			ret = -ENODEV;
>> +			goto exit;
>> +		}
>> +
>> +		/* Fallback to compatible match with no SMEM initialized */
>> +		match = of_match_node(qcom_cpufreq_ipq806x_match_list, root);
> 
> Aren't you re-implementing matching machine? Or actually - the socinfo
> driver? You are doing the matching of compatible into SOC ID second
> time. Just do it once - via socinfo driver.

The issue here is that if SMEM is absent, the socinfo driver can
not function and this is a contained workaround

Konrad

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for no SMEM
  2025-11-05  9:12     ` Konrad Dybcio
@ 2025-11-05  9:28       ` Krzysztof Kozlowski
  0 siblings, 0 replies; 7+ messages in thread
From: Krzysztof Kozlowski @ 2025-11-05  9:28 UTC (permalink / raw)
  To: Konrad Dybcio, Christian Marangi, Ilia Lin, Rafael J. Wysocki,
	Viresh Kumar, linux-pm, linux-arm-msm, linux-kernel
  Cc: Dmitry Baryshkov

On 05/11/2025 10:12, Konrad Dybcio wrote:
> On 11/5/25 9:05 AM, Krzysztof Kozlowski wrote:
>> On 04/11/2025 15:06, Christian Marangi wrote:
>>> On some IPQ806x SoC SMEM might be not initialized by SBL. This is the
>>> case for some Google devices (the OnHub family) that can't make use of
>>> SMEM to detect the SoC ID.
>>>
>>> To handle these specific case, check if the SMEM is not initialized (by
>>> checking if the qcom_smem_get_soc_id returns -ENODEV) and fallback to
>>> OF machine compatible checking to identify the SoC variant.
>>>
>>> Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
>>> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
>>> ---
>>>  drivers/cpufreq/qcom-cpufreq-nvmem.c | 35 ++++++++++++++++++++++++++--
>>>  1 file changed, 33 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/cpufreq/qcom-cpufreq-nvmem.c b/drivers/cpufreq/qcom-cpufreq-nvmem.c
>>> index 3a8ed723a23e..17c79955ff2f 100644
>>> --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
>>> +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
>>> @@ -252,13 +252,22 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,
>>>  	return ret;
>>>  }
>>>  
>>> +static const struct of_device_id qcom_cpufreq_ipq806x_match_list[] = {
>>> +	{ .compatible = "qcom,ipq8062", .data = (const void *)QCOM_ID_IPQ8062 },
>>> +	{ .compatible = "qcom,ipq8064", .data = (const void *)QCOM_ID_IPQ8064 },
>>> +	{ .compatible = "qcom,ipq8065", .data = (const void *)QCOM_ID_IPQ8065 },
>>> +	{ .compatible = "qcom,ipq8066", .data = (const void *)QCOM_ID_IPQ8066 },
>>> +	{ .compatible = "qcom,ipq8068", .data = (const void *)QCOM_ID_IPQ8068 },
>>> +	{ .compatible = "qcom,ipq8069", .data = (const void *)QCOM_ID_IPQ8069 },
>>> +};
>>> +
>>>  static int qcom_cpufreq_ipq8064_name_version(struct device *cpu_dev,
>>>  					     struct nvmem_cell *speedbin_nvmem,
>>>  					     char **pvs_name,
>>>  					     struct qcom_cpufreq_drv *drv)
>>>  {
>>> +	int msm_id = -1, ret = 0;
>>>  	int speed = 0, pvs = 0;
>>> -	int msm_id, ret = 0;
>>>  	u8 *speedbin;
>>>  	size_t len;
>>>  
>>> @@ -275,8 +284,30 @@ static int qcom_cpufreq_ipq8064_name_version(struct device *cpu_dev,
>>>  	get_krait_bin_format_a(cpu_dev, &speed, &pvs, speedbin);
>>>  
>>>  	ret = qcom_smem_get_soc_id(&msm_id);
>>> -	if (ret)
>>> +	if (ret == -ENODEV) {
>>> +		const struct of_device_id *match;
>>> +		struct device_node *root;
>>> +
>>> +		root = of_find_node_by_path("/");
>>> +		if (!root) {
>>> +			ret = -ENODEV;
>>> +			goto exit;
>>> +		}
>>> +
>>> +		/* Fallback to compatible match with no SMEM initialized */
>>> +		match = of_match_node(qcom_cpufreq_ipq806x_match_list, root);
>>
>> Aren't you re-implementing matching machine? Or actually - the socinfo
>> driver? You are doing the matching of compatible into SOC ID second
>> time. Just do it once - via socinfo driver.
> 
> The issue here is that if SMEM is absent, the socinfo driver can
> not function and this is a contained workaround

OK, some short paragraph about this should be in commit msg though.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for no SMEM
  2025-11-04 14:06 ` [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for " Christian Marangi
  2025-11-04 14:15   ` Konrad Dybcio
  2025-11-05  8:05   ` Krzysztof Kozlowski
@ 2025-11-05 10:27   ` kernel test robot
  2 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2025-11-05 10:27 UTC (permalink / raw)
  To: Christian Marangi, Ilia Lin, Rafael J. Wysocki, Viresh Kumar,
	linux-pm, linux-arm-msm, linux-kernel
  Cc: oe-kbuild-all, Christian Marangi, Dmitry Baryshkov

Hi Christian,

kernel test robot noticed the following build warnings:

[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on rafael-pm/bleeding-edge linus/master v6.18-rc4 next-20251105]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Christian-Marangi/cpufreq-qcom-nvmem-add-compatible-fallback-for-ipq806x-for-no-SMEM/20251104-221546
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
patch link:    https://lore.kernel.org/r/20251104140635.25965-2-ansuelsmth%40gmail.com
patch subject: [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for no SMEM
config: arm64-defconfig (https://download.01.org/0day-ci/archive/20251105/202511051843.DLYBg5h3-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251105/202511051843.DLYBg5h3-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511051843.DLYBg5h3-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/cpufreq/qcom-cpufreq-nvmem.c: In function 'qcom_cpufreq_ipq8064_name_version':
>> drivers/cpufreq/qcom-cpufreq-nvmem.c:310:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
     310 |                 msm_id = (int)match->data;
         |                          ^


vim +310 drivers/cpufreq/qcom-cpufreq-nvmem.c

   267	
   268	static int qcom_cpufreq_ipq8064_name_version(struct device *cpu_dev,
   269						     struct nvmem_cell *speedbin_nvmem,
   270						     char **pvs_name,
   271						     struct qcom_cpufreq_drv *drv)
   272	{
   273		int msm_id = -1, ret = 0;
   274		int speed = 0, pvs = 0;
   275		u8 *speedbin;
   276		size_t len;
   277	
   278		speedbin = nvmem_cell_read(speedbin_nvmem, &len);
   279		if (IS_ERR(speedbin))
   280			return PTR_ERR(speedbin);
   281	
   282		if (len != 4) {
   283			dev_err(cpu_dev, "Unable to read nvmem data. Defaulting to 0!\n");
   284			ret = -ENODEV;
   285			goto exit;
   286		}
   287	
   288		get_krait_bin_format_a(cpu_dev, &speed, &pvs, speedbin);
   289	
   290		ret = qcom_smem_get_soc_id(&msm_id);
   291		if (ret == -ENODEV) {
   292			const struct of_device_id *match;
   293			struct device_node *root;
   294	
   295			root = of_find_node_by_path("/");
   296			if (!root) {
   297				ret = -ENODEV;
   298				goto exit;
   299			}
   300	
   301			/* Fallback to compatible match with no SMEM initialized */
   302			match = of_match_node(qcom_cpufreq_ipq806x_match_list, root);
   303			of_node_put(root);
   304			if (!match) {
   305				ret = -ENODEV;
   306				goto exit;
   307			}
   308	
   309			/* We found a matching device, get the msm_id from the data entry */
 > 310			msm_id = (int)match->data;
   311			ret = 0;
   312		} else if (ret) {
   313			goto exit;
   314		}
   315	
   316		switch (msm_id) {
   317		case QCOM_ID_IPQ8062:
   318			drv->versions = BIT(IPQ8062_VERSION);
   319			break;
   320		case QCOM_ID_IPQ8064:
   321		case QCOM_ID_IPQ8066:
   322		case QCOM_ID_IPQ8068:
   323			drv->versions = BIT(IPQ8064_VERSION);
   324			break;
   325		case QCOM_ID_IPQ8065:
   326		case QCOM_ID_IPQ8069:
   327			drv->versions = BIT(IPQ8065_VERSION);
   328			break;
   329		default:
   330			dev_err(cpu_dev,
   331				"SoC ID %u is not part of IPQ8064 family, limiting to 1.0GHz!\n",
   332				msm_id);
   333			drv->versions = BIT(IPQ8062_VERSION);
   334			break;
   335		}
   336	
   337		/* IPQ8064 speed is never fused. Only pvs values are fused. */
   338		snprintf(*pvs_name, sizeof("speed0-pvsXX"), "speed0-pvs%d", pvs);
   339	
   340	exit:
   341		kfree(speedbin);
   342		return ret;
   343	}
   344	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-11-05 10:28 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-04 14:06 [PATCH v3 0/1] cpufreq: qcom: handle ipq806x with no SMEM Christian Marangi
2025-11-04 14:06 ` [PATCH v3 1/1] cpufreq: qcom-nvmem: add compatible fallback for ipq806x for " Christian Marangi
2025-11-04 14:15   ` Konrad Dybcio
2025-11-05  8:05   ` Krzysztof Kozlowski
2025-11-05  9:12     ` Konrad Dybcio
2025-11-05  9:28       ` Krzysztof Kozlowski
2025-11-05 10:27   ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox