public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init()
@ 2017-03-15 14:43 Simon Glass
  2017-03-15 14:43 ` [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init() Simon Glass
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Simon Glass @ 2017-03-15 14:43 UTC (permalink / raw)
  To: u-boot

From: Eddie Cai <eddie.cai.linux@gmail.com>

At present malloc_base/_limit/_ptr are not initialised in spl_init() when
we call spl_init() in board_init_f(). This is due to a recent change aimed
at avoiding overwriting the malloc area set up on some boards by
spl_relocate_stack_gd().

However if CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is not defined, we now
skip setting up the memory area in spl_init() which is obviously wrong.

To fix this, add a new function spl_early_init() which can be called in
board_init_f().

Fixes: b3d2861e (spl: Remove overwrite of relocated malloc limit)
Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
Rewrote spl_{,early_}init() to avoid duplicate code:
Rewrite/expand commit message:
Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v4: None
Changes in v3: None
Changes in v2:
- Rewrote spl_{,early_}init() to avoid duplicate code
- Rewrite commit message

 common/spl/spl.c                  | 46 +++++++++++++++++++++++++++++----------
 include/asm-generic/global_data.h |  1 +
 include/spl.h                     | 24 +++++++++++++++++---
 3 files changed, 57 insertions(+), 14 deletions(-)

diff --git a/common/spl/spl.c b/common/spl/spl.c
index 766fb3d6f4..2bc8b42027 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -170,22 +170,20 @@ __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
 	image_entry();
 }
 
-int spl_init(void)
+static int spl_common_init(bool setup_malloc)
 {
 	int ret;
 
-	debug("spl_init()\n");
-/*
- * with CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN we set malloc_base and
- * malloc_limit in spl_relocate_stack_gd
- */
-#if defined(CONFIG_SYS_MALLOC_F_LEN) && \
-	!defined(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN)
+	debug("spl_early_init()\n");
+
+#if defined(CONFIG_SYS_MALLOC_F_LEN)
+	if (setup_malloc) {
 #ifdef CONFIG_MALLOC_F_ADDR
-	gd->malloc_base = CONFIG_MALLOC_F_ADDR;
+		gd->malloc_base = CONFIG_MALLOC_F_ADDR;
 #endif
-	gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
-	gd->malloc_ptr = 0;
+		gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
+		gd->malloc_ptr = 0;
+	}
 #endif
 	if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
 		ret = fdtdec_setup();
@@ -202,6 +200,32 @@ int spl_init(void)
 			return ret;
 		}
 	}
+
+	return 0;
+}
+
+int spl_early_init(void)
+{
+	int ret;
+
+	ret = spl_common_init(true);
+	if (ret)
+		return ret;
+	gd->flags |= GD_FLG_SPL_EARLY_INIT;
+
+	return 0;
+}
+
+int spl_init(void)
+{
+	int ret;
+
+	if (!(gd->flags & GD_FLG_SPL_EARLY_INIT)) {
+		ret = spl_common_init(
+			!IS_ENABLED(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN));
+		if (ret)
+			return ret;
+	}
 	gd->flags |= GD_FLG_SPL_INIT;
 
 	return 0;
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index e02863dc03..5b356dd231 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -127,5 +127,6 @@ typedef struct global_data {
 #define GD_FLG_SKIP_RELOC	0x00800	/* Don't relocate		   */
 #define GD_FLG_RECORD		0x01000	/* Record console		   */
 #define GD_FLG_ENV_DEFAULT	0x02000 /* Default variable flag	   */
+#define GD_FLG_SPL_EARLY_INIT	0x04000 /* Early SPL init is done	   */
 
 #endif /* __ASM_GENERIC_GBL_DATA_H */
diff --git a/include/spl.h b/include/spl.h
index bde44374ea..cdd196d187 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -213,11 +213,29 @@ int spl_load_image_ext_os(struct spl_image_info *spl_image,
 			  struct blk_desc *block_dev, int partition);
 
 /**
- * spl_init() - Set up device tree and driver model in SPL if enabled
+ * spl_early_init() - Set up device tree and driver model in SPL if enabled
  *
  * Call this function in board_init_f() if you want to use device tree and
- * driver model early, before board_init_r() is called. This function will
- * be called from board_init_r() if not called earlier.
+ * driver model early, before board_init_r() is called.
+ *
+ * If this is not called, then driver model will be inactive in SPL's
+ * board_init_f(), and no device tree will be available.
+ */
+int spl_early_init(void);
+
+/**
+ * spl_init() - Set up device tree and driver model in SPL if enabled
+ *
+ * You can optionally call spl_early_init(), then optionally call spl_init().
+ * This function will be called from board_init_r() if not called earlier.
+ *
+ * Both spl_early_init() and spl_init() perform a similar function except that
+ * the latter will not set up the malloc() area if
+ * CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is enabled, since it is assumed to
+ * already be done by a calll to spl_relocate_stack_gd() before board_init_r()
+ * is reached.
+ *
+ * This function will be called from board_init_r() if not called earlier.
  *
  * If this is not called, then driver model will be inactive in SPL's
  * board_init_f(), and no device tree will be available.
-- 
2.12.0.367.g23dc2f6d3c-goog

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init()
  2017-03-15 14:43 [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init() Simon Glass
@ 2017-03-15 14:43 ` Simon Glass
  2017-03-16  7:08   ` Kever Yang
  2017-03-16 15:04   ` Eddie Cai
  2017-03-16 15:02 ` [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init() Eddie Cai
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 12+ messages in thread
From: Simon Glass @ 2017-03-15 14:43 UTC (permalink / raw)
  To: u-boot

From: Eddie Cai <eddie.cai.linux@gmail.com>

Use spl_early_init() to make sure that early malloc() is initialised. This
fixes booting on firefly-rk3288, for example.

Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v4:
- Change debug() message to match new function name

Changes in v3:
- Rewrite both commit messages

Changes in v2:
- Add v2 to the series since this is a new version

 arch/arm/mach-rockchip/rk3288-board-spl.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-rockchip/rk3288-board-spl.c b/arch/arm/mach-rockchip/rk3288-board-spl.c
index e51e19bb2d..74f3379194 100644
--- a/arch/arm/mach-rockchip/rk3288-board-spl.c
+++ b/arch/arm/mach-rockchip/rk3288-board-spl.c
@@ -185,9 +185,9 @@ void board_init_f(ulong dummy)
 	debug_uart_init();
 #endif
 
-	ret = spl_init();
+	ret = spl_early_init();
 	if (ret) {
-		debug("spl_init() failed: %d\n", ret);
+		debug("spl_early_init() failed: %d\n", ret);
 		hang();
 	}
 
-- 
2.12.0.367.g23dc2f6d3c-goog

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init()
  2017-03-15 14:43 ` [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init() Simon Glass
@ 2017-03-16  7:08   ` Kever Yang
  2017-03-16 22:22     ` Simon Glass
  2017-03-16 15:04   ` Eddie Cai
  1 sibling, 1 reply; 12+ messages in thread
From: Kever Yang @ 2017-03-16  7:08 UTC (permalink / raw)
  To: u-boot

Hi Eddie, Simon,

Could you help to correct rk3188, rk3399 spl at the same time?

Thanks,
- Kever
On 03/15/2017 10:43 PM, Simon Glass wrote:
> From: Eddie Cai <eddie.cai.linux@gmail.com>
>
> Use spl_early_init() to make sure that early malloc() is initialised. This
> fixes booting on firefly-rk3288, for example.
>
> Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> Changes in v4:
> - Change debug() message to match new function name
>
> Changes in v3:
> - Rewrite both commit messages
>
> Changes in v2:
> - Add v2 to the series since this is a new version
>
>   arch/arm/mach-rockchip/rk3288-board-spl.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/mach-rockchip/rk3288-board-spl.c b/arch/arm/mach-rockchip/rk3288-board-spl.c
> index e51e19bb2d..74f3379194 100644
> --- a/arch/arm/mach-rockchip/rk3288-board-spl.c
> +++ b/arch/arm/mach-rockchip/rk3288-board-spl.c
> @@ -185,9 +185,9 @@ void board_init_f(ulong dummy)
>   	debug_uart_init();
>   #endif
>   
> -	ret = spl_init();
> +	ret = spl_early_init();
>   	if (ret) {
> -		debug("spl_init() failed: %d\n", ret);
> +		debug("spl_early_init() failed: %d\n", ret);
>   		hang();
>   	}
>   

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init()
  2017-03-15 14:43 [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init() Simon Glass
  2017-03-15 14:43 ` [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init() Simon Glass
@ 2017-03-16 15:02 ` Eddie Cai
  2017-03-16 22:22   ` Simon Glass
  2017-03-17 12:09 ` Tom Rini
  2017-03-20  5:28 ` Lokesh Vutla
  3 siblings, 1 reply; 12+ messages in thread
From: Eddie Cai @ 2017-03-16 15:02 UTC (permalink / raw)
  To: u-boot

2017-03-15 22:43 GMT+08:00 Simon Glass <sjg@chromium.org>:

> From: Eddie Cai <eddie.cai.linux@gmail.com>
>
> At present malloc_base/_limit/_ptr are not initialised in spl_init() when
> we call spl_init() in board_init_f(). This is due to a recent change aimed
> at avoiding overwriting the malloc area set up on some boards by
> spl_relocate_stack_gd().
>
> However if CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is not defined, we now
> skip setting up the memory area in spl_init() which is obviously wrong.
>
> To fix this, add a new function spl_early_init() which can be called in
> board_init_f().
>
> Fixes: b3d2861e (spl: Remove overwrite of relocated malloc limit)
> Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
> Rewrote spl_{,early_}init() to avoid duplicate code:
> Rewrite/expand commit message:
> Signed-off-by: Simon Glass <sjg@chromium.org>
>
Reviewed-by: Eddie Cai <eddie.cai.linux@gmail.com>

> ---
>
> Changes in v4: None
> Changes in v3: None
> Changes in v2:
> - Rewrote spl_{,early_}init() to avoid duplicate code
> - Rewrite commit message
>
>  common/spl/spl.c                  | 46 +++++++++++++++++++++++++++++-
> ---------
>  include/asm-generic/global_data.h |  1 +
>  include/spl.h                     | 24 +++++++++++++++++---
>  3 files changed, 57 insertions(+), 14 deletions(-)
>
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index 766fb3d6f4..2bc8b42027 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -170,22 +170,20 @@ __weak void __noreturn jump_to_image_no_args(struct
> spl_image_info *spl_image)
>         image_entry();
>  }
>
> -int spl_init(void)
> +static int spl_common_init(bool setup_malloc)
>  {
>         int ret;
>
> -       debug("spl_init()\n");
> -/*
> - * with CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN we set malloc_base and
> - * malloc_limit in spl_relocate_stack_gd
> - */
> -#if defined(CONFIG_SYS_MALLOC_F_LEN) && \
> -       !defined(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN)
> +       debug("spl_early_init()\n");
> +
> +#if defined(CONFIG_SYS_MALLOC_F_LEN)
> +       if (setup_malloc) {
>  #ifdef CONFIG_MALLOC_F_ADDR
> -       gd->malloc_base = CONFIG_MALLOC_F_ADDR;
> +               gd->malloc_base = CONFIG_MALLOC_F_ADDR;
>  #endif
> -       gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
> -       gd->malloc_ptr = 0;
> +               gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
> +               gd->malloc_ptr = 0;
> +       }
>  #endif
>         if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA))
> {
>                 ret = fdtdec_setup();
> @@ -202,6 +200,32 @@ int spl_init(void)
>                         return ret;
>                 }
>         }
> +
> +       return 0;
> +}
> +
> +int spl_early_init(void)
> +{
> +       int ret;
> +
> +       ret = spl_common_init(true);
> +       if (ret)
> +               return ret;
> +       gd->flags |= GD_FLG_SPL_EARLY_INIT;
> +
> +       return 0;
> +}
> +
> +int spl_init(void)
> +{
> +       int ret;
> +
> +       if (!(gd->flags & GD_FLG_SPL_EARLY_INIT)) {
> +               ret = spl_common_init(
> +                       !IS_ENABLED(CONFIG_SPL_STACK_
> R_MALLOC_SIMPLE_LEN));
> +               if (ret)
> +                       return ret;
> +       }
>         gd->flags |= GD_FLG_SPL_INIT;
>
>         return 0;
> diff --git a/include/asm-generic/global_data.h
> b/include/asm-generic/global_data.h
> index e02863dc03..5b356dd231 100644
> --- a/include/asm-generic/global_data.h
> +++ b/include/asm-generic/global_data.h
> @@ -127,5 +127,6 @@ typedef struct global_data {
>  #define GD_FLG_SKIP_RELOC      0x00800 /* Don't relocate
> */
>  #define GD_FLG_RECORD          0x01000 /* Record console
> */
>  #define GD_FLG_ENV_DEFAULT     0x02000 /* Default variable flag
>  */
> +#define GD_FLG_SPL_EARLY_INIT  0x04000 /* Early SPL init is done
> */
>
>  #endif /* __ASM_GENERIC_GBL_DATA_H */
> diff --git a/include/spl.h b/include/spl.h
> index bde44374ea..cdd196d187 100644
> --- a/include/spl.h
> +++ b/include/spl.h
> @@ -213,11 +213,29 @@ int spl_load_image_ext_os(struct spl_image_info
> *spl_image,
>                           struct blk_desc *block_dev, int partition);
>
>  /**
> - * spl_init() - Set up device tree and driver model in SPL if enabled
> + * spl_early_init() - Set up device tree and driver model in SPL if
> enabled
>   *
>   * Call this function in board_init_f() if you want to use device tree and
> - * driver model early, before board_init_r() is called. This function will
> - * be called from board_init_r() if not called earlier.
> + * driver model early, before board_init_r() is called.
> + *
> + * If this is not called, then driver model will be inactive in SPL's
> + * board_init_f(), and no device tree will be available.
> + */
> +int spl_early_init(void);
> +
> +/**
> + * spl_init() - Set up device tree and driver model in SPL if enabled
> + *
> + * You can optionally call spl_early_init(), then optionally call
> spl_init().
> + * This function will be called from board_init_r() if not called earlier.
> + *
> + * Both spl_early_init() and spl_init() perform a similar function except
> that
> + * the latter will not set up the malloc() area if
> + * CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is enabled, since it is assumed
> to
> + * already be done by a calll to spl_relocate_stack_gd() before
> board_init_r()
> + * is reached.
> + *
> + * This function will be called from board_init_r() if not called earlier.
>   *
>   * If this is not called, then driver model will be inactive in SPL's
>   * board_init_f(), and no device tree will be available.
> --
> 2.12.0.367.g23dc2f6d3c-goog
>
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init()
  2017-03-15 14:43 ` [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init() Simon Glass
  2017-03-16  7:08   ` Kever Yang
@ 2017-03-16 15:04   ` Eddie Cai
  2017-03-16 22:22     ` Simon Glass
  1 sibling, 1 reply; 12+ messages in thread
From: Eddie Cai @ 2017-03-16 15:04 UTC (permalink / raw)
  To: u-boot

2017-03-15 22:43 GMT+08:00 Simon Glass <sjg@chromium.org>:

> From: Eddie Cai <eddie.cai.linux@gmail.com>
>
> Use spl_early_init() to make sure that early malloc() is initialised. This
> fixes booting on firefly-rk3288, for example.
>
> Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
> Signed-off-by: Simon Glass <sjg@chromium.org>
>
Reviewed-by: Eddie Cai <eddie.cai.linux@gmail.com>

> ---
>
> Changes in v4:
> - Change debug() message to match new function name
>
> Changes in v3:
> - Rewrite both commit messages
>
> Changes in v2:
> - Add v2 to the series since this is a new version
>
>  arch/arm/mach-rockchip/rk3288-board-spl.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/mach-rockchip/rk3288-board-spl.c
> b/arch/arm/mach-rockchip/rk3288-board-spl.c
> index e51e19bb2d..74f3379194 100644
> --- a/arch/arm/mach-rockchip/rk3288-board-spl.c
> +++ b/arch/arm/mach-rockchip/rk3288-board-spl.c
> @@ -185,9 +185,9 @@ void board_init_f(ulong dummy)
>         debug_uart_init();
>  #endif
>
> -       ret = spl_init();
> +       ret = spl_early_init();
>         if (ret) {
> -               debug("spl_init() failed: %d\n", ret);
> +               debug("spl_early_init() failed: %d\n", ret);
>                 hang();
>         }
>
> --
> 2.12.0.367.g23dc2f6d3c-goog
>
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init()
  2017-03-16 15:02 ` [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init() Eddie Cai
@ 2017-03-16 22:22   ` Simon Glass
  0 siblings, 0 replies; 12+ messages in thread
From: Simon Glass @ 2017-03-16 22:22 UTC (permalink / raw)
  To: u-boot

On 16 March 2017 at 09:02, Eddie Cai <eddie.cai.linux@gmail.com> wrote:
>
>
> 2017-03-15 22:43 GMT+08:00 Simon Glass <sjg@chromium.org>:
>>
>> From: Eddie Cai <eddie.cai.linux@gmail.com>
>>
>> At present malloc_base/_limit/_ptr are not initialised in spl_init() when
>> we call spl_init() in board_init_f(). This is due to a recent change aimed
>> at avoiding overwriting the malloc area set up on some boards by
>> spl_relocate_stack_gd().
>>
>> However if CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is not defined, we now
>> skip setting up the memory area in spl_init() which is obviously wrong.
>>
>> To fix this, add a new function spl_early_init() which can be called in
>> board_init_f().
>>
>> Fixes: b3d2861e (spl: Remove overwrite of relocated malloc limit)
>> Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
>> Rewrote spl_{,early_}init() to avoid duplicate code:
>> Rewrite/expand commit message:
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>
> Reviewed-by: Eddie Cai <eddie.cai.linux@gmail.com>

Applied to u-boot-rockchip.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init()
  2017-03-16  7:08   ` Kever Yang
@ 2017-03-16 22:22     ` Simon Glass
  0 siblings, 0 replies; 12+ messages in thread
From: Simon Glass @ 2017-03-16 22:22 UTC (permalink / raw)
  To: u-boot

Hi Kever,

On 16 March 2017 at 01:08, Kever Yang <kever.yang@rock-chips.com> wrote:
> Hi Eddie, Simon,
>
> Could you help to correct rk3188, rk3399 spl at the same time?

I don't have boards to test with for these, sorry.

Regards,
Simon

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init()
  2017-03-16 15:04   ` Eddie Cai
@ 2017-03-16 22:22     ` Simon Glass
  0 siblings, 0 replies; 12+ messages in thread
From: Simon Glass @ 2017-03-16 22:22 UTC (permalink / raw)
  To: u-boot

On 16 March 2017 at 09:04, Eddie Cai <eddie.cai.linux@gmail.com> wrote:
>
>
> 2017-03-15 22:43 GMT+08:00 Simon Glass <sjg@chromium.org>:
>>
>> From: Eddie Cai <eddie.cai.linux@gmail.com>
>>
>> Use spl_early_init() to make sure that early malloc() is initialised. This
>> fixes booting on firefly-rk3288, for example.
>>
>> Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
>
> Reviewed-by: Eddie Cai <eddie.cai.linux@gmail.com>

Applied to u-boot-rockchip.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init()
  2017-03-15 14:43 [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init() Simon Glass
  2017-03-15 14:43 ` [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init() Simon Glass
  2017-03-16 15:02 ` [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init() Eddie Cai
@ 2017-03-17 12:09 ` Tom Rini
  2017-03-20  5:28 ` Lokesh Vutla
  3 siblings, 0 replies; 12+ messages in thread
From: Tom Rini @ 2017-03-17 12:09 UTC (permalink / raw)
  To: u-boot

On Wed, Mar 15, 2017 at 08:43:28AM -0600, Simon Glass wrote:

> From: Eddie Cai <eddie.cai.linux@gmail.com>
> 
> At present malloc_base/_limit/_ptr are not initialised in spl_init() when
> we call spl_init() in board_init_f(). This is due to a recent change aimed
> at avoiding overwriting the malloc area set up on some boards by
> spl_relocate_stack_gd().
> 
> However if CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is not defined, we now
> skip setting up the memory area in spl_init() which is obviously wrong.
> 
> To fix this, add a new function spl_early_init() which can be called in
> board_init_f().
> 
> Fixes: b3d2861e (spl: Remove overwrite of relocated malloc limit)
> Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
> Rewrote spl_{,early_}init() to avoid duplicate code:
> Rewrite/expand commit message:
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170317/75e13861/attachment.sig>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init()
  2017-03-15 14:43 [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init() Simon Glass
                   ` (2 preceding siblings ...)
  2017-03-17 12:09 ` Tom Rini
@ 2017-03-20  5:28 ` Lokesh Vutla
  2017-03-20 14:27   ` Tom Rini
  3 siblings, 1 reply; 12+ messages in thread
From: Lokesh Vutla @ 2017-03-20  5:28 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Wednesday 15 March 2017 08:13 PM, Simon Glass wrote:
> From: Eddie Cai <eddie.cai.linux@gmail.com>
> 
> At present malloc_base/_limit/_ptr are not initialised in spl_init() when
> we call spl_init() in board_init_f(). This is due to a recent change aimed
> at avoiding overwriting the malloc area set up on some boards by
> spl_relocate_stack_gd().
> 
> However if CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is not defined, we now
> skip setting up the memory area in spl_init() which is obviously wrong.
> 
> To fix this, add a new function spl_early_init() which can be called in
> board_init_f().
> 
> Fixes: b3d2861e (spl: Remove overwrite of relocated malloc limit)
> Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
> Rewrote spl_{,early_}init() to avoid duplicate code:
> Rewrite/expand commit message:
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
> 
> Changes in v4: None
> Changes in v3: None
> Changes in v2:
> - Rewrote spl_{,early_}init() to avoid duplicate code
> - Rewrite commit message
> 
>  common/spl/spl.c                  | 46 +++++++++++++++++++++++++++++----------
>  include/asm-generic/global_data.h |  1 +
>  include/spl.h                     | 24 +++++++++++++++++---
>  3 files changed, 57 insertions(+), 14 deletions(-)
> 
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index 766fb3d6f4..2bc8b42027 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -170,22 +170,20 @@ __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
>  	image_entry();
>  }
>  
> -int spl_init(void)
> +static int spl_common_init(bool setup_malloc)
>  {
>  	int ret;
>  
> -	debug("spl_init()\n");
> -/*
> - * with CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN we set malloc_base and
> - * malloc_limit in spl_relocate_stack_gd
> - */
> -#if defined(CONFIG_SYS_MALLOC_F_LEN) && \
> -	!defined(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN)
> +	debug("spl_early_init()\n");
> +
> +#if defined(CONFIG_SYS_MALLOC_F_LEN)
> +	if (setup_malloc) {
>  #ifdef CONFIG_MALLOC_F_ADDR
> -	gd->malloc_base = CONFIG_MALLOC_F_ADDR;
> +		gd->malloc_base = CONFIG_MALLOC_F_ADDR;
>  #endif
> -	gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
> -	gd->malloc_ptr = 0;
> +		gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
> +		gd->malloc_ptr = 0;
> +	}
>  #endif
>  	if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
>  		ret = fdtdec_setup();
> @@ -202,6 +200,32 @@ int spl_init(void)
>  			return ret;
>  		}
>  	}
> +
> +	return 0;
> +}
> +
> +int spl_early_init(void)
> +{
> +	int ret;
> +
> +	ret = spl_common_init(true);
> +	if (ret)
> +		return ret;
> +	gd->flags |= GD_FLG_SPL_EARLY_INIT;
> +
> +	return 0;
> +}
> +
> +int spl_init(void)
> +{
> +	int ret;
> +
> +	if (!(gd->flags & GD_FLG_SPL_EARLY_INIT)) {
> +		ret = spl_common_init(
> +			!IS_ENABLED(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN));

IS_ENABLED(CONFIG defined as hex) is always false. So this will always
return true and overriding the malloc_limit, which is causing boot
failures on DRA7xx based boards.:wq

Thanks and regards,
Lokesh

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init()
  2017-03-20  5:28 ` Lokesh Vutla
@ 2017-03-20 14:27   ` Tom Rini
  2017-04-09 19:34     ` Simon Glass
  0 siblings, 1 reply; 12+ messages in thread
From: Tom Rini @ 2017-03-20 14:27 UTC (permalink / raw)
  To: u-boot

On Mon, Mar 20, 2017 at 10:58:57AM +0530, Lokesh Vutla wrote:
> Hi Simon,
> 
> On Wednesday 15 March 2017 08:13 PM, Simon Glass wrote:
> > From: Eddie Cai <eddie.cai.linux@gmail.com>
> > 
> > At present malloc_base/_limit/_ptr are not initialised in spl_init() when
> > we call spl_init() in board_init_f(). This is due to a recent change aimed
> > at avoiding overwriting the malloc area set up on some boards by
> > spl_relocate_stack_gd().
> > 
> > However if CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is not defined, we now
> > skip setting up the memory area in spl_init() which is obviously wrong.
> > 
> > To fix this, add a new function spl_early_init() which can be called in
> > board_init_f().
> > 
> > Fixes: b3d2861e (spl: Remove overwrite of relocated malloc limit)
> > Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
> > Rewrote spl_{,early_}init() to avoid duplicate code:
> > Rewrite/expand commit message:
> > Signed-off-by: Simon Glass <sjg@chromium.org>
> > ---
> > 
> > Changes in v4: None
> > Changes in v3: None
> > Changes in v2:
> > - Rewrote spl_{,early_}init() to avoid duplicate code
> > - Rewrite commit message
> > 
> >  common/spl/spl.c                  | 46 +++++++++++++++++++++++++++++----------
> >  include/asm-generic/global_data.h |  1 +
> >  include/spl.h                     | 24 +++++++++++++++++---
> >  3 files changed, 57 insertions(+), 14 deletions(-)
> > 
> > diff --git a/common/spl/spl.c b/common/spl/spl.c
> > index 766fb3d6f4..2bc8b42027 100644
> > --- a/common/spl/spl.c
> > +++ b/common/spl/spl.c
> > @@ -170,22 +170,20 @@ __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
> >  	image_entry();
> >  }
> >  
> > -int spl_init(void)
> > +static int spl_common_init(bool setup_malloc)
> >  {
> >  	int ret;
> >  
> > -	debug("spl_init()\n");
> > -/*
> > - * with CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN we set malloc_base and
> > - * malloc_limit in spl_relocate_stack_gd
> > - */
> > -#if defined(CONFIG_SYS_MALLOC_F_LEN) && \
> > -	!defined(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN)
> > +	debug("spl_early_init()\n");
> > +
> > +#if defined(CONFIG_SYS_MALLOC_F_LEN)
> > +	if (setup_malloc) {
> >  #ifdef CONFIG_MALLOC_F_ADDR
> > -	gd->malloc_base = CONFIG_MALLOC_F_ADDR;
> > +		gd->malloc_base = CONFIG_MALLOC_F_ADDR;
> >  #endif
> > -	gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
> > -	gd->malloc_ptr = 0;
> > +		gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
> > +		gd->malloc_ptr = 0;
> > +	}
> >  #endif
> >  	if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
> >  		ret = fdtdec_setup();
> > @@ -202,6 +200,32 @@ int spl_init(void)
> >  			return ret;
> >  		}
> >  	}
> > +
> > +	return 0;
> > +}
> > +
> > +int spl_early_init(void)
> > +{
> > +	int ret;
> > +
> > +	ret = spl_common_init(true);
> > +	if (ret)
> > +		return ret;
> > +	gd->flags |= GD_FLG_SPL_EARLY_INIT;
> > +
> > +	return 0;
> > +}
> > +
> > +int spl_init(void)
> > +{
> > +	int ret;
> > +
> > +	if (!(gd->flags & GD_FLG_SPL_EARLY_INIT)) {
> > +		ret = spl_common_init(
> > +			!IS_ENABLED(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN));
> 
> IS_ENABLED(CONFIG defined as hex) is always false. So this will always
> return true and overriding the malloc_limit, which is causing boot
> failures on DRA7xx based boards.:wq

Maybe we should use a bool that we set based on (SPL_STACK_R &&
SPL_SYS_MALLOC_SIMPLE) being true or not as that's the gating condition
for CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN being set.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170320/39e51107/attachment.sig>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init()
  2017-03-20 14:27   ` Tom Rini
@ 2017-04-09 19:34     ` Simon Glass
  0 siblings, 0 replies; 12+ messages in thread
From: Simon Glass @ 2017-04-09 19:34 UTC (permalink / raw)
  To: u-boot

Hi Tom,

On 20 March 2017 at 08:27, Tom Rini <trini@konsulko.com> wrote:
> On Mon, Mar 20, 2017 at 10:58:57AM +0530, Lokesh Vutla wrote:
>> Hi Simon,
>>
>> On Wednesday 15 March 2017 08:13 PM, Simon Glass wrote:
>> > From: Eddie Cai <eddie.cai.linux@gmail.com>
>> >
>> > At present malloc_base/_limit/_ptr are not initialised in spl_init() when
>> > we call spl_init() in board_init_f(). This is due to a recent change aimed
>> > at avoiding overwriting the malloc area set up on some boards by
>> > spl_relocate_stack_gd().
>> >
>> > However if CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN is not defined, we now
>> > skip setting up the memory area in spl_init() which is obviously wrong.
>> >
>> > To fix this, add a new function spl_early_init() which can be called in
>> > board_init_f().
>> >
>> > Fixes: b3d2861e (spl: Remove overwrite of relocated malloc limit)
>> > Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
>> > Rewrote spl_{,early_}init() to avoid duplicate code:
>> > Rewrite/expand commit message:
>> > Signed-off-by: Simon Glass <sjg@chromium.org>
>> > ---
>> >
>> > Changes in v4: None
>> > Changes in v3: None
>> > Changes in v2:
>> > - Rewrote spl_{,early_}init() to avoid duplicate code
>> > - Rewrite commit message
>> >
>> >  common/spl/spl.c                  | 46 +++++++++++++++++++++++++++++----------
>> >  include/asm-generic/global_data.h |  1 +
>> >  include/spl.h                     | 24 +++++++++++++++++---
>> >  3 files changed, 57 insertions(+), 14 deletions(-)
>> >
>> > diff --git a/common/spl/spl.c b/common/spl/spl.c
>> > index 766fb3d6f4..2bc8b42027 100644
>> > --- a/common/spl/spl.c
>> > +++ b/common/spl/spl.c
>> > @@ -170,22 +170,20 @@ __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
>> >     image_entry();
>> >  }
>> >
>> > -int spl_init(void)
>> > +static int spl_common_init(bool setup_malloc)
>> >  {
>> >     int ret;
>> >
>> > -   debug("spl_init()\n");
>> > -/*
>> > - * with CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN we set malloc_base and
>> > - * malloc_limit in spl_relocate_stack_gd
>> > - */
>> > -#if defined(CONFIG_SYS_MALLOC_F_LEN) && \
>> > -   !defined(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN)
>> > +   debug("spl_early_init()\n");
>> > +
>> > +#if defined(CONFIG_SYS_MALLOC_F_LEN)
>> > +   if (setup_malloc) {
>> >  #ifdef CONFIG_MALLOC_F_ADDR
>> > -   gd->malloc_base = CONFIG_MALLOC_F_ADDR;
>> > +           gd->malloc_base = CONFIG_MALLOC_F_ADDR;
>> >  #endif
>> > -   gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
>> > -   gd->malloc_ptr = 0;
>> > +           gd->malloc_limit = CONFIG_SYS_MALLOC_F_LEN;
>> > +           gd->malloc_ptr = 0;
>> > +   }
>> >  #endif
>> >     if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
>> >             ret = fdtdec_setup();
>> > @@ -202,6 +200,32 @@ int spl_init(void)
>> >                     return ret;
>> >             }
>> >     }
>> > +
>> > +   return 0;
>> > +}
>> > +
>> > +int spl_early_init(void)
>> > +{
>> > +   int ret;
>> > +
>> > +   ret = spl_common_init(true);
>> > +   if (ret)
>> > +           return ret;
>> > +   gd->flags |= GD_FLG_SPL_EARLY_INIT;
>> > +
>> > +   return 0;
>> > +}
>> > +
>> > +int spl_init(void)
>> > +{
>> > +   int ret;
>> > +
>> > +   if (!(gd->flags & GD_FLG_SPL_EARLY_INIT)) {
>> > +           ret = spl_common_init(
>> > +                   !IS_ENABLED(CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN));
>>
>> IS_ENABLED(CONFIG defined as hex) is always false. So this will always
>> return true and overriding the malloc_limit, which is causing boot
>> failures on DRA7xx based boards.:wq
>
> Maybe we should use a bool that we set based on (SPL_STACK_R &&
> SPL_SYS_MALLOC_SIMPLE) being true or not as that's the gating condition
> for CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN being set.

And it looks like you fixed this with:

cf334edfbb    spl: Correct call to spl_common_init() with
SPL_STACK_R_MALLOC_SIMPLE_LEN

Thanks!
- Simon

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2017-04-09 19:34 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-03-15 14:43 [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init() Simon Glass
2017-03-15 14:43 ` [U-Boot] [PATCH v4 2/2] rockchip: rk3288: use spl_early_init() instead of spl_init() Simon Glass
2017-03-16  7:08   ` Kever Yang
2017-03-16 22:22     ` Simon Glass
2017-03-16 15:04   ` Eddie Cai
2017-03-16 22:22     ` Simon Glass
2017-03-16 15:02 ` [U-Boot] [PATCH v4 1/2] spl: Add spl_early_init() Eddie Cai
2017-03-16 22:22   ` Simon Glass
2017-03-17 12:09 ` Tom Rini
2017-03-20  5:28 ` Lokesh Vutla
2017-03-20 14:27   ` Tom Rini
2017-04-09 19:34     ` Simon Glass

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox