* [PATCH v2] thermal: qoriq: Update the settings for TMUv2
@ 2020-04-16 9:39 Yuantian Tang
2020-05-07 6:20 ` Andy Tang
2020-05-22 16:44 ` Daniel Lezcano
0 siblings, 2 replies; 3+ messages in thread
From: Yuantian Tang @ 2020-04-16 9:39 UTC (permalink / raw)
To: rui.zhang, edubezval, daniel.lezcano
Cc: linux-pm, linux-kernel, Yuantian Tang
For TMU v2, TMSAR registers need to be set properly to get the
accurate temperature values.
Also temperature reading needs to convert to degree Celsius
since it is in degrees Kelvin.
Signed-off-by: Yuantian Tang <andy.tang@nxp.com>
---
v2:
- change the temp in millicelsius
drivers/thermal/qoriq_thermal.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/thermal/qoriq_thermal.c b/drivers/thermal/qoriq_thermal.c
index 028a6bbf75dc..f6371127f707 100644
--- a/drivers/thermal/qoriq_thermal.c
+++ b/drivers/thermal/qoriq_thermal.c
@@ -23,6 +23,7 @@
#define TMTMIR_DEFAULT 0x0000000f
#define TIER_DISABLE 0x0
#define TEUMR0_V2 0x51009c00
+#define TMSARA_V2 0xe
#define TMU_VER1 0x1
#define TMU_VER2 0x2
@@ -50,6 +51,9 @@
* Site Register
*/
#define TRITSR_V BIT(31)
+#define REGS_V2_TMSAR(n) (0x304 + 16 * (n)) /* TMU monitoring
+ * site adjustment register
+ */
#define REGS_TTRnCR(n) (0xf10 + 4 * (n)) /* Temperature Range n
* Control Register
*/
@@ -100,7 +104,11 @@ static int tmu_get_temp(void *p, int *temp)
10 * USEC_PER_MSEC))
return -ENODATA;
- *temp = (val & 0xff) * 1000;
+ /* For TMUv2, temperature reading in degrees Kelvin */
+ if (qdata->ver == TMU_VER1)
+ *temp = (val & 0xff) * 1000;
+ else
+ *temp = ((val & 0x1ff) - 273) * 1000;
return 0;
}
@@ -192,6 +200,8 @@ static int qoriq_tmu_calibration(struct device *dev,
static void qoriq_tmu_init_device(struct qoriq_tmu_data *data)
{
+ int i;
+
/* Disable interrupt, using polling instead */
regmap_write(data->regmap, REGS_TIER, TIER_DISABLE);
@@ -202,6 +212,8 @@ static void qoriq_tmu_init_device(struct qoriq_tmu_data *data)
} else {
regmap_write(data->regmap, REGS_V2_TMTMIR, TMTMIR_DEFAULT);
regmap_write(data->regmap, REGS_V2_TEUMR(0), TEUMR0_V2);
+ for (i = 0; i < 7; i++)
+ regmap_write(data->regmap, REGS_V2_TMSAR(i), TMSARA_V2);
}
/* Disable monitoring */
@@ -212,6 +224,7 @@ static const struct regmap_range qoriq_yes_ranges[] = {
regmap_reg_range(REGS_TMR, REGS_TSCFGR),
regmap_reg_range(REGS_TTRnCR(0), REGS_TTRnCR(3)),
regmap_reg_range(REGS_V2_TEUMR(0), REGS_V2_TEUMR(2)),
+ regmap_reg_range(REGS_V2_TMSAR(0), REGS_V2_TMSAR(15)),
regmap_reg_range(REGS_IPBRR(0), REGS_IPBRR(1)),
/* Read only registers below */
regmap_reg_range(REGS_TRITSR(0), REGS_TRITSR(15)),
--
2.17.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* RE: [PATCH v2] thermal: qoriq: Update the settings for TMUv2
2020-04-16 9:39 [PATCH v2] thermal: qoriq: Update the settings for TMUv2 Yuantian Tang
@ 2020-05-07 6:20 ` Andy Tang
2020-05-22 16:44 ` Daniel Lezcano
1 sibling, 0 replies; 3+ messages in thread
From: Andy Tang @ 2020-05-07 6:20 UTC (permalink / raw)
To: Andy Tang, rui.zhang, edubezval, daniel.lezcano; +Cc: linux-pm, linux-kernel
PING.
BR,
Andy
> -----Original Message-----
> From: Yuantian Tang <andy.tang@nxp.com>
> Sent: 2020年4月16日 17:40
> To: rui.zhang@intel.com; edubezval@gmail.com; daniel.lezcano@linaro.org
> Cc: linux-pm@vger.kernel.org; linux-kernel@vger.kernel.org; Andy Tang
> <andy.tang@nxp.com>
> Subject: [PATCH v2] thermal: qoriq: Update the settings for TMUv2
>
> For TMU v2, TMSAR registers need to be set properly to get the accurate
> temperature values.
> Also temperature reading needs to convert to degree Celsius since it is in
> degrees Kelvin.
>
> Signed-off-by: Yuantian Tang <andy.tang@nxp.com>
> ---
> v2:
> - change the temp in millicelsius
>
> drivers/thermal/qoriq_thermal.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/thermal/qoriq_thermal.c
> b/drivers/thermal/qoriq_thermal.c index 028a6bbf75dc..f6371127f707
> 100644
> --- a/drivers/thermal/qoriq_thermal.c
> +++ b/drivers/thermal/qoriq_thermal.c
> @@ -23,6 +23,7 @@
> #define TMTMIR_DEFAULT 0x0000000f
> #define TIER_DISABLE 0x0
> #define TEUMR0_V2 0x51009c00
> +#define TMSARA_V2 0xe
> #define TMU_VER1 0x1
> #define TMU_VER2 0x2
>
> @@ -50,6 +51,9 @@
> * Site Register
> */
> #define TRITSR_V BIT(31)
> +#define REGS_V2_TMSAR(n) (0x304 + 16 * (n)) /* TMU monitoring
> + * site adjustment register
> + */
> #define REGS_TTRnCR(n) (0xf10 + 4 * (n)) /* Temperature Range n
> * Control Register
> */
> @@ -100,7 +104,11 @@ static int tmu_get_temp(void *p, int *temp)
> 10 * USEC_PER_MSEC))
> return -ENODATA;
>
> - *temp = (val & 0xff) * 1000;
> + /* For TMUv2, temperature reading in degrees Kelvin */
> + if (qdata->ver == TMU_VER1)
> + *temp = (val & 0xff) * 1000;
> + else
> + *temp = ((val & 0x1ff) - 273) * 1000;
>
> return 0;
> }
> @@ -192,6 +200,8 @@ static int qoriq_tmu_calibration(struct device *dev,
>
> static void qoriq_tmu_init_device(struct qoriq_tmu_data *data) {
> + int i;
> +
> /* Disable interrupt, using polling instead */
> regmap_write(data->regmap, REGS_TIER, TIER_DISABLE);
>
> @@ -202,6 +212,8 @@ static void qoriq_tmu_init_device(struct
> qoriq_tmu_data *data)
> } else {
> regmap_write(data->regmap, REGS_V2_TMTMIR,
> TMTMIR_DEFAULT);
> regmap_write(data->regmap, REGS_V2_TEUMR(0), TEUMR0_V2);
> + for (i = 0; i < 7; i++)
> + regmap_write(data->regmap, REGS_V2_TMSAR(i),
> TMSARA_V2);
> }
>
> /* Disable monitoring */
> @@ -212,6 +224,7 @@ static const struct regmap_range qoriq_yes_ranges[]
> = {
> regmap_reg_range(REGS_TMR, REGS_TSCFGR),
> regmap_reg_range(REGS_TTRnCR(0), REGS_TTRnCR(3)),
> regmap_reg_range(REGS_V2_TEUMR(0), REGS_V2_TEUMR(2)),
> + regmap_reg_range(REGS_V2_TMSAR(0), REGS_V2_TMSAR(15)),
> regmap_reg_range(REGS_IPBRR(0), REGS_IPBRR(1)),
> /* Read only registers below */
> regmap_reg_range(REGS_TRITSR(0), REGS_TRITSR(15)),
> --
> 2.17.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] thermal: qoriq: Update the settings for TMUv2
2020-04-16 9:39 [PATCH v2] thermal: qoriq: Update the settings for TMUv2 Yuantian Tang
2020-05-07 6:20 ` Andy Tang
@ 2020-05-22 16:44 ` Daniel Lezcano
1 sibling, 0 replies; 3+ messages in thread
From: Daniel Lezcano @ 2020-05-22 16:44 UTC (permalink / raw)
To: Yuantian Tang, rui.zhang, edubezval; +Cc: linux-pm, linux-kernel
On 16/04/2020 11:39, Yuantian Tang wrote:
> For TMU v2, TMSAR registers need to be set properly to get the
> accurate temperature values.
> Also temperature reading needs to convert to degree Celsius
> since it is in degrees Kelvin.
Please have a look at units.h for celsius <-> kelvin conversion
> Signed-off-by: Yuantian Tang <andy.tang@nxp.com>
> ---
> v2:
> - change the temp in millicelsius
>
> drivers/thermal/qoriq_thermal.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/thermal/qoriq_thermal.c b/drivers/thermal/qoriq_thermal.c
> index 028a6bbf75dc..f6371127f707 100644
> --- a/drivers/thermal/qoriq_thermal.c
> +++ b/drivers/thermal/qoriq_thermal.c
> @@ -23,6 +23,7 @@
> #define TMTMIR_DEFAULT 0x0000000f
> #define TIER_DISABLE 0x0
> #define TEUMR0_V2 0x51009c00
> +#define TMSARA_V2 0xe
> #define TMU_VER1 0x1
> #define TMU_VER2 0x2
>
> @@ -50,6 +51,9 @@
> * Site Register
> */
> #define TRITSR_V BIT(31)
> +#define REGS_V2_TMSAR(n) (0x304 + 16 * (n)) /* TMU monitoring
> + * site adjustment register
> + */
> #define REGS_TTRnCR(n) (0xf10 + 4 * (n)) /* Temperature Range n
> * Control Register
> */
> @@ -100,7 +104,11 @@ static int tmu_get_temp(void *p, int *temp)
> 10 * USEC_PER_MSEC))
> return -ENODATA;
>
> - *temp = (val & 0xff) * 1000;
> + /* For TMUv2, temperature reading in degrees Kelvin */
> + if (qdata->ver == TMU_VER1)
> + *temp = (val & 0xff) * 1000;
> + else
> + *temp = ((val & 0x1ff) - 273) * 1000;
>
> return 0;
> }
> @@ -192,6 +200,8 @@ static int qoriq_tmu_calibration(struct device *dev,
>
> static void qoriq_tmu_init_device(struct qoriq_tmu_data *data)
> {
> + int i;
> +
> /* Disable interrupt, using polling instead */
> regmap_write(data->regmap, REGS_TIER, TIER_DISABLE);
>
> @@ -202,6 +212,8 @@ static void qoriq_tmu_init_device(struct qoriq_tmu_data *data)
> } else {
> regmap_write(data->regmap, REGS_V2_TMTMIR, TMTMIR_DEFAULT);
> regmap_write(data->regmap, REGS_V2_TEUMR(0), TEUMR0_V2);
> + for (i = 0; i < 7; i++)
> + regmap_write(data->regmap, REGS_V2_TMSAR(i), TMSARA_V2);
> }
>
> /* Disable monitoring */
> @@ -212,6 +224,7 @@ static const struct regmap_range qoriq_yes_ranges[] = {
> regmap_reg_range(REGS_TMR, REGS_TSCFGR),
> regmap_reg_range(REGS_TTRnCR(0), REGS_TTRnCR(3)),
> regmap_reg_range(REGS_V2_TEUMR(0), REGS_V2_TEUMR(2)),
> + regmap_reg_range(REGS_V2_TMSAR(0), REGS_V2_TMSAR(15)),
> regmap_reg_range(REGS_IPBRR(0), REGS_IPBRR(1)),
> /* Read only registers below */
> regmap_reg_range(REGS_TRITSR(0), REGS_TRITSR(15)),
>
--
<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] 3+ messages in thread
end of thread, other threads:[~2020-05-22 16:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-16 9:39 [PATCH v2] thermal: qoriq: Update the settings for TMUv2 Yuantian Tang
2020-05-07 6:20 ` Andy Tang
2020-05-22 16:44 ` Daniel Lezcano
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).