On Tuesday 20 March 2018 12:23 PM, Keerthy wrote:
> From: Russ Dill <russ.d...@ti.com>
> 
> This inhibits the re-inititialization of DDR during an RTC-only resume. If
> this is not done, an L3 NOC error is produced as the DDR gets accessed
> before the re-init has time to complete. Tested on AM437x GP EVM.

Tom,

Any comments on this?

Regards,
Keerthy
> 
> Signed-off-by: Russ Dill <russ.d...@ti.com>
> [j-keer...@ti.com Ported to Latest Master branch]
> Signed-off-by: Keerthy <j-keer...@ti.com>
> ---
> 
> Applies cleanly on top of:
> 
> https://lists.denx.de/pipermail/u-boot/2018-March/323050.html
> 
>  arch/arm/include/asm/arch-am33xx/cpu.h | 18 ++++++++++++++++--
>  arch/arm/mach-omap2/am33xx/board.c     | 14 ++++++++++++++
>  2 files changed, 30 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/include/asm/arch-am33xx/cpu.h 
> b/arch/arm/include/asm/arch-am33xx/cpu.h
> index e8d7d54..b8b2db6 100644
> --- a/arch/arm/include/asm/arch-am33xx/cpu.h
> +++ b/arch/arm/include/asm/arch-am33xx/cpu.h
> @@ -68,6 +68,9 @@
>  #define PRM_RSTCTRL_RESET            0x01
>  #define PRM_RSTST_WARM_RESET_MASK    0x232
>  
> +/* EMIF Control register bits */
> +#define EMIF_CTRL_DEVOFF     BIT(0)
> +
>  #ifndef __KERNEL_STRICT_NAMES
>  #ifndef __ASSEMBLY__
>  #include <asm/ti-common/omap_wdt.h>
> @@ -386,8 +389,19 @@ struct cm_device_inst {
>  };
>  
>  struct prm_device_inst {
> -     unsigned int prm_rstctrl;
> -     unsigned int prm_rstst;
> +     unsigned int rstctrl;
> +     unsigned int rstst;
> +     unsigned int rsttime;
> +     unsigned int sram_count;
> +     unsigned int ldo_sram_core_set; /* offset 0x10 */
> +     unsigned int ldo_sram_core_ctr;
> +     unsigned int ldo_sram_mpu_setu;
> +     unsigned int ldo_sram_mpu_ctrl;
> +     unsigned int io_count;          /* offset 0x20 */
> +     unsigned int io_pmctrl;
> +     unsigned int vc_val_bypass;
> +     unsigned int resv1;
> +     unsigned int emif_ctrl;         /* offset 0x30 */
>  };
>  
>  struct cm_dpll {
> diff --git a/arch/arm/mach-omap2/am33xx/board.c 
> b/arch/arm/mach-omap2/am33xx/board.c
> index ef1de1a..e1d4ddb 100644
> --- a/arch/arm/mach-omap2/am33xx/board.c
> +++ b/arch/arm/mach-omap2/am33xx/board.c
> @@ -376,6 +376,9 @@ static void watchdog_disable(void)
>  static void rtc_only(void)
>  {
>       struct davinci_rtc *rtc = (struct davinci_rtc *)RTC_BASE;
> +     struct prm_device_inst *prm_device =
> +                             (struct prm_device_inst *)PRM_DEVICE_INST;
> +
>       u32 scratch1;
>       void (*resume_func)(void);
>  
> @@ -403,9 +406,20 @@ static void rtc_only(void)
>        */
>       rtc_only_update_board_type(scratch1 >> RTC_BOARD_TYPE_SHIFT);
>  
> +     /*
> +      * Enable EMIF_DEVOFF in PRCM_PRM_EMIF_CTRL to indicate to EMIF we
> +      * are resuming from self-refresh. This avoids an unnecessary re-init
> +      * of the DDR. The re-init takes time and we would need to wait for
> +      * it to complete before accessing DDR to avoid L3 NOC errors.
> +      */
> +     writel(EMIF_CTRL_DEVOFF, &prm_device->emif_ctrl);
> +
>       rtc_only_prcm_init();
>       sdram_init();
>  
> +     /* Disable EMIF_DEVOFF for normal operation and to exit self-refresh */
> +     writel(0, &prm_device->emif_ctrl);
> +
>       resume_func = (void *)readl(&rtc->scratch0);
>       if (resume_func)
>               resume_func();
> 
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to