Skip to contentSkip to conversation

Add an SPL to boot the da850evm from SPI

PATCH Superseded Christian Riesch 4 participants 17 messages Dec 2, 2011 – Dec 5, 2011

Subsystems (4)

v4 of 6 Superseded Latest is v6 →

lore
Share & tools
lore
#0 lore raw

v4 cover Add an SPL to boot the da850evm from SPI

Hi,
this is v4 of the last part of my recent patchset

[PATCH v3 00/15] Add an SPL to boot the da850evm from SPI
http://lists.denx.de/pipermail/u-boot/2011-November/111182.html

Most of the other parts are already merged, together with this patchset they introduce an SPL for the da850evm to run u-boot directly without the need of a UBL (see doc/README.davinci).

The first patches fix dependencies and introduce a function to load the u-boot image from SPI flash. Patch #4 adds an SPL to the da850evm configuration. Finally, a simple
AIS (Application Image Script) is required to start the SPL. This AIS is generated by mkimage. Patch #5 fixes mkimage for building AIS. Finally the last patch introduces a u-boot.ais target in the Makefile.

This patchset applies on top of git://git.denx.de/u-boot-ti.git

Changes for v4:
- added documentation for the SPL to doc/README.davinci
- split patchset because it got too big
- use COBJS-$(CONFIG_SPL_SPI_LOAD) instead of ifdefs in drivers/mtd/spi/Makefile
- use __noreturn instead of __attribute__((noreturn))
- added Acked-by

Changes for v3:
- removed noise and hardcoded values from drivers/mtd/spi/spi_spl_load.c
- replaced $(PAD_TO) in Makefile by $(CONFIG_SPL_MAX_SIZE)

Major changes for v2:
- Added code that actually loads u-boot from SPI flash and starts it.

To build run
make da850evm_config
make u-boot.ais
Then program u-boot.ais to the SPI flash on the da850evm.

Best regards,
Christian

Cc Heiko Schocher <[email protected]>
Cc Sandeep Paulraj <[email protected]>
Cc Tom Rini <[email protected]>

Christian Riesch (6):
spl: display_options.o is required for SPI flash support in SPL
sf: Add spi_boot() to allow booting from SPI flash in an SPL arm, davinci: Add SPL support for DA850 SoCs
arm, da850evm: Add an SPL for SPI boot
mkimage: Fix variable length header support
arm, davinci: Add support for generating AIS images to the Makefile

 .gitignore                              |    1 +
 Makefile                                |   13 ++++
 arch/arm/cpu/arm926ejs/davinci/Makefile |    3 +-
 arch/arm/cpu/arm926ejs/davinci/spl.c    |   34 +++++++++++-
 board/davinci/da8xxevm/da850evm.c       |    4 +-
 board/davinci/da8xxevm/u-boot-spl.lds   |   73 +++++++++++++++++++++++
 doc/README.SPL                          |    1 +
 doc/README.davinci                      |    9 +++
 drivers/mtd/spi/Makefile                |    4 +
 drivers/mtd/spi/spi_spl_load.c          |   58 ++++++++++++++++++
 include/configs/da850evm.h              |   87 +++++++++++++++++++++++++++
 include/spi_flash.h                     |    3 +
 lib/Makefile                            |    2 +
 tools/mkimage.c                         |   97 ++++++++++++++++---------------
 14 files changed, 338 insertions(+), 51 deletions(-)
 create mode 100644 board/davinci/da8xxevm/u-boot-spl.lds
 create mode 100644 drivers/mtd/spi/spi_spl_load.c
#1 lore raw

PATCH v4 1/6 spl: display_options.o is required for SPI flash support in SPL

Cc Heiko Schocher <[email protected]>
Cc Mike Frysinger <[email protected]>
---
 lib/Makefile |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
lib/Makefile +2 -0
index 54708c2..35ba7ff 100644
@@ -50,6 +50,8 @@ COBJS-$(CONFIG_SHA1) += sha1.o
 COBJS-$(CONFIG_SHA256) += sha256.o
 COBJS-y	+= strmhz.o
 COBJS-$(CONFIG_RBTREE)	+= rbtree.o
