linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Patch v2 0/3] Extend LMh driver to suppot Qualcomm sm8150 SoC.
@ 2021-12-15 16:33 Thara Gopinath
  2021-12-15 16:33 ` [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150 Thara Gopinath
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Thara Gopinath @ 2021-12-15 16:33 UTC (permalink / raw)
  To: agross, bjorn.andersson, daniel.lezcano, rafael, rui.zhang, robh+dt
  Cc: linux-arm-msm, linux-pm, devicetree, linux-kernel

Add support for sm8150 in the Qualcomm Limits Management Hardware(LMh)
driver. Also add required device tree entries and dt-binding.

Thara Gopinath (3):
  thermal: qcom: lmh: Add support for sm8150
  arm64: dts: qcom: sm8150: Add support for LMh node
  dt-bindings: thermal: Add sm8150 compatible string for LMh

 .../devicetree/bindings/thermal/qcom-lmh.yaml |  1 +
 arch/arm64/boot/dts/qcom/sm8150.dtsi          | 24 +++++++
 drivers/thermal/qcom/lmh.c                    | 62 +++++++++++--------
 3 files changed, 60 insertions(+), 27 deletions(-)

-- 
2.25.1


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

* [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150
  2021-12-15 16:33 [Patch v2 0/3] Extend LMh driver to suppot Qualcomm sm8150 SoC Thara Gopinath
@ 2021-12-15 16:33 ` Thara Gopinath
  2021-12-20 12:04   ` Daniel Lezcano
  2022-01-05 21:52   ` Bjorn Andersson
  2021-12-15 16:33 ` [Patch v2 2/3] arm64: dts: qcom: sm8150: Add support for LMh node Thara Gopinath
  2021-12-15 16:34 ` [Patch v2 3/3] dt-bindings: thermal: Add sm8150 compatible string for LMh Thara Gopinath
  2 siblings, 2 replies; 8+ messages in thread
From: Thara Gopinath @ 2021-12-15 16:33 UTC (permalink / raw)
  To: agross, bjorn.andersson, daniel.lezcano, rafael, rui.zhang, robh+dt
  Cc: linux-arm-msm, linux-pm, devicetree, linux-kernel

Add compatible to support LMh for sm8150 SoC.
sm8150 does not require explicit enabling for various LMh subsystems.
Add a variable indicating the same as match data which is set for sdm845.
Execute the piece of code enabling various LMh subsystems only if
enable algorithm match data is present.

Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
---

v1->v2:
	- Added LMH_ENABLE_ALGOS of_device_id match data to indicate
	  whether LMh subsytems need explicit enabling or not.

 drivers/thermal/qcom/lmh.c | 62 +++++++++++++++++++++-----------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/drivers/thermal/qcom/lmh.c b/drivers/thermal/qcom/lmh.c
index eafa7526eb8b..80d26d043498 100644
--- a/drivers/thermal/qcom/lmh.c
+++ b/drivers/thermal/qcom/lmh.c
@@ -28,6 +28,8 @@
 
 #define LMH_REG_DCVS_INTR_CLR		0x8
 
