From nobody Tue Dec 2 02:04:58 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