mbox series

[v2,00/11] Another round of tsens cleanups

Message ID cover.1535462942.git.amit.kucheria@linaro.org
Headers show
Series Another round of tsens cleanups | expand

Message

Amit Kucheria Aug. 28, 2018, 1:38 p.m. UTC
This is another series of tsens cleanups before we add interrupt support. This applies on top of 4.19-rc1.

In this series, we have the following:
- splitup 8916 and 8974 register address spaces for SROT and TM
- cleanups: move to spdx, dead code removal, removal of id field
- Add support to map the SROT address space for DTs that list it separately
- Check if TSENS IP is enabled in firmware by querying the SROT space
- Add reg-names property to get more readable outputs in /proc/iomem
- Add myself as maintainer of tsens

Changes since v1:
- Split up changes that split the address space and added qcom,sensors
  property into two separate patches
- Remove brackets in typo correction patch

Amit Kucheria (11):
  arm/arm64: dts: msm8974/msm8916: thermal: Split address space into two
  arm/arm64: dts: msm8974/msm8916: thermal: Add "qcom,sensors" property
  dt-bindings: thermal: Fix a typo in documentation
  thermal: tsens: Add SPDX license identifiers
  thermal: tsens: Get rid of dead code
  thermal: tsens: Rename map field in order to add a second address map
  thermal: tsens: Add the SROT address map
  thermal: tsens: Check if the IP is correctly enabled by firmware
  thermal: tsens: Get rid of 'id' field
  arm64: dts: qcom: Add reg-names for all tsens nodes
  MAINTAINERS: Add entry for Qualcomm TSENS thermal drivers

 .../devicetree/bindings/thermal/thermal.txt   |  2 +-
 MAINTAINERS                                   |  7 +++
 arch/arm/boot/dts/qcom-msm8974.dtsi           |  7 ++-
 arch/arm64/boot/dts/qcom/msm8916.dtsi         |  7 ++-
 arch/arm64/boot/dts/qcom/msm8996.dtsi         |  2 +
 arch/arm64/boot/dts/qcom/sdm845.dtsi          |  2 +
 drivers/thermal/qcom/tsens-8916.c             | 11 +---
 drivers/thermal/qcom/tsens-8960.c             | 41 +++++-------
 drivers/thermal/qcom/tsens-8974.c             | 11 +---
 drivers/thermal/qcom/tsens-common.c           | 62 ++++++++++++-------
 drivers/thermal/qcom/tsens-v2.c               |  6 +-
 drivers/thermal/qcom/tsens.c                  | 21 +------
 drivers/thermal/qcom/tsens.h                  | 24 +++----
 13 files changed, 99 insertions(+), 104 deletions(-)

-- 
2.17.1

Comments

Bjorn Andersson Sept. 3, 2018, 8:02 p.m. UTC | #1
On Tue 28 Aug 06:38 PDT 2018, Amit Kucheria wrote:

> We've earlier added support to split the register address space into TM

> and SROT regions.

> 

> Split up the regmap address space into two for the remaining platforms

> that have a similar register layout and make corresponding changes to

> the get_temp_common() function used by these platforms.

> 

> Since tsens-common.c/init_common() currently only registers one address

> space, the order is important (TM before SROT).  This is OK since the

> code doesn't really use the SROT functionality yet.

> 


Having a single patch touching both code and dts will cause merge issues
as this patch travel upstream. Even more arm-soc expects arm and arm64
dts changes to come in different pull requests.

Please split it so that the three pieces can be picked up by respective
maintainer.

> Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>

> Reviewed-by: Matthias Kaehlcke <mka@chromium.org>

> ---

>  arch/arm/boot/dts/qcom-msm8974.dtsi   | 5 +++--

>  arch/arm64/boot/dts/qcom/msm8916.dtsi | 5 +++--

>  drivers/thermal/qcom/tsens-common.c   | 5 +++--

>  3 files changed, 9 insertions(+), 6 deletions(-)

> 

> diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi

> index d9019a49b292..56dbbf788d15 100644

> --- a/arch/arm/boot/dts/qcom-msm8974.dtsi

> +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi

> @@ -427,9 +427,10 @@

>  			};

>  		};

>  

> -		tsens: thermal-sensor@fc4a8000 {

> +		tsens: thermal-sensor@fc4a9000 {

>  			compatible = "qcom,msm8974-tsens";

> -			reg = <0xfc4a8000 0x2000>;

> +			reg = <0xfc4a9000 0x1000>, /* TM */

> +			      <0xfc4a8000 0x1000>; /* SROT */

>  			nvmem-cells = <&tsens_calib>, <&tsens_backup>;

>  			nvmem-cell-names = "calib", "calib_backup";

>  			#thermal-sensor-cells = <1>;

> diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi

> index 7b32b8990d62..6a277fce3333 100644

> --- a/arch/arm64/boot/dts/qcom/msm8916.dtsi

> +++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi

> @@ -761,9 +761,10 @@

>  			};

>  		};

