arm64: mach-k3: am625_init: Probe ESM nodes
authorJulien Panis <jpanis@baylibre.com>
Fri, 1 Jul 2022 12:30:11 +0000 (14:30 +0200)
committerTom Rini <trini@konsulko.com>
Mon, 25 Jul 2022 13:38:47 +0000 (09:38 -0400)
On AM62x devices, main ESM error event outputs can be routed to
MCU ESM as inputs. So, two ESM device nodes are expected in the
device tree : one for main ESM and another one for MCU ESM.
MCU ESM error output can trigger the reset logic to reset
the device when CTRLMMR_MCU_RST_CTRL:MCU_ESM_ERROR_RESET_EN_Z is
set to '0'.

Signed-off-by: Julien Panis <jpanis@baylibre.com>
arch/arm/mach-k3/am625_init.c
arch/arm/mach-k3/include/mach/am62_hardware.h

index 0d95259..dfd95b8 100644 (file)
@@ -64,6 +64,15 @@ static void ctrl_mmr_unlock(void)
        mmr_unlock(PADCFG_MMR1_BASE, 1);
 }
 
+static __maybe_unused void enable_mcu_esm_reset(void)
+{
+       /* Set CTRLMMR_MCU_RST_CTRL:MCU_ESM_ERROR_RST_EN_Z  to '0' (low active) */
+       u32 stat = readl(CTRLMMR_MCU_RST_CTRL);
+
+       stat &= RST_CTRL_ESM_ERROR_RST_EN_Z_MASK;
+       writel(stat, CTRLMMR_MCU_RST_CTRL);
+}
+
 void board_init_f(ulong dummy)
 {
        struct udevice *dev;
@@ -142,6 +151,20 @@ void board_init_f(ulong dummy)
        /* Output System Firmware version info */
        k3_sysfw_print_ver();
 
+       if (IS_ENABLED(CONFIG_ESM_K3)) {
+               /* Probe/configure ESM0 */
+               ret = uclass_get_device_by_name(UCLASS_MISC, "esm@420000", &dev);
+               if (ret)
+                       printf("esm main init failed: %d\n", ret);
+
+               /* Probe/configure MCUESM */
+               ret = uclass_get_device_by_name(UCLASS_MISC, "esm@4100000", &dev);
+               if (ret)
+                       printf("esm mcu init failed: %d\n", ret);
+
+               enable_mcu_esm_reset();
+       }
+
 #if defined(CONFIG_K3_AM64_DDRSS)
        ret = uclass_get_device(UCLASS_RAM, 0, &dev);
        if (ret)
index cfabd20..9118d05 100644 (file)
@@ -29,6 +29,7 @@
 #define MAIN_DEVSTAT_BACKUP_BOOTMODE_SHIFT     10
 #define MAIN_DEVSTAT_BACKUP_BOOTMODE_CFG_MASK  BIT(13)
 #define MAIN_DEVSTAT_BACKUP_BOOTMODE_CFG_SHIFT 13
+#define RST_CTRL_ESM_ERROR_RST_EN_Z_MASK       (~BIT(17))
 
 /* Primary Bootmode MMC Config macros */
 #define MAIN_DEVSTAT_PRIMARY_MMC_PORT_MASK     0x4
@@ -67,6 +68,8 @@
 #define MCU_CTRL_DEVICE_CLKOUT_32K_CTRL                (MCU_CTRL_MMR0_BASE + 0x8058)
 #define MCU_CTRL_DEVICE_CLKOUT_LFOSC_SELECT_VAL        (0x3)
 
+#define CTRLMMR_MCU_RST_CTRL                   (MCU_CTRL_MMR0_BASE + 0x18170)
+
 #define ROM_ENTENDED_BOOT_DATA_INFO            0x43c3f1e0
 
 /* Use Last 2K as Scratch pad */