From: Anand Moon <linux.amoon@gmail.com>
To: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
Krzysztof Kozlowski <krzk@kernel.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Zhang Rui <rui.zhang@intel.com>,
Lukasz Luba <lukasz.luba@arm.com>,
Alim Akhtar <alim.akhtar@samsung.com>,
linux-pm@vger.kernel.org (open list:SAMSUNG THERMAL DRIVER),
linux-samsung-soc@vger.kernel.org (open list:SAMSUNG THERMAL
DRIVER),
linux-arm-kernel@lists.infradead.org (moderated list:ARM/SAMSUNG
S3C, S5P AND EXYNOS ARM ARCHITECTURES),
linux-kernel@vger.kernel.org (open list)
Cc: Anand Moon <linux.amoon@gmail.com>
Subject: [RRC v1 2/3] thermal/drivers/exynos: Handle temperature threshold interrupts and clear corresponding IRQs
Date: Mon, 16 Jun 2025 22:08:23 +0530 [thread overview]
Message-ID: <20250616163831.8138-3-linux.amoon@gmail.com> (raw)
In-Reply-To: <20250616163831.8138-1-linux.amoon@gmail.com>
As per the Exynos TMU user manual the interrupt status register, maps the
active rising and falling edges of interrupt to the appropriate clear bit,
and writes it to the interrupt clear register to acknowledge and
clear the interrupt. This ensures that only the relevant interrupt
is cleared and allows the system to respond appropriately to thermal
events. As per the comment Exynos4210 doesn't support FALL IRQs at all.
So add the check accordingly.
Signed-off-by: Anand Moon <linux.amoon@gmail.com>
---
drivers/thermal/samsung/exynos_tmu.c | 48 ++++++++++++++++++++++------
1 file changed, 38 insertions(+), 10 deletions(-)
diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
index c625eddcb9f3..b7522b7b1230 100644
--- a/drivers/thermal/samsung/exynos_tmu.c
+++ b/drivers/thermal/samsung/exynos_tmu.c
@@ -70,6 +70,20 @@
#define EXYNOS_EMUL_DATA_MASK 0xFF
#define EXYNOS_EMUL_ENABLE 0x1
+#define INTSTAT_FALL2 BIT(24)
+#define INTSTAT_FALL1 BIT(20)
+#define INTSTAT_FALL0 BIT(16)
+#define INTSTAT_RISE2 BIT(8)
+#define INTSTAT_RISE1 BIT(4)
+#define INTSTAT_RISE0 BIT(0)
+
+#define INTCLEAR_FALL2 BIT(24)
+#define INTCLEAR_FALL1 BIT(20)
+#define INTCLEAR_FALL0 BIT(16)
+#define INTCLEAR_RISE2 BIT(8)
+#define INTCLEAR_RISE1 BIT(4)
+#define INTCLEAR_RISE0 BIT(0)
+
/* Exynos5260 specific */
#define EXYNOS5260_TMU_REG_INTEN 0xC0
#define EXYNOS5260_TMU_REG_INTSTAT 0xC4
@@ -773,7 +787,7 @@ static irqreturn_t exynos_tmu_threaded_irq(int irq, void *id)
static void exynos4210_tmu_clear_irqs(struct exynos_tmu_data *data)
{
- unsigned int val_irq;
+ unsigned int val_irq, clearirq = 0;
u32 tmu_intstat, tmu_intclear;
if (data->soc == SOC_ARCH_EXYNOS5260) {
@@ -791,15 +805,29 @@ static void exynos4210_tmu_clear_irqs(struct exynos_tmu_data *data)
}
val_irq = readl(data->base + tmu_intstat);
- /*
- * Clear the interrupts. Please note that the documentation for
- * Exynos3250, Exynos4412, Exynos5250 and Exynos5260 incorrectly
- * states that INTCLEAR register has a different placing of bits
- * responsible for FALL IRQs than INTSTAT register. Exynos5420
- * and Exynos5440 documentation is correct (Exynos4210 doesn't
- * support FALL IRQs at all).
- */
- writel(val_irq, data->base + tmu_intclear);
+
+ if (data->soc == SOC_ARCH_EXYNOS4210) {
+ writel(val_irq, data->base + tmu_intclear);
+ return;
+ }
+
+ /* Map INTSTAT bits to INTCLEAR bits */
+ if (val_irq & INTSTAT_FALL2)
+ clearirq |= INTCLEAR_FALL2;
+ else if (val_irq & INTSTAT_FALL1)
+ clearirq |= INTCLEAR_FALL1;
+ else if (val_irq & INTSTAT_FALL0)
+ clearirq |= INTCLEAR_FALL0;
+ else if (val_irq & INTSTAT_RISE2)
+ clearirq |= INTCLEAR_RISE2;
+ else if (val_irq & INTSTAT_RISE1)
+ clearirq |= INTCLEAR_RISE1;
+ else if (val_irq & INTSTAT_RISE0)
+ clearirq |= INTCLEAR_RISE0;
+
+ /* Perform proper task for decrease temperature */
+ if (clearirq)
+ writel(clearirq, data->base + tmu_intclear);
}
static const struct of_device_id exynos_tmu_match[] = {
--
2.49.0
next prev parent reply other threads:[~2025-06-16 16:39 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-16 16:38 [RRC v1 0/3] Simplify Exynos TMU IRQ clean logic Anand Moon
2025-06-16 16:38 ` [RRC v1 1/3] thermal/drivers/exynos: Remove unused base_second mapping and references Anand Moon
[not found] ` <CGME20250618125812eucas1p11a1ab5210d4efa95a51b3bc7c4f0924d@eucas1p1.samsung.com>
2025-06-18 12:58 ` Mateusz Majewski
2025-06-19 5:45 ` Anand Moon
2025-06-21 7:17 ` Anand Moon
[not found] ` <CGME20250625143825eucas1p2e95ba80552cd289b6e05db33f32ec14a@eucas1p2.samsung.com>
2025-06-25 14:38 ` Mateusz Majewski
2025-06-26 18:22 ` Anand Moon
2025-06-16 16:38 ` Anand Moon [this message]
[not found] ` <CGME20250618115220eucas1p2b9d37e8cdd1997fa010f51cecdea5e4f@eucas1p2.samsung.com>
2025-06-18 11:52 ` [RRC v1 2/3] thermal/drivers/exynos: Handle temperature threshold interrupts and clear corresponding IRQs Mateusz Majewski
2025-06-19 5:45 ` Anand Moon
2025-06-21 7:16 ` Anand Moon
[not found] ` <CGME20250624075847eucas1p2db6e908f78aa603bdf6aec38b653e9af@eucas1p2.samsung.com>
2025-06-24 7:58 ` Mateusz Majewski
2025-06-26 18:21 ` Anand Moon
2025-06-16 16:38 ` [RRC v1 3/3] thermal/drivers/exynos: Refactor IRQ clear logic using SoC-specific config Anand Moon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250616163831.8138-3-linux.amoon@gmail.com \
--to=linux.amoon@gmail.com \
--cc=alim.akhtar@samsung.com \
--cc=bzolnier@gmail.com \
--cc=daniel.lezcano@linaro.org \
--cc=krzk@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=lukasz.luba@arm.com \
--cc=rafael@kernel.org \
--cc=rui.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).