From nobody Tue Dec 2 01:30:21 2025 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 92D133431E9; Fri, 21 Nov 2025 11:17:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723834; cv=none; b=RbTNpLMNoZg4xKyzbkxcIpGLo384wLexcTKEIezGdNzTjVIRXAht0YjRDLysZTaQHSNvRcLCcMYIk+JYw9NbwxwCyITwqKPta9yPVawotq7Ga004+jjE+0pJUhGDpcKjVPge+0dr5ao5xn6wZhdxnWBLm56t3wz1/JeBCCWiHGE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723834; c=relaxed/simple; bh=wA3DIGO1oIoEB6lNDjSI7psqvT6nGHbhXESVUEEIA40=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=buHHonXoP3h7wCCq2iuAPTUiE0m5oRCy0gGrYvGYYJiSvwlqUXgGobb8FAuf/FTL+1yCYW1mnkPQV4qzhWbGQtcIW7HK/HKERrl9rUVCZSSGugxWL5TI+MuOa43TMlIg2r5rKNS9HGqJb3HDQfDHFjC9x2Uyvp3bmrEh000qeRc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=GsmEBZNK; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="GsmEBZNK" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1763723824; bh=wA3DIGO1oIoEB6lNDjSI7psqvT6nGHbhXESVUEEIA40=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GsmEBZNK/JGmCyT5+qAtlnHeG2t25KgjvJH2bwMJ5HAj2gpNPS5P/ZiCybwuPqv2E 3gMc0Zjp3/hI8wcQI2rTNyCXgZoXMSfkucWlL61oVP3Qszcy+XBVblhxoyiNJF8EwW jU4VW975yOPu8tEswfx39lR8SnpMwCDZ+YPO9QRP7ZghPdSieBGvTHRzvmK75gITrc zfluu3wECYl1u5bV/G2dRRLBf6cKIC2UKVLjMbYhW16yM1E9S+Dzny0VAqkYoBHYHf 2IbO7CYvoLnrZNoAFYrMUfcmCBxR4Pmwc7U/1cGtqcdiLuxajh6HGlD5shl/HivxcH npoPXoSFf7Kjg== Received: from laura.lan (unknown [IPv6:2001:b07:646b:e2:c4bf:9969:6e1c:dc69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: laura.nao) by bali.collaboradmins.com (Postfix) with ESMTPSA id 1817617E090D; Fri, 21 Nov 2025 12:17:03 +0100 (CET) From: Laura Nao To: srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, rui.zhang@intel.com, lukasz.luba@arm.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com Cc: nfraprado@collabora.com, arnd@arndb.de, colin.i.king@gmail.com, u.kleine-koenig@baylibre.com, andrew-ct.chen@mediatek.com, lala.lin@mediatek.com, bchihi@baylibre.com, frank-w@public-files.de, wenst@chromium.org, fshao@chromium.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, Laura Nao , Krzysztof Kozlowski Subject: [PATCH v4 1/9] dt-bindings: thermal: mediatek: Add LVTS thermal controller support for MT8196 Date: Fri, 21 Nov 2025 12:16:34 +0100 Message-Id: <20251121-mt8196-lvts-v4-v4-1-357f955a3176@collabora.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> References: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add LVTS thermal controller binding for MediaTek MT8196. Acked-by: Krzysztof Kozlowski Reviewed-by: AngeloGioacchino Del Regno Tested-by: AngeloGioacchino Del Regno Tested-by: Frank Wunderlich Signed-off-by: Laura Nao --- .../bindings/thermal/mediatek,lvts-thermal.yaml | 2 ++ .../dt-bindings/thermal/mediatek,lvts-thermal.h | 26 ++++++++++++++++++= ++++ 2 files changed, 28 insertions(+) diff --git a/Documentation/devicetree/bindings/thermal/mediatek,lvts-therma= l.yaml b/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.ya= ml index 0259cd3ce9c5..beccdabe110b 100644 --- a/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml +++ b/Documentation/devicetree/bindings/thermal/mediatek,lvts-thermal.yaml @@ -26,6 +26,8 @@ properties: - mediatek,mt8192-lvts-mcu - mediatek,mt8195-lvts-ap - mediatek,mt8195-lvts-mcu + - mediatek,mt8196-lvts-ap + - mediatek,mt8196-lvts-mcu =20 reg: maxItems: 1 diff --git a/include/dt-bindings/thermal/mediatek,lvts-thermal.h b/include/= dt-bindings/thermal/mediatek,lvts-thermal.h index ddc7302a510a..0ec8ad184d47 100644 --- a/include/dt-bindings/thermal/mediatek,lvts-thermal.h +++ b/include/dt-bindings/thermal/mediatek,lvts-thermal.h @@ -80,4 +80,30 @@ #define MT8192_AP_MD1 15 #define MT8192_AP_MD2 16 =20 +#define MT8196_MCU_MEDIUM_CPU6_0 0 +#define MT8196_MCU_MEDIUM_CPU6_1 1 +#define MT8196_MCU_DSU2 2 +#define MT8196_MCU_DSU3 3 +#define MT8196_MCU_LITTLE_CPU3 4 +#define MT8196_MCU_LITTLE_CPU0 5 +#define MT8196_MCU_LITTLE_CPU1 6 +#define MT8196_MCU_LITTLE_CPU2 7 +#define MT8196_MCU_MEDIUM_CPU4_0 8 +#define MT8196_MCU_MEDIUM_CPU4_1 9 +#define MT8196_MCU_MEDIUM_CPU5_0 10 +#define MT8196_MCU_MEDIUM_CPU5_1 11 +#define MT8196_MCU_DSU0 12 +#define MT8196_MCU_DSU1 13 +#define MT8196_MCU_BIG_CPU7_0 14 +#define MT8196_MCU_BIG_CPU7_1 15 + +#define MT8196_AP_TOP0 0 +#define MT8196_AP_TOP1 1 +#define MT8196_AP_TOP2 2 +#define MT8196_AP_TOP3 3 +#define MT8196_AP_BOT0 4 +#define MT8196_AP_BOT1 5 +#define MT8196_AP_BOT2 6 +#define MT8196_AP_BOT3 7 + #endif /* __MEDIATEK_LVTS_DT_H */ --=20 2.39.5 From nobody Tue Dec 2 01:30:21 2025 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B32EC25784E; Fri, 21 Nov 2025 11:17:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723835; cv=none; b=eOQQ+t29fqnvWVvfL1Ba+YaHSbw0yPINTCflbryLNOsL4N6pXSticz9Aybw1dF1OJFbFKP8T9aRDqgA1n6ZafdA4xAu/xOVFuCqqH/xWWU6W2bVmRd4Xl6oubxl0yHqfGOiaNZ9KS/8oBChg/Mr2esxYMBEskUMmh9DbpqZRT10= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723835; c=relaxed/simple; bh=wFmJoNcAx7BXY/TLQWuVv0fEAk/CbB1J3o6ZSEIHGAM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=uhKPvl++F3zXxTqqz/yxQAAfjbsRvKttdoyrU//flvHRC+dpXT63d0QM+SODYomVB2XZovw4VvXiDgHRDI/8OBXrVJBZmY/4/93YB9r/oUJM6tWy8xe5+BPxHy2fAGsACsXSw6oawP+tUz/zIWDadrn6GHxDS1kmw60op08k2qk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=nX5rqsq/; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="nX5rqsq/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1763723825; bh=wFmJoNcAx7BXY/TLQWuVv0fEAk/CbB1J3o6ZSEIHGAM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nX5rqsq/k+TqTHgwPRqjPGpC0OEtxhY6pH9Z7E22FRbmH03eKroRpAq3hyIOw/5Sd DVlftXRSNfmXLYtXi4wa2SU0PJXOSjxmyAJeybrWx4g00PIodR/QLieowpf0bZ/qp0 PtsVp1TTUOz4CLySqp+SE2cv1VHFKImYNSgg1A9I61xTr5bq0cUeV6xESAobPxV530 D2RV5xSAF6DXa+WBYef33GdDUjhmGxbZR4c4gFigNxv4Jsq0J38Guz6WmDN4xZ5Jf6 CziGixOmyQL4rHiCkOmTleG5O/HNivCeXFmZaW8VNy1dtypRZXpsvaPjaBFADMcGPm h55cDe8HVYUMg== Received: from laura.lan (unknown [IPv6:2001:b07:646b:e2:c4bf:9969:6e1c:dc69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: laura.nao) by bali.collaboradmins.com (Postfix) with ESMTPSA id 810C017E13C1; Fri, 21 Nov 2025 12:17:04 +0100 (CET) From: Laura Nao To: srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, rui.zhang@intel.com, lukasz.luba@arm.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com Cc: nfraprado@collabora.com, arnd@arndb.de, colin.i.king@gmail.com, u.kleine-koenig@baylibre.com, andrew-ct.chen@mediatek.com, lala.lin@mediatek.com, bchihi@baylibre.com, frank-w@public-files.de, wenst@chromium.org, fshao@chromium.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, Laura Nao Subject: [PATCH v4 2/9] thermal/drivers/mediatek/lvts: Make number of calibration offsets configurable Date: Fri, 21 Nov 2025 12:16:35 +0100 Message-Id: <20251121-mt8196-lvts-v4-v4-2-357f955a3176@collabora.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> References: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MT8196/MT6991 use 2-byte eFuse calibration data, whereas other SoCs supported by the driver rely on 3 bytes. Make the number of calibration bytes per sensor configurable, enabling support for SoCs with varying calibration formats. Reviewed-by: Fei Shao Reviewed-by: AngeloGioacchino Del Regno Tested-by: AngeloGioacchino Del Regno Tested-by: Frank Wunderlich Signed-off-by: Laura Nao --- drivers/thermal/mediatek/lvts_thermal.c | 32 ++++++++++++++++++++++-------= --- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/medi= atek/lvts_thermal.c index ab55b20cda47..1c54d0b75b1a 100644 --- a/drivers/thermal/mediatek/lvts_thermal.c +++ b/drivers/thermal/mediatek/lvts_thermal.c @@ -96,12 +96,14 @@ =20 #define LVTS_MINIMUM_THRESHOLD 20000 =20 +#define LVTS_MAX_CAL_OFFSETS 3 + static int golden_temp =3D LVTS_GOLDEN_TEMP_DEFAULT; static int golden_temp_offset; =20 struct lvts_sensor_data { int dt_id; - u8 cal_offsets[3]; + u8 cal_offsets[LVTS_MAX_CAL_OFFSETS]; }; =20 struct lvts_ctrl_data { @@ -127,6 +129,7 @@ struct lvts_data { const struct lvts_ctrl_data *lvts_ctrl; const u32 *conn_cmd; const u32 *init_cmd; + int num_cal_offsets; int num_lvts_ctrl; int num_conn_cmd; int num_init_cmd; @@ -711,7 +714,7 @@ static int lvts_calibration_init(struct device *dev, st= ruct lvts_ctrl *lvts_ctrl u8 *efuse_calibration, size_t calib_len) { - int i; + int i, j; u32 gt; =20 /* A zero value for gt means that device has invalid efuse data */ @@ -720,17 +723,18 @@ static int lvts_calibration_init(struct device *dev, = struct lvts_ctrl *lvts_ctrl lvts_for_each_valid_sensor(i, lvts_ctrl_data) { const struct lvts_sensor_data *sensor =3D &lvts_ctrl_data->lvts_sensor[i]; + u32 calib =3D 0; =20 - if (sensor->cal_offsets[0] >=3D calib_len || - sensor->cal_offsets[1] >=3D calib_len || - sensor->cal_offsets[2] >=3D calib_len) - return -EINVAL; + for (j =3D 0; j < lvts_ctrl->lvts_data->num_cal_offsets; j++) { + u8 offset =3D sensor->cal_offsets[j]; + + if (offset >=3D calib_len) + return -EINVAL; + calib |=3D efuse_calibration[offset] << (8 * j); + } =20 if (gt) { - lvts_ctrl->calibration[i] =3D - (efuse_calibration[sensor->cal_offsets[0]] << 0) + - (efuse_calibration[sensor->cal_offsets[1]] << 8) + - (efuse_calibration[sensor->cal_offsets[2]] << 16); + lvts_ctrl->calibration[i] =3D calib; } else if (lvts_ctrl->lvts_data->def_calibration) { lvts_ctrl->calibration[i] =3D lvts_ctrl->lvts_data->def_calibration; } else { @@ -1763,6 +1767,7 @@ static const struct lvts_data mt7988_lvts_ap_data =3D= { .temp_factor =3D LVTS_COEFF_A_MT7988, .temp_offset =3D LVTS_COEFF_B_MT7988, .gt_calib_bit_offset =3D 24, + .num_cal_offsets =3D 3, }; =20 static const struct lvts_data mt8186_lvts_data =3D { @@ -1776,6 +1781,7 @@ static const struct lvts_data mt8186_lvts_data =3D { .temp_offset =3D LVTS_COEFF_B_MT7988, .gt_calib_bit_offset =3D 24, .def_calibration =3D 19000, + .num_cal_offsets =3D 3, }; =20 static const struct lvts_data mt8188_lvts_mcu_data =3D { @@ -1789,6 +1795,7 @@ static const struct lvts_data mt8188_lvts_mcu_data = =3D { .temp_offset =3D LVTS_COEFF_B_MT8195, .gt_calib_bit_offset =3D 20, .def_calibration =3D 35000, + .num_cal_offsets =3D 3, }; =20 static const struct lvts_data mt8188_lvts_ap_data =3D { @@ -1802,6 +1809,7 @@ static const struct lvts_data mt8188_lvts_ap_data =3D= { .temp_offset =3D LVTS_COEFF_B_MT8195, .gt_calib_bit_offset =3D 20, .def_calibration =3D 35000, + .num_cal_offsets =3D 3, }; =20 static const struct lvts_data mt8192_lvts_mcu_data =3D { @@ -1815,6 +1823,7 @@ static const struct lvts_data mt8192_lvts_mcu_data = =3D { .temp_offset =3D LVTS_COEFF_B_MT8195, .gt_calib_bit_offset =3D 24, .def_calibration =3D 35000, + .num_cal_offsets =3D 3, }; =20 static const struct lvts_data mt8192_lvts_ap_data =3D { @@ -1828,6 +1837,7 @@ static const struct lvts_data mt8192_lvts_ap_data =3D= { .temp_offset =3D LVTS_COEFF_B_MT8195, .gt_calib_bit_offset =3D 24, .def_calibration =3D 35000, + .num_cal_offsets =3D 3, }; =20 static const struct lvts_data mt8195_lvts_mcu_data =3D { @@ -1841,6 +1851,7 @@ static const struct lvts_data mt8195_lvts_mcu_data = =3D { .temp_offset =3D LVTS_COEFF_B_MT8195, .gt_calib_bit_offset =3D 24, .def_calibration =3D 35000, + .num_cal_offsets =3D 3, }; =20 static const struct lvts_data mt8195_lvts_ap_data =3D { @@ -1854,6 +1865,7 @@ static const struct lvts_data mt8195_lvts_ap_data =3D= { .temp_offset =3D LVTS_COEFF_B_MT8195, .gt_calib_bit_offset =3D 24, .def_calibration =3D 35000, + .num_cal_offsets =3D 3, }; =20 static const struct of_device_id lvts_of_match[] =3D { --=20 2.39.5 From nobody Tue Dec 2 01:30:21 2025 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B1ADC345CDE; Fri, 21 Nov 2025 11:17:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723837; cv=none; b=Xd2N0ZLUrlcYzq54ftKCO0tX6WeeHz1O6j6VATpJhXojRoANa14WbM5WOyoiMbghUJxPpl7zn4ExJD3jhHnxKOhClxXUp2WeHklfwoOYpi6KDjZ/5GSaKqbCz6MpUZNI/BpKsTZFt3TNiwVy49loJYqOz48spbxFs+AyHAVTqVU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723837; c=relaxed/simple; bh=aVbakoBQyckYSlNSPoWjsMEdNHC32xZLNcs0IhQ7uVs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=jlwYgrxTF+gDapSwayijDNAgVK8FpwSz5wRlPb5JMqccxMmfhAfsxjN5pn1teK5fVcaLGzSpvkga8NPlNNmDZV6sIy/hCez4Fursd/cWEtjdzBR1Qs6hYXOaQWK8EJArwSItV0xoHfYxj6uFJiqw2YdYFmGCWls+YSOMetan4vM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=mGdYFJ5p; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="mGdYFJ5p" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1763723827; bh=aVbakoBQyckYSlNSPoWjsMEdNHC32xZLNcs0IhQ7uVs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mGdYFJ5pC42qGlbSkGh7F1UNEyLUdSu2AD76zGYpcM8TPi7OjhBfod+R+mmnNK55X HUrE3O9865qSvBbPwlbSnux9O1THbew5RHoCw+OUuPzMzUxhWYh3LARrJcbzddN2ni 6kxy/wODGvp9LrmrF6nKKWlo8Iwl1ZvPIc/C4o8+qRqItUTFOSkvSAHSFp0iK4CZNK nxtVhkac8m3TDw8ag+qoSy8ervZDQ0b4KBONwy7p1tBLBz+tguuTExpMRJ42/Oy8xW 0gDhXEqIlAjjjSvtMT92cMomjLEvdrxu+2RixJd0phvAy5eFst9EmLaOWXp2ndJXN2 8JowKthHlnAag== Received: from laura.lan (unknown [IPv6:2001:b07:646b:e2:c4bf:9969:6e1c:dc69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: laura.nao) by bali.collaboradmins.com (Postfix) with ESMTPSA id DBDF517E13E4; Fri, 21 Nov 2025 12:17:05 +0100 (CET) From: Laura Nao To: srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, rui.zhang@intel.com, lukasz.luba@arm.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com Cc: nfraprado@collabora.com, arnd@arndb.de, colin.i.king@gmail.com, u.kleine-koenig@baylibre.com, andrew-ct.chen@mediatek.com, lala.lin@mediatek.com, bchihi@baylibre.com, frank-w@public-files.de, wenst@chromium.org, fshao@chromium.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, Laura Nao Subject: [PATCH v4 3/9] thermal/drivers/mediatek/lvts: Fail probe if temp_factor is zero Date: Fri, 21 Nov 2025 12:16:36 +0100 Message-Id: <20251121-mt8196-lvts-v4-v4-3-357f955a3176@collabora.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> References: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable temp_factor is used in lvts_temp_to_raw() and lvts_raw_to_temp(). If platform data is incorrect and temp_factor is zero, it could cause a division by zero. Fail the probe early to prevent a kernel crash. Signed-off-by: Laura Nao Reviewed-by: AngeloGioacchino Del Regno --- drivers/thermal/mediatek/lvts_thermal.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/medi= atek/lvts_thermal.c index 1c54d0b75b1a..b49441d82ffd 100644 --- a/drivers/thermal/mediatek/lvts_thermal.c +++ b/drivers/thermal/mediatek/lvts_thermal.c @@ -1346,6 +1346,11 @@ static int lvts_probe(struct platform_device *pdev) if (irq < 0) return irq; =20 + if (!lvts_data->temp_factor) + return dev_err_probe( + dev, -EINVAL, + "temp_factor should never be zero; check platform data.\n"); + golden_temp_offset =3D lvts_data->temp_offset; =20 ret =3D lvts_domain_init(dev, lvts_td, lvts_data); --=20 2.39.5 From nobody Tue Dec 2 01:30:21 2025 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5FAD2F690A; Fri, 21 Nov 2025 11:17:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723838; cv=none; b=mFtAWeBRVzDchlO/Q60QtujUWUfpzIm/oV1jJXB5cAM2GOqAAV9veaPF3LbDAv3geeQ1Crn5YXroTUhHKtzp0FuRAoyXo1SFedCP3Qwz/p1fV6P+7UiTcidixuJ4RqCtADPZ/uPsNT7CMmfCu2EnT5RF8THKvyxezdL0ZMIhF2c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723838; c=relaxed/simple; bh=8h0CFC4hcjoXQqZWOG7FkphbZyR+191MEAMrW1ExjnE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=pLU3aTc/y8UF865F3pIw6c+oM2L3mdFmZ2xIq3Lz9DrZw7+24PwK0gfOQPOQ7H4tGof6Ya4Sb/X+d81bhw7WD6XFqrm/dP4kl0TZQXlvCN+Zk/hnB+rYAs5BA+JB4+sGX1/rKg2ceIU2mA1lvNK/z5dbk89LwtNyVvBmb2AEK7Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=RVuXquJ/; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="RVuXquJ/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1763723828; bh=8h0CFC4hcjoXQqZWOG7FkphbZyR+191MEAMrW1ExjnE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RVuXquJ/9tLHTTsob1It3qBbysppwXZcZUbyxXAJcobgM93kJ0Z9MAWmnM7CAvWwz ezMFEn2gam7j5YmSWszWF35jNMBTxCMqgdEiCqtgs4+CgeNww9ni90kJ/qIOiPrFMB dn2Ls7KpEvZrjXkb4f5DdW5562wrFZpj88PO3y9nrYEbqY2YUMO6M2cqMtu0XGq+5P AutezsUhLqg3OYPkxISB1CW+GwesMnkPu+9Jc8OjaN5yMlCj/199AFEn2RiPO2usHx BVoa1PXRom/PKhRWUuxBSafPs5FPr6d2j69zWaXvPv1rcNg9vo+oAmusQxcMYn3NJk UxEmTaeYCG7rw== Received: from laura.lan (unknown [IPv6:2001:b07:646b:e2:c4bf:9969:6e1c:dc69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: laura.nao) by bali.collaboradmins.com (Postfix) with ESMTPSA id 4786517E153D; Fri, 21 Nov 2025 12:17:07 +0100 (CET) From: Laura Nao To: srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, rui.zhang@intel.com, lukasz.luba@arm.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com Cc: nfraprado@collabora.com, arnd@arndb.de, colin.i.king@gmail.com, u.kleine-koenig@baylibre.com, andrew-ct.chen@mediatek.com, lala.lin@mediatek.com, bchihi@baylibre.com, frank-w@public-files.de, wenst@chromium.org, fshao@chromium.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, Laura Nao Subject: [PATCH v4 4/9] thermal: mediatek: lvts: Add platform ops to support alternative conversion logic Date: Fri, 21 Nov 2025 12:16:37 +0100 Message-Id: <20251121-mt8196-lvts-v4-v4-4-357f955a3176@collabora.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> References: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Introduce lvts_platform_ops struct to support SoC-specific versions of lvts_raw_to_temp() and lvts_temp_to_raw() conversion functions. This is in preparation for supporting SoCs like MT8196/MT6991, which require a different lvts_temp_to_raw() implementation. Signed-off-by: Laura Nao Reviewed-by: AngeloGioacchino Del Regno --- drivers/thermal/mediatek/lvts_thermal.c | 39 ++++++++++++++++++++++++++++-= ---- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/medi= atek/lvts_thermal.c index b49441d82ffd..d713c46c21fc 100644 --- a/drivers/thermal/mediatek/lvts_thermal.c +++ b/drivers/thermal/mediatek/lvts_thermal.c @@ -125,8 +125,14 @@ struct lvts_ctrl_data { continue; \ else =20 +struct lvts_platform_ops { + int (*lvts_raw_to_temp)(u32 raw_temp, int temp_factor); + u32 (*lvts_temp_to_raw)(int temperature, int temp_factor); +}; + struct lvts_data { const struct lvts_ctrl_data *lvts_ctrl; + const struct lvts_platform_ops *ops; const u32 *conn_cmd; const u32 *init_cmd; int num_cal_offsets; @@ -272,7 +278,17 @@ static inline int lvts_debugfs_init(struct device *dev, =20 #endif =20 -static int lvts_raw_to_temp(u32 raw_temp, int temp_factor) +static int lvts_raw_to_temp(u32 raw_temp, const struct lvts_data *lvts_dat= a) +{ + return lvts_data->ops->lvts_raw_to_temp(raw_temp & 0xFFFF, lvts_data->tem= p_factor); +} + +static u32 lvts_temp_to_raw(int temperature, const struct lvts_data *lvts_= data) +{ + return lvts_data->ops->lvts_temp_to_raw(temperature, lvts_data->temp_fact= or); +} + +static int lvts_raw_to_temp_mt7988(u32 raw_temp, int temp_factor) { int temperature; =20 @@ -282,7 +298,7 @@ static int lvts_raw_to_temp(u32 raw_temp, int temp_fact= or) return temperature; } =20 -static u32 lvts_temp_to_raw(int temperature, int temp_factor) +static u32 lvts_temp_to_raw_mt7988(int temperature, int temp_factor) { u32 raw_temp =3D ((s64)(golden_temp_offset - temperature)) << 14; =20 @@ -329,7 +345,7 @@ static int lvts_get_temp(struct thermal_zone_device *tz= , int *temp) if (rc) return -EAGAIN; =20 - *temp =3D lvts_raw_to_temp(value & 0xFFFF, lvts_data->temp_factor); + *temp =3D lvts_raw_to_temp(value, lvts_data); =20 return 0; } @@ -399,8 +415,8 @@ static int lvts_set_trips(struct thermal_zone_device *t= z, int low, int high) const struct lvts_data *lvts_data =3D lvts_ctrl->lvts_data; void __iomem *base =3D lvts_sensor->base; u32 raw_low =3D lvts_temp_to_raw(low !=3D -INT_MAX ? low : LVTS_MINIMUM_T= HRESHOLD, - lvts_data->temp_factor); - u32 raw_high =3D lvts_temp_to_raw(high, lvts_data->temp_factor); + lvts_data); + u32 raw_high =3D lvts_temp_to_raw(high, lvts_data); bool should_update_thresh; =20 lvts_sensor->low_thresh =3D low; @@ -1762,6 +1778,11 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_da= ta_ctrl[] =3D { } }; =20 +static const struct lvts_platform_ops lvts_platform_ops_mt7988 =3D { + .lvts_raw_to_temp =3D lvts_raw_to_temp_mt7988, + .lvts_temp_to_raw =3D lvts_temp_to_raw_mt7988, +}; + static const struct lvts_data mt7988_lvts_ap_data =3D { .lvts_ctrl =3D mt7988_lvts_ap_data_ctrl, .conn_cmd =3D mt7988_conn_cmds, @@ -1773,6 +1794,7 @@ static const struct lvts_data mt7988_lvts_ap_data =3D= { .temp_offset =3D LVTS_COEFF_B_MT7988, .gt_calib_bit_offset =3D 24, .num_cal_offsets =3D 3, + .ops =3D &lvts_platform_ops_mt7988, }; =20 static const struct lvts_data mt8186_lvts_data =3D { @@ -1787,6 +1809,7 @@ static const struct lvts_data mt8186_lvts_data =3D { .gt_calib_bit_offset =3D 24, .def_calibration =3D 19000, .num_cal_offsets =3D 3, + .ops =3D &lvts_platform_ops_mt7988, }; =20 static const struct lvts_data mt8188_lvts_mcu_data =3D { @@ -1801,6 +1824,7 @@ static const struct lvts_data mt8188_lvts_mcu_data = =3D { .gt_calib_bit_offset =3D 20, .def_calibration =3D 35000, .num_cal_offsets =3D 3, + .ops =3D &lvts_platform_ops_mt7988, }; =20 static const struct lvts_data mt8188_lvts_ap_data =3D { @@ -1815,6 +1839,7 @@ static const struct lvts_data mt8188_lvts_ap_data =3D= { .gt_calib_bit_offset =3D 20, .def_calibration =3D 35000, .num_cal_offsets =3D 3, + .ops =3D &lvts_platform_ops_mt7988, }; =20 static const struct lvts_data mt8192_lvts_mcu_data =3D { @@ -1829,6 +1854,7 @@ static const struct lvts_data mt8192_lvts_mcu_data = =3D { .gt_calib_bit_offset =3D 24, .def_calibration =3D 35000, .num_cal_offsets =3D 3, + .ops =3D &lvts_platform_ops_mt7988, }; =20 static const struct lvts_data mt8192_lvts_ap_data =3D { @@ -1843,6 +1869,7 @@ static const struct lvts_data mt8192_lvts_ap_data =3D= { .gt_calib_bit_offset =3D 24, .def_calibration =3D 35000, .num_cal_offsets =3D 3, + .ops =3D &lvts_platform_ops_mt7988, }; =20 static const struct lvts_data mt8195_lvts_mcu_data =3D { @@ -1857,6 +1884,7 @@ static const struct lvts_data mt8195_lvts_mcu_data = =3D { .gt_calib_bit_offset =3D 24, .def_calibration =3D 35000, .num_cal_offsets =3D 3, + .ops =3D &lvts_platform_ops_mt7988, }; =20 static const struct lvts_data mt8195_lvts_ap_data =3D { @@ -1871,6 +1899,7 @@ static const struct lvts_data mt8195_lvts_ap_data =3D= { .gt_calib_bit_offset =3D 24, .def_calibration =3D 35000, .num_cal_offsets =3D 3, + .ops =3D &lvts_platform_ops_mt7988, }; =20 static const struct of_device_id lvts_of_match[] =3D { --=20 2.39.5 From nobody Tue Dec 2 01:30:21 2025 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23064346FC3; Fri, 21 Nov 2025 11:17:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723838; cv=none; b=Z6zM6EarDxXf1Nf4WFDyzkIzKCN//HuKTv5m7aDKKOqRJolziO2m93KSoNnZFAlrXTfud9+JyvzCavumKrBeunKxL1bczUwQrtP4X+JMt69I+tWucAlCMU7XbCK9VPWHLjoZHJbu3Yt5mACNnHFkwP+46OJ7IkecnGjmVATGiyM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723838; c=relaxed/simple; bh=6YJLPO2KEF9QyWxLaPwxFzoKrk88Q8+O4pyGSdBlLAA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=qnXOkABNvOPBcBVfnz8+L4HAP3hr+bhdygMCeEIso4dyjcasDzjbXX2eRsHv2M5ldYgdf5WNbCrnONDwTjf1vIQGNhFBQQmcYgVthY9PkziVrON8e+7t0XTcMz5qGUmoYo9TFlwT/XMhVxCv1TCc3TnknSP8W5WXPD7cksxYsNs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=nQP53C4a; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="nQP53C4a" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1763723829; bh=6YJLPO2KEF9QyWxLaPwxFzoKrk88Q8+O4pyGSdBlLAA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nQP53C4aNcllaqDO3XfJj8E58ySqopLc2lmPgBcGShIjCc21m1Fu12LRDzy3GH8NZ josECmRaXYjnYbHyPkukHtE7o3SdB7s/UUyS6soW6NTz7HRtvZytCx6rYPF00x/xv/ Mc+4LPNYo0vD1tYYw5WEHAW3PBCbuxxm6Qk17LM3Rg3QhYeRG71XPC9VAVqlKMq7x6 fH1atf8vkkxJUsxPwVZHU/dkfiL8uFyqfjqZlHiy2ER0C02UqyH70gncO564dyG0AQ 57zA88Ui9vqusQDk1nyfQYb0JF9XfDbWnP3UeU9JSC6jQSyMNOT11s3QorH4hd4b0D Ntnw6WWkKMgKg== Received: from laura.lan (unknown [IPv6:2001:b07:646b:e2:c4bf:9969:6e1c:dc69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: laura.nao) by bali.collaboradmins.com (Postfix) with ESMTPSA id B287E17E156E; Fri, 21 Nov 2025 12:17:08 +0100 (CET) From: Laura Nao To: srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, rui.zhang@intel.com, lukasz.luba@arm.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com Cc: nfraprado@collabora.com, arnd@arndb.de, colin.i.king@gmail.com, u.kleine-koenig@baylibre.com, andrew-ct.chen@mediatek.com, lala.lin@mediatek.com, bchihi@baylibre.com, frank-w@public-files.de, wenst@chromium.org, fshao@chromium.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, Laura Nao Subject: [PATCH v4 5/9] thermal/drivers/mediatek/lvts: Add lvts_temp_to_raw variant Date: Fri, 21 Nov 2025 12:16:38 +0100 Message-Id: <20251121-mt8196-lvts-v4-v4-5-357f955a3176@collabora.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> References: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MT8196/MT6991 require a different version of lvts_temp_to_raw(), specifically the multiplicative inverse of the existing implementation. Introduce a variant of the function with inverted calculation logic to match this requirement. This ensures accurate raw value generation for temperature thresholds, avoiding spurious thermal interrupts or unintended hardware resets on MT8196/MT6991. Reviewed-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno Reviewed-by: Fei Shao Tested-by: AngeloGioacchino Del Regno Tested-by: Frank Wunderlich Signed-off-by: Laura Nao --- drivers/thermal/mediatek/lvts_thermal.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/medi= atek/lvts_thermal.c index d713c46c21fc..3e05b29f7b05 100644 --- a/drivers/thermal/mediatek/lvts_thermal.c +++ b/drivers/thermal/mediatek/lvts_thermal.c @@ -307,6 +307,15 @@ static u32 lvts_temp_to_raw_mt7988(int temperature, in= t temp_factor) return raw_temp; } =20 +static u32 lvts_temp_to_raw_mt8196(int temperature, int temp_factor) +{ + u32 raw_temp; + + raw_temp =3D temperature - golden_temp_offset; + + return div_s64((s64)temp_factor << 14, raw_temp); +} + static int lvts_get_temp(struct thermal_zone_device *tz, int *temp) { struct lvts_sensor *lvts_sensor =3D thermal_zone_device_priv(tz); --=20 2.39.5 From nobody Tue Dec 2 01:30:21 2025 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 38944346FC8; Fri, 21 Nov 2025 11:17:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723838; cv=none; b=ahP6q2Qh6ZvVXECPI8KxQTjEZS2Iz4G+nnOmhNpV97UaYKqmC3RedphTaJhY4OJokQWqdzGkwdinLpJpn5+8Bqes/KZCDScQt79HjdGdrkLQOgogFfvQ7RSGjk7pn0wpaRaQE9xll01PtWtxcT5Gj82ZViteU2UhRWUXFXr4Eoo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723838; c=relaxed/simple; bh=6gnRYR1BR+zY+l/p2hSGd49HW7k2oOy5hd7RDm+yfqA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=ZWNUmIGjhmQXakF+MP5G+U9iD7WxMolRVqBFcfmyY/2QDJh/k5zc3OF/KPbty6oBIeOCTRjUAEYR1+PxB3QPSRJIktgEhrcVeGvhE+a/+mY9N48QZSfK69BReGcEQAUXL+KCqAb9eBAcwnkCqCMTc1jlzzlJyeyatxthlU+Y9Rc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=Zqu9vj6d; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="Zqu9vj6d" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1763723831; bh=6gnRYR1BR+zY+l/p2hSGd49HW7k2oOy5hd7RDm+yfqA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zqu9vj6dMS699L5pN5z/VXwDMoHqH5havIrYTIwHNca6qv/oqQzNgQMzFkwHMd3BP ZGTTm0O45cRCg4jxKIa+goadfEomqI7C+T0jsONCaNkg3QWsTbFavIzPoKAYZIKgzd U+W8Y/0ekKrtIN753QZOfSdaiqlw1hUCjV22w+phtKePsSY3n94yg1v2C94aTogS75 edf99+6nyVRZnFf80UgNfaNE6HxS4Ill6l3t5C1FH05u3HnYJUfARwBdhXDxGjpAwz bNCi43MiKwkrSOJxQpMdF7UCQUbHerCWB0a05EgjfNkTWVVTBokTpixmaJDKAQA6P+ /nZCI58/wbv6Q== Received: from laura.lan (unknown [IPv6:2001:b07:646b:e2:c4bf:9969:6e1c:dc69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: laura.nao) by bali.collaboradmins.com (Postfix) with ESMTPSA id 1EA9E17E15C9; Fri, 21 Nov 2025 12:17:10 +0100 (CET) From: Laura Nao To: srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, rui.zhang@intel.com, lukasz.luba@arm.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com Cc: nfraprado@collabora.com, arnd@arndb.de, colin.i.king@gmail.com, u.kleine-koenig@baylibre.com, andrew-ct.chen@mediatek.com, lala.lin@mediatek.com, bchihi@baylibre.com, frank-w@public-files.de, wenst@chromium.org, fshao@chromium.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, Laura Nao Subject: [PATCH v4 6/9] thermal/drivers/mediatek/lvts: Add support for ATP mode Date: Fri, 21 Nov 2025 12:16:39 +0100 Message-Id: <20251121-mt8196-lvts-v4-v4-6-357f955a3176@collabora.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> References: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable MT8196/MT6991 uses ATP (Abnormal Temperature Prevention) mode to detect abnormal temperature conditions, which involves reading temperature data from a dedicated set of registers separate from the ones used for immediate and filtered modes. Add support for ATP mode and its relative registers to ensure accurate temperature readings and proper thermal management on MT8196/MT6991 devices. While at it, convert mode defines to enum. Reviewed-by: Chen-Yu Tsai Reviewed-by: AngeloGioacchino Del Regno Reviewed-by: Fei Shao Tested-by: AngeloGioacchino Del Regno Tested-by: Frank Wunderlich Signed-off-by: Laura Nao --- drivers/thermal/mediatek/lvts_thermal.c | 44 +++++++++++++++++++++++++++--= ---- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/medi= atek/lvts_thermal.c index 3e05b29f7b05..d1bfbcb1a7d0 100644 --- a/drivers/thermal/mediatek/lvts_thermal.c +++ b/drivers/thermal/mediatek/lvts_thermal.c @@ -44,6 +44,10 @@ #define LVTS_EDATA01(__base) (__base + 0x0058) #define LVTS_EDATA02(__base) (__base + 0x005C) #define LVTS_EDATA03(__base) (__base + 0x0060) +#define LVTS_ATP0(__base) (__base + 0x0070) +#define LVTS_ATP1(__base) (__base + 0x0074) +#define LVTS_ATP2(__base) (__base + 0x0078) +#define LVTS_ATP3(__base) (__base + 0x007C) #define LVTS_MSR0(__base) (__base + 0x0090) #define LVTS_MSR1(__base) (__base + 0x0094) #define LVTS_MSR2(__base) (__base + 0x0098) @@ -88,9 +92,6 @@ #define LVTS_COEFF_A_MT7988 -204650 #define LVTS_COEFF_B_MT7988 204650 =20 -#define LVTS_MSR_IMMEDIATE_MODE 0 -#define LVTS_MSR_FILTERED_MODE 1 - #define LVTS_MSR_READ_TIMEOUT_US 400 #define LVTS_MSR_READ_WAIT_US (LVTS_MSR_READ_TIMEOUT_US / 2) =20 @@ -101,6 +102,12 @@ static int golden_temp =3D LVTS_GOLDEN_TEMP_DEFAULT; static int golden_temp_offset; =20 +enum lvts_msr_mode { + LVTS_MSR_IMMEDIATE_MODE, + LVTS_MSR_FILTERED_MODE, + LVTS_MSR_ATP_MODE, +}; + struct lvts_sensor_data { int dt_id; u8 cal_offsets[LVTS_MAX_CAL_OFFSETS]; @@ -110,7 +117,7 @@ struct lvts_ctrl_data { struct lvts_sensor_data lvts_sensor[LVTS_SENSOR_MAX]; u8 valid_sensor_mask; int offset; - int mode; + enum lvts_msr_mode mode; }; =20 #define VALID_SENSOR_MAP(s0, s1, s2, s3) \ @@ -211,6 +218,10 @@ static const struct debugfs_reg32 lvts_regs[] =3D { LVTS_DEBUG_FS_REGS(LVTS_EDATA01), LVTS_DEBUG_FS_REGS(LVTS_EDATA02), LVTS_DEBUG_FS_REGS(LVTS_EDATA03), + LVTS_DEBUG_FS_REGS(LVTS_ATP0), + LVTS_DEBUG_FS_REGS(LVTS_ATP1), + LVTS_DEBUG_FS_REGS(LVTS_ATP2), + LVTS_DEBUG_FS_REGS(LVTS_ATP3), LVTS_DEBUG_FS_REGS(LVTS_MSR0), LVTS_DEBUG_FS_REGS(LVTS_MSR1), LVTS_DEBUG_FS_REGS(LVTS_MSR2), @@ -627,6 +638,13 @@ static int lvts_sensor_init(struct device *dev, struct= lvts_ctrl *lvts_ctrl, LVTS_IMMD3(lvts_ctrl->base) }; =20 + void __iomem *atp_regs[] =3D { + LVTS_ATP0(lvts_ctrl->base), + LVTS_ATP1(lvts_ctrl->base), + LVTS_ATP2(lvts_ctrl->base), + LVTS_ATP3(lvts_ctrl->base) + }; + int i; =20 lvts_for_each_valid_sensor(i, lvts_ctrl_data) { @@ -662,8 +680,20 @@ static int lvts_sensor_init(struct device *dev, struct= lvts_ctrl *lvts_ctrl, /* * Each sensor has its own register address to read from. */ - lvts_sensor[i].msr =3D lvts_ctrl_data->mode =3D=3D LVTS_MSR_IMMEDIATE_MO= DE ? - imm_regs[i] : msr_regs[i]; + switch (lvts_ctrl_data->mode) { + case LVTS_MSR_IMMEDIATE_MODE: + lvts_sensor[i].msr =3D imm_regs[i]; + break; + case LVTS_MSR_FILTERED_MODE: + lvts_sensor[i].msr =3D msr_regs[i]; + break; + case LVTS_MSR_ATP_MODE: + lvts_sensor[i].msr =3D atp_regs[i]; + break; + default: + lvts_sensor[i].msr =3D imm_regs[i]; + break; + } =20 lvts_sensor[i].low_thresh =3D INT_MIN; lvts_sensor[i].high_thresh =3D INT_MIN; @@ -913,7 +943,7 @@ static void lvts_ctrl_monitor_enable(struct device *dev= , struct lvts_ctrl *lvts_ u32 sensor_map =3D 0; int i; =20 - if (lvts_ctrl->mode !=3D LVTS_MSR_FILTERED_MODE) + if (lvts_ctrl->mode =3D=3D LVTS_MSR_IMMEDIATE_MODE) return; =20 if (enable) { --=20 2.39.5 From nobody Tue Dec 2 01:30:21 2025 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E7E0347BC6; Fri, 21 Nov 2025 11:17:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723839; cv=none; b=aZbVhlWIxgMBD8bNbvBWaSJABGTAp4OWeHGktonxhYjwN46YVV6CXegngrOY/6OOZoGHo8BOl7hi6BIeNUZ3de/0a3ifodiygTpAcN1Cvok/CQAT1TWoDFsG2JEBTwJXeozRNh11EqYioI26JyM+EFGG/4+rEXOuQ96k4ljouYc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723839; c=relaxed/simple; bh=CwepC8yqeaRnnicwyhA3IjDb1SuVWrSSGjrDhmIJNMs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=bRQUhx72nJOJ13RZkPDQ00XwImZMaq5n90tJdZuQgImtm9gvC6hWHLmx3zcL85NVeQofLZhHgJIZfdGpEXX0RlV6I9G3aK4qKTwfIwLNkqsddPuRwvZH9+t3ilKlU29zdEEOk12Dnc7fAIQoYovSCHR+l3L5f5Phj/rpcjIM0Nc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=J7WyscAI; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="J7WyscAI" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1763723832; bh=CwepC8yqeaRnnicwyhA3IjDb1SuVWrSSGjrDhmIJNMs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=J7WyscAIaAh0iVhvFbZjMLc9LETtu++q9rw/nAamzP5vYsww8W/Y7HRT9NnTX7i1+ UjtY6eQGAt1Gzpwtxh4NOAQPjBcRZ5j2m5dfQr6LOjWgK0QQKi5EvoI1CL4XyQYwBx JXiSmdPxlig0GHDUkbi9uxuZ4tnsxAPX2z8E+T+Tz/UFRiaMlzHllXaYucASzr4Rg0 rJOO/0aZ5pKmIq44Lb49rxkGjOkXieNIYldyAnlGo5FUKCkCwlDLQetZgsOJB4MDIa 71CBZKfbfByu2WTNcOBVIeg/AQwRvL5mo0W/Sj35FCU7vf3f9E/wMomAjZm77DLYJ5 rTyzngC3Z2qoA== Received: from laura.lan (unknown [IPv6:2001:b07:646b:e2:c4bf:9969:6e1c:dc69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: laura.nao) by bali.collaboradmins.com (Postfix) with ESMTPSA id 7CAB417E35CB; Fri, 21 Nov 2025 12:17:11 +0100 (CET) From: Laura Nao To: srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, rui.zhang@intel.com, lukasz.luba@arm.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com Cc: nfraprado@collabora.com, arnd@arndb.de, colin.i.king@gmail.com, u.kleine-koenig@baylibre.com, andrew-ct.chen@mediatek.com, lala.lin@mediatek.com, bchihi@baylibre.com, frank-w@public-files.de, wenst@chromium.org, fshao@chromium.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, Laura Nao Subject: [PATCH v4 7/9] thermal/drivers/mediatek/lvts: Support MSR offset for 16-bit calibration data Date: Fri, 21 Nov 2025 12:16:40 +0100 Message-Id: <20251121-mt8196-lvts-v4-v4-7-357f955a3176@collabora.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> References: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable On MT8196/MT6991, per-sensor calibration data read from eFuses is 16-bit. When the LVTS controller operates in 16-bit mode, a fixed offset must be added to MSR values during post-processing to obtain correct temperature readings. Introduce a new msr_offset field in lvts_data, program the respective register and apply the offset to the calibration data read from eFuses. Reviewed-by: AngeloGioacchino Del Regno Tested-by: AngeloGioacchino Del Regno Tested-by: Frank Wunderlich Signed-off-by: Laura Nao --- drivers/thermal/mediatek/lvts_thermal.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/medi= atek/lvts_thermal.c index d1bfbcb1a7d0..6558994cbee0 100644 --- a/drivers/thermal/mediatek/lvts_thermal.c +++ b/drivers/thermal/mediatek/lvts_thermal.c @@ -44,6 +44,7 @@ #define LVTS_EDATA01(__base) (__base + 0x0058) #define LVTS_EDATA02(__base) (__base + 0x005C) #define LVTS_EDATA03(__base) (__base + 0x0060) +#define LVTS_MSROFT(__base) (__base + 0x006C) #define LVTS_ATP0(__base) (__base + 0x0070) #define LVTS_ATP1(__base) (__base + 0x0074) #define LVTS_ATP2(__base) (__base + 0x0078) @@ -150,6 +151,7 @@ struct lvts_data { int temp_offset; int gt_calib_bit_offset; unsigned int def_calibration; + u16 msr_offset; }; =20 struct lvts_sensor { @@ -218,6 +220,7 @@ static const struct debugfs_reg32 lvts_regs[] =3D { LVTS_DEBUG_FS_REGS(LVTS_EDATA01), LVTS_DEBUG_FS_REGS(LVTS_EDATA02), LVTS_DEBUG_FS_REGS(LVTS_EDATA03), + LVTS_DEBUG_FS_REGS(LVTS_MSROFT), LVTS_DEBUG_FS_REGS(LVTS_ATP0), LVTS_DEBUG_FS_REGS(LVTS_ATP1), LVTS_DEBUG_FS_REGS(LVTS_ATP2), @@ -790,6 +793,8 @@ static int lvts_calibration_init(struct device *dev, st= ruct lvts_ctrl *lvts_ctrl =20 if (gt) { lvts_ctrl->calibration[i] =3D calib; + if (lvts_ctrl->lvts_data->msr_offset) + lvts_ctrl->calibration[i] +=3D lvts_ctrl->lvts_data->msr_offset; } else if (lvts_ctrl->lvts_data->def_calibration) { lvts_ctrl->calibration[i] =3D lvts_ctrl->lvts_data->def_calibration; } else { @@ -1097,6 +1102,17 @@ static int lvts_ctrl_calibrate(struct device *dev, s= truct lvts_ctrl *lvts_ctrl) for (i =3D 0; i < LVTS_SENSOR_MAX; i++) writel(lvts_ctrl->calibration[i], lvts_edata[i]); =20 + /* LVTS_MSROFT : Constant offset applied to MSR values + * for post-processing + * + * Bits: + * + * 20-0 : Constant data added to MSR values + */ + if (lvts_ctrl->lvts_data->msr_offset) + writel(lvts_ctrl->lvts_data->msr_offset, + LVTS_MSROFT(lvts_ctrl->base)); + return 0; } =20 --=20 2.39.5 From nobody Tue Dec 2 01:30:21 2025 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49C79347BBF; Fri, 21 Nov 2025 11:17:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723839; cv=none; b=Tu5x0aynfYXk2hEj/8HtMXj3yltS1rQrCHgpeSGiLcn+C8YMrm7sh9cKjKWw7Peb1fW28+4EXWklZq4Av03uCitpN1HHDlThhomDL/lUnEZA8SfD1miZ2xQbBv5y2w3BSj9cVDEMFsoeTo1YPwgdfBJh+7D1bR6f5wgNXnIbQOc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723839; c=relaxed/simple; bh=FWX6doiIFJbuvcNXJG2PzUmhBN7PahCOqtK0OpcsM8c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=khFC7bgqv/y6ZtCVvDok3R5Dsd9vfuZt/01QaUdSpx76cuDIKKd9WoirS9CcaEChdn+hsDcHgPWFAsibb4mwnsyGl4Jfj7Hpx6s1rjY0Uk722+WDSayJXjUdRx1Wz6O/aIzNK1gciIBn75FPDXTAcFqxt2/fMifSD/o4iY6+8g8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=bxOumx2O; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="bxOumx2O" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1763723834; bh=FWX6doiIFJbuvcNXJG2PzUmhBN7PahCOqtK0OpcsM8c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bxOumx2O8USLvbi7czzpsQGWtCMAMZgqCNUI4Fs8jPifuGTwuBwFat7uqo8Vkang5 iO30lQu8VHgygYKbZ3N48zat91bf0vOyPmWgThytAAb0GiOUc/Jy11wncSvoUQq1h+ nlpU6Q8bzc5f5Lz6tjyjzf9gsxFTZr2N9DG4TDLEWeCqHoAs5OgWga0oscQd20iPKo r8JJu/cRGucsFj69Emg+DQnglvXLSo4dTnAHSS61QKLlEvamXvasZjJWTGLPr+6EGh PdAHipzXhtQ5+iXrIBBWrbWiSrTL4jfItRRFiWYMMZ9ovQ/dg7ALXn41EO18et/C4b qJ8cUhrSB4nqw== Received: from laura.lan (unknown [IPv6:2001:b07:646b:e2:c4bf:9969:6e1c:dc69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: laura.nao) by bali.collaboradmins.com (Postfix) with ESMTPSA id D911117E35D3; Fri, 21 Nov 2025 12:17:12 +0100 (CET) From: Laura Nao To: srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, rui.zhang@intel.com, lukasz.luba@arm.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com Cc: nfraprado@collabora.com, arnd@arndb.de, colin.i.king@gmail.com, u.kleine-koenig@baylibre.com, andrew-ct.chen@mediatek.com, lala.lin@mediatek.com, bchihi@baylibre.com, frank-w@public-files.de, wenst@chromium.org, fshao@chromium.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, Laura Nao Subject: [PATCH v4 8/9] thermal/drivers/mediatek/lvts_thermal: Add MT8196 support Date: Fri, 21 Nov 2025 12:16:41 +0100 Message-Id: <20251121-mt8196-lvts-v4-v4-8-357f955a3176@collabora.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> References: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add LVTS driver support for MT8196. Reviewed-by: AngeloGioacchino Del Regno Tested-by: AngeloGioacchino Del Regno Tested-by: Frank Wunderlich Signed-off-by: Laura Nao --- drivers/thermal/mediatek/lvts_thermal.c | 164 ++++++++++++++++++++++++++++= ++++ 1 file changed, 164 insertions(+) diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/medi= atek/lvts_thermal.c index 6558994cbee0..c1e20150b92c 100644 --- a/drivers/thermal/mediatek/lvts_thermal.c +++ b/drivers/thermal/mediatek/lvts_thermal.c @@ -92,6 +92,10 @@ #define LVTS_COEFF_B_MT8195 250460 #define LVTS_COEFF_A_MT7988 -204650 #define LVTS_COEFF_B_MT7988 204650 +#define LVTS_COEFF_A_MT8196 391460 +#define LVTS_COEFF_B_MT8196 -391460 + +#define LVTS_MSR_OFFSET_MT8196 -984 =20 #define LVTS_MSR_READ_TIMEOUT_US 400 #define LVTS_MSR_READ_WAIT_US (LVTS_MSR_READ_TIMEOUT_US / 2) @@ -763,6 +767,39 @@ 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 * + * MT8196 : + * Stream index map for MCU Domain mt8196 : + * + * <-sensor#1--> <-sensor#0--> <-sensor#3--> <-sensor#2--> + * 0x04 | 0x05 | 0x06 | 0x07 | 0x08 | 0x09 | 0x0A | 0x0B + * + * <-sensor#5--> <-sensor#4--> <-sensor#7--> <-sensor#6--> + * 0x0C | 0x0D | 0x0E | 0x0F | 0x10 | 0x11 | 0x12 | 0x13 + * + * <-sensor#9--> <-sensor#8--> <-sensor#11-> <-sensor#10-> + * 0x14 | 0x15 | 0x16 | 0x17 | 0x18 | 0x19 | 0x1A | 0X1B + * + * <-sensor#13-> <-sensor#12-> <-sensor#15-> <-sensor#14-> + * 0x1C | 0x1D | 0x1E | 0x1F | 0x20 | 0x21 | 0x22 | 0x23 + * + * Stream index map for APU Domain mt8196 : + * + * <-sensor#1--> <-sensor#0--> <-sensor#3--> <-sensor#2--> + * 0x24 | 0x25 | 0x26 | 0x27 | 0x28 | 0x29 | 0x2A | 0x2B + * + * Stream index map for GPU Domain mt8196 : + * + * <-sensor#1--> <-sensor#0--> + * 0x2C | 0x2D | 0x2E | 0x2F + * + * Stream index map for AP Domain mt8196 : + * + * <-sensor#1--> <-sensor#0--> <-sensor#3--> <-sensor#2--> + * 0x30 | 0x31 | 0x32 | 0x33 | 0x34 | 0x35 | 0x36 | 0x37 + * + * <-sensor#5--> <-sensor#4--> <-sensor#6--> <-sensor#7--> + * 0x38 | 0x39 | 0x3A | 0x3B | 0x3C | 0x3D | 0x3E | 0x3F + * * Note: In some cases, values don't strictly follow a little endian order= ing. * The data description gives byte offsets constituting each calibration v= alue * for each sensor. @@ -1833,11 +1870,112 @@ static const struct lvts_ctrl_data mt8195_lvts_ap_= data_ctrl[] =3D { } }; =20 +static const struct lvts_ctrl_data mt8196_lvts_mcu_data_ctrl[] =3D { + { + .lvts_sensor =3D { + { .dt_id =3D MT8196_MCU_MEDIUM_CPU6_0, + .cal_offsets =3D { 0x06, 0x07 } }, + { .dt_id =3D MT8196_MCU_MEDIUM_CPU6_1, + .cal_offsets =3D { 0x04, 0x05 } }, + { .dt_id =3D MT8196_MCU_DSU2, + .cal_offsets =3D { 0x0A, 0x0B } }, + { .dt_id =3D MT8196_MCU_DSU3, + .cal_offsets =3D { 0x08, 0x09 } } + }, + VALID_SENSOR_MAP(1, 1, 1, 1), + .offset =3D 0x0, + .mode =3D LVTS_MSR_ATP_MODE, + }, + { + .lvts_sensor =3D { + { .dt_id =3D MT8196_MCU_LITTLE_CPU3, + .cal_offsets =3D { 0x0E, 0x0F } }, + { .dt_id =3D MT8196_MCU_LITTLE_CPU0, + .cal_offsets =3D { 0x0C, 0x0D } }, + { .dt_id =3D MT8196_MCU_LITTLE_CPU1, + .cal_offsets =3D { 0x12, 0x13 } }, + { .dt_id =3D MT8196_MCU_LITTLE_CPU2, + .cal_offsets =3D { 0x10, 0x11 } } + }, + VALID_SENSOR_MAP(1, 1, 1, 1), + .offset =3D 0x100, + .mode =3D LVTS_MSR_ATP_MODE, + }, + { + .lvts_sensor =3D { + { .dt_id =3D MT8196_MCU_MEDIUM_CPU4_0, + .cal_offsets =3D { 0x16, 0x17 } }, + { .dt_id =3D MT8196_MCU_MEDIUM_CPU4_1, + .cal_offsets =3D { 0x14, 0x15 } }, + { .dt_id =3D MT8196_MCU_MEDIUM_CPU5_0, + .cal_offsets =3D { 0x1A, 0x1B } }, + { .dt_id =3D MT8196_MCU_MEDIUM_CPU5_1, + .cal_offsets =3D { 0x18, 0x19 } } + }, + VALID_SENSOR_MAP(1, 1, 1, 1), + .offset =3D 0x200, + .mode =3D LVTS_MSR_ATP_MODE, + }, + { + .lvts_sensor =3D { + { .dt_id =3D MT8196_MCU_DSU0, + .cal_offsets =3D { 0x1E, 0x1F } }, + { .dt_id =3D MT8196_MCU_DSU1, + .cal_offsets =3D { 0x1C, 0x1D } }, + { .dt_id =3D MT8196_MCU_BIG_CPU7_0, + .cal_offsets =3D { 0x22, 0x23 } }, + { .dt_id =3D MT8196_MCU_BIG_CPU7_1, + .cal_offsets =3D { 0x20, 0x21 } } + }, + VALID_SENSOR_MAP(1, 1, 1, 1), + .offset =3D 0x300, + .mode =3D LVTS_MSR_ATP_MODE, + } +}; + +static const struct lvts_ctrl_data mt8196_lvts_ap_data_ctrl[] =3D { + { + .lvts_sensor =3D { + { .dt_id =3D MT8196_AP_TOP0, + .cal_offsets =3D { 0x32, 0x33 } }, + { .dt_id =3D MT8196_AP_TOP1, + .cal_offsets =3D { 0x30, 0x31 } }, + { .dt_id =3D MT8196_AP_TOP2, + .cal_offsets =3D { 0x36, 0x37 } }, + { .dt_id =3D MT8196_AP_TOP3, + .cal_offsets =3D { 0x34, 0x35 } } + }, + VALID_SENSOR_MAP(1, 1, 1, 1), + .offset =3D 0x0, + .mode =3D LVTS_MSR_ATP_MODE, + }, + { + .lvts_sensor =3D { + { .dt_id =3D MT8196_AP_BOT0, + .cal_offsets =3D { 0x3A, 0x3B } }, + { .dt_id =3D MT8196_AP_BOT1, + .cal_offsets =3D { 0x38, 0x39 } }, + { .dt_id =3D MT8196_AP_BOT2, + .cal_offsets =3D { 0x3E, 0x3F } }, + { .dt_id =3D MT8196_AP_BOT3, + .cal_offsets =3D { 0x3C, 0x3D } } + }, + VALID_SENSOR_MAP(1, 1, 1, 1), + .offset =3D 0x100, + .mode =3D LVTS_MSR_ATP_MODE, + } +}; + static const struct lvts_platform_ops lvts_platform_ops_mt7988 =3D { .lvts_raw_to_temp =3D lvts_raw_to_temp_mt7988, .lvts_temp_to_raw =3D lvts_temp_to_raw_mt7988, }; =20 +static const struct lvts_platform_ops lvts_platform_ops_mt8196 =3D { + .lvts_raw_to_temp =3D lvts_raw_to_temp_mt7988, + .lvts_temp_to_raw =3D lvts_temp_to_raw_mt8196, +}; + static const struct lvts_data mt7988_lvts_ap_data =3D { .lvts_ctrl =3D mt7988_lvts_ap_data_ctrl, .conn_cmd =3D mt7988_conn_cmds, @@ -1957,6 +2095,30 @@ static const struct lvts_data mt8195_lvts_ap_data = =3D { .ops =3D &lvts_platform_ops_mt7988, }; =20 +static const struct lvts_data mt8196_lvts_mcu_data =3D { + .lvts_ctrl =3D mt8196_lvts_mcu_data_ctrl, + .num_lvts_ctrl =3D ARRAY_SIZE(mt8196_lvts_mcu_data_ctrl), + .temp_factor =3D LVTS_COEFF_A_MT8196, + .temp_offset =3D LVTS_COEFF_B_MT8196, + .gt_calib_bit_offset =3D 0, + .def_calibration =3D 14437, + .num_cal_offsets =3D 2, + .msr_offset =3D LVTS_MSR_OFFSET_MT8196, + .ops =3D &lvts_platform_ops_mt8196, +}; + +static const struct lvts_data mt8196_lvts_ap_data =3D { + .lvts_ctrl =3D mt8196_lvts_ap_data_ctrl, + .num_lvts_ctrl =3D ARRAY_SIZE(mt8196_lvts_ap_data_ctrl), + .temp_factor =3D LVTS_COEFF_A_MT8196, + .temp_offset =3D LVTS_COEFF_B_MT8196, + .gt_calib_bit_offset =3D 0, + .def_calibration =3D 14437, + .num_cal_offsets =3D 2, + .msr_offset =3D LVTS_MSR_OFFSET_MT8196, + .ops =3D &lvts_platform_ops_mt8196, +}; + static const struct of_device_id lvts_of_match[] =3D { { .compatible =3D "mediatek,mt7988-lvts-ap", .data =3D &mt7988_lvts_ap_da= ta }, { .compatible =3D "mediatek,mt8186-lvts", .data =3D &mt8186_lvts_data }, @@ -1966,6 +2128,8 @@ static const struct of_device_id lvts_of_match[] =3D { { .compatible =3D "mediatek,mt8192-lvts-ap", .data =3D &mt8192_lvts_ap_da= ta }, { .compatible =3D "mediatek,mt8195-lvts-mcu", .data =3D &mt8195_lvts_mcu_= data }, { .compatible =3D "mediatek,mt8195-lvts-ap", .data =3D &mt8195_lvts_ap_da= ta }, + { .compatible =3D "mediatek,mt8196-lvts-mcu", .data =3D &mt8196_lvts_mcu_= data }, + { .compatible =3D "mediatek,mt8196-lvts-ap", .data =3D &mt8196_lvts_ap_da= ta }, {}, }; MODULE_DEVICE_TABLE(of, lvts_of_match); --=20 2.39.5 From nobody Tue Dec 2 01:30:21 2025 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4388534888D; Fri, 21 Nov 2025 11:17:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723841; cv=none; b=JxCtTWZab7SKAGFEJNmRxEu1QFpUhxY++OmzMy/csU8aiegPIOQGvK7aEQxSG6k7PBNHcfV8UfQlnO7yV4n8fOvpMV/XIefOjJGzSABD+bgJutAXwbT+yPGj4tI1VpJ+IWoZIZxWW9gNPzwbmh4smDYQX/2g6l/d+bmPpsAVFDQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763723841; c=relaxed/simple; bh=4DAkv37ea+2d/7BYgVUeJPDn9xhNgNPTUmdoIJAvKNE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=TzqYdAxdRbZXVZrFcTn5CJ4MkW9o3rK3Ix30Hn0tCeIBq/ZuoSutIe5yKfcWvzTNA+9iUZBYtxlY2ySbpvfAmgIA42pLOLMiVnsyEG87mjvBNIN3VnNW5XOyLB1WrKayidZk7YBfc5j66DT8QFFwUaPTrZasH5sO+uYYSibxknQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=YuKux2y8; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="YuKux2y8" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1763723835; bh=4DAkv37ea+2d/7BYgVUeJPDn9xhNgNPTUmdoIJAvKNE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YuKux2y803kTOAJcF6X2LPMPlw3oOtE2QVU7UxPy8A8RkM1SyqxkdofM7e93VjNjb 37c2AcUJT9J+hyhSMJQ9d2FREgcdsKC9I9mlqCRT2XxTX9SDgj1uodXh8+9gciznCk djtHadqgkkdy//S8rmr7wCe+deTIaxGw6izifKBGtam0AmlTt+9yDJMYV0PDFIJ0n+ woFJmXbPRRsVJNx1IUrtpas0HeuuOd6jUt5Hl8Ifif1dxV2p163zwF97S5DPMC79hH sHb7l2Ei87LmE8YWsiXeZoYQTFgyVabVKxfJnUyXVPoDyK5/t9O4SiFCkTngtoap6w 5D9KdoCisehKw== Received: from laura.lan (unknown [IPv6:2001:b07:646b:e2:c4bf:9969:6e1c:dc69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: laura.nao) by bali.collaboradmins.com (Postfix) with ESMTPSA id 3EDE717E3682; Fri, 21 Nov 2025 12:17:14 +0100 (CET) From: Laura Nao To: srini@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, rafael@kernel.org, daniel.lezcano@linaro.org, rui.zhang@intel.com, lukasz.luba@arm.com, matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com Cc: nfraprado@collabora.com, arnd@arndb.de, colin.i.king@gmail.com, u.kleine-koenig@baylibre.com, andrew-ct.chen@mediatek.com, lala.lin@mediatek.com, bchihi@baylibre.com, frank-w@public-files.de, wenst@chromium.org, fshao@chromium.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, kernel@collabora.com, Laura Nao Subject: [PATCH v4 9/9] dt-bindings: nvmem: mediatek: efuse: Add support for MT8196 Date: Fri, 21 Nov 2025 12:16:42 +0100 Message-Id: <20251121-mt8196-lvts-v4-v4-9-357f955a3176@collabora.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> References: <20251121-mt8196-lvts-v4-v4-0-357f955a3176@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The MT8196 eFuse layout is compatible with MT8186 and shares the same decoding scheme for the gpu-speedbin cell. Reviewed-by: AngeloGioacchino Del Regno Acked-by: Rob Herring (Arm) Tested-by: AngeloGioacchino Del Regno Tested-by: Frank Wunderlich Signed-off-by: Laura Nao --- Documentation/devicetree/bindings/nvmem/mediatek,efuse.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/devicetree/bindings/nvmem/mediatek,efuse.yaml b/= Documentation/devicetree/bindings/nvmem/mediatek,efuse.yaml index c9bf34ee0efb..f9323b3ecfc8 100644 --- a/Documentation/devicetree/bindings/nvmem/mediatek,efuse.yaml +++ b/Documentation/devicetree/bindings/nvmem/mediatek,efuse.yaml @@ -28,6 +28,7 @@ properties: - enum: - mediatek,mt8188-efuse - mediatek,mt8189-efuse + - mediatek,mt8196-efuse - const: mediatek,mt8186-efuse - const: mediatek,mt8186-efuse =20 --=20 2.39.5