+#define LMH_ENABLE_ALGOS		((void *)1)
+
 struct lmh_hw_data {
 	void __iomem *base;
 	struct irq_domain *domain;
@@ -87,6 +89,7 @@ static int lmh_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
 	struct device_node *np = dev->of_node;
+	const struct of_device_id *of_id;
 	struct device_node *cpu_node;
 	struct lmh_hw_data *lmh_data;
 	int temp_low, temp_high, temp_arm, cpu_id, ret;
@@ -141,32 +144,36 @@ static int lmh_probe(struct platform_device *pdev)
 	if (!qcom_scm_lmh_dcvsh_available())
 		return -EINVAL;
 
-	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
-				 LMH_NODE_DCVS, node_id, 0);
-	if (ret)
-		dev_err(dev, "Error %d enabling current subfunction\n", ret);
-
-	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
-				 LMH_NODE_DCVS, node_id, 0);
-	if (ret)
-		dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
-
-	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
-				 LMH_NODE_DCVS, node_id, 0);
-	if (ret)
-		dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
-
-	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
-				 LMH_NODE_DCVS, node_id, 0);
-	if (ret) {
-		dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
-		return ret;
-	}
-
-	ret = qcom_scm_lmh_profile_change(0x1);
-	if (ret) {
-		dev_err(dev, "Error %d changing profile\n", ret);
-		return ret;
+	of_id = of_match_device(dev->driver->of_match_table, dev);
+
+	if (of_id && of_id->data == LMH_ENABLE_ALGOS) {
+		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
+					 LMH_NODE_DCVS, node_id, 0);
+		if (ret)
+			dev_err(dev, "Error %d enabling current subfunction\n", ret);
+
+		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
+					 LMH_NODE_DCVS, node_id, 0);
+		if (ret)
+			dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
+
+		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
+					 LMH_NODE_DCVS, node_id, 0);
+		if (ret)
+			dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
+
+		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
+					 LMH_NODE_DCVS, node_id, 0);
+		if (ret) {
+			dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
+			return ret;
+		}
+
+		ret = qcom_scm_lmh_profile_change(0x1);
+		if (ret) {
+			dev_err(dev, "Error %d changing profile\n", ret);
+			return ret;
+		}
 	}
 
 	/* Set default thermal trips */
@@ -213,7 +220,8 @@ static int lmh_probe(struct platform_device *pdev)
 }
 
 static const struct of_device_id lmh_table[] = {
-	{ .compatible = "qcom,sdm845-lmh", },
+	{ .compatible = "qcom,sdm845-lmh", .data = LMH_ENABLE_ALGOS},
+	{ .compatible = "qcom,sm8150-lmh", },
 	{}
 };
 MODULE_DEVICE_TABLE(of, lmh_table);
-- 
2.25.1


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

