[U-Boot] rockchip: rk3288: init malloc_base, limit, ptr before spl_init

Andrew F. Davis's below patch broke rk3288 based board. that is because we call spl_init in board_init_f which is at very early stage. What Andrew want to fix is calling spl_init very late. That patch will make malloc_base, limit, ptr not initualized in spl_init when we call spl_init in board_init_f. It seems impossible to meet two requirement in spl_init. So i simply init malloc_base, limit, ptr before spl_init.
commit b3d2861eb20a795b99292b823c923935df26dfc6 Author: Andrew F. Davis afd@ti.com Date: Fri Jan 27 10:39:19 2017 -0600
spl: Remove overwrite of relocated malloc limit
Signed-off-by: Eddie Cai eddie.cai.linux@gmail.com --- arch/arm/mach-rockchip/rk3288-board-spl.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/arch/arm/mach-rockchip/rk3288-board-spl.c b/arch/arm/mach-rockchip/rk3288-board-spl.c index 930939a..1f3170d 100644 --- a/arch/arm/mach-rockchip/rk3288-board-spl.c +++ b/arch/arm/mach-rockchip/rk3288-board-spl.c @@ -184,6 +184,16 @@ void board_init_f(ulong dummy) debug_uart_init(); #endif
+#if defined(CONFIG_SYS_MALLOC_F_LEN) +#ifdef CONFIG_MALLOC_F_ADDR + gd->malloc_base = CONFIG_MALLOC_F_ADDR; +#endif +#ifdef CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN + gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN; +#endif + gd->malloc_ptr = 0; +#endif + ret = spl_init(); if (ret) { debug("spl_init() failed: %d\n", ret);