>  

> -		tsens: thermal-sensor@4a8000 {

> +		tsens: thermal-sensor@4a9000 {

>  			compatible = "qcom,msm8916-tsens";

> -			reg = <0x4a8000 0x2000>;

> +			reg = <0x4a9000 0x1000>, /* TM */

> +			      <0x4a8000 0x1000>; /* SROT */

>  			nvmem-cells = <&tsens_caldata>, <&tsens_calsel>;

>  			nvmem-cell-names = "calib", "calib_sel";

>  			#thermal-sensor-cells = <1>;

> diff --git a/drivers/thermal/qcom/tsens-common.c b/drivers/thermal/qcom/tsens-common.c

> index 6207d8d92351..478739543bbc 100644

> --- a/drivers/thermal/qcom/tsens-common.c

> +++ b/drivers/thermal/qcom/tsens-common.c

> @@ -21,7 +21,7 @@

>  #include <linux/regmap.h>

>  #include "tsens.h"

>  

> -#define S0_ST_ADDR		0x1030

> +#define STATUS_OFFSET		0x30

>  #define SN_ADDR_OFFSET		0x4

>  #define SN_ST_TEMP_MASK		0x3ff

>  #define CAL_DEGC_PT1		30

> @@ -107,8 +107,9 @@ int get_temp_common(struct tsens_device *tmdev, int id, int *temp)

>  	unsigned int status_reg;

>  	int last_temp = 0, ret;

>  

> -	status_reg = S0_ST_ADDR + s->hw_id * SN_ADDR_OFFSET;

> +	status_reg = tmdev->tm_offset + STATUS_OFFSET + s->hw_id * SN_ADDR_OFFSET;


Wasn't this change part of the previous set that introduced the
tm_offset? If not how did we handle the fact that tmdev->map is already
indented 0x1000 bytes?

Both changes looks good, but I'm worries about the order of things.

Regards,
Bjorn

>  	ret = regmap_read(tmdev->map, status_reg, &code);

> +

>  	if (ret)

>  		return ret;

>  	last_temp = code & SN_ST_TEMP_MASK;

> -- 

> 2.17.1

>
Bjorn Andersson Sept. 3, 2018, 8:26 p.m. UTC | #2
On Tue 28 Aug 06:38 PDT 2018, Amit Kucheria wrote:

> The hw_id field in 'struct tsens_sensor' can do the job of tracking

> unique ids for each sensor connected to each tsens device instance. It

> also allows hw_ids to be overridden (e.g. 8916) in cases where some

> sensors in a sequence are disabled on a particular platform.

> 

> Use the hw_id field instead of the id field consistently across the

> tsens code.

> 

> While we're at it, document the fields of struct tsens_sensor.

> 

> Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>

> Reviewed-by: Matthias Kaehlcke <mka@chromium.org>


Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>


Regards,
Bjorn

> ---

>  drivers/thermal/qcom/tsens.c |  5 ++---

>  drivers/thermal/qcom/tsens.h | 10 +++++++++-

>  2 files changed, 11 insertions(+), 4 deletions(-)

> 

> diff --git a/drivers/thermal/qcom/tsens.c b/drivers/thermal/qcom/tsens.c

> index 9a8e8f7b4ae1..fb728ec5d77f 100644

> --- a/drivers/thermal/qcom/tsens.c

> +++ b/drivers/thermal/qcom/tsens.c

> @@ -17,7 +17,7 @@ static int tsens_get_temp(void *data, int *temp)

>  	const struct tsens_sensor *s = data;

>  	struct tsens_device *tmdev = s->tmdev;

>  

> -	return tmdev->ops->get_temp(tmdev, s->id, temp);

> +	return tmdev->ops->get_temp(tmdev, s->hw_id, temp);

>  }

>  

>  static int tsens_get_trend(void *p, int trip, enum thermal_trend *trend)

> @@ -26,7 +26,7 @@ static int tsens_get_trend(void *p, int trip, enum thermal_trend *trend)

>  	struct tsens_device *tmdev = s->tmdev;

>  

>  	if (tmdev->ops->get_trend)

> -		return  tmdev->ops->get_trend(tmdev, s->id, trend);

> +		return  tmdev->ops->get_trend(tmdev, s->hw_id, trend);

>  

>  	return -ENOTSUPP;

>  }

> @@ -83,7 +83,6 @@ static int tsens_register(struct tsens_device *tmdev)

>  