* [Patch v2 2/3] arm64: dts: qcom: sm8150: Add support for LMh node
  2021-12-15 16:33 [Patch v2 0/3] Extend LMh driver to suppot Qualcomm sm8150 SoC Thara Gopinath
  2021-12-15 16:33 ` [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150 Thara Gopinath
@ 2021-12-15 16:33 ` Thara Gopinath
  2021-12-15 16:34 ` [Patch v2 3/3] dt-bindings: thermal: Add sm8150 compatible string for LMh Thara Gopinath
  2 siblings, 0 replies; 8+ messages in thread
From: Thara Gopinath @ 2021-12-15 16:33 UTC (permalink / raw)
  To: agross, bjorn.andersson, daniel.lezcano, rafael, rui.zhang, robh+dt
  Cc: linux-arm-msm, linux-pm, devicetree, linux-kernel

Add LMh nodes for cpu cluster0 and cpu cluster1 for sm8150 SoC.

Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
---
 arch/arm64/boot/dts/qcom/sm8150.dtsi | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sm8150.dtsi b/arch/arm64/boot/dts/qcom/sm8150.dtsi
index 81b4ff2cc4cd..e755d7ab78dd 100644
--- a/arch/arm64/boot/dts/qcom/sm8150.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8150.dtsi
@@ -3650,6 +3650,30 @@ cpufreq_hw: cpufreq@18323000 {
 			#freq-domain-cells = <1>;
 		};
 
+		lmh_cluster1: lmh@18350800 {
+			compatible = "qcom,sm8150-lmh";
+			reg = <0 0x18350800 0 0x400>;
+			interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
+			cpus = <&CPU4>;
+			qcom,lmh-temp-arm-millicelsius = <60000>;
+			qcom,lmh-temp-low-millicelsius = <84500>;
+			qcom,lmh-temp-high-millicelsius = <85000>;
+			interrupt-controller;
+			#interrupt-cells = <1>;
+		};
+
+		lmh_cluster0: lmh@18358800 {
+			compatible = "qcom,sm8150-lmh";
+			reg = <0 0x18358800 0 0x400>;
+			interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
+			cpus = <&CPU0>;
+			qcom,lmh-temp-arm-millicelsius = <60000>;
+			qcom,lmh-temp-low-millicelsius = <84500>;
+			qcom,lmh-temp-high-millicelsius = <85000>;
+			interrupt-controller;
+			#interrupt-cells = <1>;
+		};
+
 		wifi: wifi@18800000 {
 			compatible = "qcom,wcn3990-wifi";
 			reg = <0 0x18800000 0 0x800000>;
-- 
2.25.1


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

* [Patch v2 3/3] dt-bindings: thermal: Add sm8150 compatible string for LMh
  2021-12-15 16:33 [Patch v2 0/3] Extend LMh driver to suppot Qualcomm sm8150 SoC Thara Gopinath
  2021-12-15 16:33 ` [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150 Thara Gopinath
  2021-12-15 16:33 ` [Patch v2 2/3] arm64: dts: qcom: sm8150: Add support for LMh node Thara Gopinath
@ 2021-12-15 16:34 ` Thara Gopinath
  2 siblings, 0 replies; 8+ messages in thread
From: Thara Gopinath @ 2021-12-15 16:34 UTC (permalink / raw)
  To: agross, bjorn.andersson, daniel.lezcano, rafael, rui.zhang, robh+dt
  Cc: linux-arm-msm, linux-pm, devicetree, linux-kernel

Extend the LMh dt binding document to include compatible string
supporting sm8150 SoC.

Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
Acked-by: Rob Herring <robh@kernel.org>
---
 Documentation/devicetree/bindings/thermal/qcom-lmh.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/thermal/qcom-lmh.yaml b/Documentation/devicetree/bindings/thermal/qcom-lmh.yaml
index 289e9a845600..a9b7388ca9ac 100644
--- a/Documentation/devicetree/bindings/thermal/qcom-lmh.yaml
+++ b/Documentation/devicetree/bindings/thermal/qcom-lmh.yaml
@@ -19,6 +19,7 @@ properties:
   compatible:
     enum:
       - qcom,sdm845-lmh
+      - qcom,sm8150-lmh
 
   reg:
     items:
-- 
2.25.1


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

* Re: [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150
  2021-12-15 16:33 ` [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150 Thara Gopinath
@ 2021-12-20 12:04   ` Daniel Lezcano
  2022-01-05 19:18     ` Thara Gopinath
  2022-01-05 21:52   ` Bjorn Andersson
  1 sibling, 1 reply; 8+ messages in thread
From: Daniel Lezcano @ 2021-12-20 12:04 UTC (permalink / raw)
  To: Thara Gopinath, agross, bjorn.andersson, rafael, rui.zhang, robh+dt
  Cc: linux-arm-msm, linux-pm, devicetree, linux-kernel

On 15/12/2021 17:33, Thara Gopinath wrote:
> Add compatible to support LMh for sm8150 SoC.
> sm8150 does not require explicit enabling for various LMh subsystems.
> Add a variable indicating the same as match data which is set for sdm845.
> Execute the piece of code enabling various LMh subsystems only if
> enable algorithm match data is present.
> 
> Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
> ---
> 
> v1->v2:
> 	- Added LMH_ENABLE_ALGOS of_device_id match data to indicate
> 	  whether LMh subsytems need explicit enabling or not.
> 
>  drivers/thermal/qcom/lmh.c | 62 +++++++++++++++++++++-----------------
>  1 file changed, 35 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/thermal/qcom/lmh.c b/drivers/thermal/qcom/lmh.c
> index eafa7526eb8b..80d26d043498 100644
> --- a/drivers/thermal/qcom/lmh.c
> +++ b/drivers/thermal/qcom/lmh.c
> @@ -28,6 +28,8 @@
>  
>  #define LMH_REG_DCVS_INTR_CLR		0x8
>  
> +#define LMH_ENABLE_ALGOS		((void *)1)

It will be nicer a probe function here

> +
>  struct lmh_hw_data {
>  	void __iomem *base;
>  	struct irq_domain *domain;
> @@ -87,6 +89,7 @@ static int lmh_probe(struct platform_device *pdev)
>  {
>  	struct device *dev = &pdev->dev;
>  	struct device_node *np = dev->of_node;
> +	const struct of_device_id *of_id;
>  	struct device_node *cpu_node;
>  	struct lmh_hw_data *lmh_data;
>  	int temp_low, temp_high, temp_arm, cpu_id, ret;
> @@ -141,32 +144,36 @@ static int lmh_probe(struct platform_device *pdev)
>  	if (!qcom_scm_lmh_dcvsh_available())
>  		return -EINVAL;
>  
> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
> -				 LMH_NODE_DCVS, node_id, 0);
> -	if (ret)
> -		dev_err(dev, "Error %d enabling current subfunction\n", ret);
> -
> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
> -				 LMH_NODE_DCVS, node_id, 0);
> -	if (ret)
> -		dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
> -
> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
> -				 LMH_NODE_DCVS, node_id, 0);
> -	if (ret)
> -		dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
> -
> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
> -				 LMH_NODE_DCVS, node_id, 0);
> -	if (ret) {
> -		dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
> -		return ret;
> -	}
> -
> -	ret = qcom_scm_lmh_profile_change(0x1);
> -	if (ret) {
> -		dev_err(dev, "Error %d changing profile\n", ret);
> -		return ret;
> +	of_id = of_match_device(dev->driver->of_match_table, dev);
> +
> +	if (of_id && of_id->data == LMH_ENABLE_ALGOS) {
> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
> +					 LMH_NODE_DCVS, node_id, 0);
> +		if (ret)
> +			dev_err(dev, "Error %d enabling current subfunction\n", ret);
> +
> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
> +					 LMH_NODE_DCVS, node_id, 0);
> +		if (ret)
> +			dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
> +
> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
> +					 LMH_NODE_DCVS, node_id, 0);
> +		if (ret)
> +			dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
> +
> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
> +					 LMH_NODE_DCVS, node_id, 0);
> +		if (ret) {
> +			dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
> +			return ret;
> +		}
> +
> +		ret = qcom_scm_lmh_profile_change(0x1);
> +		if (ret) {
> +			dev_err(dev, "Error %d changing profile\n", ret);
> +			return ret;
> +		}
>  	}
>  
>  	/* Set default thermal trips */
> @@ -213,7 +220,8 @@ static int lmh_probe(struct platform_device *pdev)
>  }
>  
>  static const struct of_device_id lmh_table[] = {
> -	{ .compatible = "qcom,sdm845-lmh", },
> +	{ .compatible = "qcom,sdm845-lmh", .data = LMH_ENABLE_ALGOS},
> +	{ .compatible = "qcom,sm8150-lmh", },
>  	{}
>  };
>  MODULE_DEVICE_TABLE(of, lmh_table);
> 


