* [U-Boot] [PATCH] arm: omap4: Fix SDRAM AUTO DETECTION
@ 2013-04-05 5:51 Lokesh Vutla
2013-04-05 6:06 ` Lokesh Vutla
2013-04-08 16:57 ` [U-Boot] " Tom Rini
0 siblings, 2 replies; 3+ messages in thread
From: Lokesh Vutla @ 2013-04-05 5:51 UTC (permalink / raw)
To: u-boot
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);
--
1.7.9.5
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [U-Boot] [PATCH] arm: omap4: Fix SDRAM AUTO DETECTION
2013-04-05 5:51 [U-Boot] [PATCH] arm: omap4: Fix SDRAM AUTO DETECTION Lokesh Vutla
@ 2013-04-05 6:06 ` Lokesh Vutla
2013-04-08 16:57 ` [U-Boot] " Tom Rini
1 sibling, 0 replies; 3+ messages in thread
From: Lokesh Vutla @ 2013-04-05 6:06 UTC (permalink / raw)
To: u-boot
+ 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);
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [U-Boot] arm: omap4: Fix SDRAM AUTO DETECTION
2013-04-05 5:51 [U-Boot] [PATCH] arm: omap4: Fix SDRAM AUTO DETECTION Lokesh Vutla
2013-04-05 6:06 ` Lokesh Vutla
@ 2013-04-08 16:57 ` Tom Rini
1 sibling, 0 replies; 3+ messages in thread
From: Tom Rini @ 2013-04-08 16:57 UTC (permalink / raw)
To: u-boot
On Thu, Apr 04, 2013 at 07:51:14PM -0000, 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>
Applied to u-boot-ti/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20130408/c665b4c5/attachment.pgp>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-04-08 16:57 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-05 5:51 [U-Boot] [PATCH] arm: omap4: Fix SDRAM AUTO DETECTION Lokesh Vutla
2013-04-05 6:06 ` Lokesh Vutla
2013-04-08 16:57 ` [U-Boot] " Tom Rini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox