* [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188
@ 2024-03-18 21:22 Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 01/13] thermal/drivers/mediatek/lvts_thermal: retrieve all calibration bytes Nicolas Pitre
` (12 more replies)
0 siblings, 13 replies; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
This is a bunch of patches to support the MT8186 and MT8188 thermal
sensor configurations. Several changes are needed to cope with oddities
these SOCs implement.
All values (calibration data offsets, etc.) were lifted and adapted from
the vendor driver source code.
Version 1 can be found here:
https://lore.kernel.org/all/20240111223020.3593558-1-nico@fluxnic.net/T/
Changes from v1:
- renamed CPU cluster thermal zones in DT
- fixed logic to cope with empty controller slots at the beginning
- isolated bindings to their own patches
- added MT8188 default thermal zones
diffstat:
.../thermal/mediatek,lvts-thermal.yaml | 6 +
arch/arm64/boot/dts/mediatek/mt8186.dtsi | 256 ++++++++++++
drivers/thermal/mediatek/lvts_thermal.c | 375 ++++++++++++++----
.../thermal/mediatek,lvts-thermal.h | 26 ++
4 files changed, 585 insertions(+), 78 deletions(-)
.../thermal/mediatek,lvts-thermal.yaml | 6 +
arch/arm64/boot/dts/mediatek/mt8186.dtsi | 256 +++++++++++
arch/arm64/boot/dts/mediatek/mt8188.dtsi | 383 ++++++++++++++++
drivers/thermal/mediatek/lvts_thermal.c | 425 ++++++++++++++----
.../thermal/mediatek,lvts-thermal.h | 26 ++
5 files changed, 997 insertions(+), 99 deletions(-)
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH v2 01/13] thermal/drivers/mediatek/lvts_thermal: retrieve all calibration bytes
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-19 11:40 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 02/13] thermal/drivers/mediatek/lvts_thermal: move comment Nicolas Pitre
` (11 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Calibration values are 24-bit wide. Those values so far appear to span
only 16 bits but let's not push our luck.
Found while looking at the original Mediatek driver code.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
drivers/thermal/mediatek/lvts_thermal.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index 98d9c80bd4..8aa6a8675b 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -679,7 +679,7 @@ static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl
for (i = 0; i < lvts_ctrl_data->num_lvts_sensor; i++)
memcpy(&lvts_ctrl->calibration[i],
- efuse_calibration + lvts_ctrl_data->cal_offset[i], 2);
+ efuse_calibration + lvts_ctrl_data->cal_offset[i], 3);
return 0;
}
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 02/13] thermal/drivers/mediatek/lvts_thermal: move comment
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 01/13] thermal/drivers/mediatek/lvts_thermal: retrieve all calibration bytes Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 03/13] thermal/drivers/mediatek/lvts_thermal: use offsets for every calibration byte Nicolas Pitre
` (10 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Move efuse data interpretation inside lvts_golden_temp_init() alongside
the actual code retrieving wanted value.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
drivers/thermal/mediatek/lvts_thermal.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index 8aa6a8675b..73ca2be0f5 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -732,11 +732,15 @@ static int lvts_calibration_read(struct device *dev, struct lvts_domain *lvts_td
return 0;
}
-static int lvts_golden_temp_init(struct device *dev, u32 *value, int temp_offset)
+static int lvts_golden_temp_init(struct device *dev, u8 *calib, int temp_offset)
{
u32 gt;
- gt = (*value) >> 24;
+ /*
+ * The golden temp information is contained in the 4th byte (index = 3)
+ * of efuse data.
+ */
+ gt = calib[3];
if (gt && gt < LVTS_GOLDEN_TEMP_MAX)
golden_temp = gt;
@@ -760,11 +764,7 @@ static int lvts_ctrl_init(struct device *dev, struct lvts_domain *lvts_td,
if (ret)
return ret;
- /*
- * The golden temp information is contained in the first chunk
- * of efuse data.
- */
- ret = lvts_golden_temp_init(dev, (u32 *)lvts_td->calib, lvts_data->temp_offset);
+ ret = lvts_golden_temp_init(dev, lvts_td->calib, lvts_data->temp_offset);
if (ret)
return ret;
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 03/13] thermal/drivers/mediatek/lvts_thermal: use offsets for every calibration byte
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 01/13] thermal/drivers/mediatek/lvts_thermal: retrieve all calibration bytes Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 02/13] thermal/drivers/mediatek/lvts_thermal: move comment Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 04/13] thermal/drivers/mediatek/lvts_thermal: guard against efuse data buffer overflow Nicolas Pitre
` (9 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Current code assumes calibration values are always stored contiguously
in host endian order. A future patch will prove this wrong.
Let's specify the offset for each calibration byte instead.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
drivers/thermal/mediatek/lvts_thermal.c | 165 ++++++++++++++----------
1 file changed, 99 insertions(+), 66 deletions(-)
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index 73ca2be0f5..2c346ea7c6 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -102,11 +102,11 @@ static int golden_temp_offset;
struct lvts_sensor_data {
int dt_id;
+ u8 cal_offsets[3];
};
struct lvts_ctrl_data {
struct lvts_sensor_data lvts_sensor[LVTS_SENSOR_MAX];
- int cal_offset[LVTS_SENSOR_MAX];
int hw_tshut_temp;
int num_lvts_sensor;
int offset;
@@ -668,8 +668,9 @@ static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
* <-----ap--tc#3-----> <-----sensor#7-----> <-----sensor#8----->
* 0x40 | 0x41 | 0x42 | 0x43 | 0x44 | 0x45 | 0x46 | 0x47 | 0x48
*
- * The data description gives the offset of the calibration data in
- * this bytes stream for each sensor.
+ * Note: In some cases, values don't strictly follow a little endian ordering.
+ * The data description gives byte offsets constituting each calibration value
+ * for each sensor.
*/
static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
const struct lvts_ctrl_data *lvts_ctrl_data,
@@ -677,9 +678,15 @@ static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl
{
int i;
- for (i = 0; i < lvts_ctrl_data->num_lvts_sensor; i++)
- memcpy(&lvts_ctrl->calibration[i],
- efuse_calibration + lvts_ctrl_data->cal_offset[i], 3);
+ for (i = 0; i < lvts_ctrl_data->num_lvts_sensor; i++) {
+ const struct lvts_sensor_data *sensor =
+ &lvts_ctrl_data->lvts_sensor[i];
+
+ lvts_ctrl->calibration[i] =
+ (efuse_calibration[sensor->cal_offsets[0]] << 0) +
+ (efuse_calibration[sensor->cal_offsets[1]] << 8) +
+ (efuse_calibration[sensor->cal_offsets[2]] << 16);
+ }
return 0;
}
@@ -1300,24 +1307,30 @@ static void lvts_remove(struct platform_device *pdev)
static const struct lvts_ctrl_data mt7988_lvts_ap_data_ctrl[] = {
{
- .cal_offset = { 0x00, 0x04, 0x08, 0x0c },
.lvts_sensor = {
- { .dt_id = MT7988_CPU_0 },
- { .dt_id = MT7988_CPU_1 },
- { .dt_id = MT7988_ETH2P5G_0 },
- { .dt_id = MT7988_ETH2P5G_1 }
+ { .dt_id = MT7988_CPU_0,
+ .cal_offsets = { 0x00, 0x01, 0x02 } },
+ { .dt_id = MT7988_CPU_1,
+ .cal_offsets = { 0x04, 0x05, 0x06 } },
+ { .dt_id = MT7988_ETH2P5G_0,
+ .cal_offsets = { 0x08, 0x09, 0x0a } },
+ { .dt_id = MT7988_ETH2P5G_1,
+ .cal_offsets = { 0x0c, 0x0d, 0x0e } }
},
.num_lvts_sensor = 4,
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT7988,
},
{
- .cal_offset = { 0x14, 0x18, 0x1c, 0x20 },
.lvts_sensor = {
- { .dt_id = MT7988_TOPS_0},
- { .dt_id = MT7988_TOPS_1},
- { .dt_id = MT7988_ETHWARP_0},
- { .dt_id = MT7988_ETHWARP_1}
+ { .dt_id = MT7988_TOPS_0,
+ .cal_offsets = { 0x14, 0x15, 0x16 } },
+ { .dt_id = MT7988_TOPS_1,
+ .cal_offsets = { 0x18, 0x19, 0x1a } },
+ { .dt_id = MT7988_ETHWARP_0,
+ .cal_offsets = { 0x1c, 0x1d, 0x1e } },
+ { .dt_id = MT7988_ETHWARP_1,
+ .cal_offsets = { 0x20, 0x21, 0x22 } }
},
.num_lvts_sensor = 4,
.offset = 0x100,
@@ -1359,10 +1372,11 @@ static int lvts_resume(struct device *dev)
static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
{
- .cal_offset = { 0x04, 0x08 },
.lvts_sensor = {
- { .dt_id = MT8192_MCU_BIG_CPU0 },
- { .dt_id = MT8192_MCU_BIG_CPU1 }
+ { .dt_id = MT8192_MCU_BIG_CPU0,
+ .cal_offsets = { 0x04, 0x05, 0x06 } },
+ { .dt_id = MT8192_MCU_BIG_CPU1,
+ .cal_offsets = { 0x08, 0x09, 0x0a } }
},
.num_lvts_sensor = 2,
.offset = 0x0,
@@ -1370,10 +1384,11 @@ static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
.mode = LVTS_MSR_FILTERED_MODE,
},
{
- .cal_offset = { 0x0c, 0x10 },
.lvts_sensor = {
- { .dt_id = MT8192_MCU_BIG_CPU2 },
- { .dt_id = MT8192_MCU_BIG_CPU3 }
+ { .dt_id = MT8192_MCU_BIG_CPU2,
+ .cal_offsets = { 0x0c, 0x0d, 0x0e } },
+ { .dt_id = MT8192_MCU_BIG_CPU3,
+ .cal_offsets = { 0x10, 0x11, 0x12 } }
},
.num_lvts_sensor = 2,
.offset = 0x100,
@@ -1381,12 +1396,15 @@ static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
.mode = LVTS_MSR_FILTERED_MODE,
},
{
- .cal_offset = { 0x14, 0x18, 0x1c, 0x20 },
.lvts_sensor = {
- { .dt_id = MT8192_MCU_LITTLE_CPU0 },
- { .dt_id = MT8192_MCU_LITTLE_CPU1 },
- { .dt_id = MT8192_MCU_LITTLE_CPU2 },
- { .dt_id = MT8192_MCU_LITTLE_CPU3 }
+ { .dt_id = MT8192_MCU_LITTLE_CPU0,
+ .cal_offsets = { 0x14, 0x15, 0x16 } },
+ { .dt_id = MT8192_MCU_LITTLE_CPU1,
+ .cal_offsets = { 0x18, 0x19, 0x1a } },
+ { .dt_id = MT8192_MCU_LITTLE_CPU2,
+ .cal_offsets = { 0x1c, 0x1d, 0x1e } },
+ { .dt_id = MT8192_MCU_LITTLE_CPU3,
+ .cal_offsets = { 0x20, 0x21, 0x22 } }
},
.num_lvts_sensor = 4,
.offset = 0x200,
@@ -1396,42 +1414,47 @@ static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
};
static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
- {
- .cal_offset = { 0x24, 0x28 },
+ {
.lvts_sensor = {
- { .dt_id = MT8192_AP_VPU0 },
- { .dt_id = MT8192_AP_VPU1 }
+ { .dt_id = MT8192_AP_VPU0,
+ .cal_offsets = { 0x24, 0x25, 0x26 } },
+ { .dt_id = MT8192_AP_VPU1,
+ .cal_offsets = { 0x28, 0x29, 0x2a } }
},
.num_lvts_sensor = 2,
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
},
{
- .cal_offset = { 0x2c, 0x30 },
.lvts_sensor = {
- { .dt_id = MT8192_AP_GPU0 },
- { .dt_id = MT8192_AP_GPU1 }
+ { .dt_id = MT8192_AP_GPU0,
+ .cal_offsets = { 0x2c, 0x2d, 0x2e } },
+ { .dt_id = MT8192_AP_GPU1,
+ .cal_offsets = { 0x30, 0x31, 0x32 } }
},
.num_lvts_sensor = 2,
.offset = 0x100,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
},
{
- .cal_offset = { 0x34, 0x38 },
.lvts_sensor = {
- { .dt_id = MT8192_AP_INFRA },
- { .dt_id = MT8192_AP_CAM },
+ { .dt_id = MT8192_AP_INFRA,
+ .cal_offsets = { 0x34, 0x35, 0x36 } },
+ { .dt_id = MT8192_AP_CAM,
+ .cal_offsets = { 0x38, 0x39, 0x3a } },
},
.num_lvts_sensor = 2,
.offset = 0x200,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
},
{
- .cal_offset = { 0x3c, 0x40, 0x44 },
.lvts_sensor = {
- { .dt_id = MT8192_AP_MD0 },
- { .dt_id = MT8192_AP_MD1 },
- { .dt_id = MT8192_AP_MD2 }
+ { .dt_id = MT8192_AP_MD0,
+ .cal_offsets = { 0x3c, 0x3d, 0x3e } },
+ { .dt_id = MT8192_AP_MD1,
+ .cal_offsets = { 0x40, 0x41, 0x42 } },
+ { .dt_id = MT8192_AP_MD2,
+ .cal_offsets = { 0x44, 0x45, 0x46 } }
},
.num_lvts_sensor = 3,
.offset = 0x300,
@@ -1441,32 +1464,37 @@ static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = {
{
- .cal_offset = { 0x04, 0x07 },
.lvts_sensor = {
- { .dt_id = MT8195_MCU_BIG_CPU0 },
- { .dt_id = MT8195_MCU_BIG_CPU1 }
+ { .dt_id = MT8195_MCU_BIG_CPU0,
+ .cal_offsets = { 0x04, 0x05, 0x06 } },
+ { .dt_id = MT8195_MCU_BIG_CPU1,
+ .cal_offsets = { 0x07, 0x08, 0x09 } }
},
.num_lvts_sensor = 2,
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
{
- .cal_offset = { 0x0d, 0x10 },
.lvts_sensor = {
- { .dt_id = MT8195_MCU_BIG_CPU2 },
- { .dt_id = MT8195_MCU_BIG_CPU3 }
+ { .dt_id = MT8195_MCU_BIG_CPU2,
+ .cal_offsets = { 0x0d, 0x0e, 0x0f } },
+ { .dt_id = MT8195_MCU_BIG_CPU3,
+ .cal_offsets = { 0x10, 0x11, 0x12 } }
},
.num_lvts_sensor = 2,
.offset = 0x100,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
{
- .cal_offset = { 0x16, 0x19, 0x1c, 0x1f },
.lvts_sensor = {
- { .dt_id = MT8195_MCU_LITTLE_CPU0 },
- { .dt_id = MT8195_MCU_LITTLE_CPU1 },
- { .dt_id = MT8195_MCU_LITTLE_CPU2 },
- { .dt_id = MT8195_MCU_LITTLE_CPU3 }
+ { .dt_id = MT8195_MCU_LITTLE_CPU0,
+ .cal_offsets = { 0x16, 0x17, 0x18 } },
+ { .dt_id = MT8195_MCU_LITTLE_CPU1,
+ .cal_offsets = { 0x19, 0x1a, 0x1b } },
+ { .dt_id = MT8195_MCU_LITTLE_CPU2,
+ .cal_offsets = { 0x1c, 0x1d, 0x1e } },
+ { .dt_id = MT8195_MCU_LITTLE_CPU3,
+ .cal_offsets = { 0x1f, 0x20, 0x21 } }
},
.num_lvts_sensor = 4,
.offset = 0x200,
@@ -1475,42 +1503,47 @@ static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = {
};
static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = {
- {
- .cal_offset = { 0x25, 0x28 },
+ {
.lvts_sensor = {
- { .dt_id = MT8195_AP_VPU0 },
- { .dt_id = MT8195_AP_VPU1 }
+ { .dt_id = MT8195_AP_VPU0,
+ .cal_offsets = { 0x25, 0x26, 0x27 } },
+ { .dt_id = MT8195_AP_VPU1,
+ .cal_offsets = { 0x28, 0x29, 0x2a } }
},
.num_lvts_sensor = 2,
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
{
- .cal_offset = { 0x2e, 0x31 },
.lvts_sensor = {
- { .dt_id = MT8195_AP_GPU0 },
- { .dt_id = MT8195_AP_GPU1 }
+ { .dt_id = MT8195_AP_GPU0,
+ .cal_offsets = { 0x2e, 0x2f, 0x30 } },
+ { .dt_id = MT8195_AP_GPU1,
+ .cal_offsets = { 0x31, 0x32, 0x33 } }
},
.num_lvts_sensor = 2,
.offset = 0x100,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
{
- .cal_offset = { 0x37, 0x3a, 0x3d },
.lvts_sensor = {
- { .dt_id = MT8195_AP_VDEC },
- { .dt_id = MT8195_AP_IMG },
- { .dt_id = MT8195_AP_INFRA },
+ { .dt_id = MT8195_AP_VDEC,
+ .cal_offsets = { 0x37, 0x38, 0x39 } },
+ { .dt_id = MT8195_AP_IMG,
+ .cal_offsets = { 0x3a, 0x3b, 0x3c } },
+ { .dt_id = MT8195_AP_INFRA,
+ .cal_offsets = { 0x3d, 0x3e, 0x3f } }
},
.num_lvts_sensor = 3,
.offset = 0x200,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
{
- .cal_offset = { 0x43, 0x46 },
.lvts_sensor = {
- { .dt_id = MT8195_AP_CAM0 },
- { .dt_id = MT8195_AP_CAM1 }
+ { .dt_id = MT8195_AP_CAM0,
+ .cal_offsets = { 0x43, 0x44, 0x45 } },
+ { .dt_id = MT8195_AP_CAM1,
+ .cal_offsets = { 0x46, 0x47, 0x48 } }
},
.num_lvts_sensor = 2,
.offset = 0x300,
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 04/13] thermal/drivers/mediatek/lvts_thermal: guard against efuse data buffer overflow
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (2 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 03/13] thermal/drivers/mediatek/lvts_thermal: use offsets for every calibration byte Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 05/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8186 Nicolas Pitre
` (8 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
We don't want to silently fetch garbage past the actual buffer.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
drivers/thermal/mediatek/lvts_thermal.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index 2c346ea7c6..ed1888fb24 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -674,7 +674,8 @@ static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
*/
static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
const struct lvts_ctrl_data *lvts_ctrl_data,
- u8 *efuse_calibration)
+ u8 *efuse_calibration,
+ size_t calib_len)
{
int i;
@@ -682,6 +683,11 @@ static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl
const struct lvts_sensor_data *sensor =
&lvts_ctrl_data->lvts_sensor[i];
+ if (sensor->cal_offsets[0] >= calib_len ||
+ sensor->cal_offsets[1] >= calib_len ||
+ sensor->cal_offsets[2] >= calib_len)
+ return -EINVAL;
+
lvts_ctrl->calibration[i] =
(efuse_calibration[sensor->cal_offsets[0]] << 0) +
(efuse_calibration[sensor->cal_offsets[1]] << 8) +
@@ -791,7 +797,8 @@ static int lvts_ctrl_init(struct device *dev, struct lvts_domain *lvts_td,
ret = lvts_calibration_init(dev, &lvts_ctrl[i],
&lvts_data->lvts_ctrl[i],
- lvts_td->calib);
+ lvts_td->calib,
+ lvts_td->calib_len);
if (ret)
return ret;
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 05/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8186
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (3 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 04/13] thermal/drivers/mediatek/lvts_thermal: guard against efuse data buffer overflow Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-19 11:45 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 06/13] arm64: dts: mediatek: mt8186: add lvts definitions Nicolas Pitre
` (7 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Add LVTS thermal controller definition for MT8186.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
.../bindings/thermal/mediatek,lvts-thermal.yaml | 2 ++
include/dt-bindings/thermal/mediatek,lvts-thermal.h | 10 ++++++++++
2 files changed, 12 insertions(+)
diff --git a/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml b/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml
index e6665af52e..4173bae530 100644
--- a/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml
+++ b/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml
@@ -19,6 +19,7 @@ properties:
compatible:
enum:
- mediatek,mt7988-lvts-ap
+ - mediatek,mt8186-lvts
- mediatek,mt8192-lvts-ap
- mediatek,mt8192-lvts-mcu
- mediatek,mt8195-lvts-ap
@@ -75,6 +76,7 @@ allOf:
compatible:
contains:
enum:
+ - mediatek,mt8186-lvts
- mediatek,mt8195-lvts-ap
- mediatek,mt8195-lvts-mcu
then:
diff --git a/include/dt-bindings/thermal/mediatek,lvts-thermal.h b/include/dt-bindings/thermal/mediatek,lvts-thermal.h
index 997e2f5512..3197ca6087 100644
--- a/include/dt-bindings/thermal/mediatek,lvts-thermal.h
+++ b/include/dt-bindings/thermal/mediatek,lvts-thermal.h
@@ -16,6 +16,16 @@
#define MT7988_ETHWARP_0 6
#define MT7988_ETHWARP_1 7
+#define MT8186_TS1_0 0
+#define MT8186_TS1_1 1
+#define MT8186_TS1_2 2
+#define MT8186_TS1_3 3
+#define MT8186_TS2_0 4
+#define MT8186_TS2_1 5
+#define MT8186_TS3_0 6
+#define MT8186_TS3_1 7
+#define MT8186_TS3_2 8
+
#define MT8195_MCU_BIG_CPU0 0
#define MT8195_MCU_BIG_CPU1 1
#define MT8195_MCU_BIG_CPU2 2
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 06/13] arm64: dts: mediatek: mt8186: add lvts definitions
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (4 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 05/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8186 Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-19 11:47 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 07/13] thermal/drivers/mediatek/lvts_thermal: add MT8186 support Nicolas Pitre
` (6 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Values extracted from vendor source tree.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
arch/arm64/boot/dts/mediatek/mt8186.dtsi | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
index 2fec6fd1c1..7b7a517a41 100644
--- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
@@ -1355,6 +1355,18 @@ spi0: spi@1100a000 {
status = "disabled";
};
+ lvts: lvts@1100b000 {
+ compatible = "mediatek,mt8186-lvts";
+ #thermal-sensor-cells = <1>;
+ reg = <0 0x1100b000 0 0x1000>;
+ interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH 0>;
+ clocks = <&infracfg_ao CLK_INFRA_AO_THERM>;
+ clock-names = "lvts_clk";
+ resets = <&infracfg_ao MT8186_INFRA_THERMAL_CTRL_RST>;
+ nvmem-cells = <&lvts_e_data1 &lvts_e_data2>;
+ nvmem-cell-names = "e_data1","e_data2";
+ };
+
pwm0: pwm@1100e000 {
compatible = "mediatek,mt8186-disp-pwm", "mediatek,mt8183-disp-pwm";
reg = <0 0x1100e000 0 0x1000>;
@@ -1668,6 +1680,14 @@ efuse: efuse@11cb0000 {
#address-cells = <1>;
#size-cells = <1>;
+ lvts_e_data1: data1 {
+ reg = <0x1cc 0x14>;
+ };
+
+ lvts_e_data2: data1-1 {
+ reg = <0x2f8 0x14>;
+ };
+
gpu_speedbin: gpu-speedbin@59c {
reg = <0x59c 0x4>;
bits = <0 3>;
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 07/13] thermal/drivers/mediatek/lvts_thermal: add MT8186 support
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (5 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 06/13] arm64: dts: mediatek: mt8186: add lvts definitions Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-19 11:48 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 08/13] arm64: dts: mediatek: mt8186: add default thermal zones Nicolas Pitre
` (5 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Various values extracted from the vendor's kernel driver.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
drivers/thermal/mediatek/lvts_thermal.c | 67 +++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index ed1888fb24..e923d22c17 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -80,6 +80,8 @@
#define LVTS_SENSOR_MAX 4
#define LVTS_GOLDEN_TEMP_MAX 62
#define LVTS_GOLDEN_TEMP_DEFAULT 50
+#define LVTS_COEFF_A_MT8186 -204650
+#define LVTS_COEFF_B_MT8186 204650
#define LVTS_COEFF_A_MT8195 -250460
#define LVTS_COEFF_B_MT8195 250460
#define LVTS_COEFF_A_MT7988 -204650
@@ -92,6 +94,7 @@
#define LVTS_MSR_READ_WAIT_US (LVTS_MSR_READ_TIMEOUT_US / 2)
#define LVTS_HW_SHUTDOWN_MT7988 105000
+#define LVTS_HW_SHUTDOWN_MT8186 105000
#define LVTS_HW_SHUTDOWN_MT8192 105000
#define LVTS_HW_SHUTDOWN_MT8195 105000
@@ -1377,6 +1380,62 @@ static int lvts_resume(struct device *dev)
return 0;
}
+/*
+ * The MT8186 calibration data is stored as packed 3-byte little-endian
+ * values using a weird layout that makes sense only when viewed as a 32-bit
+ * hexadecimal word dump. Let's suppose SxBy where x = sensor number and
+ * y = byte number where the LSB is y=0. We then have:
+ *
+ * [S0B2-S0B1-S0B0-S1B2] [S1B1-S1B0-S2B2-S2B1] [S2B0-S3B2-S3B1-S3B0]
+ *
+ * However, when considering a byte stream, those appear as follows:
+ *
+ * [S1B2] [S0B0[ [S0B1] [S0B2] [S2B1] [S2B2] [S1B0] [S1B1] [S3B0] [S3B1] [S3B2] [S2B0]
+ *
+ * Hence the rather confusing offsets provided below.
+ */
+static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
+ {
+ .lvts_sensor = {
+ { .dt_id = MT8186_TS1_0,
+ .cal_offsets = { 5, 6, 7 } },
+ { .dt_id = MT8186_TS1_1,
+ .cal_offsets = { 10, 11, 4 } },
+ { .dt_id = MT8186_TS1_2,
+ .cal_offsets = { 15, 8, 9 } },
+ { .dt_id = MT8186_TS1_3,
+ .cal_offsets = { 12, 13, 14 } }
+ },
+ .num_lvts_sensor = 4,
+ .offset = 0x0,
+ .hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8186,
+ },
+ {
+ .lvts_sensor = {
+ { .dt_id = MT8186_TS2_0,
+ .cal_offsets = { 22, 23, 16 } },
+ { .dt_id = MT8186_TS2_1,
+ .cal_offsets = { 27, 20, 21 } }
+ },
+ .num_lvts_sensor = 2,
+ .offset = 0x100,
+ .hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8186,
+ },
+ {
+ .lvts_sensor = {
+ { .dt_id = MT8186_TS3_0,
+ .cal_offsets = { 29, 30, 31 } },
+ { .dt_id = MT8186_TS3_1,
+ .cal_offsets = { 34, 35, 28 } },
+ { .dt_id = MT8186_TS3_2,
+ .cal_offsets = { 39, 32, 33 } }
+ },
+ .num_lvts_sensor = 3,
+ .offset = 0x200,
+ .hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8186,
+ }
+};
+
static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
{
.lvts_sensor = {
@@ -1565,6 +1624,13 @@ static const struct lvts_data mt7988_lvts_ap_data = {
.temp_offset = LVTS_COEFF_B_MT7988,
};
+static const struct lvts_data mt8186_lvts_data = {
+ .lvts_ctrl = mt8186_lvts_data_ctrl,
+ .num_lvts_ctrl = ARRAY_SIZE(mt8186_lvts_data_ctrl),
+ .temp_factor = LVTS_COEFF_A_MT8186,
+ .temp_offset = LVTS_COEFF_B_MT8186,
+};
+
static const struct lvts_data mt8192_lvts_mcu_data = {
.lvts_ctrl = mt8192_lvts_mcu_data_ctrl,
.num_lvts_ctrl = ARRAY_SIZE(mt8192_lvts_mcu_data_ctrl),
@@ -1591,6 +1657,7 @@ static const struct lvts_data mt8195_lvts_ap_data = {
static const struct of_device_id lvts_of_match[] = {
{ .compatible = "mediatek,mt7988-lvts-ap", .data = &mt7988_lvts_ap_data },
+ { .compatible = "mediatek,mt8186-lvts", .data = &mt8186_lvts_data },
{ .compatible = "mediatek,mt8192-lvts-mcu", .data = &mt8192_lvts_mcu_data },
{ .compatible = "mediatek,mt8192-lvts-ap", .data = &mt8192_lvts_ap_data },
{ .compatible = "mediatek,mt8195-lvts-mcu", .data = &mt8195_lvts_mcu_data },
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 08/13] arm64: dts: mediatek: mt8186: add default thermal zones
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (6 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 07/13] thermal/drivers/mediatek/lvts_thermal: add MT8186 support Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-19 11:49 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 09/13] thermal/drivers/mediatek/lvts_thermal: provision for gt variable location Nicolas Pitre
` (4 subsequent siblings)
12 siblings, 1 reply; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Inspired by the vendor kernel but adapted to the upstream thermal
driver version.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
arch/arm64/boot/dts/mediatek/mt8186.dtsi | 236 +++++++++++++++++++++++
1 file changed, 236 insertions(+)
diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
index 7b7a517a41..9865926459 100644
--- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
@@ -13,6 +13,8 @@
#include <dt-bindings/power/mt8186-power.h>
#include <dt-bindings/phy/phy.h>
#include <dt-bindings/reset/mt8186-resets.h>
+#include <dt-bindings/thermal/thermal.h>
+#include <dt-bindings/thermal/mediatek,lvts-thermal.h>
/ {
compatible = "mediatek,mt8186";
@@ -2115,4 +2117,238 @@ larb19: smi@1c10f000 {
power-domains = <&spm MT8186_POWER_DOMAIN_IPE>;
};
};
+
+ thermal_zones: thermal-zones {
+ cluster0-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts MT8186_TS1_0>;
+
+ trips {
+ cluster0_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cluster0_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cluster0_alert>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ cluster1-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts MT8186_TS1_1>;
+
+ trips {
+ cluster1_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cluster1_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cluster1_alert>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ cluster2-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts MT8186_TS1_2>;
+
+ trips {
+ cluster2_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cluster2_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cluster2_alert>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ cam-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts MT8186_TS1_3>;
+
+ trips {
+ cam_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cam_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ nna-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts MT8186_TS3_0>;
+
+ trips {
+ nna_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ nna_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ adsp-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts MT8186_TS3_1>;
+
+ trips {
+ adsp_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ adsp_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ mfg-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts MT8186_TS3_2>;
+
+ trips {
+ mfg_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ mfg_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ cpu_big0-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts MT8186_TS2_0>;
+
+ trips {
+ cpu_big0_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cpu_big0_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cpu_big0_alert>;
+ cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ cpu_big1-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts MT8186_TS2_1>;
+
+ trips {
+ cpu_big1_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cpu_big1_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cpu_big1_alert>;
+ cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+ };
};
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 09/13] thermal/drivers/mediatek/lvts_thermal: provision for gt variable location
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (7 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 08/13] arm64: dts: mediatek: mt8186: add default thermal zones Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 10/13] thermal/drivers/mediatek/lvts_thermal: allow early empty sensor slots Nicolas Pitre
` (3 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
The golden temperature calibration value in nvram is not always the
3rd byte. A future commit will prove this assumption wrong.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
drivers/thermal/mediatek/lvts_thermal.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index e923d22c17..b20b70fd36 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -121,6 +121,7 @@ struct lvts_data {
int num_lvts_ctrl;
int temp_factor;
int temp_offset;
+ int gt_calib_bit_offset;
};
struct lvts_sensor {
@@ -748,20 +749,21 @@ static int lvts_calibration_read(struct device *dev, struct lvts_domain *lvts_td
return 0;
}
-static int lvts_golden_temp_init(struct device *dev, u8 *calib, int temp_offset)
+static int lvts_golden_temp_init(struct device *dev, u8 *calib,
+ const struct lvts_data *lvts_data)
{
u32 gt;
/*
- * The golden temp information is contained in the 4th byte (index = 3)
- * of efuse data.
+ * The golden temp information is contained in the first 32-bit
+ * word of efuse data at a specific bit offset.
*/
- gt = calib[3];
+ gt = (((u32 *)calib)[0] >> lvts_data->gt_calib_bit_offset) & 0xff;
if (gt && gt < LVTS_GOLDEN_TEMP_MAX)
golden_temp = gt;
- golden_temp_offset = golden_temp * 500 + temp_offset;
+ golden_temp_offset = golden_temp * 500 + lvts_data->temp_offset;
return 0;
}
@@ -780,7 +782,7 @@ static int lvts_ctrl_init(struct device *dev, struct lvts_domain *lvts_td,
if (ret)
return ret;
- ret = lvts_golden_temp_init(dev, lvts_td->calib, lvts_data->temp_offset);
+ ret = lvts_golden_temp_init(dev, lvts_td->calib, lvts_data);
if (ret)
return ret;
@@ -1622,6 +1624,7 @@ static const struct lvts_data mt7988_lvts_ap_data = {
.num_lvts_ctrl = ARRAY_SIZE(mt7988_lvts_ap_data_ctrl),
.temp_factor = LVTS_COEFF_A_MT7988,
.temp_offset = LVTS_COEFF_B_MT7988,
+ .gt_calib_bit_offset = 24,
};
static const struct lvts_data mt8186_lvts_data = {
@@ -1629,16 +1632,19 @@ static const struct lvts_data mt8186_lvts_data = {
.num_lvts_ctrl = ARRAY_SIZE(mt8186_lvts_data_ctrl),
.temp_factor = LVTS_COEFF_A_MT8186,
.temp_offset = LVTS_COEFF_B_MT8186,
+ .gt_calib_bit_offset = 24,
};
static const struct lvts_data mt8192_lvts_mcu_data = {
.lvts_ctrl = mt8192_lvts_mcu_data_ctrl,
.num_lvts_ctrl = ARRAY_SIZE(mt8192_lvts_mcu_data_ctrl),
+ .gt_calib_bit_offset = 24,
};
static const struct lvts_data mt8192_lvts_ap_data = {
.lvts_ctrl = mt8192_lvts_ap_data_ctrl,
.num_lvts_ctrl = ARRAY_SIZE(mt8192_lvts_ap_data_ctrl),
+ .gt_calib_bit_offset = 24,
};
static const struct lvts_data mt8195_lvts_mcu_data = {
@@ -1646,6 +1652,7 @@ static const struct lvts_data mt8195_lvts_mcu_data = {
.num_lvts_ctrl = ARRAY_SIZE(mt8195_lvts_mcu_data_ctrl),
.temp_factor = LVTS_COEFF_A_MT8195,
.temp_offset = LVTS_COEFF_B_MT8195,
+ .gt_calib_bit_offset = 24,
};
static const struct lvts_data mt8195_lvts_ap_data = {
@@ -1653,6 +1660,7 @@ static const struct lvts_data mt8195_lvts_ap_data = {
.num_lvts_ctrl = ARRAY_SIZE(mt8195_lvts_ap_data_ctrl),
.temp_factor = LVTS_COEFF_A_MT8195,
.temp_offset = LVTS_COEFF_B_MT8195,
+ .gt_calib_bit_offset = 24,
};
static const struct of_device_id lvts_of_match[] = {
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 10/13] thermal/drivers/mediatek/lvts_thermal: allow early empty sensor slots
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (8 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 09/13] thermal/drivers/mediatek/lvts_thermal: provision for gt variable location Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 11/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8188 Nicolas Pitre
` (2 subsequent siblings)
12 siblings, 0 replies; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Some systems don't always populate sensor controller slots starting
at slot 0. Use a bitmap instead of a count to indicate valid sensor
slots. Also create a pretty iterator for that.
About that iterator: it causes checkpatch to complain with "ERROR:
Macros with multiple statements should be enclosed in a do - while
loop". However this is not possible here. And many similar iterators
do exist using the same form in the tree already.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
drivers/thermal/mediatek/lvts_thermal.c | 64 ++++++++++++++-----------
1 file changed, 37 insertions(+), 27 deletions(-)
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index b20b70fd36..a23a93fc82 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -110,12 +110,24 @@ struct lvts_sensor_data {
struct lvts_ctrl_data {
struct lvts_sensor_data lvts_sensor[LVTS_SENSOR_MAX];
+ u8 valid_sensor_mask;
int hw_tshut_temp;
- int num_lvts_sensor;
int offset;
int mode;
};
+#define VALID_SENSOR_MAP(s0, s1, s2, s3) \
+ .valid_sensor_mask = (((s0) ? BIT(0) : 0) | \
+ ((s1) ? BIT(1) : 0) | \
+ ((s2) ? BIT(2) : 0) | \
+ ((s3) ? BIT(3) : 0))
+
+#define lvts_for_each_valid_sensor(i, lvts_ctrl_data) \
+ for ((i) = 0; (i) < LVTS_SENSOR_MAX; (i)++) \
+ if (!((lvts_ctrl_data)->valid_sensor_mask & BIT(i))) \
+ continue; \
+ else
+
struct lvts_data {
const struct lvts_ctrl_data *lvts_ctrl;
int num_lvts_ctrl;
@@ -139,7 +151,6 @@ struct lvts_ctrl {
const struct lvts_data *lvts_data;
u32 calibration[LVTS_SENSOR_MAX];
u32 hw_tshut_raw_temp;
- int num_lvts_sensor;
int mode;
void __iomem *base;
int low_thresh;
@@ -351,7 +362,7 @@ static bool lvts_should_update_thresh(struct lvts_ctrl *lvts_ctrl, int high)
if (high > lvts_ctrl->high_thresh)
return true;
- for (i = 0; i < lvts_ctrl->num_lvts_sensor; i++)
+ lvts_for_each_valid_sensor(i, lvts_ctrl->lvts_data->lvts_ctrl)
if (lvts_ctrl->sensors[i].high_thresh == lvts_ctrl->high_thresh
&& lvts_ctrl->sensors[i].low_thresh == lvts_ctrl->low_thresh)
return false;
@@ -555,6 +566,7 @@ static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
const struct lvts_ctrl_data *lvts_ctrl_data)
{
struct lvts_sensor *lvts_sensor = lvts_ctrl->sensors;
+
void __iomem *msr_regs[] = {
LVTS_MSR0(lvts_ctrl->base),
LVTS_MSR1(lvts_ctrl->base),
@@ -571,7 +583,7 @@ static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
int i;
- for (i = 0; i < lvts_ctrl_data->num_lvts_sensor; i++) {
+ lvts_for_each_valid_sensor(i, lvts_ctrl_data) {
int dt_id = lvts_ctrl_data->lvts_sensor[i].dt_id;
@@ -611,8 +623,6 @@ static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
lvts_sensor[i].high_thresh = INT_MIN;
};
- lvts_ctrl->num_lvts_sensor = lvts_ctrl_data->num_lvts_sensor;
-
return 0;
}
@@ -683,7 +693,7 @@ static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl
{
int i;
- for (i = 0; i < lvts_ctrl_data->num_lvts_sensor; i++) {
+ lvts_for_each_valid_sensor(i, lvts_ctrl_data) {
const struct lvts_sensor_data *sensor =
&lvts_ctrl_data->lvts_sensor[i];
@@ -1106,7 +1116,7 @@ static int lvts_ctrl_start(struct device *dev, struct lvts_ctrl *lvts_ctrl)
u32 *sensor_bitmap = lvts_ctrl->mode == LVTS_MSR_IMMEDIATE_MODE ?
sensor_imm_bitmap : sensor_filt_bitmap;
- for (i = 0; i < lvts_ctrl->num_lvts_sensor; i++) {
+ lvts_for_each_valid_sensor(i, lvts_ctrl->lvts_data->lvts_ctrl) {
int dt_id = lvts_sensors[i].dt_id;
@@ -1329,7 +1339,7 @@ static const struct lvts_ctrl_data mt7988_lvts_ap_data_ctrl[] = {
{ .dt_id = MT7988_ETH2P5G_1,
.cal_offsets = { 0x0c, 0x0d, 0x0e } }
},
- .num_lvts_sensor = 4,
+ VALID_SENSOR_MAP(1, 1, 1, 1),
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT7988,
},
@@ -1344,7 +1354,7 @@ static const struct lvts_ctrl_data mt7988_lvts_ap_data_ctrl[] = {
{ .dt_id = MT7988_ETHWARP_1,
.cal_offsets = { 0x20, 0x21, 0x22 } }
},
- .num_lvts_sensor = 4,
+ VALID_SENSOR_MAP(1, 1, 1, 1),
.offset = 0x100,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT7988,
}
@@ -1408,7 +1418,7 @@ static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
{ .dt_id = MT8186_TS1_3,
.cal_offsets = { 12, 13, 14 } }
},
- .num_lvts_sensor = 4,
+ VALID_SENSOR_MAP(1, 1, 1, 1),
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8186,
},
@@ -1419,7 +1429,7 @@ static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
{ .dt_id = MT8186_TS2_1,
.cal_offsets = { 27, 20, 21 } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x100,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8186,
},
@@ -1432,7 +1442,7 @@ static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
{ .dt_id = MT8186_TS3_2,
.cal_offsets = { 39, 32, 33 } }
},
- .num_lvts_sensor = 3,
+ VALID_SENSOR_MAP(1, 1, 1, 0),
.offset = 0x200,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8186,
}
@@ -1446,7 +1456,7 @@ static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
{ .dt_id = MT8192_MCU_BIG_CPU1,
.cal_offsets = { 0x08, 0x09, 0x0a } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
.mode = LVTS_MSR_FILTERED_MODE,
@@ -1458,7 +1468,7 @@ static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
{ .dt_id = MT8192_MCU_BIG_CPU3,
.cal_offsets = { 0x10, 0x11, 0x12 } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x100,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
.mode = LVTS_MSR_FILTERED_MODE,
@@ -1474,7 +1484,7 @@ static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
{ .dt_id = MT8192_MCU_LITTLE_CPU3,
.cal_offsets = { 0x20, 0x21, 0x22 } }
},
- .num_lvts_sensor = 4,
+ VALID_SENSOR_MAP(1, 1, 1, 1),
.offset = 0x200,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
.mode = LVTS_MSR_FILTERED_MODE,
@@ -1489,7 +1499,7 @@ static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
{ .dt_id = MT8192_AP_VPU1,
.cal_offsets = { 0x28, 0x29, 0x2a } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
},
@@ -1500,7 +1510,7 @@ static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
{ .dt_id = MT8192_AP_GPU1,
.cal_offsets = { 0x30, 0x31, 0x32 } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x100,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
},
@@ -1511,7 +1521,7 @@ static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
{ .dt_id = MT8192_AP_CAM,
.cal_offsets = { 0x38, 0x39, 0x3a } },
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x200,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
},
@@ -1524,7 +1534,7 @@ static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = {
{ .dt_id = MT8192_AP_MD2,
.cal_offsets = { 0x44, 0x45, 0x46 } }
},
- .num_lvts_sensor = 3,
+ VALID_SENSOR_MAP(1, 1, 1, 0),
.offset = 0x300,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8192,
}
@@ -1538,7 +1548,7 @@ static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = {
{ .dt_id = MT8195_MCU_BIG_CPU1,
.cal_offsets = { 0x07, 0x08, 0x09 } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
@@ -1549,7 +1559,7 @@ static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = {
{ .dt_id = MT8195_MCU_BIG_CPU3,
.cal_offsets = { 0x10, 0x11, 0x12 } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x100,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
@@ -1564,7 +1574,7 @@ static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = {
{ .dt_id = MT8195_MCU_LITTLE_CPU3,
.cal_offsets = { 0x1f, 0x20, 0x21 } }
},
- .num_lvts_sensor = 4,
+ VALID_SENSOR_MAP(1, 1, 1, 1),
.offset = 0x200,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
}
@@ -1578,7 +1588,7 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = {
{ .dt_id = MT8195_AP_VPU1,
.cal_offsets = { 0x28, 0x29, 0x2a } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x0,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
@@ -1589,7 +1599,7 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = {
{ .dt_id = MT8195_AP_GPU1,
.cal_offsets = { 0x31, 0x32, 0x33 } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x100,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
@@ -1602,7 +1612,7 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = {
{ .dt_id = MT8195_AP_INFRA,
.cal_offsets = { 0x3d, 0x3e, 0x3f } }
},
- .num_lvts_sensor = 3,
+ VALID_SENSOR_MAP(1, 1, 1, 0),
.offset = 0x200,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
},
@@ -1613,7 +1623,7 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = {
{ .dt_id = MT8195_AP_CAM1,
.cal_offsets = { 0x46, 0x47, 0x48 } }
},
- .num_lvts_sensor = 2,
+ VALID_SENSOR_MAP(1, 1, 0, 0),
.offset = 0x300,
.hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8195,
}
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 11/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8188
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (9 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 10/13] thermal/drivers/mediatek/lvts_thermal: allow early empty sensor slots Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 12/13] thermal/drivers/mediatek/lvts_thermal: add MT8188 support Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 13/13] arm64: dts: mediatek: mt8188: add default thermal zones Nicolas Pitre
12 siblings, 0 replies; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Add LVTS thermal controller definition for MT8188.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
.../bindings/thermal/mediatek,lvts-thermal.yaml | 4 ++++
.../dt-bindings/thermal/mediatek,lvts-thermal.h | 16 ++++++++++++++++
2 files changed, 20 insertions(+)
diff --git a/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml b/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml
index 4173bae530..331cf4e662 100644
--- a/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml
+++ b/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml
@@ -20,6 +20,8 @@ properties:
enum:
- mediatek,mt7988-lvts-ap
- mediatek,mt8186-lvts
+ - mediatek,mt8188-lvts-ap
+ - mediatek,mt8188-lvts-mcu
- mediatek,mt8192-lvts-ap
- mediatek,mt8192-lvts-mcu
- mediatek,mt8195-lvts-ap
@@ -61,6 +63,8 @@ allOf:
compatible:
contains:
enum:
+ - mediatek,mt8188-lvts-ap
+ - mediatek,mt8188-lvts-mcu
- mediatek,mt8192-lvts-ap
- mediatek,mt8192-lvts-mcu
then:
diff --git a/include/dt-bindings/thermal/mediatek,lvts-thermal.h b/include/dt-bindings/thermal/mediatek,lvts-thermal.h
index 3197ca6087..04fa9d7821 100644
--- a/include/dt-bindings/thermal/mediatek,lvts-thermal.h
+++ b/include/dt-bindings/thermal/mediatek,lvts-thermal.h
@@ -26,6 +26,22 @@
#define MT8186_TS3_1 7
#define MT8186_TS3_2 8
+#define MT8188_MCU_TS1_0 0
+#define MT8188_MCU_TS1_1 1
+#define MT8188_MCU_TS1_2 2
+#define MT8188_MCU_TS1_3 3
+#define MT8188_MCU_TS2_0 4
+#define MT8188_MCU_TS2_1 5
+
+#define MT8188_AP_TS3_1 0
+#define MT8188_AP_TS4_0 1
+#define MT8188_AP_TS4_1 2
+#define MT8188_AP_TS4_2 3
+#define MT8188_AP_TS5_0 4
+#define MT8188_AP_TS5_1 5
+#define MT8188_AP_TS6_0 6
+#define MT8188_AP_TS6_1 7
+
#define MT8195_MCU_BIG_CPU0 0
#define MT8195_MCU_BIG_CPU1 1
#define MT8195_MCU_BIG_CPU2 2
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 12/13] thermal/drivers/mediatek/lvts_thermal: add MT8188 support
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (10 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 11/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8188 Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
2024-03-19 11:51 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 13/13] arm64: dts: mediatek: mt8188: add default thermal zones Nicolas Pitre
12 siblings, 1 reply; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Various values extracted from the vendor's kernel driver.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
arch/arm64/boot/dts/mediatek/mt8188.dtsi | 35 ++++++++
drivers/thermal/mediatek/lvts_thermal.c | 102 +++++++++++++++++++++++
2 files changed, 137 insertions(+)
diff --git a/arch/arm64/boot/dts/mediatek/mt8188.dtsi b/arch/arm64/boot/dts/mediatek/mt8188.dtsi
index b4315c9214..5a3c58a77c 100644
--- a/arch/arm64/boot/dts/mediatek/mt8188.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8188.dtsi
@@ -11,6 +11,7 @@
#include <dt-bindings/phy/phy.h>
#include <dt-bindings/pinctrl/mediatek,mt8188-pinfunc.h>
#include <dt-bindings/power/mediatek,mt8188-power.h>
+#include <dt-bindings/reset/mt8188-resets.h>
/ {
compatible = "mediatek,mt8188";
@@ -357,6 +358,7 @@ infracfg_ao: syscon@10001000 {
compatible = "mediatek,mt8188-infracfg-ao", "syscon";
reg = <0 0x10001000 0 0x1000>;
#clock-cells = <1>;
+ #reset-cells = <1>;
};
pericfg: syscon@10003000 {
@@ -491,6 +493,17 @@ spi0: spi@1100a000 {
status = "disabled";
};
+ lvts_ap: thermal-sensor@1100b000 {
+ compatible = "mediatek,mt8188-lvts-ap";
+ reg = <0 0x1100b000 0 0x1000>;
+ interrupts = <GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH 0>;
+ clocks = <&infracfg_ao CLK_INFRA_AO_THERM>;
+ resets = <&infracfg_ao MT8188_INFRA_RST1_THERMAL_CTRL_RST>;
+ nvmem-cells = <&lvts_efuse_data1>;
+ nvmem-cell-names = "lvts_calib_data1";
+ #thermal-sensor-cells = <1>;
+ };
+
spi1: spi@11010000 {
compatible = "mediatek,mt8188-spi-ipm", "mediatek,spi-ipm";
#address-cells = <1>;
@@ -604,6 +617,17 @@ mmc1: mmc@11240000 {
status = "disabled";
};
+ lvts_mcu: thermal-sensor@11278000 {
+ compatible = "mediatek,mt8188-lvts-mcu";
+ reg = <0 0x11278000 0 0x1000>;
+ interrupts = <GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH 0>;
+ clocks = <&infracfg_ao CLK_INFRA_AO_THERM>;
+ resets = <&infracfg_ao MT8188_INFRA_RST1_THERMAL_MCU_RST>;
+ nvmem-cells = <&lvts_efuse_data1>;
+ nvmem-cell-names = "lvts_calib_data1";
+ #thermal-sensor-cells = <1>;
+ };
+
i2c0: i2c@11280000 {
compatible = "mediatek,mt8188-i2c";
reg = <0 0x11280000 0 0x1000>,
@@ -827,6 +851,17 @@ imp_iic_wrap_en: clock-controller@11ec2000 {
#clock-cells = <1>;
};
+ efuse: efuse@11f20000 {
+ compatible = "mediatek,mt8188-efuse", "mediatek,efuse";
+ reg = <0 0x11f20000 0 0x1000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ lvts_efuse_data1: lvts1-calib@1ac {
+ reg = <0x1ac 0x40>;
+ };
+ };
+
mfgcfg: clock-controller@13fbf000 {
compatible = "mediatek,mt8188-mfgcfg";
reg = <0 0x13fbf000 0 0x1000>;
diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
index a23a93fc82..46882df640 100644
--- a/drivers/thermal/mediatek/lvts_thermal.c
+++ b/drivers/thermal/mediatek/lvts_thermal.c
@@ -1448,6 +1448,90 @@ static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
}
};
+static const struct lvts_ctrl_data mt8188_lvts_mcu_data_ctrl[] = {
+ {
+ .lvts_sensor = {
+ { .dt_id = MT8188_MCU_TS1_0,
+ .cal_offsets = { 22, 23, 24 } },
+ { .dt_id = MT8188_MCU_TS1_1,
+ .cal_offsets = { 25, 26, 27 } },
+ { .dt_id = MT8188_MCU_TS1_2,
+ .cal_offsets = { 28, 29, 30 } },
+ { .dt_id = MT8188_MCU_TS1_3,
+ .cal_offsets = { 31, 32, 33 } },
+ },
+ VALID_SENSOR_MAP(1, 1, 1, 1),
+ .offset = 0x0,
+ .hw_tshut_temp = 117000,
+ .mode = LVTS_MSR_FILTERED_MODE,
+ },
+ {
+ .lvts_sensor = {
+ { .dt_id = MT8188_MCU_TS2_0,
+ .cal_offsets = { 34, 35, 36 } },
+ { .dt_id = MT8188_MCU_TS2_1,
+ .cal_offsets = { 37, 38, 39 } },
+ },
+ VALID_SENSOR_MAP(1, 1, 0, 0),
+ .offset = 0x100,
+ .hw_tshut_temp = 117000,
+ .mode = LVTS_MSR_FILTERED_MODE,
+ }
+};
+
+static const struct lvts_ctrl_data mt8188_lvts_ap_data_ctrl[] = {
+ {
+ .lvts_sensor = {
+
+ { /* unused */ },
+ { .dt_id = MT8188_AP_TS3_1,
+ .cal_offsets = { 40, 41, 42 } },
+ },
+ VALID_SENSOR_MAP(0, 1, 0, 0),
+ .offset = 0x0,
+ .hw_tshut_temp = 117000,
+ .mode = LVTS_MSR_FILTERED_MODE,
+ },
+ {
+ .lvts_sensor = {
+ { .dt_id = MT8188_AP_TS4_0,
+ .cal_offsets = { 43, 44, 45 } },
+ { .dt_id = MT8188_AP_TS4_1,
+ .cal_offsets = { 46, 47, 48 } },
+ { .dt_id = MT8188_AP_TS4_2,
+ .cal_offsets = { 49, 50, 51 } },
+ },
+ VALID_SENSOR_MAP(1, 1, 1, 0),
+ .offset = 0x100,
+ .hw_tshut_temp = 117000,
+ .mode = LVTS_MSR_FILTERED_MODE,
+ },
+ {
+ .lvts_sensor = {
+ { .dt_id = MT8188_AP_TS5_0,
+ .cal_offsets = { 52, 53, 54 } },
+ { .dt_id = MT8188_AP_TS5_1,
+ .cal_offsets = { 55, 56, 57 } },
+ },
+ VALID_SENSOR_MAP(1, 1, 0, 0),
+ .offset = 0x200,
+ .hw_tshut_temp = 117000,
+ .mode = LVTS_MSR_FILTERED_MODE,
+ },
+ {
+ .lvts_sensor = {
+ { .dt_id = MT8188_AP_TS6_0,
+ .cal_offsets = { 58, 59, 60 } },
+ { .dt_id = MT8188_AP_TS6_1,
+ .cal_offsets = { 61, 62, 63 } },
+ },
+ VALID_SENSOR_MAP(1, 1, 0, 0),
+ .offset = 0x300,
+ .hw_tshut_temp = 117000,
+ .mode = LVTS_MSR_FILTERED_MODE,
+ }
+};
+
static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
{
.lvts_sensor = {
@@ -1645,6 +1729,22 @@ static const struct lvts_data mt8186_lvts_data = {
.gt_calib_bit_offset = 24,
};
+static const struct lvts_data mt8188_lvts_mcu_data = {
+ .lvts_ctrl = mt8188_lvts_mcu_data_ctrl,
+ .num_lvts_ctrl = ARRAY_SIZE(mt8188_lvts_mcu_data_ctrl),
+ .temp_factor = -250460,
+ .temp_offset = 250460,
+ .gt_calib_bit_offset = 20,
+};
+
+static const struct lvts_data mt8188_lvts_ap_data = {
+ .lvts_ctrl = mt8188_lvts_ap_data_ctrl,
+ .num_lvts_ctrl = ARRAY_SIZE(mt8188_lvts_ap_data_ctrl),
+ .temp_factor = -250460,
+ .temp_offset = 250460,
+ .gt_calib_bit_offset = 20,
+};
+
static const struct lvts_data mt8192_lvts_mcu_data = {
.lvts_ctrl = mt8192_lvts_mcu_data_ctrl,
.num_lvts_ctrl = ARRAY_SIZE(mt8192_lvts_mcu_data_ctrl),
@@ -1676,6 +1776,8 @@ static const struct lvts_data mt8195_lvts_ap_data = {
static const struct of_device_id lvts_of_match[] = {
{ .compatible = "mediatek,mt7988-lvts-ap", .data = &mt7988_lvts_ap_data },
{ .compatible = "mediatek,mt8186-lvts", .data = &mt8186_lvts_data },
+ { .compatible = "mediatek,mt8188-lvts-mcu", .data = &mt8188_lvts_mcu_data },
+ { .compatible = "mediatek,mt8188-lvts-ap", .data = &mt8188_lvts_ap_data },
{ .compatible = "mediatek,mt8192-lvts-mcu", .data = &mt8192_lvts_mcu_data },
{ .compatible = "mediatek,mt8192-lvts-ap", .data = &mt8192_lvts_ap_data },
{ .compatible = "mediatek,mt8195-lvts-mcu", .data = &mt8195_lvts_mcu_data },
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v2 13/13] arm64: dts: mediatek: mt8188: add default thermal zones
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
` (11 preceding siblings ...)
2024-03-18 21:22 ` [PATCH v2 12/13] thermal/drivers/mediatek/lvts_thermal: add MT8188 support Nicolas Pitre
@ 2024-03-18 21:22 ` Nicolas Pitre
12 siblings, 0 replies; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-18 21:22 UTC (permalink / raw)
To: Daniel Lezcano, linux-pm, linux-mediatek, devicetree; +Cc: Nicolas Pitre
From: Nicolas Pitre <npitre@baylibre.com>
Inspired by the vendor kernel but adapted to the upstream thermal
driver version.
Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
---
arch/arm64/boot/dts/mediatek/mt8188.dtsi | 348 +++++++++++++++++++++++
1 file changed, 348 insertions(+)
diff --git a/arch/arm64/boot/dts/mediatek/mt8188.dtsi b/arch/arm64/boot/dts/mediatek/mt8188.dtsi
index 5a3c58a77c..ea90ad4baa 100644
--- a/arch/arm64/boot/dts/mediatek/mt8188.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8188.dtsi
@@ -12,6 +12,8 @@
#include <dt-bindings/pinctrl/mediatek,mt8188-pinfunc.h>
#include <dt-bindings/power/mediatek,mt8188-power.h>
#include <dt-bindings/reset/mt8188-resets.h>
+#include <dt-bindings/thermal/thermal.h>
+#include <dt-bindings/thermal/mediatek,lvts-thermal.h>
/ {
compatible = "mediatek,mt8188";
@@ -311,6 +313,352 @@ psci {
method = "smc";
};
+ thermal_zones: thermal-zones {
+ cluster0-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_mcu MT8188_MCU_TS1_0>;
+
+ trips {
+ cluster0_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cluster0_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cluster0_alert>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ cluster1-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_mcu MT8188_MCU_TS1_1>;
+
+ trips {
+ cluster1_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cluster1_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cluster1_alert>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ cluster2-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_mcu MT8188_MCU_TS1_2>;
+
+ trips {
+ cluster2_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cluster2_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cluster2_alert>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ cluster3-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_mcu MT8188_MCU_TS1_3>;
+
+ trips {
+ cluster3_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cluster3_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cluster3_alert>;
+ cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ cpu_big0-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_mcu MT8188_MCU_TS2_0>;
+
+ trips {
+ cpu_big0_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cpu_big0_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cpu_big0_alert>;
+ cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ cpu_big1-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_mcu MT8188_MCU_TS2_1>;
+
+ trips {
+ cpu_big1_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cpu_big1_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&cpu_big1_alert>;
+ cooling-device = <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>,
+ <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+ };
+ };
+ };
+
+ apu-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_ap MT8188_AP_TS3_1>;
+
+ trips {
+ apu_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ apu_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ gpu1-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_ap MT8188_AP_TS4_0>;
+
+ trips {
+ gpu1_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ gpu1_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ gpu2-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_ap MT8188_AP_TS4_1>;
+
+ trips {
+ gpu2_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ gpu2_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ soc1-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_ap MT8188_AP_TS4_2>;
+
+ trips {
+ soc1_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ soc1_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ soc2-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_ap MT8188_AP_TS5_0>;
+
+ trips {
+ soc2_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ soc2_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ soc3-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_ap MT8188_AP_TS5_1>;
+
+ trips {
+ soc3_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ soc3_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ cam1-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_ap MT8188_AP_TS6_0>;
+
+ trips {
+ cam1_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cam1_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ cam21-thermal {
+ polling-delay = <1000>;
+ polling-delay-passive = <250>;
+ thermal-sensors = <&lvts_ap MT8188_AP_TS6_1>;
+
+ trips {
+ cam2_alert: trip-alert {
+ temperature = <85000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ cam2_crit: trip-crit {
+ temperature = <100000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+ };
+
timer: timer {
compatible = "arm,armv8-timer";
interrupt-parent = <&gic>;
--
2.44.0
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH v2 01/13] thermal/drivers/mediatek/lvts_thermal: retrieve all calibration bytes
2024-03-18 21:22 ` [PATCH v2 01/13] thermal/drivers/mediatek/lvts_thermal: retrieve all calibration bytes Nicolas Pitre
@ 2024-03-19 11:40 ` AngeloGioacchino Del Regno
2024-03-20 15:32 ` Rob Herring
0 siblings, 1 reply; 23+ messages in thread
From: AngeloGioacchino Del Regno @ 2024-03-19 11:40 UTC (permalink / raw)
To: Nicolas Pitre, Daniel Lezcano, linux-pm, linux-mediatek,
devicetree
Cc: Nicolas Pitre
Il 18/03/24 22:22, Nicolas Pitre ha scritto:
> From: Nicolas Pitre <npitre@baylibre.com>
>
> Calibration values are 24-bit wide. Those values so far appear to span
> only 16 bits but let's not push our luck.
>
I wonder how much feedback you got on v1 - I didn't even look and will not lose
time with that - but regardless, if you don't add the right people to the Cc field,
I really don't think that you'll ever get your patches reviewed (and probably also
not accepted).
That -- especially if you don't even Cc all the relevant maintainers...!
Please read:
https://www.kernel.org/doc/html/latest/process/submitting-patches.html
P.S.:
scripts/get_maintainer.pl lvts-8186-8188-patches.patch
"Rafael J. Wysocki" <rafael@kernel.org> (supporter:THERMAL)
Daniel Lezcano <daniel.lezcano@linaro.org> (supporter:THERMAL,commit_signer:21/22=95%)
Zhang Rui <rui.zhang@intel.com> (reviewer:THERMAL)
Lukasz Luba <lukasz.luba@arm.com> (reviewer:THERMAL)
Rob Herring <robh@kernel.org> (maintainer:OPEN FIRMWARE AND FLATTENED DEVICE TREE
BINDINGS)
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org> (maintainer:OPEN FIRMWARE
AND FLATTENED DEVICE TREE BINDINGS)
Conor Dooley <conor+dt@kernel.org> (maintainer:OPEN FIRMWARE AND FLATTENED DEVICE
TREE BINDINGS)
Matthias Brugger <matthias.bgg@gmail.com> (maintainer:ARM/Mediatek SoC
support,commit_signer:4/22=18%)
AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
(maintainer:ARM/Mediatek SoC support,commit_signer:13/22=59%)
Alexandre Mergnat <amergnat@baylibre.com> (commit_signer:11/22=50%)
"Nícolas F. R. A. Prado" <nfraprado@collabora.com>
(commit_signer:10/22=45%,authored:7/22=32%,added_lines:128/453=28%,removed_lines:45/98=46%)
Balsam CHIHI <bchihi@baylibre.com>
(authored:4/22=18%,added_lines:235/453=52%,removed_lines:22/98=22%,in file)
Chen-Yu Tsai <wenst@chromium.org> (authored:2/22=9%)
Minjie Du <duminjie@vivo.com> (authored:2/22=9%)
Frank Wunderlich <frank-w@public-files.de>
(authored:2/22=9%,added_lines:72/453=16%,removed_lines:17/98=17%)
linux-pm@vger.kernel.org (open list:THERMAL)
devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS)
linux-kernel@vger.kernel.org (open list)
linux-arm-kernel@lists.infradead.org (moderated list:ARM/Mediatek SoC support)
linux-mediatek@lists.infradead.org (moderated list:ARM/Mediatek SoC support)
> Found while looking at the original Mediatek driver code.
>
> Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
> ---
> drivers/thermal/mediatek/lvts_thermal.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
> index 98d9c80bd4..8aa6a8675b 100644
> --- a/drivers/thermal/mediatek/lvts_thermal.c
> +++ b/drivers/thermal/mediatek/lvts_thermal.c
> @@ -679,7 +679,7 @@ static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl
>
> for (i = 0; i < lvts_ctrl_data->num_lvts_sensor; i++)
> memcpy(&lvts_ctrl->calibration[i],
> - efuse_calibration + lvts_ctrl_data->cal_offset[i], 2);
> + efuse_calibration + lvts_ctrl_data->cal_offset[i], 3);
>
> return 0;
> }
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 05/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8186
2024-03-18 21:22 ` [PATCH v2 05/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8186 Nicolas Pitre
@ 2024-03-19 11:45 ` AngeloGioacchino Del Regno
0 siblings, 0 replies; 23+ messages in thread
From: AngeloGioacchino Del Regno @ 2024-03-19 11:45 UTC (permalink / raw)
To: Nicolas Pitre, Daniel Lezcano, linux-pm, linux-mediatek,
devicetree
Cc: Nicolas Pitre
Il 18/03/24 22:22, Nicolas Pitre ha scritto:
> From: Nicolas Pitre <npitre@baylibre.com>
>
> Add LVTS thermal controller definition for MT8186.
>
> Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
> ---
> .../bindings/thermal/mediatek,lvts-thermal.yaml | 2 ++
> include/dt-bindings/thermal/mediatek,lvts-thermal.h | 10 ++++++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml b/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml
> index e6665af52e..4173bae530 100644
> --- a/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml
> +++ b/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml
> @@ -19,6 +19,7 @@ properties:
> compatible:
> enum:
> - mediatek,mt7988-lvts-ap
> + - mediatek,mt8186-lvts
> - mediatek,mt8192-lvts-ap
> - mediatek,mt8192-lvts-mcu
> - mediatek,mt8195-lvts-ap
> @@ -75,6 +76,7 @@ allOf:
> compatible:
> contains:
> enum:
> + - mediatek,mt8186-lvts
> - mediatek,mt8195-lvts-ap
> - mediatek,mt8195-lvts-mcu
> then:
> diff --git a/include/dt-bindings/thermal/mediatek,lvts-thermal.h b/include/dt-bindings/thermal/mediatek,lvts-thermal.h
> index 997e2f5512..3197ca6087 100644
> --- a/include/dt-bindings/thermal/mediatek,lvts-thermal.h
> +++ b/include/dt-bindings/thermal/mediatek,lvts-thermal.h
> @@ -16,6 +16,16 @@
> #define MT7988_ETHWARP_0 6
> #define MT7988_ETHWARP_1 7
>
> +#define MT8186_TS1_0 0
TSx_y makes no sense: the LVTS sensors are SoC internal and will never change
what they actually measure.
This comment was repeated on literally all of the definitions that you can
currently see in this file - and I'm repeating that again: please follow what
was already done for all SoCs in this binding and use a meaningful name.
#define SOC_{LVTS_INSTANCE(ap/mcu)}_SENSINGPOINT 0
..... n+1
Regards,
Angelo
> +#define MT8186_TS1_1 1
> +#define MT8186_TS1_2 2
> +#define MT8186_TS1_3 3
> +#define MT8186_TS2_0 4
> +#define MT8186_TS2_1 5
> +#define MT8186_TS3_0 6
> +#define MT8186_TS3_1 7
> +#define MT8186_TS3_2 8
> +
> #define MT8195_MCU_BIG_CPU0 0
> #define MT8195_MCU_BIG_CPU1 1
> #define MT8195_MCU_BIG_CPU2 2
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 06/13] arm64: dts: mediatek: mt8186: add lvts definitions
2024-03-18 21:22 ` [PATCH v2 06/13] arm64: dts: mediatek: mt8186: add lvts definitions Nicolas Pitre
@ 2024-03-19 11:47 ` AngeloGioacchino Del Regno
0 siblings, 0 replies; 23+ messages in thread
From: AngeloGioacchino Del Regno @ 2024-03-19 11:47 UTC (permalink / raw)
To: Nicolas Pitre, Daniel Lezcano, linux-pm, linux-mediatek,
devicetree
Cc: Nicolas Pitre
Il 18/03/24 22:22, Nicolas Pitre ha scritto:
> From: Nicolas Pitre <npitre@baylibre.com>
>
> Values extracted from vendor source tree.
>
> Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
> ---
> arch/arm64/boot/dts/mediatek/mt8186.dtsi | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> index 2fec6fd1c1..7b7a517a41 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> @@ -1355,6 +1355,18 @@ spi0: spi@1100a000 {
> status = "disabled";
> };
>
> + lvts: lvts@1100b000 {
This is not generic and LVTS ain't special.
thermal-sensor@1100b000
Also, please use the correct length - you're clashing with the SVS iospace.
> + compatible = "mediatek,mt8186-lvts";
> + #thermal-sensor-cells = <1>;
> + reg = <0 0x1100b000 0 0x1000>;
> + interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH 0>;
> + clocks = <&infracfg_ao CLK_INFRA_AO_THERM>;
> + clock-names = "lvts_clk";
> + resets = <&infracfg_ao MT8186_INFRA_THERMAL_CTRL_RST>;
> + nvmem-cells = <&lvts_e_data1 &lvts_e_data2>;
> + nvmem-cell-names = "e_data1","e_data2";
> + };
> +
> pwm0: pwm@1100e000 {
> compatible = "mediatek,mt8186-disp-pwm", "mediatek,mt8183-disp-pwm";
> reg = <0 0x1100e000 0 0x1000>;
> @@ -1668,6 +1680,14 @@ efuse: efuse@11cb0000 {
> #address-cells = <1>;
> #size-cells = <1>;
>
> + lvts_e_data1: data1 {
Please always run `make dtbs_check`
Regards,
Angelo
> + reg = <0x1cc 0x14>;
> + };
> +
> + lvts_e_data2: data1-1 {
> + reg = <0x2f8 0x14>;
> + };
> +
> gpu_speedbin: gpu-speedbin@59c {
> reg = <0x59c 0x4>;
> bits = <0 3>;
--
AngeloGioacchino Del Regno
Senior Software Engineer
Collabora Ltd.
Platinum Building, St John's Innovation Park, Cambridge CB4 0DS, UK
Registered in England & Wales, no. 5513718
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 07/13] thermal/drivers/mediatek/lvts_thermal: add MT8186 support
2024-03-18 21:22 ` [PATCH v2 07/13] thermal/drivers/mediatek/lvts_thermal: add MT8186 support Nicolas Pitre
@ 2024-03-19 11:48 ` AngeloGioacchino Del Regno
0 siblings, 0 replies; 23+ messages in thread
From: AngeloGioacchino Del Regno @ 2024-03-19 11:48 UTC (permalink / raw)
To: Nicolas Pitre, Daniel Lezcano, linux-pm, linux-mediatek,
devicetree
Cc: Nicolas Pitre
Il 18/03/24 22:22, Nicolas Pitre ha scritto:
> From: Nicolas Pitre <npitre@baylibre.com>
>
> Various values extracted from the vendor's kernel driver.
>
> Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
> ---
> drivers/thermal/mediatek/lvts_thermal.c | 67 +++++++++++++++++++++++++
> 1 file changed, 67 insertions(+)
>
> diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
> index ed1888fb24..e923d22c17 100644
> --- a/drivers/thermal/mediatek/lvts_thermal.c
> +++ b/drivers/thermal/mediatek/lvts_thermal.c
> @@ -80,6 +80,8 @@
> #define LVTS_SENSOR_MAX 4
> #define LVTS_GOLDEN_TEMP_MAX 62
> #define LVTS_GOLDEN_TEMP_DEFAULT 50
> +#define LVTS_COEFF_A_MT8186 -204650
> +#define LVTS_COEFF_B_MT8186 204650
You don't need this definition, as you can reuse the MT7988 one.
Regards,
Angelo
> #define LVTS_COEFF_A_MT8195 -250460
> #define LVTS_COEFF_B_MT8195 250460
> #define LVTS_COEFF_A_MT7988 -204650
> @@ -92,6 +94,7 @@
> #define LVTS_MSR_READ_WAIT_US (LVTS_MSR_READ_TIMEOUT_US / 2)
>
> #define LVTS_HW_SHUTDOWN_MT7988 105000
> +#define LVTS_HW_SHUTDOWN_MT8186 105000
> #define LVTS_HW_SHUTDOWN_MT8192 105000
> #define LVTS_HW_SHUTDOWN_MT8195 105000
>
> @@ -1377,6 +1380,62 @@ static int lvts_resume(struct device *dev)
> return 0;
> }
>
> +/*
> + * The MT8186 calibration data is stored as packed 3-byte little-endian
> + * values using a weird layout that makes sense only when viewed as a 32-bit
> + * hexadecimal word dump. Let's suppose SxBy where x = sensor number and
> + * y = byte number where the LSB is y=0. We then have:
> + *
> + * [S0B2-S0B1-S0B0-S1B2] [S1B1-S1B0-S2B2-S2B1] [S2B0-S3B2-S3B1-S3B0]
> + *
> + * However, when considering a byte stream, those appear as follows:
> + *
> + * [S1B2] [S0B0[ [S0B1] [S0B2] [S2B1] [S2B2] [S1B0] [S1B1] [S3B0] [S3B1] [S3B2] [S2B0]
> + *
> + * Hence the rather confusing offsets provided below.
> + */
> +static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
> + {
> + .lvts_sensor = {
> + { .dt_id = MT8186_TS1_0,
> + .cal_offsets = { 5, 6, 7 } },
> + { .dt_id = MT8186_TS1_1,
> + .cal_offsets = { 10, 11, 4 } },
> + { .dt_id = MT8186_TS1_2,
> + .cal_offsets = { 15, 8, 9 } },
> + { .dt_id = MT8186_TS1_3,
> + .cal_offsets = { 12, 13, 14 } }
> + },
> + .num_lvts_sensor = 4,
> + .offset = 0x0,
> + .hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8186,
> + },
> + {
> + .lvts_sensor = {
> + { .dt_id = MT8186_TS2_0,
> + .cal_offsets = { 22, 23, 16 } },
> + { .dt_id = MT8186_TS2_1,
> + .cal_offsets = { 27, 20, 21 } }
> + },
> + .num_lvts_sensor = 2,
> + .offset = 0x100,
> + .hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8186,
> + },
> + {
> + .lvts_sensor = {
> + { .dt_id = MT8186_TS3_0,
> + .cal_offsets = { 29, 30, 31 } },
> + { .dt_id = MT8186_TS3_1,
> + .cal_offsets = { 34, 35, 28 } },
> + { .dt_id = MT8186_TS3_2,
> + .cal_offsets = { 39, 32, 33 } }
> + },
> + .num_lvts_sensor = 3,
> + .offset = 0x200,
> + .hw_tshut_temp = LVTS_HW_SHUTDOWN_MT8186,
> + }
> +};
> +
> static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
> {
> .lvts_sensor = {
> @@ -1565,6 +1624,13 @@ static const struct lvts_data mt7988_lvts_ap_data = {
> .temp_offset = LVTS_COEFF_B_MT7988,
> };
>
> +static const struct lvts_data mt8186_lvts_data = {
> + .lvts_ctrl = mt8186_lvts_data_ctrl,
> + .num_lvts_ctrl = ARRAY_SIZE(mt8186_lvts_data_ctrl),
> + .temp_factor = LVTS_COEFF_A_MT8186,
> + .temp_offset = LVTS_COEFF_B_MT8186,
> +};
> +
> static const struct lvts_data mt8192_lvts_mcu_data = {
> .lvts_ctrl = mt8192_lvts_mcu_data_ctrl,
> .num_lvts_ctrl = ARRAY_SIZE(mt8192_lvts_mcu_data_ctrl),
> @@ -1591,6 +1657,7 @@ static const struct lvts_data mt8195_lvts_ap_data = {
>
> static const struct of_device_id lvts_of_match[] = {
> { .compatible = "mediatek,mt7988-lvts-ap", .data = &mt7988_lvts_ap_data },
> + { .compatible = "mediatek,mt8186-lvts", .data = &mt8186_lvts_data },
> { .compatible = "mediatek,mt8192-lvts-mcu", .data = &mt8192_lvts_mcu_data },
> { .compatible = "mediatek,mt8192-lvts-ap", .data = &mt8192_lvts_ap_data },
> { .compatible = "mediatek,mt8195-lvts-mcu", .data = &mt8195_lvts_mcu_data },
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 08/13] arm64: dts: mediatek: mt8186: add default thermal zones
2024-03-18 21:22 ` [PATCH v2 08/13] arm64: dts: mediatek: mt8186: add default thermal zones Nicolas Pitre
@ 2024-03-19 11:49 ` AngeloGioacchino Del Regno
2024-03-20 21:52 ` Nicolas Pitre
0 siblings, 1 reply; 23+ messages in thread
From: AngeloGioacchino Del Regno @ 2024-03-19 11:49 UTC (permalink / raw)
To: Nicolas Pitre, Daniel Lezcano, linux-pm, linux-mediatek,
devicetree
Cc: Nicolas Pitre
Il 18/03/24 22:22, Nicolas Pitre ha scritto:
> From: Nicolas Pitre <npitre@baylibre.com>
>
> Inspired by the vendor kernel but adapted to the upstream thermal
> driver version.
>
> Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
> ---
> arch/arm64/boot/dts/mediatek/mt8186.dtsi | 236 +++++++++++++++++++++++
> 1 file changed, 236 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> index 7b7a517a41..9865926459 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> @@ -13,6 +13,8 @@
> #include <dt-bindings/power/mt8186-power.h>
> #include <dt-bindings/phy/phy.h>
> #include <dt-bindings/reset/mt8186-resets.h>
> +#include <dt-bindings/thermal/thermal.h>
> +#include <dt-bindings/thermal/mediatek,lvts-thermal.h>
>
> / {
> compatible = "mediatek,mt8186";
> @@ -2115,4 +2117,238 @@ larb19: smi@1c10f000 {
> power-domains = <&spm MT8186_POWER_DOMAIN_IPE>;
> };
> };
> +
> + thermal_zones: thermal-zones {
> + cluster0-thermal {
Please use the names that are expected by the SVS driver.
Regards,
Angelo
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 12/13] thermal/drivers/mediatek/lvts_thermal: add MT8188 support
2024-03-18 21:22 ` [PATCH v2 12/13] thermal/drivers/mediatek/lvts_thermal: add MT8188 support Nicolas Pitre
@ 2024-03-19 11:51 ` AngeloGioacchino Del Regno
0 siblings, 0 replies; 23+ messages in thread
From: AngeloGioacchino Del Regno @ 2024-03-19 11:51 UTC (permalink / raw)
To: Nicolas Pitre, Daniel Lezcano, linux-pm, linux-mediatek,
devicetree
Cc: Nicolas Pitre
Il 18/03/24 22:22, Nicolas Pitre ha scritto:
> From: Nicolas Pitre <npitre@baylibre.com>
>
> Various values extracted from the vendor's kernel driver.
>
> Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
> ---
> arch/arm64/boot/dts/mediatek/mt8188.dtsi | 35 ++++++++
> drivers/thermal/mediatek/lvts_thermal.c | 102 +++++++++++++++++++++++
> 2 files changed, 137 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/mediatek/mt8188.dtsi b/arch/arm64/boot/dts/mediatek/mt8188.dtsi
> index b4315c9214..5a3c58a77c 100644
> --- a/arch/arm64/boot/dts/mediatek/mt8188.dtsi
> +++ b/arch/arm64/boot/dts/mediatek/mt8188.dtsi
> @@ -11,6 +11,7 @@
> #include <dt-bindings/phy/phy.h>
> #include <dt-bindings/pinctrl/mediatek,mt8188-pinfunc.h>
> #include <dt-bindings/power/mediatek,mt8188-power.h>
> +#include <dt-bindings/reset/mt8188-resets.h>
>
> / {
> compatible = "mediatek,mt8188";
> @@ -357,6 +358,7 @@ infracfg_ao: syscon@10001000 {
> compatible = "mediatek,mt8188-infracfg-ao", "syscon";
> reg = <0 0x10001000 0 0x1000>;
> #clock-cells = <1>;
> + #reset-cells = <1>;
> };
>
> pericfg: syscon@10003000 {
> @@ -491,6 +493,17 @@ spi0: spi@1100a000 {
> status = "disabled";
> };
>
> + lvts_ap: thermal-sensor@1100b000 {
> + compatible = "mediatek,mt8188-lvts-ap";
> + reg = <0 0x1100b000 0 0x1000>;
iospace clashing with SVS. NAK.
> + interrupts = <GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH 0>;
> + clocks = <&infracfg_ao CLK_INFRA_AO_THERM>;
> + resets = <&infracfg_ao MT8188_INFRA_RST1_THERMAL_CTRL_RST>;
> + nvmem-cells = <&lvts_efuse_data1>;
> + nvmem-cell-names = "lvts_calib_data1";
> + #thermal-sensor-cells = <1>;
> + };
> +
> spi1: spi@11010000 {
> compatible = "mediatek,mt8188-spi-ipm", "mediatek,spi-ipm";
> #address-cells = <1>;
> @@ -604,6 +617,17 @@ mmc1: mmc@11240000 {
> status = "disabled";
> };
>
> + lvts_mcu: thermal-sensor@11278000 {
> + compatible = "mediatek,mt8188-lvts-mcu";
> + reg = <0 0x11278000 0 0x1000>;
> + interrupts = <GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH 0>;
> + clocks = <&infracfg_ao CLK_INFRA_AO_THERM>;
> + resets = <&infracfg_ao MT8188_INFRA_RST1_THERMAL_MCU_RST>;
> + nvmem-cells = <&lvts_efuse_data1>;
> + nvmem-cell-names = "lvts_calib_data1";
> + #thermal-sensor-cells = <1>;
> + };
> +
> i2c0: i2c@11280000 {
> compatible = "mediatek,mt8188-i2c";
> reg = <0 0x11280000 0 0x1000>,
> @@ -827,6 +851,17 @@ imp_iic_wrap_en: clock-controller@11ec2000 {
> #clock-cells = <1>;
> };
>
> + efuse: efuse@11f20000 {
> + compatible = "mediatek,mt8188-efuse", "mediatek,efuse";
> + reg = <0 0x11f20000 0 0x1000>;
> + #address-cells = <1>;
> + #size-cells = <1>;
> +
> + lvts_efuse_data1: lvts1-calib@1ac {
> + reg = <0x1ac 0x40>;
> + };
> + };
> +
> mfgcfg: clock-controller@13fbf000 {
> compatible = "mediatek,mt8188-mfgcfg";
> reg = <0 0x13fbf000 0 0x1000>;
> diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
> index a23a93fc82..46882df640 100644
> --- a/drivers/thermal/mediatek/lvts_thermal.c
> +++ b/drivers/thermal/mediatek/lvts_thermal.c
> @@ -1448,6 +1448,90 @@ static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = {
> }
> };
>
> +static const struct lvts_ctrl_data mt8188_lvts_mcu_data_ctrl[] = {
> + {
> + .lvts_sensor = {
> + { .dt_id = MT8188_MCU_TS1_0,
> + .cal_offsets = { 22, 23, 24 } },
> + { .dt_id = MT8188_MCU_TS1_1,
> + .cal_offsets = { 25, 26, 27 } },
> + { .dt_id = MT8188_MCU_TS1_2,
> + .cal_offsets = { 28, 29, 30 } },
> + { .dt_id = MT8188_MCU_TS1_3,
> + .cal_offsets = { 31, 32, 33 } },
> + },
> + VALID_SENSOR_MAP(1, 1, 1, 1),
> + .offset = 0x0,
> + .hw_tshut_temp = 117000,
> + .mode = LVTS_MSR_FILTERED_MODE,
> + },
> + {
> + .lvts_sensor = {
> + { .dt_id = MT8188_MCU_TS2_0,
> + .cal_offsets = { 34, 35, 36 } },
> + { .dt_id = MT8188_MCU_TS2_1,
> + .cal_offsets = { 37, 38, 39 } },
> + },
> + VALID_SENSOR_MAP(1, 1, 0, 0),
> + .offset = 0x100,
> + .hw_tshut_temp = 117000,
> + .mode = LVTS_MSR_FILTERED_MODE,
> + }
> +};
> +
> +static const struct lvts_ctrl_data mt8188_lvts_ap_data_ctrl[] = {
> + {
> + .lvts_sensor = {
> +
> + { /* unused */ },
> + { .dt_id = MT8188_AP_TS3_1,
> + .cal_offsets = { 40, 41, 42 } },
> + },
> + VALID_SENSOR_MAP(0, 1, 0, 0),
> + .offset = 0x0,
> + .hw_tshut_temp = 117000,
> + .mode = LVTS_MSR_FILTERED_MODE,
> + },
> + {
> + .lvts_sensor = {
> + { .dt_id = MT8188_AP_TS4_0,
> + .cal_offsets = { 43, 44, 45 } },
> + { .dt_id = MT8188_AP_TS4_1,
> + .cal_offsets = { 46, 47, 48 } },
> + { .dt_id = MT8188_AP_TS4_2,
> + .cal_offsets = { 49, 50, 51 } },
> + },
> + VALID_SENSOR_MAP(1, 1, 1, 0),
> + .offset = 0x100,
> + .hw_tshut_temp = 117000,
> + .mode = LVTS_MSR_FILTERED_MODE,
> + },
> + {
> + .lvts_sensor = {
> + { .dt_id = MT8188_AP_TS5_0,
> + .cal_offsets = { 52, 53, 54 } },
> + { .dt_id = MT8188_AP_TS5_1,
> + .cal_offsets = { 55, 56, 57 } },
> + },
> + VALID_SENSOR_MAP(1, 1, 0, 0),
> + .offset = 0x200,
> + .hw_tshut_temp = 117000,
> + .mode = LVTS_MSR_FILTERED_MODE,
> + },
> + {
> + .lvts_sensor = {
> + { .dt_id = MT8188_AP_TS6_0,
> + .cal_offsets = { 58, 59, 60 } },
> + { .dt_id = MT8188_AP_TS6_1,
> + .cal_offsets = { 61, 62, 63 } },
> + },
> + VALID_SENSOR_MAP(1, 1, 0, 0),
> + .offset = 0x300,
> + .hw_tshut_temp = 117000,
> + .mode = LVTS_MSR_FILTERED_MODE,
> + }
> +};
> +
> static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = {
> {
> .lvts_sensor = {
> @@ -1645,6 +1729,22 @@ static const struct lvts_data mt8186_lvts_data = {
> .gt_calib_bit_offset = 24,
> };
>
> +static const struct lvts_data mt8188_lvts_mcu_data = {
> + .lvts_ctrl = mt8188_lvts_mcu_data_ctrl,
> + .num_lvts_ctrl = ARRAY_SIZE(mt8188_lvts_mcu_data_ctrl),
> + .temp_factor = -250460,
> + .temp_offset = 250460,
This is LVTS_COEFF_{A,B}_MT8195: please use the definitions that are already there.
Regards,
Angelo
> + .gt_calib_bit_offset = 20,
> +};
> +
> +static const struct lvts_data mt8188_lvts_ap_data = {
> + .lvts_ctrl = mt8188_lvts_ap_data_ctrl,
> + .num_lvts_ctrl = ARRAY_SIZE(mt8188_lvts_ap_data_ctrl),
> + .temp_factor = -250460,
> + .temp_offset = 250460,
> + .gt_calib_bit_offset = 20,
> +};
> +
> static const struct lvts_data mt8192_lvts_mcu_data = {
> .lvts_ctrl = mt8192_lvts_mcu_data_ctrl,
> .num_lvts_ctrl = ARRAY_SIZE(mt8192_lvts_mcu_data_ctrl),
> @@ -1676,6 +1776,8 @@ static const struct lvts_data mt8195_lvts_ap_data = {
> static const struct of_device_id lvts_of_match[] = {
> { .compatible = "mediatek,mt7988-lvts-ap", .data = &mt7988_lvts_ap_data },
> { .compatible = "mediatek,mt8186-lvts", .data = &mt8186_lvts_data },
> + { .compatible = "mediatek,mt8188-lvts-mcu", .data = &mt8188_lvts_mcu_data },
> + { .compatible = "mediatek,mt8188-lvts-ap", .data = &mt8188_lvts_ap_data },
> { .compatible = "mediatek,mt8192-lvts-mcu", .data = &mt8192_lvts_mcu_data },
> { .compatible = "mediatek,mt8192-lvts-ap", .data = &mt8192_lvts_ap_data },
> { .compatible = "mediatek,mt8195-lvts-mcu", .data = &mt8195_lvts_mcu_data },
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 01/13] thermal/drivers/mediatek/lvts_thermal: retrieve all calibration bytes
2024-03-19 11:40 ` AngeloGioacchino Del Regno
@ 2024-03-20 15:32 ` Rob Herring
0 siblings, 0 replies; 23+ messages in thread
From: Rob Herring @ 2024-03-20 15:32 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: Nicolas Pitre, Daniel Lezcano, linux-pm, linux-mediatek,
devicetree, Nicolas Pitre
On Tue, Mar 19, 2024 at 12:40:20PM +0100, AngeloGioacchino Del Regno wrote:
> Il 18/03/24 22:22, Nicolas Pitre ha scritto:
> > From: Nicolas Pitre <npitre@baylibre.com>
> >
> > Calibration values are 24-bit wide. Those values so far appear to span
> > only 16 bits but let's not push our luck.
> >
>
> I wonder how much feedback you got on v1 - I didn't even look and will not lose
> time with that - but regardless, if you don't add the right people to the Cc field,
> I really don't think that you'll ever get your patches reviewed (and probably also
> not accepted).
>
> That -- especially if you don't even Cc all the relevant maintainers...!
>
> Please read:
> https://www.kernel.org/doc/html/latest/process/submitting-patches.html
>
> P.S.:
> scripts/get_maintainer.pl lvts-8186-8188-patches.patch
>
> "Rafael J. Wysocki" <rafael@kernel.org> (supporter:THERMAL)
> Daniel Lezcano <daniel.lezcano@linaro.org> (supporter:THERMAL,commit_signer:21/22=95%)
> Zhang Rui <rui.zhang@intel.com> (reviewer:THERMAL)
> Lukasz Luba <lukasz.luba@arm.com> (reviewer:THERMAL)
> Rob Herring <robh@kernel.org> (maintainer:OPEN FIRMWARE AND FLATTENED DEVICE
> TREE BINDINGS)
> Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org> (maintainer:OPEN
> FIRMWARE AND FLATTENED DEVICE TREE BINDINGS)
> Conor Dooley <conor+dt@kernel.org> (maintainer:OPEN FIRMWARE AND FLATTENED
> DEVICE TREE BINDINGS)
> Matthias Brugger <matthias.bgg@gmail.com> (maintainer:ARM/Mediatek SoC
> support,commit_signer:4/22=18%)
> AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
> (maintainer:ARM/Mediatek SoC support,commit_signer:13/22=59%)
> Alexandre Mergnat <amergnat@baylibre.com> (commit_signer:11/22=50%)
> "Nícolas F. R. A. Prado" <nfraprado@collabora.com> (commit_signer:10/22=45%,authored:7/22=32%,added_lines:128/453=28%,removed_lines:45/98=46%)
> Balsam CHIHI <bchihi@baylibre.com>
> (authored:4/22=18%,added_lines:235/453=52%,removed_lines:22/98=22%,in file)
> Chen-Yu Tsai <wenst@chromium.org> (authored:2/22=9%)
> Minjie Du <duminjie@vivo.com> (authored:2/22=9%)
> Frank Wunderlich <frank-w@public-files.de>
> (authored:2/22=9%,added_lines:72/453=16%,removed_lines:17/98=17%)
Please don't suggest to people that commit signers and authors are CCed.
That results in huge Cc lists of people that probably aren't interested.
If they are, then they should add themselves to MAINTAINERS.
Rob
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 08/13] arm64: dts: mediatek: mt8186: add default thermal zones
2024-03-19 11:49 ` AngeloGioacchino Del Regno
@ 2024-03-20 21:52 ` Nicolas Pitre
2024-03-21 8:32 ` AngeloGioacchino Del Regno
0 siblings, 1 reply; 23+ messages in thread
From: Nicolas Pitre @ 2024-03-20 21:52 UTC (permalink / raw)
To: AngeloGioacchino Del Regno
Cc: Daniel Lezcano, linux-pm, linux-mediatek, devicetree
On Tue, 19 Mar 2024, AngeloGioacchino Del Regno wrote:
> Il 18/03/24 22:22, Nicolas Pitre ha scritto:
> > From: Nicolas Pitre <npitre@baylibre.com>
> >
> > Inspired by the vendor kernel but adapted to the upstream thermal
> > driver version.
> >
> > Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
> > ---
> > arch/arm64/boot/dts/mediatek/mt8186.dtsi | 236 +++++++++++++++++++++++
> > 1 file changed, 236 insertions(+)
> >
> > diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> > b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> > index 7b7a517a41..9865926459 100644
> > --- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> > +++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
> > @@ -13,6 +13,8 @@
> > #include <dt-bindings/power/mt8186-power.h>
> > #include <dt-bindings/phy/phy.h>
> > #include <dt-bindings/reset/mt8186-resets.h>
> > +#include <dt-bindings/thermal/thermal.h>
> > +#include <dt-bindings/thermal/mediatek,lvts-thermal.h>
> > / {
> > compatible = "mediatek,mt8186";
> > @@ -2115,4 +2117,238 @@ larb19: smi@1c10f000 {
> > power-domains = <&spm MT8186_POWER_DOMAIN_IPE>;
> > };
> > };
> > +
> > + thermal_zones: thermal-zones {
> > + cluster0-thermal {
>
> Please use the names that are expected by the SVS driver.
And what would those be in this case?
I've used the names that were suggested here:
https://lore.kernel.org/all/20240111223020.3593558-1-nico@fluxnic.net/T/#m05936e84a2efe5c431bad39c24d66c246fb8ca38
Nicolas
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v2 08/13] arm64: dts: mediatek: mt8186: add default thermal zones
2024-03-20 21:52 ` Nicolas Pitre
@ 2024-03-21 8:32 ` AngeloGioacchino Del Regno
0 siblings, 0 replies; 23+ messages in thread
From: AngeloGioacchino Del Regno @ 2024-03-21 8:32 UTC (permalink / raw)
To: Nicolas Pitre; +Cc: Daniel Lezcano, linux-pm, linux-mediatek, devicetree
Il 20/03/24 22:52, Nicolas Pitre ha scritto:
> On Tue, 19 Mar 2024, AngeloGioacchino Del Regno wrote:
>
>> Il 18/03/24 22:22, Nicolas Pitre ha scritto:
>>> From: Nicolas Pitre <npitre@baylibre.com>
>>>
>>> Inspired by the vendor kernel but adapted to the upstream thermal
>>> driver version.
>>>
>>> Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
>>> ---
>>> arch/arm64/boot/dts/mediatek/mt8186.dtsi | 236 +++++++++++++++++++++++
>>> 1 file changed, 236 insertions(+)
>>>
>>> diff --git a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
>>> b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
>>> index 7b7a517a41..9865926459 100644
>>> --- a/arch/arm64/boot/dts/mediatek/mt8186.dtsi
>>> +++ b/arch/arm64/boot/dts/mediatek/mt8186.dtsi
>>> @@ -13,6 +13,8 @@
>>> #include <dt-bindings/power/mt8186-power.h>
>>> #include <dt-bindings/phy/phy.h>
>>> #include <dt-bindings/reset/mt8186-resets.h>
>>> +#include <dt-bindings/thermal/thermal.h>
>>> +#include <dt-bindings/thermal/mediatek,lvts-thermal.h>
>>> / {
>>> compatible = "mediatek,mt8186";
>>> @@ -2115,4 +2117,238 @@ larb19: smi@1c10f000 {
>>> power-domains = <&spm MT8186_POWER_DOMAIN_IPE>;
>>> };
>>> };
>>> +
>>> + thermal_zones: thermal-zones {
>>> + cluster0-thermal {
>>
>> Please use the names that are expected by the SVS driver.
>
> And what would those be in this case?
>
> I've used the names that were suggested here:
>
> https://lore.kernel.org/all/20240111223020.3593558-1-nico@fluxnic.net/T/#m05936e84a2efe5c431bad39c24d66c246fb8ca38
>
>
It's always the ".tzone_name" member of svs_(socmodel)_banks.pdata, with -thermal
suffix (drivers/soc/mediatek/mtk-svs.c).
Making it shorter for you....
performance CPUs: cpu-big-thermal
low-power CPUs: cpu-little-thermal
Cache Coherent Interconnect: cci-thermal
...and GPU is obviously gpu-thermal
Cheers,
Angelo
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2024-03-21 8:33 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-18 21:22 [PATCH v2 0/13] Mediatek thermal sensor driver support for MT8186 and MT8188 Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 01/13] thermal/drivers/mediatek/lvts_thermal: retrieve all calibration bytes Nicolas Pitre
2024-03-19 11:40 ` AngeloGioacchino Del Regno
2024-03-20 15:32 ` Rob Herring
2024-03-18 21:22 ` [PATCH v2 02/13] thermal/drivers/mediatek/lvts_thermal: move comment Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 03/13] thermal/drivers/mediatek/lvts_thermal: use offsets for every calibration byte Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 04/13] thermal/drivers/mediatek/lvts_thermal: guard against efuse data buffer overflow Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 05/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8186 Nicolas Pitre
2024-03-19 11:45 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 06/13] arm64: dts: mediatek: mt8186: add lvts definitions Nicolas Pitre
2024-03-19 11:47 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 07/13] thermal/drivers/mediatek/lvts_thermal: add MT8186 support Nicolas Pitre
2024-03-19 11:48 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 08/13] arm64: dts: mediatek: mt8186: add default thermal zones Nicolas Pitre
2024-03-19 11:49 ` AngeloGioacchino Del Regno
2024-03-20 21:52 ` Nicolas Pitre
2024-03-21 8:32 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 09/13] thermal/drivers/mediatek/lvts_thermal: provision for gt variable location Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 10/13] thermal/drivers/mediatek/lvts_thermal: allow early empty sensor slots Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 11/13] dt-bindings: thermal: mediatek: Add LVTS thermal controller definition for MT8188 Nicolas Pitre
2024-03-18 21:22 ` [PATCH v2 12/13] thermal/drivers/mediatek/lvts_thermal: add MT8188 support Nicolas Pitre
2024-03-19 11:51 ` AngeloGioacchino Del Regno
2024-03-18 21:22 ` [PATCH v2 13/13] arm64: dts: mediatek: mt8188: add default thermal zones Nicolas Pitre
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).