arm: stm32mp: move dbgmcu_init call when DT is ready
authorPatrick Delaunay <patrick.delaunay@st.com>
Fri, 24 Jul 2020 09:13:31 +0000 (11:13 +0200)
committerPatrice Chotard <patrice.chotard@st.com>
Tue, 28 Jul 2020 15:21:37 +0000 (17:21 +0200)
As the dbgmcu_init use the function bsec_dbgswenable which is based
on the DM and DT, its call can't be done before the spl is initialized
(driver model, DT and malloc) in board_init_f::spl_early_init().

This function call is moved later in spl_board_init().

Fixes: bd3f60d29c24 ("arm: stm32mp: protect DBGMCU_IDC access with BSEC")

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@st.com>
arch/arm/mach-stm32mp/Kconfig
arch/arm/mach-stm32mp/cpu.c

index 4003c2e..478fd2f 100644 (file)
@@ -1,6 +1,7 @@
 if ARCH_STM32MP
 
 config SPL
+       select SPL_BOARD_INIT
        select SPL_CLK
        select SPL_DM
        select SPL_DM_SEQ_ALIAS
index 3820671..56092c8 100644 (file)
@@ -154,15 +154,20 @@ static void security_init(void)
  */
 static void dbgmcu_init(void)
 {
-       setbits_le32(RCC_DBGCFGR, RCC_DBGCFGR_DBGCKEN);
-
        /*
         * Freeze IWDG2 if Cortex-A7 is in debug mode
         * done in TF-A for TRUSTED boot and
         * DBGMCU access is controlled by BSEC_DENABLE.DBGSWENABLE
        */
-       if (!IS_ENABLED(CONFIG_TFABOOT) && bsec_dbgswenable())
+       if (!IS_ENABLED(CONFIG_TFABOOT) && bsec_dbgswenable()) {
+               setbits_le32(RCC_DBGCFGR, RCC_DBGCFGR_DBGCKEN);
                setbits_le32(DBGMCU_APB4FZ1, DBGMCU_APB4FZ1_IWDG2);
+       }
+}
+
+void spl_board_init(void)
+{
+       dbgmcu_init();
 }
 #endif /* !defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD) */
 
@@ -241,7 +246,6 @@ int arch_cpu_init(void)
        timer_init();
 
 #if !defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD)
-       dbgmcu_init();
 #ifndef CONFIG_TFABOOT
        security_init();
        update_bootmode();