[U-Boot] [PATCH 1/5 v2] OMAP3: Fix SDRC init

Steve Sakoman sakoman at gmail.com
Mon Oct 19 16:53:15 CEST 2009


On Tue, Oct 6, 2009 at 7:17 PM, Nishanth Menon <nm at ti.com> wrote:
> Defaults are for Infineon DDR timings.
> Since none of the supported boards currently do
> XIP boot, these seem to be faulty. fix the values
> as per the calculations(ACTIMA,B), conf
> the sdrc power with pwdnen and wakeupproc bits
>
> Signed-off-by: Nishanth Menon <nm at ti.com>
> Cc: David B <david-b at pacbell.net>
> Cc: Vikram Pandita <vikram.pandita at ti.com>
> Cc: Richard Woodruff <r-woodruff2 at ti.com>
> Cc: Sandeep Paulraj <s-paulraj at ti.com>
> Cc: Tom Rix <tom.rix at windriver.com>
> Cc: Dirk Behme <dirk.behme at googlemail.com>
> ---
>  cpu/arm_cortexa8/omap3/mem.c     |    3 ++-
>  include/asm-arm/arch-omap3/cpu.h |    1 +
>  include/asm-arm/arch-omap3/mem.h |    8 ++++----
>  3 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/cpu/arm_cortexa8/omap3/mem.c b/cpu/arm_cortexa8/omap3/mem.c
> index 079c848..8731c9d 100644
> --- a/cpu/arm_cortexa8/omap3/mem.c
> +++ b/cpu/arm_cortexa8/omap3/mem.c
> @@ -164,7 +164,8 @@ void do_sdrc_init(u32 cs, u32 early)
>                writel(SDP_SDRC_SHARING, &sdrc_base->sharing);
>
>                /* Disable Power Down of CKE cuz of 1 CKE on combo part */
> -               writel(SRFRONRESET | PAGEPOLICY_HIGH, &sdrc_base->power);
> +               writel(WAKEUPPROC | PWDNEN | SRFRONRESET | PAGEPOLICY_HIGH,
> +                               &sdrc_base->power);
>
>                writel(ENADLL | DLLPHASE_90, &sdrc_base->dlla_ctrl);
>                sdelay(0x20000);
> diff --git a/include/asm-arm/arch-omap3/cpu.h b/include/asm-arm/arch-omap3/cpu.h
> index 8ab2e39..e51c4f3 100644
> --- a/include/asm-arm/arch-omap3/cpu.h
> +++ b/include/asm-arm/arch-omap3/cpu.h
> @@ -222,6 +222,7 @@ struct sdrc {
>
>  #define PAGEPOLICY_HIGH                (0x1 << 0)
>  #define SRFRONRESET            (0x1 << 7)
> +#define PWDNEN                 (0x1 << 2)
>  #define WAKEUPPROC             (0x1 << 26)
>
>  #define DDR_SDRAM              (0x1 << 0)
> diff --git a/include/asm-arm/arch-omap3/mem.h b/include/asm-arm/arch-omap3/mem.h
> index 5b9ac75..31cbdef 100644
> --- a/include/asm-arm/arch-omap3/mem.h
> +++ b/include/asm-arm/arch-omap3/mem.h
> @@ -78,16 +78,16 @@ enum {
>  #define TRP_165                3
>  #define TRAS_165       7
>  #define TRC_165                10
> -#define TRFC_165       21
> +#define TRFC_165       12
>  #define V_ACTIMA_165   ((TRFC_165 << 27) | (TRC_165 << 22) | \
>                        (TRAS_165 << 18) | (TRP_165 << 15) |  \
>                        (TRCD_165 << 12) | (TRRD_165 << 9) |  \
>                        (TDPL_165 << 6) | (TDAL_165))
>
>  #define TWTR_165       1
> -#define TCKE_165       1
> -#define TXP_165                5
> -#define XSR_165                23
> +#define TCKE_165       2
> +#define TXP_165                2
> +#define XSR_165                20
>  #define V_ACTIMB_165   (((TCKE_165 << 12) | (XSR_165 << 0)) |  \
>                        (TXP_165 << 8) | (TWTR_165 << 16))
>
> --
> 1.6.0.4

I see issues after applying this patch (Overo/Beagle).

In about half of my boot attempts I get a hang after Uncompressing Linux....

In the other half I get many many errors of this type:

SLAB: cache with size 192 has lost its name

Reverting the patch restores normal operation.

So it seems that the Infineon timings do not work on systems with Micron memory.

Steve


More information about the U-Boot mailing list