+else
+COBJS-$(CONFIG_SPL_SPI_FLASH_SUPPORT) += display_options.o
 endif
 
 COBJS-y += ctype.o
Signature · 1 line
1.7.0.4
#2 lore raw

PATCH v4 2/6 sf: Add spi_boot() to allow booting from SPI flash in an SPL

In reply to Christian Riesch
Cc Heiko Schocher <[email protected]>
Cc Mike Frysinger <[email protected]>
Cc Scott Wood <[email protected]>
---
 doc/README.SPL                 |    1 +
 drivers/mtd/spi/Makefile       |    4 +++
 drivers/mtd/spi/spi_spl_load.c |   58 ++++++++++++++++++++++++++++++++++++++++
 include/spi_flash.h            |    3 ++
 4 files changed, 66 insertions(+), 0 deletions(-)
 create mode 100644 drivers/mtd/spi/spi_spl_load.c
doc/README.SPL +1 -0
index 89d24a7..f01a8bd 100644
@@ -65,3 +65,4 @@ CONFIG_SPL_NAND_SUPPORT (drivers/mtd/nand/libnand.o)
 CONFIG_SPL_DMA_SUPPORT (drivers/dma/libdma.o)
 CONFIG_SPL_POST_MEM_SUPPORT (post/drivers/memory.o)
 CONFIG_SPL_NAND_LOAD (drivers/mtd/nand/nand_spl_load.o)
+CONFIG_SPL_SPI_LOAD (drivers/mtd/spi/spi_spl_load.o)
drivers/mtd/spi/Makefile +4 -0
index 57112af..90f8392 100644
@@ -25,6 +25,10 @@ include $(TOPDIR)/config.mk
 
 LIB	:= $(obj)libspi_flash.o
 
+ifdef CONFIG_SPL_BUILD
+COBJS-$(CONFIG_SPL_SPI_LOAD)	+= spi_spl_load.o
+endif
+
 COBJS-$(CONFIG_SPI_FLASH)	+= spi_flash.o
 COBJS-$(CONFIG_SPI_FLASH_ATMEL)	+= atmel.o
 COBJS-$(CONFIG_SPI_FLASH_EON)	+= eon.o
drivers/mtd/spi/spi_spl_load.c new file +58 -0

58 lines not on this page · raw message

include/spi_flash.h +3 -0
index 2671ab5..9da9062 100644
@@ -25,6 +25,7 @@
 
 #include <spi.h>
 #include <linux/types.h>
