diff mbox

[U-Boot,v2,15/18] ARM: SPL: Convert davinci to CONFIG_SPL_FRAMEWORK

Message ID 1345481154-7050-16-git-send-email-trini@ti.com
State Superseded
Delegated to: Tom Rini
Headers show

Commit Message

Tom Rini Aug. 20, 2012, 4:45 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

 arch/arm/cpu/arm926ejs/davinci/config.mk |   16 +++++++++++
 arch/arm/cpu/arm926ejs/davinci/spl.c     |   45 +++++++-----------------------
 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 ++
 6 files changed, 63 insertions(+), 35 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. 22, 2012, 10:04 a.m. UTC | #1
Hi Tom,

On Mon, Aug 20, 2012 at 6:45 PM, 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.

I tested the patchset on the LogicPD AM1808 experimenter's kit:

make da850evm
and flashing to SPI flash with
mono sfh_OMAP-L138.exe -targetType AM1808 -p /dev/ttyUSB0 -flash_noubl
u-boot.ais

The board boots up fine, but after pressing the reset button or
issuing the u-boot "reset" command, it is dead. Only power-cycling
helps. Before enabling the SPL framework in this patch reset works
fine. Any ideas?

Regards, Christian
Prabhakar Lad Aug. 22, 2012, 10:13 a.m. UTC | #2
Hi Tom,

On Wednesday 22 August 2012 03:34 PM, Christian Riesch wrote:
> Hi Tom,
> 
> On Mon, Aug 20, 2012 at 6:45 PM, 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.
> 
> I tested the patchset on the LogicPD AM1808 experimenter's kit:
> 
> make da850evm
> and flashing to SPI flash with
> mono sfh_OMAP-L138.exe -targetType AM1808 -p /dev/ttyUSB0 -flash_noubl
> u-boot.ais
> 
I tried testing the same on omap-l138 (the entire patch set) for SPI
boot mode itsef, unfortunately the board doesn't even come up. Any Ideas ?

Thx,
--Prabhakar

> The board boots up fine, but after pressing the reset button or
> issuing the u-boot "reset" command, it is dead. Only power-cycling
> helps. Before enabling the SPL framework in this patch reset works
> fine. Any ideas?
> 
> Regards, Christian
>
Tom Rini Aug. 22, 2012, 5:46 p.m. UTC | #3
On Wed, Aug 22, 2012 at 12:04:27PM +0200, Christian Riesch wrote:
> Hi Tom,
> 
> On Mon, Aug 20, 2012 at 6:45 PM, 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.
> 
> I tested the patchset on the LogicPD AM1808 experimenter's kit:
> 
> make da850evm
> and flashing to SPI flash with
> mono sfh_OMAP-L138.exe -targetType AM1808 -p /dev/ttyUSB0 -flash_noubl
> u-boot.ais

Confirmed, and I'll update the README to say that is how you can write
the u-boot.ais in recovery mode.

> The board boots up fine, but after pressing the reset button or
> issuing the u-boot "reset" command, it is dead. Only power-cycling
> helps. Before enabling the SPL framework in this patch reset works
> fine. Any ideas?

OK, I don't like the SPL malloc fix from before and I think it just
masked, partially, a real problem.  The SPI code did not change in the
framework.  And the very basic framework does not require malloc.  I'm
going to poke around and see what I can see, but more eyes would be
welcome.
Tom Rini Aug. 22, 2012, 7:19 p.m. UTC | #4
On Wed, Aug 22, 2012 at 10:46:19AM -0700, Tom Rini wrote:
> On Wed, Aug 22, 2012 at 12:04:27PM +0200, Christian Riesch wrote:
> > Hi Tom,
> > 
> > On Mon, Aug 20, 2012 at 6:45 PM, 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.
> > 
> > I tested the patchset on the LogicPD AM1808 experimenter's kit:
> > 
> > make da850evm
> > and flashing to SPI flash with
> > mono sfh_OMAP-L138.exe -targetType AM1808 -p /dev/ttyUSB0 -flash_noubl
> > u-boot.ais
> 
> Confirmed, and I'll update the README to say that is how you can write
> the u-boot.ais in recovery mode.
> 
> > The board boots up fine, but after pressing the reset button or
> > issuing the u-boot "reset" command, it is dead. Only power-cycling
> > helps. Before enabling the SPL framework in this patch reset works
> > fine. Any ideas?
> 
> OK, I don't like the SPL malloc fix from before and I think it just
> masked, partially, a real problem.  The SPI code did not change in the

OK, I get what that fixes now, oops.  But still, something is going on
here, debugging more.
Tom Rini Aug. 22, 2012, 11:14 p.m. UTC | #5
On Wed, Aug 22, 2012 at 12:19:03PM -0700, Tom Rini wrote:
> On Wed, Aug 22, 2012 at 10:46:19AM -0700, Tom Rini wrote:
> > On Wed, Aug 22, 2012 at 12:04:27PM +0200, Christian Riesch wrote:
> > > Hi Tom,
> > > 
> > > On Mon, Aug 20, 2012 at 6:45 PM, 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.
> > > 
> > > I tested the patchset on the LogicPD AM1808 experimenter's kit:
> > > 
> > > make da850evm
> > > and flashing to SPI flash with
> > > mono sfh_OMAP-L138.exe -targetType AM1808 -p /dev/ttyUSB0 -flash_noubl
> > > u-boot.ais
> > 
> > Confirmed, and I'll update the README to say that is how you can write
> > the u-boot.ais in recovery mode.
> > 
> > > The board boots up fine, but after pressing the reset button or
> > > issuing the u-boot "reset" command, it is dead. Only power-cycling
> > > helps. Before enabling the SPL framework in this patch reset works
> > > fine. Any ideas?
> > 
> > OK, I don't like the SPL malloc fix from before and I think it just
> > masked, partially, a real problem.  The SPI code did not change in the
> 
> OK, I get what that fixes now, oops.  But still, something is going on
> here, debugging more.

OK, got it, and a v3 shortly.  In short, using CONFIG_SPL_BOARD_INIT as
the hook for doing our low-level init isn't completely sufficient, so
I've reworked things a little more and tossed in another hook point.
Now I'm also seeing the initial console output I had been missing.
diff mbox

Patch

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..1848055 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,14 +48,7 @@  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)
+void spl_board_init(void)
 {
 #ifdef CONFIG_SOC_DM365
 	dm36x_lowlevel_init(0);
@@ -69,28 +56,16 @@  void board_init_f(ulong dummy)
 #ifdef CONFIG_SOC_DA8XX
 	arch_cpu_init();
 #endif
-	relocate_code(CONFIG_SPL_STACK, NULL, CONFIG_SPL_TEXT_BASE);
 }
 
-void board_init_r(gd_t *id, ulong dummy)
+u32 spl_boot_device(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;
-
-	puts("SPI boot...\n");
-	spi_boot();
+	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