-- 
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog

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

* Re: [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150
  2021-12-20 12:04   ` Daniel Lezcano
@ 2022-01-05 19:18     ` Thara Gopinath
  0 siblings, 0 replies; 8+ messages in thread
From: Thara Gopinath @ 2022-01-05 19:18 UTC (permalink / raw)
  To: Daniel Lezcano, agross, bjorn.andersson, rafael, rui.zhang, robh+dt
  Cc: linux-arm-msm, linux-pm, devicetree, linux-kernel



On 12/20/21 7:04 AM, Daniel Lezcano wrote:
> On 15/12/2021 17:33, Thara Gopinath wrote:
>> Add compatible to support LMh for sm8150 SoC.
>> sm8150 does not require explicit enabling for various LMh subsystems.
>> Add a variable indicating the same as match data which is set for sdm845.
>> Execute the piece of code enabling various LMh subsystems only if
>> enable algorithm match data is present.
>>
>> Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
>> ---
>>
>> v1->v2:
>> 	- Added LMH_ENABLE_ALGOS of_device_id match data to indicate
>> 	  whether LMh subsytems need explicit enabling or not.
>>
>>   drivers/thermal/qcom/lmh.c | 62 +++++++++++++++++++++-----------------
>>   1 file changed, 35 insertions(+), 27 deletions(-)
>>
>> diff --git a/drivers/thermal/qcom/lmh.c b/drivers/thermal/qcom/lmh.c
>> index eafa7526eb8b..80d26d043498 100644
>> --- a/drivers/thermal/qcom/lmh.c
>> +++ b/drivers/thermal/qcom/lmh.c
>> @@ -28,6 +28,8 @@
>>   
>>   #define LMH_REG_DCVS_INTR_CLR		0x8
>>   
>> +#define LMH_ENABLE_ALGOS		((void *)1)
> 
> It will be nicer a probe function here

Hello Daniel,

As we discussed, there are SoCs for which all the algorithms need not be 
enabled. So introducing a separate probe function for each will be 
clumsy. The idea here is to use flags (currently just one to specify 
whether the algorithms need to be enabled or not) to specify which 
algorithms to be enabled.


-- 
Warm Regards
Thara (She/Her/Hers)
> 
>> +
>>   struct lmh_hw_data {
>>   	void __iomem *base;
>>   	struct irq_domain *domain;
>> @@ -87,6 +89,7 @@ static int lmh_probe(struct platform_device *pdev)
>>   {
>>   	struct device *dev = &pdev->dev;
>>   	struct device_node *np = dev->of_node;
>> +	const struct of_device_id *of_id;
>>   	struct device_node *cpu_node;
>>   	struct lmh_hw_data *lmh_data;
>>   	int temp_low, temp_high, temp_arm, cpu_id, ret;
>> @@ -141,32 +144,36 @@ static int lmh_probe(struct platform_device *pdev)
>>   	if (!qcom_scm_lmh_dcvsh_available())
>>   		return -EINVAL;
>>   
>> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
>> -				 LMH_NODE_DCVS, node_id, 0);
>> -	if (ret)
>> -		dev_err(dev, "Error %d enabling current subfunction\n", ret);
>> -
>> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
>> -				 LMH_NODE_DCVS, node_id, 0);
>> -	if (ret)
>> -		dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
>> -
>> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
>> -				 LMH_NODE_DCVS, node_id, 0);
>> -	if (ret)
>> -		dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
>> -
>> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
>> -				 LMH_NODE_DCVS, node_id, 0);
>> -	if (ret) {
>> -		dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
>> -		return ret;
>> -	}
>> -
>> -	ret = qcom_scm_lmh_profile_change(0x1);
>> -	if (ret) {
>> -		dev_err(dev, "Error %d changing profile\n", ret);
>> -		return ret;
>> +	of_id = of_match_device(dev->driver->of_match_table, dev);
>> +
>> +	if (of_id && of_id->data == LMH_ENABLE_ALGOS) {
>> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
>> +					 LMH_NODE_DCVS, node_id, 0);
>> +		if (ret)
>> +			dev_err(dev, "Error %d enabling current subfunction\n", ret);
>> +
>> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
>> +					 LMH_NODE_DCVS, node_id, 0);
>> +		if (ret)
>> +			dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
>> +
>> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
>> +					 LMH_NODE_DCVS, node_id, 0);
>> +		if (ret)
>> +			dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
>> +
>> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
>> +					 LMH_NODE_DCVS, node_id, 0);
>> +		if (ret) {
>> +			dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
>> +			return ret;
>> +		}
>> +
>> +		ret = qcom_scm_lmh_profile_change(0x1);
>> +		if (ret) {
>> +			dev_err(dev, "Error %d changing profile\n", ret);
>> +			return ret;
>> +		}
>>   	}
>>   
>>   	/* Set default thermal trips */
>> @@ -213,7 +220,8 @@ static int lmh_probe(struct platform_device *pdev)
>>   }
>>   
>>   static const struct of_device_id lmh_table[] = {
>> -	{ .compatible = "qcom,sdm845-lmh", },
>> +	{ .compatible = "qcom,sdm845-lmh", .data = LMH_ENABLE_ALGOS},
>> +	{ .compatible = "qcom,sm8150-lmh", },
>>   	{}
>>   };
>>   MODULE_DEVICE_TABLE(of, lmh_table);
>>
> 
> 



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

* Re: [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150
  2021-12-15 16:33 ` [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150 Thara Gopinath
  2021-12-20 12:04   ` Daniel Lezcano
@ 2022-01-05 21:52   ` Bjorn Andersson
  2022-01-06 15:52     ` Thara Gopinath
  1 sibling, 1 reply; 8+ messages in thread
From: Bjorn Andersson @ 2022-01-05 21:52 UTC (permalink / raw)
  To: Thara Gopinath
  Cc: agross, daniel.lezcano, rafael, rui.zhang, robh+dt,
	linux-arm-msm, linux-pm, devicetree, linux-kernel

On Wed 15 Dec 08:33 PST 2021, Thara Gopinath wrote:

> Add compatible to support LMh for sm8150 SoC.
> sm8150 does not require explicit enabling for various LMh subsystems.
> Add a variable indicating the same as match data which is set for sdm845.
> Execute the piece of code enabling various LMh subsystems only if
> enable algorithm match data is present.
> 
> Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
> ---
> 
> v1->v2:
> 	- Added LMH_ENABLE_ALGOS of_device_id match data to indicate
> 	  whether LMh subsytems need explicit enabling or not.
> 
>  drivers/thermal/qcom/lmh.c | 62 +++++++++++++++++++++-----------------
>  1 file changed, 35 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/thermal/qcom/lmh.c b/drivers/thermal/qcom/lmh.c
> index eafa7526eb8b..80d26d043498 100644
> --- a/drivers/thermal/qcom/lmh.c
> +++ b/drivers/thermal/qcom/lmh.c
> @@ -28,6 +28,8 @@
>  
>  #define LMH_REG_DCVS_INTR_CLR		0x8
>  
> +#define LMH_ENABLE_ALGOS		((void *)1)
> +
>  struct lmh_hw_data {
>  	void __iomem *base;
>  	struct irq_domain *domain;
> @@ -87,6 +89,7 @@ static int lmh_probe(struct platform_device *pdev)
>  {
>  	struct device *dev = &pdev->dev;
>  	struct device_node *np = dev->of_node;
> +	const struct of_device_id *of_id;
>  	struct device_node *cpu_node;
>  	struct lmh_hw_data *lmh_data;
>  	int temp_low, temp_high, temp_arm, cpu_id, ret;
> @@ -141,32 +144,36 @@ static int lmh_probe(struct platform_device *pdev)
>  	if (!qcom_scm_lmh_dcvsh_available())
>  		return -EINVAL;
>  
> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
> -				 LMH_NODE_DCVS, node_id, 0);
> -	if (ret)
> -		dev_err(dev, "Error %d enabling current subfunction\n", ret);
> -
> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
> -				 LMH_NODE_DCVS, node_id, 0);
> -	if (ret)
> -		dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
> -
> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
> -				 LMH_NODE_DCVS, node_id, 0);
> -	if (ret)
> -		dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
> -
> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
> -				 LMH_NODE_DCVS, node_id, 0);
> -	if (ret) {
> -		dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
> -		return ret;
> -	}
> -
> -	ret = qcom_scm_lmh_profile_change(0x1);
> -	if (ret) {
> -		dev_err(dev, "Error %d changing profile\n", ret);
> -		return ret;
> +	of_id = of_match_device(dev->driver->of_match_table, dev);

I think it would be preferable to use of_device_get_match_data() and
assign this to an unsigned long.

> +
> +	if (of_id && of_id->data == LMH_ENABLE_ALGOS) {

Then you don't need to check of_id for NULL here and this would lend
itself nicely to be a bitmask of enabled algorithms if some platform
would need to enable a subset of these.

> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
> +					 LMH_NODE_DCVS, node_id, 0);
> +		if (ret)
> +			dev_err(dev, "Error %d enabling current subfunction\n", ret);
> +
> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
> +					 LMH_NODE_DCVS, node_id, 0);
> +		if (ret)
> +			dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
> +
> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
> +					 LMH_NODE_DCVS, node_id, 0);
> +		if (ret)
> +			dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
> +
> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
> +					 LMH_NODE_DCVS, node_id, 0);
> +		if (ret) {
> +			dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
> +			return ret;
> +		}
> +
> +		ret = qcom_scm_lmh_profile_change(0x1);
> +		if (ret) {
> +			dev_err(dev, "Error %d changing profile\n", ret);
> +			return ret;
> +		}
>  	}
>  
>  	/* Set default thermal trips */
> @@ -213,7 +220,8 @@ static int lmh_probe(struct platform_device *pdev)
>  }
>  
>  static const struct of_device_id lmh_table[] = {
> -	{ .compatible = "qcom,sdm845-lmh", },
> +	{ .compatible = "qcom,sdm845-lmh", .data = LMH_ENABLE_ALGOS},

Make LMH_ENABLE_ALGOS just an integer define and add the explicit (void
*) cast here.

Regards,
Bjorn

> +	{ .compatible = "qcom,sm8150-lmh", },
>  	{}
>  };
>  MODULE_DEVICE_TABLE(of, lmh_table);
> -- 
> 2.25.1
> 

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

