From: Abhash Kumar Jha <[email protected]>

While resuming from suspend, the wakeup reason need to be stored
and this will be used by the linux kernel once its up.

Use the 32 bytes of MCU_PSRAM0_RAM area (addr = 0x40280000) to
store the wakeup reason.

Read the value as soon as it starts and store it internally.

Signed-off-by: Abhash Kumar Jha <[email protected]>
Signed-off-by: Prasanth Babu Mantena <[email protected]>
---
 arch/arm/mach-k3/include/mach/j721e_hardware.h  | 9 +++++++++
 arch/arm/mach-k3/include/mach/j784s4_hardware.h | 9 +++++++++
 board/ti/j721e/evm.c                            | 9 ++++++++-
 board/ti/j784s4/evm.c                           | 8 +++++++-
 4 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-k3/include/mach/j721e_hardware.h 
b/arch/arm/mach-k3/include/mach/j721e_hardware.h
index 587dd10eb1e..6913b992614 100644
--- a/arch/arm/mach-k3/include/mach/j721e_hardware.h
+++ b/arch/arm/mach-k3/include/mach/j721e_hardware.h
@@ -47,6 +47,7 @@
 
 /* MCU SCRATCHPAD usage */
 #define TI_SRAM_SCRATCH_BOARD_EEPROM_START     
CONFIG_SYS_K3_MCU_SCRATCHPAD_BASE
+#define TI_SRAM_SCRATCH_LPM_START    0x40280000
 
 #if defined(CONFIG_SYS_K3_SPL_ATF) && !defined(__ASSEMBLY__)
 
@@ -63,6 +64,14 @@ static const u32 put_device_ids[] = {
 #define J721E_DEV_MCU_ARMSS0_CPU0              250
 #define J721E_DEV_MCU_ARMSS0_CPU1              251
 
+struct lpm_scratch_space {
+       u16 wake_src;
+       u16 reserved;
+} __packed;
+
+#define TI_SRAM_LPM_SCRATCH ((struct lpm_scratch_space *)\
+                               TI_SRAM_SCRATCH_LPM_START)
+
 static const u32 put_core_ids[] = {
        J721E_DEV_MCU_ARMSS0_CPU1,
        J721E_DEV_MCU_ARMSS0_CPU0,      /* Handle CPU0 after CPU1 */
diff --git a/arch/arm/mach-k3/include/mach/j784s4_hardware.h 
b/arch/arm/mach-k3/include/mach/j784s4_hardware.h
index dd51473419d..6137481e8a6 100644
--- a/arch/arm/mach-k3/include/mach/j784s4_hardware.h
+++ b/arch/arm/mach-k3/include/mach/j784s4_hardware.h
@@ -46,6 +46,7 @@
 
 /* MCU SCRATCHPAD usage */
 #define TI_SRAM_SCRATCH_BOARD_EEPROM_START     
CONFIG_SYS_K3_MCU_SCRATCHPAD_BASE
+#define TI_SRAM_SCRATCH_LPM_START    0x40280000
 
 #if defined(CONFIG_SYS_K3_SPL_ATF) && !defined(__ASSEMBLY__)
 
@@ -67,4 +68,12 @@ static const u32 put_core_ids[] = {
        J784S4_DEV_MCU_ARMSS0_CPU0,     /* Handle CPU0 after CPU1 */
 };
 
+struct lpm_scratch_space {
+       u16 wake_src;
+       u16 reserved;
+} __packed;
+
+#define TI_SRAM_LPM_SCRATCH ((struct lpm_scratch_space *)\
+                               TI_SRAM_SCRATCH_LPM_START)
+
 #endif /* __ASM_ARCH_J784S4_HARDWARE_H */
diff --git a/board/ti/j721e/evm.c b/board/ti/j721e/evm.c
index 368381c422a..efa4832f034 100644
--- a/board/ti/j721e/evm.c
+++ b/board/ti/j721e/evm.c
@@ -474,8 +474,10 @@ err_free_gpio:
 #if (IS_ENABLED(CONFIG_SPL_BUILD) && IS_ENABLED(CONFIG_TARGET_J7200_R5_EVM))
 
 #define SCRATCH_PAD_REG_3 0xCB