+#include <linux/compiler.h>
 
 struct spi_flash {
 	struct spi_slave *spi;
@@ -68,4 +69,6 @@ static inline int spi_flash_erase(struct spi_flash *flash, u32 offset,
 	return flash->erase(flash, offset, len);
 }
 
+void spi_boot(void) __noreturn;
+
 #endif /* _SPI_FLASH_H_ */
Signature · 1 line
1.7.0.4
#4 lore raw

PATCH v4 3/6 arm, davinci: Add SPL support for DA850 SoCs

In reply to Christian Riesch

This code adds an SPL for booting from SPI flash on DA850 SoCs.

Cc Heiko Schocher <[email protected]>
Cc Sandeep Paulraj <[email protected]>
Cc Tom Rini <[email protected]>
---
 arch/arm/cpu/arm926ejs/davinci/Makefile |    3 +-
 arch/arm/cpu/arm926ejs/davinci/spl.c    |   34 ++++++++++++++++++++++++++++++-
 2 files changed, 35 insertions(+), 2 deletions(-)
arch/arm/cpu/arm926ejs/davinci/Makefile +2 -1
index 5ae89df..da7efac 100644
@@ -38,7 +38,8 @@ COBJS-$(CONFIG_DRIVER_TI_EMAC)	+= lxt972.o dp83848.o et1011c.o ksz8873.o
 
 ifdef CONFIG_SPL_BUILD
 COBJS-y	+= spl.o
-COBJS-y	+= dm365_lowlevel.o
+COBJS-$(CONFIG_SOC_DM365)	+= dm365_lowlevel.o
+COBJS-$(CONFIG_SOC_DA8XX)	+= da850_lowlevel.o
 endif
 
 SOBJS	= reset.o
arch/arm/cpu/arm926ejs/davinci/spl.c +33 -1
index d9b9398..20f798e 100644
@@ -26,6 +26,16 @@
 #include <nand.h>
 #include <asm/arch/dm365_lowlevel.h>
 #include <ns16550.h>
+#include <malloc.h>
+#include <spi_flash.h>
+
+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")));
+
+#ifndef CONFIG_SPL_LIBCOMMON_SUPPORT
 
 void puts(const char *str)
 {
@@ -41,6 +51,8 @@ void putc(char c)
 	NS16550_putc((NS16550_t)(CONFIG_SYS_NS16550_COM1), c);
 }
 
+#endif /* CONFIG_SPL_LIBCOMMON_SUPPORT */
+
 inline void hang(void)
 {
 	puts("### ERROR ### Please RESET the board ###\n");
@@ -50,14 +62,34 @@ inline void hang(void)
 
 void board_init_f(ulong dummy)
 {
+#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);
 }
 
 void board_init_r(gd_t *id, ulong dummy)
 {
-
+#ifdef CONFIG_SOC_DM365
 	nand_init();
 	puts("Nand boot...\n");
 	nand_boot();
+#endif
+#ifdef CONFIG_SOC_DA8XX
+	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();
+#endif
 }
Signature · 1 line
1.7.0.4
#5 lore raw

PATCH v4 3/6 arm, davinci: Add SPL support for DA850 SoCs

Quoted 1 line · Christian Riesch

This code adds an SPL for booting from SPI flash on DA850 SoCs.

And, part of my TODO SPL merge for DaVinci/OMAP(ish) is to put the more raw puts/putc into another file I guess for !LIBCOMMON

Signature · 1 line
Tom
#6 lore raw

PATCH v4 4/6 arm, da850evm: Add an SPL for SPI boot

In reply to Christian Riesch
Cc Heiko Schocher <[email protected]>
Cc Sandeep Paulraj <[email protected]>
Cc Tom Rini <[email protected]>
Cc Sudhakar Rajashekhara <[email protected]>
---
 board/davinci/da8xxevm/da850evm.c     |    4 +-
 board/davinci/da8xxevm/u-boot-spl.lds |   73 +++++++++++++++++++++++++++
 doc/README.davinci                    |    9 +++
 include/configs/da850evm.h            |   87 +++++++++++++++++++++++++++++++++
 4 files changed, 172 insertions(+), 1 deletions(-)
 create mode 100644 board/davinci/da8xxevm/u-boot-spl.lds
board/davinci/da8xxevm/da850evm.c +3 -1
index e827256..8e66c35 100644
@@ -108,7 +108,7 @@ static const struct pinmux_config gpio_pins[] = {
 #endif
 };
 
-static const struct pinmux_resource pinmuxes[] = {
+const struct pinmux_resource pinmuxes[] = {
 #ifdef CONFIG_DRIVER_TI_EMAC
 	PINMUX_ITEM(emac_pins_mdio),
 #ifdef CONFIG_DRIVER_TI_EMAC_USE_RMII
@@ -135,6 +135,8 @@ static const struct pinmux_resource pinmuxes[] = {
 	PINMUX_ITEM(gpio_pins),
 };
 
+const int pinmuxes_size = ARRAY_SIZE(pinmuxes);
+
 static const struct lpsc_resource lpsc[] = {
 	{ DAVINCI_LPSC_AEMIF },	/* NAND, NOR */
 	{ DAVINCI_LPSC_SPI1 },	/* Serial Flash */
board/davinci/da8xxevm/u-boot-spl.lds new file +73 -0

73 lines not on this page · raw message

doc/README.davinci +9 -0
index 5f1bdc8..aa7c850 100644
@@ -95,6 +95,15 @@ into the RAM.
 The programmers and UBL are always released as part of any standard TI
 software release associated with an SOC.
 
+Alternative boot method (DA850 EVM only):
+For the DA850 EVM an SPL (secondary program loader, see doc/README.SPL)
+is provided to load U-Boot directly from SPI flash. In this case, the
+SPL does the low level initialization that is otherwise done by the SPL.
+To build U-Boot with this SPL, do
+make da850evm_config
+make u-boot.ais
+and program the resulting u-boot.ais file to the SPI flash of the DA850 EVM.
+
 Environment Variables
 =====================
 
include/configs/da850evm.h +87 -0

105 lines not on this page · raw message

Signature · 1 line
1.7.0.4
#7 lore raw

PATCH v4 4/6 arm, da850evm: Add an SPL for SPI boot

On 12/02/2011 09:12 AM, Christian Riesch wrote:

[snip]

Quoted 1 line
 include/configs/da850evm.h            |   87 +++++++++++++++++++++++++++++++++

[snip]

include/configs/da850evm.h line 123

Quoted 9 lines
include/configs/da850evm.h +9 -0
+#define CONFIG_SYS_DA850_DDR2_SDTIMR (0 |	\
+	(14 << DV_DDR_SDTMR1_RFC_SHIFT) |	\
+	(2 << DV_DDR_SDTMR1_RP_SHIFT) |		\
+	(2 << DV_DDR_SDTMR1_RCD_SHIFT) |	\
+	(1 << DV_DDR_SDTMR1_WR_SHIFT) |		\
+	(5 << DV_DDR_SDTMR1_RAS_SHIFT) |	\
+	(8 << DV_DDR_SDTMR1_RC_SHIFT) |		\
+	(1 << DV_DDR_SDTMR1_RRD_SHIFT) |	\
+	(0 << DV_DDR_SDTMR1_WTR_SHIFT))

'0 | ..' and '0 << ...' don't help readability over just value saying it (same with shifting 0). Also, unless the manual these come from uses decimal here, hex is preferred. Thanks!

Signature · 1 line
Tom
#8 lore raw

PATCH v3 13/15 arm, da850evm: Add an SPL for SPI boot

Hi Tom,
Thanks for your comments.

Quoted 4 lines · Tom Rini

On 12/02/2011 09:12 AM, Christian Riesch wrote:

[snip]

Quoted 1 line
 include/configs/da850evm.h            |   87

+++++++++++++++++++++++++++++++++

Quoted 11 lines

[snip]

include/configs/da850evm.h line 123

Quoted 9 lines
include/configs/da850evm.h +9 -0
+#define CONFIG_SYS_DA850_DDR2_SDTIMR (0 |    \
+     (14 << DV_DDR_SDTMR1_RFC_SHIFT) |       \
+     (2 << DV_DDR_SDTMR1_RP_SHIFT) |         \
+     (2 << DV_DDR_SDTMR1_RCD_SHIFT) |        \
+     (1 << DV_DDR_SDTMR1_WR_SHIFT) |         \
+     (5 << DV_DDR_SDTMR1_RAS_SHIFT) |        \
+     (8 << DV_DDR_SDTMR1_RC_SHIFT) |         \
+     (1 << DV_DDR_SDTMR1_RRD_SHIFT) |        \
+     (0 << DV_DDR_SDTMR1_WTR_SHIFT))
Quoted 4 lines

'0 | ..' and '0 << ...' don't help readability over just value saying it (same with shifting 0). Also, unless the manual these come from uses decimal here, hex is preferred. Thanks!

'0 | ...'. I agree, I'll remove this.

'0 << ...'
Aaaahhh... Yes, that's pretty useless here, the WTR bits are reserved bits :-/

Decimal values: I'd like to keep them. This is DDR timing, the numbers mean number of clock cycles minus one. So actually (1 << DV_DDR_SDTMR1_RRD_SHIFT) means that trrd=13.3333... ns (two clock cycles) at 150 MHz. So I must calculate with these numbers and this is why I prefer decimal over hex. I am lazy ;-)

Christian

Quoted 7 lines

--
Tom
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#9 lore raw

PATCH v3 13/15 arm, da850evm: Add an SPL for SPI boot

Quoted 31 lines · Christian Riesch

Hi Tom,
Thanks for your comments.

Quoted 4 lines · Tom Rini

On 12/02/2011 09:12 AM, Christian Riesch wrote:

[snip]

Quoted 1 line

?include/configs/da850evm.h ? ? ? ? ? ?| ? 87

+++++++++++++++++++++++++++++++++

Quoted 11 lines

[snip]

Quoted 9 lines

+#define CONFIG_SYS_DA850_DDR2_SDTIMR (0 | ? ?\
+ ? ? (14 << DV_DDR_SDTMR1_RFC_SHIFT) | ? ? ? \
+ ? ? (2 << DV_DDR_SDTMR1_RP_SHIFT) | ? ? ? ? \
+ ? ? (2 << DV_DDR_SDTMR1_RCD_SHIFT) | ? ? ? ?\
+ ? ? (1 << DV_DDR_SDTMR1_WR_SHIFT) | ? ? ? ? \
+ ? ? (5 << DV_DDR_SDTMR1_RAS_SHIFT) | ? ? ? ?\
+ ? ? (8 << DV_DDR_SDTMR1_RC_SHIFT) | ? ? ? ? \
+ ? ? (1 << DV_DDR_SDTMR1_RRD_SHIFT) | ? ? ? ?\
+ ? ? (0 << DV_DDR_SDTMR1_WTR_SHIFT))

Quoted 4 lines

'0 | ..' and '0 << ...' don't help readability over just value saying it (same with shifting 0). ?Also, unless the manual these come from uses decimal here, hex is preferred. ?Thanks!

'0 | ...'. ? I agree, I'll remove this.

'0 << ...'
Aaaahhh... Yes, that's pretty useless here, the WTR bits are reserved bits :-/

Quoted 5 lines

Decimal values: I'd like to keep them. This is DDR timing, the numbers mean number of clock cycles minus one. So actually (1 << DV_DDR_SDTMR1_RRD_SHIFT) means that trrd=13.3333... ns (two clock cycles) at 150 MHz. So I must calculate with these numbers and this is why I prefer decimal over hex. I am lazy ;-)

OK, that's fine too, thanks.

Signature · 1 line
Tom
#10 lore raw

PATCH v3 13/15 arm, da850evm: Add an SPL for SPI boot

In reply to Christian Riesch

Hi Tom,

Quoted 26 lines · Christian Riesch

Hi Tom,
Thanks for your comments.

Quoted 16 lines · Tom Rini

On 12/02/2011 09:12 AM, Christian Riesch wrote:

[snip]

Quoted 2 lines

?include/configs/da850evm.h ? ? ? ? ? ?| ? 87
+++++++++++++++++++++++++++++++++

[snip]

Quoted 9 lines

+#define CONFIG_SYS_DA850_DDR2_SDTIMR (0 | ? ?\
+ ? ? (14 << DV_DDR_SDTMR1_RFC_SHIFT) | ? ? ? \
+ ? ? (2 << DV_DDR_SDTMR1_RP_SHIFT) | ? ? ? ? \
+ ? ? (2 << DV_DDR_SDTMR1_RCD_SHIFT) | ? ? ? ?\
+ ? ? (1 << DV_DDR_SDTMR1_WR_SHIFT) | ? ? ? ? \
+ ? ? (5 << DV_DDR_SDTMR1_RAS_SHIFT) | ? ? ? ?\
+ ? ? (8 << DV_DDR_SDTMR1_RC_SHIFT) | ? ? ? ? \
+ ? ? (1 << DV_DDR_SDTMR1_RRD_SHIFT) | ? ? ? ?\
+ ? ? (0 << DV_DDR_SDTMR1_WTR_SHIFT))

Quoted 4 lines

'0 | ..' and '0 << ...' don't help readability over just value saying it (same with shifting 0). ?Also, unless the manual these come from uses decimal here, hex is preferred. ?Thanks!

Quoted 6 lines

'0 | ...'. ? I agree, I'll remove this.

'0 << ...'
Aaaahhh... Yes, that's pretty useless here, the WTR bits are reserved bits :-/

Uh, sorry, they are not reserved. But a zero value here means that we have one clock cycle (because it's number of clock cycles minus one). So I'd like to keep the line because it will help others to see that WTR is set to one clock cycle.
Christian

Quoted 17 lines

Decimal values: I'd like to keep them. This is DDR timing, the numbers mean number of clock cycles minus one. So actually (1 << DV_DDR_SDTMR1_RRD_SHIFT) means that trrd=13.3333... ns (two clock cycles) at 150 MHz. So I must calculate with these numbers and this is why I prefer decimal over hex. I am lazy ;-)

Christian

Quoted 7 lines

--
Tom
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#11 lore raw

PATCH v3 13/15 arm, da850evm: Add an SPL for SPI boot

Quoted 37 lines · Christian Riesch

Hi Tom,

Quoted 26 lines · Christian Riesch

Hi Tom,
Thanks for your comments.

Quoted 16 lines · Tom Rini

On 12/02/2011 09:12 AM, Christian Riesch wrote:

[snip]

Quoted 2 lines
 include/configs/da850evm.h            |   87

+++++++++++++++++++++++++++++++++

[snip]

include/configs/da850evm.h line 123

Quoted 9 lines
include/configs/da850evm.h +9 -0
+#define CONFIG_SYS_DA850_DDR2_SDTIMR (0 |    \
+     (14 << DV_DDR_SDTMR1_RFC_SHIFT) |       \
+     (2 << DV_DDR_SDTMR1_RP_SHIFT) |         \
+     (2 << DV_DDR_SDTMR1_RCD_SHIFT) |        \
+     (1 << DV_DDR_SDTMR1_WR_SHIFT) |         \
+     (5 << DV_DDR_SDTMR1_RAS_SHIFT) |        \
+     (8 << DV_DDR_SDTMR1_RC_SHIFT) |         \
+     (1 << DV_DDR_SDTMR1_RRD_SHIFT) |        \
+     (0 << DV_DDR_SDTMR1_WTR_SHIFT))
Quoted 4 lines

'0 | ..' and '0 << ...' don't help readability over just value saying it (same with shifting 0). Also, unless the manual these come from uses decimal here, hex is preferred. Thanks!

Quoted 6 lines

'0 | ...'. I agree, I'll remove this.

'0 << ...'
Aaaahhh... Yes, that's pretty useless here, the WTR bits are reserved bits :-/

Quoted 4 lines

Uh, sorry, they are not reserved. But a zero value here means that we have one clock cycle (because it's number of clock cycles minus one). So I'd like to keep the line because it will help others to see that WTR is set to one clock cycle.

I'd say it's not obvious that a value of zero means one clock cycle, so drop the define and just comment what the full value contains.

Signature · 1 line
Tom
#12 lore raw

PATCH v4 5/6 mkimage: Fix variable length header support

In reply to Christian Riesch

Support for variable length images like AIS image was introduced in commit f0662105b674a3874227316abf8536bebc9b5995. A parameter "-s" was also introduced to prohibit copying of the image file automatically in the main program. However, this parameter was implemented incorrectly and the image file was copied nevertheless.

---
 tools/mkimage.c |   97 ++++++++++++++++++++++++++++---------------------------
 1 files changed, 49 insertions(+), 48 deletions(-)
tools/mkimage.c +49 -48
index 36e28ec..eeb1b10 100644
@@ -383,65 +383,66 @@ NXTARG:		;
 		exit (EXIT_FAILURE);
 	}
 
-	if (!params.skipcpy &&
-		(params.type == IH_TYPE_MULTI ||
-			params.type == IH_TYPE_SCRIPT)) {
-		char *file = params.datafile;
-		uint32_t size;
-
-		for (;;) {
-			char *sep = NULL;
-
-			if (file) {
-				if ((sep = strchr(file, ':')) != NULL) {
-					*sep = '\0';
+	if (!params.skipcpy) {
+		if (params.type == IH_TYPE_MULTI ||
+		    params.type == IH_TYPE_SCRIPT) {
+			char *file = params.datafile;
+			uint32_t size;
+
+			for (;;) {
+				char *sep = NULL;
+
+				if (file) {
+					if ((sep = strchr(file, ':')) != NULL) {
+						*sep = '\0';
+					}
+
+					if (stat (file, &sbuf) < 0) {
+						fprintf (stderr, "%s: Can't stat %s: %s\n",
+							 params.cmdname, file, strerror(errno));
+						exit (EXIT_FAILURE);
+					}
+					size = cpu_to_uimage (sbuf.st_size);
+				} else {
+					size = 0;
 				}
 
-				if (stat (file, &sbuf) < 0) {
-					fprintf (stderr, "%s: Can't stat %s: %s\n",
-						params.cmdname, file, strerror(errno));
+				if (write(ifd, (char *)&size, sizeof(size)) != sizeof(size)) {
+					fprintf (stderr, "%s: Write error on %s: %s\n",
+						 params.cmdname, params.imagefile,
+						 strerror(errno));
 					exit (EXIT_FAILURE);
 				}
-				size = cpu_to_uimage (sbuf.st_size);
-			} else {
-				size = 0;
-			}
 
-			if (write(ifd, (char *)&size, sizeof(size)) != sizeof(size)) {
-				fprintf (stderr, "%s: Write error on %s: %s\n",
-					params.cmdname, params.imagefile,
-					strerror(errno));
-				exit (EXIT_FAILURE);
-			}
+				if (!file) {
+					break;
+				}
 
-			if (!file) {
-				break;
+				if (sep) {
+					*sep = ':';
+					file = sep + 1;
+				} else {
+					file = NULL;
+				}
 			}
 
-			if (sep) {
-				*sep = ':';
-				file = sep + 1;
-			} else {
-				file = NULL;
-			}
-		}
+			file = params.datafile;
 
-		file = params.datafile;
-
-		for (;;) {
-			char *sep = strchr(file, ':');
-			if (sep) {
-				*sep = '\0';
-				copy_file (ifd, file, 1);
-				*sep++ = ':';
-				file = sep;
-			} else {
-				copy_file (ifd, file, 0);
-				break;
+			for (;;) {
+				char *sep = strchr(file, ':');
+				if (sep) {
+					*sep = '\0';
+					copy_file (ifd, file, 1);
+					*sep++ = ':';
+					file = sep;
+				} else {
+					copy_file (ifd, file, 0);
+					break;
+				}
 			}
+		} else {
+			copy_file (ifd, params.datafile, 0);
 		}
-	} else {
-		copy_file (ifd, params.datafile, 0);
 	}
 
 	/* We're a bit of paranoid */
Signature · 1 line
1.7.0.4
#13 lore raw

PATCH v4 6/6 arm, davinci: Add support for generating AIS images to the Makefile

In reply to Christian Riesch
Cc Stefano Babic <[email protected]>
Cc Heiko Schocher <[email protected]>
Cc Mike Frysinger <[email protected]>
---
 .gitignore |    1 +
 Makefile   |   13 +++++++++++++
 2 files changed, 14 insertions(+), 0 deletions(-)
.gitignore +1 -0
index ff4bae0..e4e95e2 100644
@@ -35,6 +35,7 @@
 /u-boot.dis
 /u-boot.lds
 /u-boot.ubl
+/u-boot.ais
 /u-boot.dtb
 /u-boot.sb
 
Makefile +13 -0
index fb658f4..5b26f8b 100644
@@ -417,6 +417,18 @@ $(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)tools/mkimage -s -n /dev/null -T aisimage \
+		-e $(CONFIG_SPL_TEXT_BASE) -d $(obj)spl/u-boot-spl.bin \
+		$(obj)spl/u-boot-spl.ais
+		$(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 > \
+		$(obj)u-boot.ais
+		rm $(obj)spl/u-boot-spl.ais
+		rm $(obj)spl/u-boot-spl-pad.ais
+
 $(obj)u-boot.sb:       $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin
 		elftosb -zdf imx28 -c $(TOPDIR)/board/$(BOARDDIR)/u-boot.bd \
 			-o $(obj)u-boot.sb
@@ -788,6 +800,7 @@ clobber:	clean
 	@rm -f $(obj)u-boot.kwb
 	@rm -f $(obj)u-boot.imx
 	@rm -f $(obj)u-boot.ubl
+	@rm -f $(obj)u-boot.ais
 	@rm -f $(obj)u-boot.dtb
 	@rm -f $(obj)u-boot.sb
 	@rm -f $(obj)tools/{env/crc32.c,inca-swap-bytes}
Signature · 1 line
1.7.0.4
#14 lore raw

PATCH v4 6/6 arm, davinci: Add support for generating AIS images to the Makefile

Makefile $(obj)u-boot.ubl: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin · line 428

Quoted 9 lines · On Friday 02 December 2011 11:12:10 Christian Riesch wrote:

+$(obj)u-boot.ais: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin

Makefile +8 -0
+		$(obj)tools/mkimage -s -n /dev/null -T aisimage \
+		-e $(CONFIG_SPL_TEXT_BASE) -d $(obj)spl/u-boot-spl.bin \
+		$(obj)spl/u-boot-spl.ais
+		$(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 > \
+		$(obj)u-boot.ais

lack of indentation on wrapped lines makes it hard to see what's going on

Makefile $(obj)u-boot.ubl: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin · line 430

Quoted 2 lines
Makefile +2 -0
+		rm $(obj)spl/u-boot-spl.ais
+		rm $(obj)spl/u-boot-spl-pad.ais
	rm $(obj)spl/u-boot-spl{,-pad}.ais

-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20111202/8861870e/attachment.pgp>

#15 lore raw

PATCH v4 6/6 arm, davinci: Add support for generating AIS images to the Makefile

Hi Mike,
Thanks for your comments.

Quoted 11 lines · Mike Frysinger

Makefile $(obj)u-boot.ubl: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin · line 428

Quoted 9 lines · On Friday 02 December 2011 11:12:10 Christian Riesch wrote:

+$(obj)u-boot.ais: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin

Makefile +8 -0
+             $(obj)tools/mkimage -s -n /dev/null -T aisimage \
+             -e $(CONFIG_SPL_TEXT_BASE) -d $(obj)spl/u-boot-spl.bin \
+             $(obj)spl/u-boot-spl.ais
+             $(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 > \
+             $(obj)u-boot.ais
Quoted 1 line

lack of indentation on wrapped lines makes it hard to see what's going on

I'll change that.

The chaos above contains three commands:
1) I run the SPL through mkimage to add an AIS header for booting from SPI. Since an empty config file (-n) is sufficient here I use /dev/null here.
2) I pad the result $(obj)spl/u-boot-spl.ais to $CONFIG_SPL_MAX_SIZE with $(OBJCOPY): The result is $(obj)spl/u-boot-spl-pad.ais
3) Then I add $(obj)u-boot.bin with cat, the result is $(obj)u-boot.ais

Quoted 5 lines

Makefile $(obj)u-boot.ubl: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin · line 430

Quoted 3 lines
Makefile +2 -0
+             rm $(obj)spl/u-boot-spl.ais
+             rm $(obj)spl/u-boot-spl-pad.ais
       rm $(obj)spl/u-boot-spl{,-pad}.ais

Ok.

Regards, Christian

Quoted 2 lines

-mike

#16 lore raw

PATCH v4 6/6 arm, davinci: Add support for generating AIS images to the Makefile

Quoted 6 lines · On Saturday 03 December 2011 00:20:19 Christian Riesch wrote:

The chaos above contains three commands:
1) I run the SPL through mkimage to add an AIS header for booting from SPI. Since an empty config file (-n) is sufficient here I use /dev/null here.
2) I pad the result $(obj)spl/u-boot-spl.ais to $CONFIG_SPL_MAX_SIZE with $(OBJCOPY): The result is $(obj)spl/u-boot-spl-pad.ais
3) Then I add $(obj)u-boot.bin with cat, the result is $(obj)u-boot.ais

right; i was wondering if we could chain these somehow. but i guess going through intermediate files allows for catching errors that would get missed in a pipeline.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20111203/222f25c5/attachment.pgp>