All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lokesh Vutla <lokeshvutla@ti.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] arm: omap4: Fix SDRAM AUTO DETECTION
Date: Fri, 5 Apr 2013 11:36:30 +0530	[thread overview]
Message-ID: <515E69E6.5040401@ti.com> (raw)
In-Reply-To: <1365141074-21364-1-git-send-email-lokeshvutla@ti.com>

+ Michael

On Friday 05 April 2013 11:21 AM, Lokesh Vutla wrote:
> Commit "8602114 omap: emif: configure emif only when required"
> breaks SDRAM_AUTO_DETECTION.
> The issue is dmm_init() depends on emif_sizes[](SDRAM Auto detection)
> done in do_sdram_init(). The above commit moves dmm_init() above
> do_sdram_init() because of which dmm_init() uses uninitialized
> emif_sizes[].
> So instead of using global emif_sizes[], get sdram details locally
> and calculate emif sizes.
>
> Reported-by: Michael Cashwell <mboards@prograde.net>
> Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
> ---
>   arch/arm/cpu/armv7/omap-common/emif-common.c |   29 ++++++++++++++------------
>   arch/arm/cpu/armv7/omap4/emif.c              |    1 -
>   arch/arm/cpu/armv7/omap5/emif.c              |    1 -
>   arch/arm/include/asm/arch-omap4/omap.h       |    1 -
>   arch/arm/include/asm/arch-omap5/omap.h       |    1 -
>   arch/arm/include/asm/emif.h                  |    1 -
>   6 files changed, 16 insertions(+), 18 deletions(-)
>
> diff --git a/arch/arm/cpu/armv7/omap-common/emif-common.c b/arch/arm/cpu/armv7/omap-common/emif-common.c
> index 9eb1279..cdb4439 100644
> --- a/arch/arm/cpu/armv7/omap-common/emif-common.c
> +++ b/arch/arm/cpu/armv7/omap-common/emif-common.c
> @@ -655,20 +655,27 @@ static u32 get_ddr_phy_ctrl_1(u32 freq, u8 RL)
>   	return phy;
>   }
>
> -static u32 get_emif_mem_size(struct emif_device_details *devices)
> +static u32 get_emif_mem_size(u32 base)
>   {
>   	u32 size_mbytes = 0, temp;
> +	struct emif_device_details dev_details;
> +	struct lpddr2_device_details cs0_dev_details, cs1_dev_details;
> +	u32 emif_nr = emif_num(base);
>
> -	if (!devices)
> -		return 0;
> +	emif_reset_phy(base);
> +	dev_details.cs0_device_details = emif_get_device_details(emif_nr, CS0,
> +						&cs0_dev_details);
> +	dev_details.cs1_device_details = emif_get_device_details(emif_nr, CS1,
> +						&cs1_dev_details);
> +	emif_reset_phy(base);
>
> -	if (devices->cs0_device_details) {
> -		temp = devices->cs0_device_details->density;
> +	if (dev_details.cs0_device_details) {
> +		temp = dev_details.cs0_device_details->density;
>   		size_mbytes += lpddr2_density_2_size_in_mbytes[temp];
>   	}
>
> -	if (devices->cs1_device_details) {
> -		temp = devices->cs1_device_details->density;
> +	if (dev_details.cs1_device_details) {
> +		temp = dev_details.cs1_device_details->density;
>   		size_mbytes += lpddr2_density_2_size_in_mbytes[temp];
>   	}
>   	/* convert to bytes */
> @@ -1040,13 +1047,9 @@ static void do_sdram_init(u32 base)
>   	/* Return if no devices on this EMIF */
>   	if (!dev_details.cs0_device_details &&
>   	    !dev_details.cs1_device_details) {
> -		emif_sizes[emif_nr - 1] = 0;
>   		return;
>   	}
>
> -	if (!in_sdram)
> -		emif_sizes[emif_nr - 1] = get_emif_mem_size(&dev_details);
> -
>   	/*
>   	 * Get device timings:
>   	 * - Default timings specified by JESD209-2 if
> @@ -1108,8 +1111,8 @@ void dmm_init(u32 base)
>   	mapped_size = 0;
>   	section_cnt = 3;
>   	sys_addr = CONFIG_SYS_SDRAM_BASE;
> -	emif1_size = emif_sizes[0];
> -	emif2_size = emif_sizes[1];
> +	emif1_size = get_emif_mem_size(EMIF1_BASE);
> +	emif2_size = get_emif_mem_size(EMIF2_BASE);
>   	debug("emif1_size 0x%x emif2_size 0x%x\n", emif1_size, emif2_size);
>
>   	if (!emif1_size && !emif2_size)
> diff --git a/arch/arm/cpu/armv7/omap4/emif.c b/arch/arm/cpu/armv7/omap4/emif.c
> index ca4823d..53f6063 100644
> --- a/arch/arm/cpu/armv7/omap4/emif.c
> +++ b/arch/arm/cpu/armv7/omap4/emif.c
> @@ -33,7 +33,6 @@
>   #ifndef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
>   u32 *const T_num = (u32 *)OMAP4_SRAM_SCRATCH_EMIF_T_NUM;
>   u32 *const T_den = (u32 *)OMAP4_SRAM_SCRATCH_EMIF_T_DEN;
> -u32 *const emif_sizes = (u32 *)OMAP4_SRAM_SCRATCH_EMIF_SIZE;
>   #endif
>
>   #ifdef CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
> diff --git a/arch/arm/cpu/armv7/omap5/emif.c b/arch/arm/cpu/armv7/omap5/emif.c
> index 90d362c..9f53c90 100644
> --- a/arch/arm/cpu/armv7/omap5/emif.c
> +++ b/arch/arm/cpu/armv7/omap5/emif.c
> @@ -34,7 +34,6 @@
>   #define print_timing_reg(reg) debug(#reg" - 0x%08x\n", (reg))
>   u32 *const T_num = (u32 *)OMAP5_SRAM_SCRATCH_EMIF_T_NUM;
>   u32 *const T_den = (u32 *)OMAP5_SRAM_SCRATCH_EMIF_T_DEN;
> -u32 *const emif_sizes = (u32 *)OMAP5_SRAM_SCRATCH_EMIF_SIZE;
>   #endif
>
>   #ifdef CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
> diff --git a/arch/arm/include/asm/arch-omap4/omap.h b/arch/arm/include/asm/arch-omap4/omap.h
> index 5f321fe..ad984da 100644
> --- a/arch/arm/include/asm/arch-omap4/omap.h
> +++ b/arch/arm/include/asm/arch-omap4/omap.h
> @@ -147,7 +147,6 @@ struct s32ktimer {
>   #define SRAM_SCRATCH_SPACE_ADDR		NON_SECURE_SRAM_START
>   /* SRAM scratch space entries */
>   #define OMAP4_SRAM_SCRATCH_OMAP4_REV	SRAM_SCRATCH_SPACE_ADDR
> -#define OMAP4_SRAM_SCRATCH_EMIF_SIZE	(SRAM_SCRATCH_SPACE_ADDR + 0x4)
>   #define OMAP4_SRAM_SCRATCH_EMIF_T_NUM	(SRAM_SCRATCH_SPACE_ADDR + 0xC)
>   #define OMAP4_SRAM_SCRATCH_EMIF_T_DEN	(SRAM_SCRATCH_SPACE_ADDR + 0x10)
>   #define OMAP_SRAM_SCRATCH_PRCM_PTR      (SRAM_SCRATCH_SPACE_ADDR + 0x14)
> diff --git a/arch/arm/include/asm/arch-omap5/omap.h b/arch/arm/include/asm/arch-omap5/omap.h
> index b632635..887fcaa 100644
> --- a/arch/arm/include/asm/arch-omap5/omap.h
> +++ b/arch/arm/include/asm/arch-omap5/omap.h
> @@ -196,7 +196,6 @@ struct s32ktimer {
>    * SRAM scratch space entries
>    */
>   #define OMAP5_SRAM_SCRATCH_OMAP5_REV	SRAM_SCRATCH_SPACE_ADDR
> -#define OMAP5_SRAM_SCRATCH_EMIF_SIZE	(SRAM_SCRATCH_SPACE_ADDR + 0x4)
>   #define OMAP5_SRAM_SCRATCH_EMIF_T_NUM	(SRAM_SCRATCH_SPACE_ADDR + 0xC)
>   #define OMAP5_SRAM_SCRATCH_EMIF_T_DEN	(SRAM_SCRATCH_SPACE_ADDR + 0x10)
>   #define OMAP_SRAM_SCRATCH_PRCM_PTR      (SRAM_SCRATCH_SPACE_ADDR + 0x14)
> diff --git a/arch/arm/include/asm/emif.h b/arch/arm/include/asm/emif.h
> index c5d1e6c..5f11d7b 100644
> --- a/arch/arm/include/asm/emif.h
> +++ b/arch/arm/include/asm/emif.h
> @@ -1165,7 +1165,6 @@ void get_lpddr2_mr_regs(const struct lpddr2_mr_regs **regs);
>   #ifndef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
>   extern u32 *const T_num;
>   extern u32 *const T_den;
> -extern u32 *const emif_sizes;
>   #endif
>
>   void config_data_eye_leveling_samples(u32 emif_base);
>

  reply	other threads:[~2013-04-05  6:06 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-05  5:51 [U-Boot] [PATCH] arm: omap4: Fix SDRAM AUTO DETECTION Lokesh Vutla
2013-04-05  6:06 ` Lokesh Vutla [this message]
2013-04-08 16:57 ` [U-Boot] " Tom Rini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=515E69E6.5040401@ti.com \
    --to=lokeshvutla@ti.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.