[U-Boot] [PATCH] stm32f7: board: Fix memory init

Commit 1473b12ad0b3 ("lib: fdtdec: Update ram_base to store ram start adddress") brings regression on STM32F7 which can't boot.
Use fdtdec_setup_mem_size_base() to setup memory base and size. Use fdtdec_setup_memory_banksize() to setup memory bank base and size.
Reported-by: Mark Olsson mark@markolsson.se Signed-off-by: Patrice Chotard patrice.chotard@st.com Cc: Mark Olsson mark@markolsson.se ---
board/st/stm32f746-disco/stm32f746-disco.c | 31 ++++-------------------------- 1 file changed, 4 insertions(+), 27 deletions(-)
diff --git a/board/st/stm32f746-disco/stm32f746-disco.c b/board/st/stm32f746-disco/stm32f746-disco.c index e21cfc6e4955..a997e1825abf 100644 --- a/board/st/stm32f746-disco/stm32f746-disco.c +++ b/board/st/stm32f746-disco/stm32f746-disco.c @@ -21,23 +21,9 @@
DECLARE_GLOBAL_DATA_PTR;
-int get_memory_base_size(fdt_addr_t *mr_base, fdt_addr_t *mr_size) -{ - int mr_node; - - mr_node = fdt_path_offset(gd->fdt_blob, "/memory"); - if (mr_node < 0) - return mr_node; - *mr_base = fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, mr_node, - "reg", 0, mr_size, false); - debug("mr_base = %lx, mr_size= %lx\n", *mr_base, *mr_size); - - return 0; -} int dram_init(void) { - int rv; - fdt_addr_t mr_base, mr_size; + int rv = 0;
#ifndef CONFIG_SUPPORT_SPL struct udevice *dev; @@ -48,24 +34,15 @@ int dram_init(void) }
#endif - rv = get_memory_base_size(&mr_base, &mr_size); - if (rv) - return rv; - gd->ram_size = mr_size; - gd->ram_top = mr_base; + if (fdtdec_setup_mem_size_base() != 0) + rv = -EINVAL;
return rv; }
int dram_init_banksize(void) { - fdt_addr_t mr_base, mr_size; - get_memory_base_size(&mr_base, &mr_size); - /* - * Fill in global info with description of SRAM configuration - */ - gd->bd->bi_dram[0].start = mr_base; - gd->bd->bi_dram[0].size = mr_size; + fdtdec_setup_memory_banksize();
return 0; }

Hi Patrice,
On 08/02/2018 05:18 AM, Patrice Chotard wrote:
Commit 1473b12ad0b3 ("lib: fdtdec: Update ram_base to store ram start adddress") brings regression on STM32F7 which can't boot.
Use fdtdec_setup_mem_size_base() to setup memory base and size. Use fdtdec_setup_memory_banksize() to setup memory bank base and size.
Reported-by: Mark Olsson mark@markolsson.se Signed-off-by: Patrice Chotard patrice.chotard@st.com Cc: Mark Olsson mark@markolsson.se
Reviewed-by: Vikas Manocha vikas.manocha@st.com one minor comment below.
board/st/stm32f746-disco/stm32f746-disco.c | 31 ++++-------------------------- 1 file changed, 4 insertions(+), 27 deletions(-)
diff --git a/board/st/stm32f746-disco/stm32f746-disco.c b/board/st/stm32f746-disco/stm32f746-disco.c index e21cfc6e4955..a997e1825abf 100644 --- a/board/st/stm32f746-disco/stm32f746-disco.c +++ b/board/st/stm32f746-disco/stm32f746-disco.c @@ -21,23 +21,9 @@
DECLARE_GLOBAL_DATA_PTR;
-int get_memory_base_size(fdt_addr_t *mr_base, fdt_addr_t *mr_size) -{
- int mr_node;
- mr_node = fdt_path_offset(gd->fdt_blob, "/memory");
- if (mr_node < 0)
return mr_node;
- *mr_base = fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, mr_node,
"reg", 0, mr_size, false);
- debug("mr_base = %lx, mr_size= %lx\n", *mr_base, *mr_size);
- return 0;
-} int dram_init(void) {
- int rv;
- fdt_addr_t mr_base, mr_size;
- int rv = 0;
this variable can be removed by returning 0 or error directly.
Cheers, Vikas
#ifndef CONFIG_SUPPORT_SPL struct udevice *dev; @@ -48,24 +34,15 @@ int dram_init(void) }
#endif
- rv = get_memory_base_size(&mr_base, &mr_size);
- if (rv)
return rv;
- gd->ram_size = mr_size;
- gd->ram_top = mr_base;
if (fdtdec_setup_mem_size_base() != 0)
rv = -EINVAL;
return rv;
}
int dram_init_banksize(void) {
- fdt_addr_t mr_base, mr_size;
- get_memory_base_size(&mr_base, &mr_size);
- /*
* Fill in global info with description of SRAM configuration
*/
- gd->bd->bi_dram[0].start = mr_base;
- gd->bd->bi_dram[0].size = mr_size;
fdtdec_setup_memory_banksize();
return 0;
}

Hi Vikas
On 08/03/2018 02:48 AM, Vikas Manocha wrote:
Hi Patrice,
On 08/02/2018 05:18 AM, Patrice Chotard wrote:
Commit 1473b12ad0b3 ("lib: fdtdec: Update ram_base to store ram start adddress") brings regression on STM32F7 which can't boot.
Use fdtdec_setup_mem_size_base() to setup memory base and size. Use fdtdec_setup_memory_banksize() to setup memory bank base and size.
Reported-by: Mark Olsson mark@markolsson.se Signed-off-by: Patrice Chotard patrice.chotard@st.com Cc: Mark Olsson mark@markolsson.se
Reviewed-by: Vikas Manocha vikas.manocha@st.com one minor comment below.
board/st/stm32f746-disco/stm32f746-disco.c | 31 ++++-------------------------- 1 file changed, 4 insertions(+), 27 deletions(-)
diff --git a/board/st/stm32f746-disco/stm32f746-disco.c b/board/st/stm32f746-disco/stm32f746-disco.c index e21cfc6e4955..a997e1825abf 100644 --- a/board/st/stm32f746-disco/stm32f746-disco.c +++ b/board/st/stm32f746-disco/stm32f746-disco.c @@ -21,23 +21,9 @@
DECLARE_GLOBAL_DATA_PTR;
-int get_memory_base_size(fdt_addr_t *mr_base, fdt_addr_t *mr_size) -{
- int mr_node;
- mr_node = fdt_path_offset(gd->fdt_blob, "/memory");
- if (mr_node < 0)
return mr_node;
- *mr_base = fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, mr_node,
"reg", 0, mr_size, false);
- debug("mr_base = %lx, mr_size= %lx\n", *mr_base, *mr_size);
- return 0;
-} int dram_init(void) {
- int rv;
- fdt_addr_t mr_base, mr_size;
- int rv = 0;
this variable can be removed by returning 0 or error directly.
Exact, i will fix it in v2
Thanks
Patrice
Cheers, Vikas
#ifndef CONFIG_SUPPORT_SPL struct udevice *dev; @@ -48,24 +34,15 @@ int dram_init(void) }
#endif
- rv = get_memory_base_size(&mr_base, &mr_size);
- if (rv)
return rv;
- gd->ram_size = mr_size;
- gd->ram_top = mr_base;
if (fdtdec_setup_mem_size_base() != 0)
rv = -EINVAL;
return rv; }
int dram_init_banksize(void) {
- fdt_addr_t mr_base, mr_size;
- get_memory_base_size(&mr_base, &mr_size);
- /*
* Fill in global info with description of SRAM configuration
*/
- gd->bd->bi_dram[0].start = mr_base;
- gd->bd->bi_dram[0].size = mr_size;
fdtdec_setup_memory_banksize();
return 0; }
participants (3)
-
Patrice CHOTARD
-
Patrice Chotard
-
Vikas Manocha