Hi Eddie,
On 21 February 2017 at 01:15, Eddie Cai eddie.cai.linux@gmail.com wrote:
Andrew F. Davis's below patch broke rk3288 based board. that is because we call spl_init in board_init_f which is at very early stage. What Andrew want to fix is calling spl_init very late. That patch will make malloc_base, limit, ptr not initualized in spl_init when we call spl_init in board_init_f. It seems impossible to meet two requirement in spl_init. So i simply init malloc_base, limit, ptr before spl_init.
commit b3d2861eb20a795b99292b823c923935df26dfc6 Author: Andrew F. Davis afd@ti.com Date: Fri Jan 27 10:39:19 2017 -0600
spl: Remove overwrite of relocated malloc limit
Signed-off-by: Eddie Cai eddie.cai.linux@gmail.com
arch/arm/mach-rockchip/rk3288-board-spl.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/arch/arm/mach-rockchip/rk3288-board-spl.c b/arch/arm/mach-rockchip/rk3288-board-spl.c index 930939a..1f3170d 100644 --- a/arch/arm/mach-rockchip/rk3288-board-spl.c +++ b/arch/arm/mach-rockchip/rk3288-board-spl.c @@ -184,6 +184,16 @@ void board_init_f(ulong dummy) debug_uart_init(); #endif
+#if defined(CONFIG_SYS_MALLOC_F_LEN) +#ifdef CONFIG_MALLOC_F_ADDR
gd->malloc_base = CONFIG_MALLOC_F_ADDR;
+#endif +#ifdef CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN
gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
+#endif
gd->malloc_ptr = 0;
+#endif
Yuck we should not repeat this code. Can we instead have two versions of spl_init()? Perhaps call the one that always sets things up spl_early_init() since it is called before board_init_r()?
ret = spl_init(); if (ret) { debug("spl_init() failed: %d\n", ret);
-- 2.7.4
Regards, Simon

Hi Simon
2017-02-22 12:00 GMT+08:00 Simon Glass sjg@chromium.org:
Hi Eddie,
On 21 February 2017 at 01:15, Eddie Cai eddie.cai.linux@gmail.com wrote:
Andrew F. Davis's below patch broke rk3288 based board. that is because
we call
spl_init in board_init_f which is at very early stage. What Andrew want
to fix
is calling spl_init very late. That patch will make malloc_base, limit,
ptr not
initualized in spl_init when we call spl_init in board_init_f. It seems impossible to meet two requirement in spl_init. So i simply init
malloc_base,
limit, ptr before spl_init.
commit b3d2861eb20a795b99292b823c923935df26dfc6 Author: Andrew F. Davis afd@ti.com Date: Fri Jan 27 10:39:19 2017 -0600
spl: Remove overwrite of relocated malloc limit
Signed-off-by: Eddie Cai eddie.cai.linux@gmail.com
arch/arm/mach-rockchip/rk3288-board-spl.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/arch/arm/mach-rockchip/rk3288-board-spl.c
b/arch/arm/mach-rockchip/rk3288-board-spl.c
index 930939a..1f3170d 100644 --- a/arch/arm/mach-rockchip/rk3288-board-spl.c +++ b/arch/arm/mach-rockchip/rk3288-board-spl.c @@ -184,6 +184,16 @@ void board_init_f(ulong dummy) debug_uart_init(); #endif
+#if defined(CONFIG_SYS_MALLOC_F_LEN) +#ifdef CONFIG_MALLOC_F_ADDR
gd->malloc_base = CONFIG_MALLOC_F_ADDR;
+#endif +#ifdef CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN
gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
+#endif
gd->malloc_ptr = 0;
+#endif
Yuck we should not repeat this code. Can we instead have two versions of spl_init()? Perhaps call the one that always sets things up spl_early_init() since it is called before board_init_r()?
I search but did find spl_early_init in mainline U-Boot. I found exynos U-Boot for chromium os have spl_early_init. But it is far away from what we need. So i add one by myself.
ret = spl_init(); if (ret) { debug("spl_init() failed: %d\n", ret);
-- 2.7.4
Regards, Simon

Hi Eddie,
On 22 February 2017 at 19:04, Eddie Cai eddie.cai.linux@gmail.com wrote:
Hi Simon
2017-02-22 12:00 GMT+08:00 Simon Glass sjg@chromium.org:
Hi Eddie,
On 21 February 2017 at 01:15, Eddie Cai eddie.cai.linux@gmail.com wrote:
Andrew F. Davis's below patch broke rk3288 based board. that is because we call spl_init in board_init_f which is at very early stage. What Andrew want to fix is calling spl_init very late. That patch will make malloc_base, limit, ptr not initualized in spl_init when we call spl_init in board_init_f. It seems impossible to meet two requirement in spl_init. So i simply init malloc_base, limit, ptr before spl_init.
commit b3d2861eb20a795b99292b823c923935df26dfc6 Author: Andrew F. Davis afd@ti.com Date: Fri Jan 27 10:39:19 2017 -0600
spl: Remove overwrite of relocated malloc limit
Signed-off-by: Eddie Cai eddie.cai.linux@gmail.com
arch/arm/mach-rockchip/rk3288-board-spl.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/arch/arm/mach-rockchip/rk3288-board-spl.c b/arch/arm/mach-rockchip/rk3288-board-spl.c index 930939a..1f3170d 100644 --- a/arch/arm/mach-rockchip/rk3288-board-spl.c +++ b/arch/arm/mach-rockchip/rk3288-board-spl.c @@ -184,6 +184,16 @@ void board_init_f(ulong dummy) debug_uart_init(); #endif
+#if defined(CONFIG_SYS_MALLOC_F_LEN) +#ifdef CONFIG_MALLOC_F_ADDR
gd->malloc_base = CONFIG_MALLOC_F_ADDR;
+#endif +#ifdef CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN
gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
+#endif
gd->malloc_ptr = 0;
+#endif
Yuck we should not repeat this code. Can we instead have two versions of spl_init()? Perhaps call the one that always sets things up spl_early_init() since it is called before board_init_r()?
I search but did find spl_early_init in mainline U-Boot. I found exynos U-Boot for chromium os have spl_early_init. But it is far away from what we need. So i add one by myself.
Sorry I wasn't clear. Yes I meant to create a new one, like (and next to) the existing one, pulling out any common code that you can.
ret = spl_init(); if (ret) { debug("spl_init() failed: %d\n", ret);
-- 2.7.4
Regards, Simon
Regards, Simon
participants (2)
-
Eddie Cai
-
Simon Glass