-
 #define MAGIC_SUSPEND 0xBA
+#define LPM_WAKE_SOURCE_PMIC_GPIO 0x91
+#define LPM_WAKE_SOURCE_MAIN_IO   0x80
+
 static void clear_isolation(void)
 {
        int ret;
@@ -501,12 +503,14 @@ int board_is_resuming(void)
        struct udevice *pmica;
        struct udevice *pmicb;
        u32 pmctrl_val = readl(PMCTRL_IO_1);
+       struct lpm_scratch_space *lpm_scratch = (struct lpm_scratch_space 
*)TI_SRAM_LPM_SCRATCH;
        int ret;
 
        if (gd_k3_resuming() >= 0)
                goto end;
 
        if ((pmctrl_val & IO_ISO_STATUS) == IO_ISO_STATUS) {
+               lpm_scratch->wake_src = LPM_WAKE_SOURCE_MAIN_IO;
                clear_isolation();
                gd_set_k3_resuming(1);
                debug("Resuming from IO_DDR mode\n");
@@ -531,6 +535,7 @@ int board_is_resuming(void)
 
        if (pmic_reg_read(pmica, SCRATCH_PAD_REG_3) == MAGIC_SUSPEND) {
                debug("%s: board is resuming\n", __func__);
+               lpm_scratch->wake_src = LPM_WAKE_SOURCE_PMIC_GPIO;
                gd_set_k3_resuming(1);
 
                /* clean magic suspend */
@@ -538,6 +543,8 @@ int board_is_resuming(void)
                        printf("Failed to clean magic value for suspend 
detection in PMICA\n");
        } else {
                debug("%s: board is booting (no resume detected)\n", __func__);
+               lpm_scratch->wake_src = 0;
+               lpm_scratch->reserved = 0;
                gd_set_k3_resuming(0);
        }
 end:
diff --git a/board/ti/j784s4/evm.c b/board/ti/j784s4/evm.c
index 56d5abea6a9..3fd1a00c683 100644
--- a/board/ti/j784s4/evm.c
+++ b/board/ti/j784s4/evm.c
@@ -67,8 +67,9 @@ int board_late_init(void)
 #if (IS_ENABLED(CONFIG_SPL_BUILD) && IS_ENABLED(CONFIG_TARGET_J784S4_R5_EVM))
 
 #define SCRATCH_PAD_REG_3 0xCB
-
 #define MAGIC_SUSPEND 0xBA
+#define LPM_WAKE_SOURCE_PMIC_GPIO 0x91
+#define LPM_WAKE_SOURCE_MCU_IO    0x81
 
 static void clear_isolation(void)
 {
@@ -95,12 +96,14 @@ int board_is_resuming(void)
 {
        struct udevice *pmic;
        u32 pmctrl_val = readl(WKUP_CTRL_MMR0_BASE + PMCTRL_IO_0);
+       struct lpm_scratch_space *lpm_scratch = (struct lpm_scratch_space 
*)TI_SRAM_LPM_SCRATCH;
        int err;
 
        if (gd_k3_resuming() >= 0)
                goto end;
 
        if ((pmctrl_val & IO_ISO_STATUS) == IO_ISO_STATUS) {
+               lpm_scratch->wake_src = LPM_WAKE_SOURCE_MCU_IO;
                clear_isolation();
                gd_set_k3_resuming(1);
                debug("board is resuming from IO_DDR mode\n");
@@ -117,6 +120,7 @@ int board_is_resuming(void)
 
        if (pmic_reg_read(pmic, SCRATCH_PAD_REG_3) == MAGIC_SUSPEND) {
                debug("%s: board is resuming\n", __func__);
+               lpm_scratch->wake_src = LPM_WAKE_SOURCE_PMIC_GPIO;
                gd_set_k3_resuming(1);
 
                /* clean magic suspend */
@@ -124,6 +128,8 @@ int board_is_resuming(void)
                        printf("Failed to clean magic value for suspend 
detection in PMIC\n");
        } else {
                debug("%s: board is booting (no resume detected)\n", __func__);
+               lpm_scratch->wake_src = 0;
+               lpm_scratch->reserved = 0;
                gd_set_k3_resuming(0);
        }
 end:
-- 
2.34.1

Reply via email to