[PATCH 05/19] arm: mach-k3: common: Add CANUART wakeup check helpers
Markus Schneider-Pargmann
msp at baylibre.com
Tue Mar 11 11:30:44 CET 2025
Add dedicated helper functions to check CANUART wake registers and magic
word. This helps determining if we are in a wakeup or if CAN IO
isolation has to be removed.
Also add a helper to detect a low power mode exit/resume.
Signed-off-by: Markus Schneider-Pargmann <msp at baylibre.com>
---
arch/arm/mach-k3/common.c | 22 ++++++++++++++++++++--
arch/arm/mach-k3/common.h | 1 +
arch/arm/mach-k3/include/mach/hardware.h | 3 +++
3 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
index ef40d623058072e89e9b3e53fc0f7ea6b78f96e3..e3554ee6aa8957b8cfcacb452ba391d7b3abf2a9 100644
--- a/arch/arm/mach-k3/common.c
+++ b/arch/arm/mach-k3/common.c
@@ -127,13 +127,31 @@ static void wkup_ctrl_remove_can_io_isolation(void)
writel(0, WKUP_CTRL_MMR0_BASE + WKUP_CTRL_MMR_PMCTRL_IO_GLB);
}
+static bool wkup_ctrl_canuart_wakeup_active(void)
+{
+ return !!(readl(WKUP_CTRL_MMR0_BASE + WKUP_CTRL_MMR_CANUART_WAKE_STAT1) &
+ WKUP_CTRL_MMR_CANUART_WAKE_STAT1_CANUART_IO_MODE);
+}
+
+static bool wkup_ctrl_canuart_magic_word_set(void)
+{
+ return readl(WKUP_CTRL_MMR0_BASE + WKUP_CTRL_MMR_CANUART_WAKE_OFF_MODE_STAT) ==
+ WKUP_CTRL_MMR_CANUART_WAKE_OFF_MODE_STAT_MW;
+}
+
void wkup_ctrl_remove_can_io_isolation_if_set(void)
{
- if (readl(WKUP_CTRL_MMR0_BASE + WKUP_CTRL_MMR_CANUART_WAKE_STAT1) &
- WKUP_CTRL_MMR_CANUART_WAKE_STAT1_CANUART_IO_MODE)
+ if (wkup_ctrl_canuart_wakeup_active() && !wkup_ctrl_canuart_magic_word_set())
wkup_ctrl_remove_can_io_isolation();
}
+bool wkup_ctrl_is_lpm_exit(void)
+{
+ return IS_ENABLED(CONFIG_K3_IODDR) &&
+ wkup_ctrl_canuart_wakeup_active() &&
+ wkup_ctrl_canuart_magic_word_set();
+}
+
bool is_rom_loaded_sysfw(struct rom_extended_boot_data *data)
{
if (strncmp(data->header, K3_ROM_BOOT_HEADER_MAGIC, 7))
diff --git a/arch/arm/mach-k3/common.h b/arch/arm/mach-k3/common.h
index 0359fea5675bdaf8cdde7989eebac1a695a065ba..5d347c7252d18c06dac21813b8247fa2c57902bc 100644
--- a/arch/arm/mach-k3/common.h
+++ b/arch/arm/mach-k3/common.h
@@ -46,6 +46,7 @@ struct ti_sci_handle *get_ti_sci_handle(void);
void do_board_detect(void);
void ti_secure_image_check_binary(void **p_image, size_t *p_size);
void wkup_ctrl_remove_can_io_isolation_if_set(void);
+bool wkup_ctrl_is_lpm_exit(void);
#if (IS_ENABLED(CONFIG_K3_QOS))
void setup_qos(void);
diff --git a/arch/arm/mach-k3/include/mach/hardware.h b/arch/arm/mach-k3/include/mach/hardware.h
index bd7407a4b9498207d94a35d8f73b852c7528a086..949badb18dc453421ce0f0d403554ac604cf4534 100644
--- a/arch/arm/mach-k3/include/mach/hardware.h
+++ b/arch/arm/mach-k3/include/mach/hardware.h
@@ -118,6 +118,9 @@ K3_SOC_ID(j722s, J722S)
#define WKUP_CTRL_MMR_CANUART_WAKE_STAT1 0x1830c
#define WKUP_CTRL_MMR_CANUART_WAKE_STAT1_CANUART_IO_MODE BIT(0)
+#define WKUP_CTRL_MMR_CANUART_WAKE_OFF_MODE_STAT 0x18318
+#define WKUP_CTRL_MMR_CANUART_WAKE_OFF_MODE_STAT_MW 0x555555
+
#define WKUP_CTRL_MMR_PMCTRL_IO_0 0x18084
#define WKUP_CTRL_MMR_PMCTRL_IO_0_ISOCLK_OVRD_0 BIT(0)
#define WKUP_CTRL_MMR_PMCTRL_IO_0_ISOOVR_EXTEND_0 BIT(4)
--
2.47.2
More information about the U-Boot
mailing list