[PATCH v2 3/4] arch: arm: mach-k3: am642_init: Probe ESM nodes

Christian Gmeiner christian.gmeiner at gmail.com
Mon Mar 7 12:37:23 CET 2022


Am Mo., 7. März 2022 um 12:18 Uhr schrieb Christian Gmeiner
<christian.gmeiner at gmail.com>:
>
> Am Mo., 28. Feb. 2022 um 05:56 Uhr schrieb Hari Nagalla <hnagalla at ti.com>:
> >
> > On AM64x devices, it is possible to route Main ESM0 error events to MCU
> > ESM. MCU ESM high error output can trigger the reset logic to reset the
> > device. So, for these devices we expect two ESM device nodes in the
> > device tree, one for Main ESM and the another MCU ESM in the device tree.
> >  When these ESM device nodes are properly configired it is possible to
> > route the Main RTI0 WWDT output to the MCU ESM high ouput through Main
> > ESM and trigger a device reset when
> > CTRLMMR_MCU_RST_CTRL:MCU_ESM_ERROR_RESET_EN_Z is set to '0'.
> >
> > On K3 AM64x devices, the R5 SPL u-boot handles the ESM device node
> > configurations.
> >
> > Signed-off-by: Hari Nagalla <hnagalla at ti.com>
> > ---
> >  arch/arm/mach-k3/am642_init.c | 29 +++++++++++++++++++++++++----
> >  1 file changed, 25 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/arm/mach-k3/am642_init.c b/arch/arm/mach-k3/am642_init.c
> > index 543dea02bc..f171c1e254 100644
> > --- a/arch/arm/mach-k3/am642_init.c
> > +++ b/arch/arm/mach-k3/am642_init.c
> > @@ -24,12 +24,22 @@
> >  #include <dm/root.h>
> >
> >  #if defined(CONFIG_SPL_BUILD)
> > +#define MCU_CTRL_MMR0_BASE                     0x04500000
> > +#define CTRLMMR_MCU_RST_CTRL                   0x04518170
> >
> >  static void ctrl_mmr_unlock(void)
> >  {
> >         /* Unlock all PADCFG_MMR1 module registers */
> >         mmr_unlock(PADCFG_MMR1_BASE, 1);
> >
> > +       /* Unlock all MCU_CTRL_MMR0 module registers */
> > +       mmr_unlock(MCU_CTRL_MMR0_BASE, 0);
> > +       mmr_unlock(MCU_CTRL_MMR0_BASE, 1);
> > +       mmr_unlock(MCU_CTRL_MMR0_BASE, 2);
> > +       mmr_unlock(MCU_CTRL_MMR0_BASE, 3);
> > +       mmr_unlock(MCU_CTRL_MMR0_BASE, 4);
> > +       mmr_unlock(MCU_CTRL_MMR0_BASE, 6);
> > +
> >         /* Unlock all CTRL_MMR0 module registers */
> >         mmr_unlock(CTRL_MMR0_BASE, 0);
> >         mmr_unlock(CTRL_MMR0_BASE, 1);
> > @@ -37,9 +47,6 @@ static void ctrl_mmr_unlock(void)
> >         mmr_unlock(CTRL_MMR0_BASE, 3);
> >         mmr_unlock(CTRL_MMR0_BASE, 5);
> >         mmr_unlock(CTRL_MMR0_BASE, 6);
> > -
> > -       /* Unlock all MCU_PADCFG_MMR1 module registers */
> > -       mmr_unlock(MCU_PADCFG_MMR1_BASE, 1);
> >  }
> >

Something like this:

#if defined(CONFIG_ESM_K3)
static 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 = stat & 0xFFFDFFFF;
        writel(stat, CTRLMMR_MCU_RST_CTRL);
}
#endif



> >  /*
> > @@ -144,7 +151,7 @@ int fdtdec_board_setup(const void *fdt_blob)
> >
> >  void board_init_f(ulong dummy)
> >  {
> > -#if defined(CONFIG_K3_LOAD_SYSFW) || defined(CONFIG_K3_AM64_DDRSS)
> > +#if defined(CONFIG_K3_LOAD_SYSFW) || defined(CONFIG_K3_AM64_DDRSS) || defined(CONFIG_ESM_K3)
> >         struct udevice *dev;
> >         int ret;
> >  #endif
> > @@ -194,6 +201,20 @@ void board_init_f(ulong dummy)
> >         /* Output System Firmware version info */
> >         k3_sysfw_print_ver();
> >
> > +#if defined(CONFIG_ESM_K3)
> > +       /* Probe/configure ESM0 */
> > +       ret = uclass_get_device_by_name(UCLASS_MISC, "esm at 420000", &dev);
> > +       if (ret)
> > +               printf("esm main init failed: %d\n", ret);
> > +
> > +       /* Probe/configure MCUESM */
> > +       ret = uclass_get_device_by_name(UCLASS_MISC, "esm at 4100000", &dev);
> > +       if (ret)
> > +               printf("esm mcu init failed: %d\n", ret);
> > +
> > +       enable_mcu_esm_reset();
>
> enable_mcu_esm_reset() is undefined! I think you forgot something in
> this patch series :(

Can you send a fixed V3?

-- 
greets
--
Christian Gmeiner, MSc

https://christian-gmeiner.info/privacypolicy


More information about the U-Boot mailing list