* Re: [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150
  2022-01-05 21:52   ` Bjorn Andersson
@ 2022-01-06 15:52     ` Thara Gopinath
  0 siblings, 0 replies; 8+ messages in thread
From: Thara Gopinath @ 2022-01-06 15:52 UTC (permalink / raw)
  To: Bjorn Andersson
  Cc: agross, daniel.lezcano, rafael, rui.zhang, robh+dt,
	linux-arm-msm, linux-pm, devicetree, linux-kernel



On 1/5/22 4:52 PM, Bjorn Andersson wrote:
> On Wed 15 Dec 08:33 PST 2021, Thara Gopinath wrote:
> 
>> Add compatible to support LMh for sm8150 SoC.
>> sm8150 does not require explicit enabling for various LMh subsystems.
>> Add a variable indicating the same as match data which is set for sdm845.
>> Execute the piece of code enabling various LMh subsystems only if
>> enable algorithm match data is present.
>>
>> Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
>> ---
>>
>> v1->v2:
>> 	- Added LMH_ENABLE_ALGOS of_device_id match data to indicate
>> 	  whether LMh subsytems need explicit enabling or not.
>>
>>   drivers/thermal/qcom/lmh.c | 62 +++++++++++++++++++++-----------------
>>   1 file changed, 35 insertions(+), 27 deletions(-)
>>
>> diff --git a/drivers/thermal/qcom/lmh.c b/drivers/thermal/qcom/lmh.c
>> index eafa7526eb8b..80d26d043498 100644
>> --- a/drivers/thermal/qcom/lmh.c
>> +++ b/drivers/thermal/qcom/lmh.c
>> @@ -28,6 +28,8 @@
>>   
>>   #define LMH_REG_DCVS_INTR_CLR		0x8
>>   
>> +#define LMH_ENABLE_ALGOS		((void *)1)
>> +
>>   struct lmh_hw_data {
>>   	void __iomem *base;
>>   	struct irq_domain *domain;
>> @@ -87,6 +89,7 @@ static int lmh_probe(struct platform_device *pdev)
>>   {
>>   	struct device *dev = &pdev->dev;
>>   	struct device_node *np = dev->of_node;
>> +	const struct of_device_id *of_id;
>>   	struct device_node *cpu_node;
>>   	struct lmh_hw_data *lmh_data;
>>   	int temp_low, temp_high, temp_arm, cpu_id, ret;
>> @@ -141,32 +144,36 @@ static int lmh_probe(struct platform_device *pdev)
>>   	if (!qcom_scm_lmh_dcvsh_available())
>>   		return -EINVAL;
>>   
>> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
>> -				 LMH_NODE_DCVS, node_id, 0);
>> -	if (ret)
>> -		dev_err(dev, "Error %d enabling current subfunction\n", ret);
>> -
>> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
>> -				 LMH_NODE_DCVS, node_id, 0);
>> -	if (ret)
>> -		dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
>> -
>> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
>> -				 LMH_NODE_DCVS, node_id, 0);
>> -	if (ret)
>> -		dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
>> -
>> -	ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
>> -				 LMH_NODE_DCVS, node_id, 0);
>> -	if (ret) {
>> -		dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
>> -		return ret;
>> -	}
>> -
>> -	ret = qcom_scm_lmh_profile_change(0x1);
>> -	if (ret) {
>> -		dev_err(dev, "Error %d changing profile\n", ret);
>> -		return ret;
>> +	of_id = of_match_device(dev->driver->of_match_table, dev);
> 
> I think it would be preferable to use of_device_get_match_data() and
> assign this to an unsigned long.

Sure.. I will fix this and the comment below and send out v3.

-- 
Warm Regards
Thara (She/Her/Hers)
> 
>> +
>> +	if (of_id && of_id->data == LMH_ENABLE_ALGOS) {
> 
> Then you don't need to check of_id for NULL here and this would lend
> itself nicely to be a bitmask of enabled algorithms if some platform
> would need to enable a subset of these.
> 
>> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_CRNT, LMH_ALGO_MODE_ENABLE, 1,
>> +					 LMH_NODE_DCVS, node_id, 0);
>> +		if (ret)
>> +			dev_err(dev, "Error %d enabling current subfunction\n", ret);
>> +
>> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_REL, LMH_ALGO_MODE_ENABLE, 1,
>> +					 LMH_NODE_DCVS, node_id, 0);
>> +		if (ret)
>> +			dev_err(dev, "Error %d enabling reliability subfunction\n", ret);
>> +
>> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_BCL, LMH_ALGO_MODE_ENABLE, 1,
>> +					 LMH_NODE_DCVS, node_id, 0);
>> +		if (ret)
>> +			dev_err(dev, "Error %d enabling BCL subfunction\n", ret);
>> +
>> +		ret = qcom_scm_lmh_dcvsh(LMH_SUB_FN_THERMAL, LMH_ALGO_MODE_ENABLE, 1,
>> +					 LMH_NODE_DCVS, node_id, 0);
>> +		if (ret) {
>> +			dev_err(dev, "Error %d enabling thermal subfunction\n", ret);
>> +			return ret;
>> +		}
>> +
>> +		ret = qcom_scm_lmh_profile_change(0x1);
>> +		if (ret) {
>> +			dev_err(dev, "Error %d changing profile\n", ret);
>> +			return ret;
>> +		}
>>   	}
>>   
>>   	/* Set default thermal trips */
>> @@ -213,7 +220,8 @@ static int lmh_probe(struct platform_device *pdev)
>>   }
>>   
>>   static const struct of_device_id lmh_table[] = {
>> -	{ .compatible = "qcom,sdm845-lmh", },
>> +	{ .compatible = "qcom,sdm845-lmh", .data = LMH_ENABLE_ALGOS},
> 
> Make LMH_ENABLE_ALGOS just an integer define and add the explicit (void
> *) cast here.
> 
> Regards,
> Bjorn
> 
>> +	{ .compatible = "qcom,sm8150-lmh", },
>>   	{}
>>   };
>>   MODULE_DEVICE_TABLE(of, lmh_table);
>> -- 
>> 2.25.1
>>



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

end of thread, other threads:[~2022-01-06 15:52 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-15 16:33 [Patch v2 0/3] Extend LMh driver to suppot Qualcomm sm8150 SoC Thara Gopinath
2021-12-15 16:33 ` [Patch v2 1/3] thermal: qcom: lmh: Add support for sm8150 Thara Gopinath
2021-12-20 12:04   ` Daniel Lezcano
2022-01-05 19:18     ` Thara Gopinath
2022-01-05 21:52   ` Bjorn Andersson
2022-01-06 15:52     ` Thara Gopinath
2021-12-15 16:33 ` [Patch v2 2/3] arm64: dts: qcom: sm8150: Add support for LMh node Thara Gopinath
2021-12-15 16:34 ` [Patch v2 3/3] dt-bindings: thermal: Add sm8150 compatible string for LMh Thara Gopinath

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).