diff mbox

[U-Boot,v3,16/19] ARM: SPL: Convert davinci to CONFIG_SPL_FRAMEWORK

Message ID 1345677585-15696-17-git-send-email-trini@ti.com
State Superseded
Delegated to: Tom Rini
Headers show

Commit Message

Tom Rini Aug. 22, 2012, 11:19 p.m. UTC
- Convert the non-relocation part of board_init_f to spl_board_init,
  turn on CONFIG_SPL_BOARD_INIT in the configs.
- Remove duplicated code.
- Add spl_boot_device() that returns the statically chosen boot device.

Signed-off-by: Tom Rini <trini@ti.com>
---
Changes in v2:
- Add CONFIG_SYS_SPL_MALLOC_START / SIZE defines from Christian Riesch
- Add arch/arm/cpu/arm926ejs/davinci/config.mk to build u-boot.ais

Changes in v3:
  CONFIG_SPL_FRAMEWORK
  perform early init.  Fixes the cannot reset problem.
- Make u-boot.ais use u-boot.img not u-boot.bin, now that it uses
- Make use of board_init_f being a weak function now so that we can

 Makefile                                 |    4 +--
 arch/arm/cpu/arm926ejs/davinci/config.mk |   16 +++++++++
 arch/arm/cpu/arm926ejs/davinci/spl.c     |   56 ++++++++++++------------------
 arch/arm/include/asm/arch-davinci/spl.h  |   28 +++++++++++++++
 include/configs/cam_enc_4xx.h            |    2 ++
 include/configs/da850evm.h               |    5 +++
 include/configs/hawkboard.h              |    2 ++
 7 files changed, 77 insertions(+), 36 deletions(-)
 create mode 100644 arch/arm/cpu/arm926ejs/davinci/config.mk
 create mode 100644 arch/arm/include/asm/arch-davinci/spl.h

Comments

Christian Riesch Aug. 23, 2012, 1:14 p.m. UTC | #1
Hi Tom,

On Thu, Aug 23, 2012 at 1:19 AM, Tom Rini <trini@ti.com> wrote:
> - Convert the non-relocation part of board_init_f to spl_board_init,
>   turn on CONFIG_SPL_BOARD_INIT in the configs.
> - Remove duplicated code.
> - Add spl_boot_device() that returns the statically chosen boot device.
>
> Signed-off-by: Tom Rini <trini@ti.com>
[...]
> diff --git a/arch/arm/cpu/arm926ejs/davinci/spl.c b/arch/arm/cpu/arm926ejs/davinci/spl.c
> index 74632e5..46c0bfd 100644
> --- a/arch/arm/cpu/arm926ejs/davinci/spl.c
> +++ b/arch/arm/cpu/arm926ejs/davinci/spl.c
> @@ -21,6 +21,7 @@
>   * MA 02111-1307 USA
>   */
>  #include <common.h>
> +#include <spl.h>
>  #include <asm/u-boot.h>
>  #include <asm/utils.h>
>  #include <nand.h>
> @@ -29,14 +30,7 @@
>  #include <malloc.h>
>  #include <spi_flash.h>
>
> -#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
> -
> -DECLARE_GLOBAL_DATA_PTR;
> -/* Define global data structure pointer to it*/
> -static gd_t gdata __attribute__ ((section(".data")));
> -static bd_t bdata __attribute__ ((section(".data")));
> -
> -#else
> +#ifndef CONFIG_SPL_LIBCOMMON_SUPPORT
>
>  void puts(const char *str)
>  {
> @@ -54,43 +48,37 @@ void putc(char c)
>
>  #endif /* CONFIG_SPL_LIBCOMMON_SUPPORT */
>
> -inline void hang(void)
> -{
> -       puts("### ERROR ### Please RESET the board ###\n");
> -       for (;;)
> -               ;
> -}
> -
>  void board_init_f(ulong dummy)
>  {
> +       /* First, perform our low-level init. */
>  #ifdef CONFIG_SOC_DM365
>         dm36x_lowlevel_init(0);
>  #endif
>  #ifdef CONFIG_SOC_DA8XX
>         arch_cpu_init();
>  #endif
> -       relocate_code(CONFIG_SPL_STACK, NULL, CONFIG_SPL_TEXT_BASE);
> +
> +       /*
> +        * Next we call relocate_code() with relocation target same as the
> +        * CONFIG_SYS_SPL_TEXT_BASE. This will result in relocation getting
> +        * skipped. Instead, only .bss initialization will happen.
> +        */
> +       relocate_code(CONFIG_SPL_STACK, &gdata, CONFIG_SPL_TEXT_BASE);
>  }
>
> -void board_init_r(gd_t *id, ulong dummy)
> +void spl_board_init(void)
>  {
> -#ifdef CONFIG_SPL_NAND_LOAD
> -       nand_init();
> -       puts("Nand boot...\n");
> -       nand_boot();
> -#endif
> -#ifdef CONFIG_SPL_SPI_LOAD
> -       mem_malloc_init(CONFIG_SYS_TEXT_BASE - CONFIG_SYS_MALLOC_LEN,
> -                       CONFIG_SYS_MALLOC_LEN);
> -
> -       gd = &gdata;
> -       gd->bd = &bdata;
> -       gd->flags |= GD_FLG_RELOC;
> -       gd->baudrate = CONFIG_BAUDRATE;
> -       serial_init();          /* serial communications setup */
> -       gd->have_console = 1;
> +       preloader_console_init();
> +}
>
> -       puts("SPI boot...\n");
> -       spi_boot();
> +u32 spl_boot_device(void)
> +{
> +#ifdef CONFIG_SPL_NAND_LOAD
> +       return BOOT_DEVICE_NAND;
> +#elif defined(CONFIG_SPL_SPI_LOAD)
> +       return BOOT_DEVICE_SPI;
> +#else

This will not apply on u-boot-ti since it is missing the MMC-SPL
patches that have already been merged, right?
Regards, Christian

> +       puts("Unknown boot device\n");
> +       hang();
>  #endif
>  }
Tom Rini Aug. 23, 2012, 2:07 p.m. UTC | #2
On 08/23/2012 06:14 AM, Christian Riesch wrote:
> Hi Tom,
> 
> On Thu, Aug 23, 2012 at 1:19 AM, Tom Rini <trini@ti.com> wrote:
>> - Convert the non-relocation part of board_init_f to spl_board_init,
>>   turn on CONFIG_SPL_BOARD_INIT in the configs.
>> - Remove duplicated code.
>> - Add spl_boot_device() that returns the statically chosen boot device.
>>
>> Signed-off-by: Tom Rini <trini@ti.com>
> [...]
>> diff --git a/arch/arm/cpu/arm926ejs/davinci/spl.c b/arch/arm/cpu/arm926ejs/davinci/spl.c
>> index 74632e5..46c0bfd 100644
>> --- a/arch/arm/cpu/arm926ejs/davinci/spl.c
>> +++ b/arch/arm/cpu/arm926ejs/davinci/spl.c
>> @@ -21,6 +21,7 @@
>>   * MA 02111-1307 USA
>>   */
>>  #include <common.h>
>> +#include <spl.h>
>>  #include <asm/u-boot.h>
>>  #include <asm/utils.h>
>>  #include <nand.h>
>> @@ -29,14 +30,7 @@
>>  #include <malloc.h>
>>  #include <spi_flash.h>
>>
>> -#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
>> -
>> -DECLARE_GLOBAL_DATA_PTR;
>> -/* Define global data structure pointer to it*/
>> -static gd_t gdata __attribute__ ((section(".data")));
>> -static bd_t bdata __attribute__ ((section(".data")));
>> -
>> -#else
>> +#ifndef CONFIG_SPL_LIBCOMMON_SUPPORT
>>
>>  void puts(const char *str)
>>  {
>> @@ -54,43 +48,37 @@ void putc(char c)
>>
>>  #endif /* CONFIG_SPL_LIBCOMMON_SUPPORT */
>>
>> -inline void hang(void)
>> -{
>> -       puts("### ERROR ### Please RESET the board ###\n");
>> -       for (;;)
>> -               ;
>> -}
>> -
>>  void board_init_f(ulong dummy)
>>  {
>> +       /* First, perform our low-level init. */
>>  #ifdef CONFIG_SOC_DM365
>>         dm36x_lowlevel_init(0);
>>  #endif
>>  #ifdef CONFIG_SOC_DA8XX
>>         arch_cpu_init();
>>  #endif
>> -       relocate_code(CONFIG_SPL_STACK, NULL, CONFIG_SPL_TEXT_BASE);
>> +
>> +       /*
>> +        * Next we call relocate_code() with relocation target same as the
>> +        * CONFIG_SYS_SPL_TEXT_BASE. This will result in relocation getting
>> +        * skipped. Instead, only .bss initialization will happen.
>> +        */
>> +       relocate_code(CONFIG_SPL_STACK, &gdata, CONFIG_SPL_TEXT_BASE);
>>  }
>>
>> -void board_init_r(gd_t *id, ulong dummy)
>> +void spl_board_init(void)
>>  {
>> -#ifdef CONFIG_SPL_NAND_LOAD
>> -       nand_init();
>> -       puts("Nand boot...\n");
>> -       nand_boot();
>> -#endif
>> -#ifdef CONFIG_SPL_SPI_LOAD
>> -       mem_malloc_init(CONFIG_SYS_TEXT_BASE - CONFIG_SYS_MALLOC_LEN,
>> -                       CONFIG_SYS_MALLOC_LEN);
>> -
>> -       gd = &gdata;
>> -       gd->bd = &bdata;
>> -       gd->flags |= GD_FLG_RELOC;
>> -       gd->baudrate = CONFIG_BAUDRATE;
>> -       serial_init();          /* serial communications setup */
>> -       gd->have_console = 1;
>> +       preloader_console_init();
>> +}
>>
>> -       puts("SPI boot...\n");
>> -       spi_boot();
>> +u32 spl_boot_device(void)
>> +{
>> +#ifdef CONFIG_SPL_NAND_LOAD
>> +       return BOOT_DEVICE_NAND;
>> +#elif defined(CONFIG_SPL_SPI_LOAD)
>> +       return BOOT_DEVICE_SPI;
>> +#else
> 
> This will not apply on u-boot-ti since it is missing the MMC-SPL
> patches that have already been merged, right?

Indeed, there will be a certain amount of merge-pain I will have to deal
with to get this to apply.  There's also conflicts with some of the
am33xx enhancements there or that I plan to push there shortly.
diff mbox

Patch

diff --git a/Makefile b/Makefile
index 57bb0b9..8738d55 100644
--- a/Makefile
+++ b/Makefile
@@ -441,7 +441,7 @@  $(obj)u-boot.ubl:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
 		rm $(obj)u-boot-ubl.bin
 		rm $(obj)spl/u-boot-spl-pad.bin
 
-$(obj)u-boot.ais:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
+$(obj)u-boot.ais:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.img
 		$(obj)tools/mkimage -s -n /dev/null -T aisimage \
 			-e $(CONFIG_SPL_TEXT_BASE) \
 			-d $(obj)spl/u-boot-spl.bin \
@@ -449,7 +449,7 @@  $(obj)u-boot.ais:       $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
 		$(OBJCOPY) ${OBJCFLAGS} -I binary \
 			--pad-to=$(CONFIG_SPL_MAX_SIZE) -O binary \
 			$(obj)spl/u-boot-spl.ais $(obj)spl/u-boot-spl-pad.ais
-		cat $(obj)spl/u-boot-spl-pad.ais $(obj)u-boot.bin > \
+		cat $(obj)spl/u-boot-spl-pad.ais $(obj)u-boot.img > \
 			$(obj)u-boot.ais
 		rm $(obj)spl/u-boot-spl{,-pad}.ais
 
diff --git a/arch/arm/cpu/arm926ejs/davinci/config.mk b/arch/arm/cpu/arm926ejs/davinci/config.mk
new file mode 100644
index 0000000..42e55cc
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/davinci/config.mk
@@ -0,0 +1,16 @@ 
+#
+# Copyright (C) 2012, Texas Instruments, Incorporated - http://www.ti.com/
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed "as is" WITHOUT ANY WARRANTY of any
+# kind, whether express or implied; without even the implied warranty
+# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+ifndef CONFIG_SPL_BUILD
+ALL-y	+= $(obj)u-boot.ais
+endif
diff --git a/arch/arm/cpu/arm926ejs/davinci/spl.c b/arch/arm/cpu/arm926ejs/davinci/spl.c
index 74632e5..46c0bfd 100644
--- a/arch/arm/cpu/arm926ejs/davinci/spl.c
+++ b/arch/arm/cpu/arm926ejs/davinci/spl.c
@@ -21,6 +21,7 @@ 
  * MA 02111-1307 USA
  */
 #include <common.h>
+#include <spl.h>
 #include <asm/u-boot.h>
 #include <asm/utils.h>
 #include <nand.h>
@@ -29,14 +30,7 @@ 
 #include <malloc.h>
 #include <spi_flash.h>
 
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
-
-DECLARE_GLOBAL_DATA_PTR;
-/* Define global data structure pointer to it*/
-static gd_t gdata __attribute__ ((section(".data")));
-static bd_t bdata __attribute__ ((section(".data")));
-
-#else
+#ifndef CONFIG_SPL_LIBCOMMON_SUPPORT
 
 void puts(const char *str)
 {
@@ -54,43 +48,37 @@  void putc(char c)
 
 #endif /* CONFIG_SPL_LIBCOMMON_SUPPORT */
 
-inline void hang(void)
-{
-	puts("### ERROR ### Please RESET the board ###\n");
-	for (;;)
-		;
-}
-
 void board_init_f(ulong dummy)
 {
+	/* First, perform our low-level init. */
 #ifdef CONFIG_SOC_DM365
 	dm36x_lowlevel_init(0);
 #endif
 #ifdef CONFIG_SOC_DA8XX
 	arch_cpu_init();
 #endif
-	relocate_code(CONFIG_SPL_STACK, NULL, CONFIG_SPL_TEXT_BASE);
+
+	/*
+	 * Next we call relocate_code() with relocation target same as the
+	 * CONFIG_SYS_SPL_TEXT_BASE. This will result in relocation getting
+	 * skipped. Instead, only .bss initialization will happen.
+	 */
+	relocate_code(CONFIG_SPL_STACK, &gdata, CONFIG_SPL_TEXT_BASE);
 }
 
-void board_init_r(gd_t *id, ulong dummy)
+void spl_board_init(void)
 {
-#ifdef CONFIG_SPL_NAND_LOAD
-	nand_init();
-	puts("Nand boot...\n");
-	nand_boot();
-#endif
-#ifdef CONFIG_SPL_SPI_LOAD
-	mem_malloc_init(CONFIG_SYS_TEXT_BASE - CONFIG_SYS_MALLOC_LEN,
-			CONFIG_SYS_MALLOC_LEN);
-
-	gd = &gdata;
-	gd->bd = &bdata;
-	gd->flags |= GD_FLG_RELOC;
-	gd->baudrate = CONFIG_BAUDRATE;
-	serial_init();          /* serial communications setup */
-	gd->have_console = 1;
+	preloader_console_init();
+}
 
-	puts("SPI boot...\n");
-	spi_boot();
+u32 spl_boot_device(void)
+{
+#ifdef CONFIG_SPL_NAND_LOAD
+	return BOOT_DEVICE_NAND;
+#elif defined(CONFIG_SPL_SPI_LOAD)
+	return BOOT_DEVICE_SPI;
+#else
+	puts("Unknown boot device\n");
+	hang();
 #endif
 }
diff --git a/arch/arm/include/asm/arch-davinci/spl.h b/arch/arm/include/asm/arch-davinci/spl.h
new file mode 100644
index 0000000..f9c5131
--- /dev/null
+++ b/arch/arm/include/asm/arch-davinci/spl.h
@@ -0,0 +1,28 @@ 
+/*
+ * (C) Copyright 2012
+ * Texas Instruments, <www.ti.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#ifndef	_ASM_ARCH_SPL_H_
+#define	_ASM_SPL_H_
+
+#define BOOT_DEVICE_NAND	1
+#define BOOT_DEVICE_SPI		2
+#endif
diff --git a/include/configs/cam_enc_4xx.h b/include/configs/cam_enc_4xx.h
index 771ac9c..fe28278 100644
--- a/include/configs/cam_enc_4xx.h
+++ b/include/configs/cam_enc_4xx.h
@@ -217,6 +217,8 @@ 
 
 /* Defines for SPL */
 #define CONFIG_SPL
+#define CONFIG_SPL_FRAMEWORK
+#define CONFIG_SPL_BOARD_INIT
 #define CONFIG_SPL_LIBGENERIC_SUPPORT
 #define CONFIG_SPL_NAND_SUPPORT
 #define CONFIG_SPL_NAND_SIMPLE
diff --git a/include/configs/da850evm.h b/include/configs/da850evm.h
index e6adb1f..290ded1 100644
--- a/include/configs/da850evm.h
+++ b/include/configs/da850evm.h
@@ -313,6 +313,11 @@ 
 
 /* defines for SPL */
 #define CONFIG_SPL
+#define CONFIG_SPL_FRAMEWORK
+#define CONFIG_SPL_BOARD_INIT
+#define CONFIG_SYS_SPL_MALLOC_START	(CONFIG_SYS_TEXT_BASE - \
+						CONFIG_SYS_MALLOC_LEN)
+#define CONFIG_SYS_SPL_MALLOC_SIZE	CONFIG_SYS_MALLOC_LEN
 #define CONFIG_SPL_SPI_SUPPORT
 #define CONFIG_SPL_SPI_FLASH_SUPPORT
 #define CONFIG_SPL_SPI_LOAD
diff --git a/include/configs/hawkboard.h b/include/configs/hawkboard.h
index c6e9ce5..838e572 100644
--- a/include/configs/hawkboard.h
+++ b/include/configs/hawkboard.h
@@ -59,6 +59,8 @@ 
 
 /* Spl */
 #define CONFIG_SPL
+#define CONFIG_SPL_FRAMEWORK
+#define CONFIG_SPL_BOARD_INIT
 #define CONFIG_SPL_NAND_SUPPORT
 #define CONFIG_SPL_NAND_SIMPLE
 #define CONFIG_SPL_NAND_LOAD