>  	for (i = 0;  i < tmdev->num_sensors; i++) {

>  		tmdev->sensor[i].tmdev = tmdev;

> -		tmdev->sensor[i].id = i;

>  		tzd = devm_thermal_zone_of_sensor_register(tmdev->dev, i,

>  							   &tmdev->sensor[i],

>  							   &tsens_of_ops);

> diff --git a/drivers/thermal/qcom/tsens.h b/drivers/thermal/qcom/tsens.h

> index b9c4bcf255fa..2a3174dfc1a9 100644

> --- a/drivers/thermal/qcom/tsens.h

> +++ b/drivers/thermal/qcom/tsens.h

> @@ -14,11 +14,19 @@

>  

>  struct tsens_device;

>  

> +/**

> + * struct tsens_sensor - sensor-specific data

> + * @tmdev: tsens device instance this sensor is connected to

> + * @tzd: thermal zone corresponding to this sensor

> + * @offset: offset from calibration data to convert ADC data to degrees

> + * @hw_id: unique sensor ID for each sensor connected to tsens device instance

> + * @slope: slope from calibration data to convert ADC data to degrees

> + * @status: 8960-specific status register addresses

> + */

>  struct tsens_sensor {

>  	struct tsens_device		*tmdev;

>  	struct thermal_zone_device	*tzd;

>  	int				offset;

> -	int				id;

>  	int				hw_id;

>  	int				slope;

>  	u32				status;

> -- 

> 2.17.1

>
Bjorn Andersson Sept. 3, 2018, 8:34 p.m. UTC | #3
On Tue 28 Aug 06:38 PDT 2018, Amit Kucheria wrote:

> Instead of showing up as thermal-sensor@<addr>, the nodes will show up as

> tsens0_tm, tsen1_tm, tsens1_srot, etc. in /proc/iomem making it easier to

> read.

> 

> IOW,

> 

> 0c222000-0c2221fe : thermal-sensor@c263000

> 0c223000-0c2231fe : thermal-sensor@c265000

> 0c263000-0c2631fe : thermal-sensor@c263000

> 0c265000-0c2651fe : thermal-sensor@c265000

> 

> becomes

> 

> 0c222000-0c2221fe : tsens0_srot

> 0c223000-0c2231fe : tsens1_srot

> 0c263000-0c2631fe : tsens0_tm

> 0c265000-0c2651fe : tsens1_tm

> 

> Signed-off-by: Amit Kucheria <amit.kucheria@linaro.org>

> Reviewed-by: Matthias Kaehlcke <mka@chromium.org>

> ---

>  arch/arm/boot/dts/qcom-msm8974.dtsi   | 1 +

>  arch/arm64/boot/dts/qcom/msm8916.dtsi | 1 +

>  arch/arm64/boot/dts/qcom/msm8996.dtsi | 2 ++

>  arch/arm64/boot/dts/qcom/sdm845.dtsi  | 2 ++

>  4 files changed, 6 insertions(+)

> 

> diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi

> index 3c4b81c29798..64c9f81ddd90 100644

> --- a/arch/arm/boot/dts/qcom-msm8974.dtsi

> +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi

> @@ -431,6 +431,7 @@

>  			compatible = "qcom,msm8974-tsens";

>  			reg = <0xfc4a9000 0x1000>, /* TM */

>  			      <0xfc4a8000 0x1000>; /* SROT */

> +			reg-names = "tsens_tm", "tsens_srot";


While the iomem output seems more convenient this way, these register
names are a contract between the DT binding and the particular tsens
instance.

As such this is a good idea, but with the names should not include the
instance information. They should be "tm", "srot".

>  			nvmem-cells = <&tsens_calib>, <&tsens_backup>;

>  			nvmem-cell-names = "calib", "calib_backup";

>  			#qcom,sensors = <11>;

[..]
> diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi

> index 0c9a2aa6a1b5..f1a36d6829cf 100644

> --- a/arch/arm64/boot/dts/qcom/sdm845.dtsi

> +++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi

> @@ -966,6 +966,7 @@

>  			compatible = "qcom,sdm845-tsens", "qcom,tsens-v2";

>  			reg = <0xc263000 0x1ff>, /* TM */

>  			      <0xc222000 0x1ff>; /* SROT */

> +			reg-names = "tsens0_tm", "tsens0_srot";

>  			#qcom,sensors = <13>;

>  			#thermal-sensor-cells = <1>;

>  		};

> @@ -974,6 +975,7 @@

>  			compatible = "qcom,sdm845-tsens", "qcom,tsens-v2";

>  			reg = <0xc265000 0x1ff>, /* TM */

>  			      <0xc223000 0x1ff>; /* SROT */

> +			reg-names = "tsens1_tm", "tsens1_srot";


And I do recognize that in this case iomem won't show which one is
tsens0 and which is tsens1...


As with previous patches, please split arm and arm64 in separate
patches.

Regards,
Bjorn