Skip to contentSkip to conversation

at91: add bootstrap support

PATCH Superseded Jean-Christophe PLAGNIOL-VILLARD 2 participants 18 messages Jan 19, 2013 – Jan 20, 2013

Subsystems (5)

v3 of 7 Superseded Latest is v7 →

lore
Share & tools
lore
#0 lore raw

v3 cover at91: add bootstrap support

Hi,

v3:

send correct patch series and pull

can we have it on master the v2 does not cange much since v1

v2:
fix whitesapce
fix comment
fix command default

This patch serie introduce a common bootstrap code aka xloder for TI and at91bootstrap for Atmel to barebox

As I do not have with me right now a TI platform I did not switch it to the new generic bootstrap code.

On at91 add it on the calao usb-a9263 test on nand and spi This patch serie depends on the previous at91 patch series

The following changes since commit cef34886b745cf3f6dff55bf326e29a5857b2206:

graphic_utils/fb_open: fix fbsize (2013-01-16 21:33:14 +0100)

are available in the git repository at:

git://git.jcrosoft.org/barebox.git delivery/at91_bootstrap

for you to fetch changes up to 986a028500f8b80764d089543a824414f021653c:

at91: usb_a9263: add bootstrap version (2013-01-16 21:21:25 +0800)

----------------------------------------------------------------
Jean-Christophe PLAGNIOL-VILLARD (7):
at91: add test commamd to emulate bootrom boot
at91sam926x: lowlevel add external boot support
at91: sam926x: switch lowlevel param to c code
at91: usb-a9263 add lowlevel init introduce common bootstrap code
at91: add bootstrap version
at91: usb_a9263: add bootstrap version

 arch/arm/boards/at91sam9263ek/Makefile                |    5 ++++
 arch/arm/boards/at91sam9263ek/config.h                |   87 ---------------------------------------------------------------------
 arch/arm/boards/at91sam9263ek/lowlevel_init.c         |  104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/boards/mmccpu/Makefile                       |    5 ++++
 arch/arm/boards/mmccpu/config.h                       |  118 ----------------------------------------------------------------------------------------------
 arch/arm/boards/mmccpu/lowlevel_init.c                |  135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/boards/pm9261/Makefile                       |    5 ++++
 arch/arm/boards/pm9261/config.h                       |   87 ---------------------------------------------------------------------
 arch/arm/boards/pm9261/lowlevel_init.c                |  102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/boards/pm9263/Makefile                       |    5 ++++
 arch/arm/boards/pm9263/config.h                       |  103 ----------------------------------------------------------------------------------
 arch/arm/boards/pm9263/lowlevel_init.c                |  121 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/boards/usb-a926x/Makefile                    |    9 ++++++++
 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c       |   16 +++++++++++++
 arch/arm/boards/usb-a926x/usb_a9263_lowlevel_init.c   |  111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig |   24 ++++++++++++++++++++
 arch/arm/configs/usb_a9263_bootstrap_defconfig        |   23 +++++++++++++++++++
 arch/arm/mach-at91/Kconfig                            |    8 +++++++
 arch/arm/mach-at91/Makefile                           |    2 ++
 arch/arm/mach-at91/at91sam926x_lowlevel_init.c        |   84 +++++++++++++++++++++++++++++++++++++++++++++++--------------------
 arch/arm/mach-at91/boot_test_cmd.c                    |   99 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/mach-at91/bootstrap.c                        |   86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 arch/arm/mach-at91/include/mach/at91_lowlevel_init.h  |   33 +++++++++++++++++++++++++++
 arch/arm/mach-at91/include/mach/bootstrap.h           |   28 +++++++++++++++++++++++
 include/bootstrap.h                                   |   34 +++++++++++++++++++++++++++
 lib/Kconfig                                           |    2 ++
 lib/Makefile                                          |    1 +
 lib/bootstrap/Kconfig                                 |   13 +++++++++++
 lib/bootstrap/Makefile                                |    3 +++
 lib/bootstrap/common.c                                |   21 +++++++++++++++++
 lib/bootstrap/devfs.c                                 |   98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/bootstrap/disk.c                                  |   37 ++++++++++++++++++++++++++++++
 32 files changed, 1189 insertions(+), 420 deletions(-)
 create mode 100644 arch/arm/boards/at91sam9263ek/lowlevel_init.c
 create mode 100644 arch/arm/boards/mmccpu/lowlevel_init.c
 create mode 100644 arch/arm/boards/pm9261/lowlevel_init.c
 create mode 100644 arch/arm/boards/pm9263/lowlevel_init.c
 create mode 100644 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c
 create mode 100644 arch/arm/boards/usb-a926x/usb_a9263_lowlevel_init.c
 create mode 100644 arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig
 create mode 100644 arch/arm/configs/usb_a9263_bootstrap_defconfig
 create mode 100644 arch/arm/mach-at91/boot_test_cmd.c
 create mode 100644 arch/arm/mach-at91/bootstrap.c
 create mode 100644 arch/arm/mach-at91/include/mach/at91_lowlevel_init.h
 create mode 100644 arch/arm/mach-at91/include/mach/bootstrap.h
 create mode 100644 include/bootstrap.h
 create mode 100644 lib/bootstrap/Kconfig
 create mode 100644 lib/bootstrap/Makefile
 create mode 100644 lib/bootstrap/common.c
 create mode 100644 lib/bootstrap/devfs.c
 create mode 100644 lib/bootstrap/disk.c

Best Regards,
J.

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

#1 lore raw

PATCH v3 1/7 at91: add test commamd to emulate bootrom boot

---
 arch/arm/mach-at91/Kconfig         |    6 +++
 arch/arm/mach-at91/Makefile        |    1 +
 arch/arm/mach-at91/boot_test_cmd.c |   99 ++++++++++++++++++++++++++++++++++++
 3 files changed, 106 insertions(+)
 create mode 100644 arch/arm/mach-at91/boot_test_cmd.c
arch/arm/mach-at91/Kconfig +6 -0
index fcba7fb..e703b3d 100644
@@ -483,4 +483,10 @@ config CMD_AT91MUX
 	bool "at91mux dump command"
 	default y
 
+config CONFIG_CMD_AT91_BOOT_TEST
+	bool "at91_boot_test"
+	help
+	  allow to upload a boot binary to sram and execute it
+	  usefull to test bootstrap or barebox lowlevel init
+
 endif
arch/arm/mach-at91/Makefile +1 -0
index 53b4dd8..4404d23 100644
@@ -1,4 +1,5 @@
 obj-y += setup.o clock.o gpio.o
+obj-$(CONFIG_CMD_AT91_BOOT_TEST) += boot_test_cmd.o
 
 lowlevel_init-y = at91sam926x_lowlevel_init.o
 lowlevel_init-$(CONFIG_ARCH_AT91RM9200) = at91rm9200_lowlevel_init.o
arch/arm/mach-at91/boot_test_cmd.c new file +99 -0

99 lines not on this page · raw message

Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#2 lore raw

PATCH v3 2/7 at91sam926x: lowlevel add external boot support

---
 arch/arm/mach-at91/at91sam926x_lowlevel_init.c |   20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
arch/arm/mach-at91/at91sam926x_lowlevel_init.c +18 -2
index cfae982..4dec275 100644
@@ -36,10 +36,19 @@ static void inline pmc_check_mckrdy(void)
 	} while (!(r & AT91_PMC_MCKRDY));
 }
 
+static int inline running_in_sram(void)
+{
+	u32 addr = get_pc();
+
+	addr >>= 28;
+	return addr == 0;
+}
+
 void __naked __bare_init reset(void)
 {
 	u32 r;
 	int i;
+	int in_sram = running_in_sram();
 
 	common_reset();
 
@@ -74,7 +83,7 @@ void __naked __bare_init reset(void)
 	 * PMC Check if the PLL is already initialized
 	 */
 	r = at91_pmc_read(AT91_PMC_MCKR);
-	if (r & AT91_PMC_CSS)
+	if (r & AT91_PMC_CSS && !in_sram)
 		goto end;
 
 	/*
@@ -117,7 +126,7 @@ void __naked __bare_init reset(void)
 	 * SDRAMC Check if Refresh Timer Counter is already initialized
 	 */
 	r = at91_sys_read(AT91_SDRAMC_TR);
-	if (r)
+	if (r && !in_sram)
 		goto end;
 
 	/* SDRAMC_MR : Normal Mode */
@@ -170,6 +179,13 @@ void __naked __bare_init reset(void)
 	/* MATRIX_MCFG - REMAP all masters */
 	at91_sys_write(AT91_MATRIX_MCFG0, 0x1FF);
 #endif
+	/*
+	 * When boot from external boot
+	 * we need to enable mck and ohter clock
+	 * so enable all of them
+	 * We will shutdown what we don't need later
+	 */
+	at91_pmc_write(AT91_PMC_PCER, 0xffffffff);
 
 end:
 	board_init_lowlevel_return();
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#3 lore raw

PATCH v3 3/7 at91: sam926x: switch lowlevel param to c code

In reply to Jean-Christophe PLAGNIOL-VILLARD

Instead of hardcode define use a struct that the board fill

---
 arch/arm/boards/at91sam9263ek/Makefile             |    5 +
 arch/arm/boards/at91sam9263ek/config.h             |   99 +-------------
 arch/arm/boards/at91sam9263ek/lowlevel_init.c      |  104 +++++++++++++++
 arch/arm/boards/mmccpu/Makefile                    |    5 +
 arch/arm/boards/mmccpu/config.h                    |  130 +------------------
 arch/arm/boards/mmccpu/lowlevel_init.c             |  135 ++++++++++++++++++++
 arch/arm/boards/pm9261/Makefile                    |    5 +
 arch/arm/boards/pm9261/config.h                    |   99 +-------------
 arch/arm/boards/pm9261/lowlevel_init.c             |  102 +++++++++++++++
 arch/arm/boards/pm9263/Makefile                    |    5 +
 arch/arm/boards/pm9263/config.h                    |  115 +----------------
 arch/arm/boards/pm9263/lowlevel_init.c             |  121 ++++++++++++++++++
 arch/arm/mach-at91/at91sam926x_lowlevel_init.c     |   64 ++++++----
 .../mach-at91/include/mach/at91_lowlevel_init.h    |   33 +++++
 14 files changed, 580 insertions(+), 442 deletions(-)
 rewrite arch/arm/boards/at91sam9263ek/config.h (95%)
 create mode 100644 arch/arm/boards/at91sam9263ek/lowlevel_init.c
 rewrite arch/arm/boards/mmccpu/config.h (97%)
 create mode 100644 arch/arm/boards/mmccpu/lowlevel_init.c
 rewrite arch/arm/boards/pm9261/config.h (95%)
 create mode 100644 arch/arm/boards/pm9261/lowlevel_init.c
 rewrite arch/arm/boards/pm9263/config.h (97%)
 create mode 100644 arch/arm/boards/pm9263/lowlevel_init.c
 create mode 100644 arch/arm/mach-at91/include/mach/at91_lowlevel_init.h
arch/arm/boards/at91sam9263ek/Makefile +5 -0
index eb072c0..aecbc5a 100644
@@ -1 +1,6 @@
 obj-y += init.o
+
+lowlevel_init-y = lowlevel_init.o
+obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
+
+pbl-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/at91sam9263ek/config.h +6 -93

99 lines not on this page · raw message

arch/arm/boards/at91sam9263ek/lowlevel_init.c new file +104 -0

104 lines not on this page · raw message

arch/arm/boards/mmccpu/Makefile +5 -0
index eb072c0..aecbc5a 100644
@@ -1 +1,6 @@
 obj-y += init.o
+
+lowlevel_init-y = lowlevel_init.o
+obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
+
+pbl-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/mmccpu/config.h +6 -124

130 lines not on this page · raw message

arch/arm/boards/mmccpu/lowlevel_init.c new file +135 -0

135 lines not on this page · raw message

arch/arm/boards/pm9261/Makefile +5 -0
index eb072c0..aecbc5a 100644
@@ -1 +1,6 @@
 obj-y += init.o
+
+lowlevel_init-y = lowlevel_init.o
+obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
+
+pbl-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/pm9261/config.h +6 -93

99 lines not on this page · raw message

arch/arm/boards/pm9261/lowlevel_init.c new file +102 -0

102 lines not on this page · raw message

arch/arm/boards/pm9263/Makefile +5 -0
index eb072c0..aecbc5a 100644
@@ -1 +1,6 @@
 obj-y += init.o
+
+lowlevel_init-y = lowlevel_init.o
+obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
+
+pbl-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/pm9263/config.h +6 -109

115 lines not on this page · raw message

arch/arm/boards/pm9263/lowlevel_init.c new file +121 -0

121 lines not on this page · raw message

arch/arm/mach-at91/at91sam926x_lowlevel_init.c +41 -23

146 lines not on this page · raw message

arch/arm/mach-at91/include/mach/at91_lowlevel_init.h new file +33 -0
new file mode 100644
index 0000000..29d9628
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2009-2011 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#ifndef __AT91_LOWLEVEL_INIT_H__
+#define __AT91_LOWLEVEL_INIT_H__
+
+struct at91sam926x_lowlevel_cfg {
+	u32 wdt_mr;
+	u32 ebi_pio_pdr;
+	u32 ebi_pio_ppudr;
+	u32 ebi_csa;
+	u32 smc_cs;
+	u32 smc_mode;
+	u32 smc_cycle;
+	u32 smc_pulse;
+	u32 smc_setup;
+	u32 pmc_mor;
+	u32 pmc_pllar;
+	u32 pmc_mckr1;
+	u32 pmc_mckr2;
+	u32 sdrc_cr;
+	u32 sdrc_tr1;
+	u32 sdrc_mdr;
+	u32 sdrc_tr2;
+	u32 rstc_rmr;
+};
+
+void at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg);
+
+#endif /* __AT91_LOWLEVEL_INIT_H__ */
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#4 lore raw

PATCH v3 4/7 at91: usb-a9263 add lowlevel init

In reply to Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/boards/usb-a926x/Makefile                 |    6 ++
 .../arm/boards/usb-a926x/usb_a9263_lowlevel_init.c |  111 ++++++++++++++++++++
 arch/arm/mach-at91/Kconfig                         |    1 +
 3 files changed, 118 insertions(+)
 create mode 100644 arch/arm/boards/usb-a926x/usb_a9263_lowlevel_init.c
arch/arm/boards/usb-a926x/Makefile +6 -0
index eb072c0..9511a76 100644
@@ -1 +1,7 @@
 obj-y += init.o
+
+lowlevel_init-$(CONFIG_MACH_USB_A9263) = usb_a9263_lowlevel_init.o
+
+obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
+
+pbl-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/usb-a926x/usb_a9263_lowlevel_init.c new file +111 -0

111 lines not on this page · raw message

arch/arm/mach-at91/Kconfig +1 -0
index e703b3d..2925b1f 100644
@@ -357,6 +357,7 @@ config MACH_TNY_A9263
 
 config MACH_USB_A9263
 	bool "CALAO USB-A9263"
+	select MACH_HAS_LOWLEVEL_INIT
 	help
 	  Select this if you are using a Calao Systems USB-A9263.
 	  <http://www.calao-systems.com>
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#5 lore raw

PATCH v3 5/7 introduce common bootstrap code

In reply to Jean-Christophe PLAGNIOL-VILLARD

This will allow to have a generic code to create different bootstrap

As example
Barebox as TI Xloader
Barebox as AT91 Bootstrap

---
 include/bootstrap.h    |   34 +++++++++++++++++
 lib/Kconfig            |    2 +
 lib/Makefile           |    1 +
 lib/bootstrap/Kconfig  |   13 +++++++
 lib/bootstrap/Makefile |    3 ++
 lib/bootstrap/common.c |   21 +++++++++++
 lib/bootstrap/devfs.c  |   98 ++++++++++++++++++++++++++++++++++++++++++++++++
 lib/bootstrap/disk.c   |   37 ++++++++++++++++++
 8 files changed, 209 insertions(+)
 create mode 100644 include/bootstrap.h
 create mode 100644 lib/bootstrap/Kconfig
 create mode 100644 lib/bootstrap/Makefile
 create mode 100644 lib/bootstrap/common.c
 create mode 100644 lib/bootstrap/devfs.c
 create mode 100644 lib/bootstrap/disk.c
include/bootstrap.h new file +34 -0
new file mode 100644
index 0000000..26e9dbc
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#ifndef __BOOSTRAP_H__
+#define __BOOSTRAP_H__
+
+#define bootstrap_err(fmt, arg...) printf(fmt, ##arg)
+
+void bootstrap_boot(int (*func)(void), bool barebox);
+
+#ifdef CONFIG_BOOTSTRAP_DEVFS
+void* bootstrap_read_devfs(char *devname, bool use_bb, int offset,
+			   int default_size, int max_size);
+#else
+static inline void* bootstrap_read_devfs(char *devname, bool use_bb, int offset,
+			   int default_size, int max_size)
+{
+	return NULL;
+}
+#endif
+
+#ifdef CONFIG_BOOTSTRAP_DISK
+void* bootstrap_read_disk(char *devname);
+#else
+static inline void* bootstrap_read_disk(char *devname)
+{
+	return NULL;
+}
+#endif
+
+#endif /* __BOOSTRAP_H__ */
lib/Kconfig +2 -0
index db8a6ad..4578353 100644
@@ -52,4 +52,6 @@ config LIBMTD
 
 source lib/gui/Kconfig
 
+source lib/bootstrap/Kconfig
+
 endmenu
lib/Makefile +1 -0
index 85f4ec9..43f6ea3 100644
@@ -1,3 +1,4 @@
+obj-$(CONFIG_BOOTSTRAP)	+= bootstrap/
 obj-y			+= ctype.o
 obj-y			+= rbtree.o
 obj-y			+= display_options.o
lib/bootstrap/Kconfig new file +13 -0
new file mode 100644
index 0000000..558da00
@@ -0,0 +1,13 @@
+menuconfig BOOTSTRAP
+	bool "Library bootstrap routines           "
+	depends on SHELL_NONE
+
+if BOOTSTRAP
+
+config BOOTSTRAP_DEVFS
+	bool "devfs support"
+
+config BOOTSTRAP_DISK
+	bool "disk support"
+
+endif
lib/bootstrap/Makefile new file +3 -0
new file mode 100644
index 0000000..cbaa49f
@@ -0,0 +1,3 @@
+obj-y				+= common.o
+obj-$(CONFIG_BOOTSTRAP_DEVFS)	+= devfs.o
+obj-$(CONFIG_BOOTSTRAP_DISK)	+= disk.o
lib/bootstrap/common.c new file +21 -0
new file mode 100644
index 0000000..bca3eb7
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2011 Sascha Hauer, Pengutronix
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#include <common.h>
+#include <bootstrap.h>
+#include <filetype.h>
+
+void bootstrap_boot(int (*func)(void), bool barebox)
+{
+	if (barebox && !is_barebox_arm_head((void*)func))
+		return;
+
+	shutdown_barebox();
+	func();
+
+	while (1);
+}
lib/bootstrap/devfs.c new file +98 -0

98 lines not on this page · raw message

lib/bootstrap/disk.c new file +37 -0
new file mode 100644
index 0000000..fad8990
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2011 Sascha Hauer, Pengutronix
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#include <common.h>
+#include <fs.h>
+#include <fcntl.h>
+#include <sizes.h>
+#include <errno.h>
+#include <malloc.h>
+#include <bootstrap.h>
+
+void* bootstrap_read_disk(char *dev)
+{
+	int ret;
+	void *buf;
+	int len;
+	char *path = "/";
+
+	ret = mount(dev, "fat", path);
+	if (ret) {
+		bootstrap_err("mounting %s failed with %d\n", dev, ret);
+		return NULL;
+	}
+
+	buf = read_file("/barebox.bin", &len);
+	if (!buf) {
+		bootstrap_err("could not read barebox.bin from %s\n", dev);
+		umount(path);
+		return NULL;
+	}
+
+	return buf;
+}
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#6 lore raw

PATCH v3 6/7 at91: add bootstrap version

In reply to Jean-Christophe PLAGNIOL-VILLARD

This will allow to boot from NAND/MMC and others.
This version of bootstrap is a non shell version of barebox compressed by the pbl.

---
 arch/arm/mach-at91/Kconfig                  |    1 +
 arch/arm/mach-at91/Makefile                 |    1 +
 arch/arm/mach-at91/bootstrap.c              |   86 +++++++++++++++++++++++++++
 arch/arm/mach-at91/include/mach/bootstrap.h |   28 +++++++++
 4 files changed, 116 insertions(+)
 create mode 100644 arch/arm/mach-at91/bootstrap.c
 create mode 100644 arch/arm/mach-at91/include/mach/bootstrap.h
arch/arm/mach-at91/Kconfig +1 -0
index 2925b1f..484d076 100644
@@ -92,6 +92,7 @@ config SOC_AT91SAM9263
 	select HAVE_AT91_DBGU1
 	select HAS_MACB
 	select AT91SAM9_RESET
+	select HAVE_NOSHELL
 
 config SOC_AT91SAM9G45
 	bool
arch/arm/mach-at91/Makefile +1 -0
index 4404d23..e582f1a 100644
@@ -1,6 +1,7 @@
 obj-y += setup.o clock.o gpio.o
 obj-$(CONFIG_CMD_AT91_BOOT_TEST) += boot_test_cmd.o
 
+obj-$(CONFIG_SHELL_NONE) += bootstrap.o
 lowlevel_init-y = at91sam926x_lowlevel_init.o
 lowlevel_init-$(CONFIG_ARCH_AT91RM9200) = at91rm9200_lowlevel_init.o
 obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/mach-at91/bootstrap.c new file +86 -0

86 lines not on this page · raw message

arch/arm/mach-at91/include/mach/bootstrap.h new file +28 -0
new file mode 100644
index 0000000..a3d19dd
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#ifndef __MACH_BOOTSTRAP_H__
+#define __MACH_BOOTSTRAP_H__
+
+#ifdef CONFIG_MTD_M25P80
+void * bootstrap_board_read_m25p80(void);
+#else
+static inline void * bootstrap_board_read_m25p80(void)
+{
+	return NULL;
+}
+#endif
+
+#ifdef CONFIG_MTD_DATAFLASH
+void * bootstrap_board_read_dataflash(void);
+#else
+static inline void * bootstrap_board_read_dataflash(void)
+{
+	return NULL;
+}
+#endif
+
+#endif /* __MACH_BOOTSTRAP_H__ */
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#7 lore raw

Re: [PATCH 6/7] at91: add bootstrap version

Quoted 80 lines · Jean-Christophe PLAGNIOL-VILLARD

This will allow to boot from NAND/MMC and others.
This version of bootstrap is a non shell version of barebox compressed by the pbl.

---
 arch/arm/mach-at91/Kconfig                  |    1 +
 arch/arm/mach-at91/Makefile                 |    1 +
 arch/arm/mach-at91/bootstrap.c              |   86 +++++++++++++++++++++++++++
 arch/arm/mach-at91/include/mach/bootstrap.h |   28 +++++++++
 4 files changed, 116 insertions(+)
 create mode 100644 arch/arm/mach-at91/bootstrap.c
 create mode 100644 arch/arm/mach-at91/include/mach/bootstrap.h
arch/arm/mach-at91/Kconfig +1 -0
index 2925b1f..484d076 100644
@@ -92,6 +92,7 @@ config SOC_AT91SAM9263
 	select HAVE_AT91_DBGU1
 	select HAS_MACB
 	select AT91SAM9_RESET
+	select HAVE_NOSHELL
 
 config SOC_AT91SAM9G45
 	bool
arch/arm/mach-at91/Makefile +1 -0
index 4404d23..e582f1a 100644
@@ -1,6 +1,7 @@
 obj-y += setup.o clock.o gpio.o
 obj-$(CONFIG_CMD_AT91_BOOT_TEST) += boot_test_cmd.o
 
+obj-$(CONFIG_SHELL_NONE) += bootstrap.o
 lowlevel_init-y = at91sam926x_lowlevel_init.o
 lowlevel_init-$(CONFIG_ARCH_AT91RM9200) = at91rm9200_lowlevel_init.o
 obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/mach-at91/bootstrap.c new file +36 -0
new file mode 100644
index 0000000..2ec16f1
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#include <common.h>
+#include <bootstrap.h>
+#include <mach/bootstrap.h>
+#include <sizes.h>
+#include <malloc.h>
+
+#if defined(CONFIG_MCI_ATMEL)
+#define is_mmc() 1
+#else
+#define is_mmc() 0
+#endif
+
+#ifdef CONFIG_NAND_ATMEL
+#define is_nand() 1
+#else
+#define is_nand() 0
+#endif
+
+#ifdef CONFIG_MTD_M25P80
+#define is_m25p80() 1
+#else
+#define is_m25p80() 0
+#endif
+
+#ifdef CONFIG_MTD_DATAFLASH
+#define is_dataflash() 1
+#else
+#define is_dataflash() 0
+#endif
+

arch/arm/mach-at91/bootstrap.c line 46

Quoted 10 lines
arch/arm/mach-at91/bootstrap.c new file +10 -0
+static void boot_seq(bool is_barebox)
+{
+	char *name = is_barebox ? "barebox" : "unknown";
+	int (*func)(void) = NULL;
+
+	if (is_m25p80()) {
+		func = bootstrap_board_read_m25p80();
+		printf("Boot %s from m25p80\n", name);
+		bootstrap_boot(func, is_barebox);
+		bootstrap_err("... failled\n");

s/failled/failed/

arch/arm/mach-at91/bootstrap.c line 53

Quoted 7 lines
arch/arm/mach-at91/bootstrap.c new file +7 -0
+		free(func);
+	}
+	if (is_dataflash()) {
+		printf("Boot %s from dataflash\n", name);
+		func = bootstrap_board_read_dataflash();
+		bootstrap_boot(func, is_barebox);
+		bootstrap_err("... failled\n");

ditto

arch/arm/mach-at91/bootstrap.c line 60

Quoted 7 lines
arch/arm/mach-at91/bootstrap.c new file +7 -0
+		free(func);
+	}
+	if (is_nand()) {
+		printf("Boot %s from nand\n", name);
+		func = bootstrap_read_devfs("nand0", true, SZ_128K, SZ_256K, SZ_1M);
+		bootstrap_boot(func, is_barebox);
+		bootstrap_err("... failled\n");

ditto

arch/arm/mach-at91/bootstrap.c line 73

Quoted 13 lines
arch/arm/mach-at91/bootstrap.c new file +13 -0
+		free(func);
+	}
+}
+
+int run_shell(void)
+{
+	int (*func)(void) = NULL;
+
+	if (is_mmc()) {
+		printf("Boot from mmc\n");
+		func = bootstrap_read_disk("disk0.0");
+		bootstrap_boot(func, false);
+		bootstrap_err("... failled\n");

ditto

Sascha

Signature · 9 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#8 lore raw

PATCH v3 7/7 at91: usb_a9263: add bootstrap version

In reply to Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/boards/usb-a926x/Makefile                 |    3 +++
 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c    |   16 ++++++++++++
 .../configs/usb_a9263_128mib_bootstrap_defconfig   |   26 ++++++++++++++++++++
 arch/arm/configs/usb_a9263_bootstrap_defconfig     |   25 +++++++++++++++++++
 4 files changed, 70 insertions(+)
 create mode 100644 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c
 create mode 100644 arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig
 create mode 100644 arch/arm/configs/usb_a9263_bootstrap_defconfig
arch/arm/boards/usb-a926x/Makefile +3 -0
index 9511a76..4c8cd64 100644
@@ -1,5 +1,8 @@
 obj-y += init.o
 
+bootstrap-$(CONFIG_MACH_USB_A9263) = usb_a9263_bootstrap.o
+obj-$(CONFIG_BOOTSTRAP) += $(bootstrap-y)
+
 lowlevel_init-$(CONFIG_MACH_USB_A9263) = usb_a9263_lowlevel_init.o
 
 obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c new file +16 -0
new file mode 100644
index 0000000..368c677
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#include <common.h>
+#include <bootstrap.h>
+#include <mach/bootstrap.h>
+
+#ifdef CONFIG_MTD_DATAFLASH
+void * bootstrap_board_read_dataflash(void)
+{
+	return bootstrap_read_devfs("dataflash0", false, 0xffc0, 204864, 204864);
+}
+#endif
arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig new file +26 -0
new file mode 100644
index 0000000..e71a3c5
@@ -0,0 +1,26 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_AT91_HAVE_SRAM_128M=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y
arch/arm/configs/usb_a9263_bootstrap_defconfig new file +25 -0
new file mode 100644
index 0000000..c4b31ba
@@ -0,0 +1,25 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#9 lore raw

Re: [PATCH 7/7] at91: usb_a9263: add bootstrap version

Quoted 99 lines · Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/boards/usb-a926x/Makefile                 |    3 +++
 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c    |   16 ++++++++++++
 .../configs/usb_a9263_128mib_bootstrap_defconfig   |   26 ++++++++++++++++++++
 arch/arm/configs/usb_a9263_bootstrap_defconfig     |   25 +++++++++++++++++++
 4 files changed, 70 insertions(+)
 create mode 100644 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c
 create mode 100644 arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig
 create mode 100644 arch/arm/configs/usb_a9263_bootstrap_defconfig
arch/arm/boards/usb-a926x/Makefile +3 -0
index 9511a76..4c8cd64 100644
@@ -1,5 +1,8 @@
 obj-y += init.o
 
+bootstrap-$(CONFIG_MACH_USB_A9263) = usb_a9263_bootstrap.o
+obj-$(CONFIG_BOOTSTRAP) += $(bootstrap-y)
+
 lowlevel_init-$(CONFIG_MACH_USB_A9263) = usb_a9263_lowlevel_init.o
 
 obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c new file +16 -0
new file mode 100644
index 0000000..368c677
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#include <common.h>
+#include <bootstrap.h>
+#include <mach/bootstrap.h>
+
+#ifdef CONFIG_MTD_DATAFLASH
+void * bootstrap_board_read_dataflash(void)
+{
+	return bootstrap_read_devfs("dataflash0", false, 0xffc0, 204864, 204864);
+}
+#endif
arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig new file +26 -0
new file mode 100644
index 0000000..e71a3c5
@@ -0,0 +1,26 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_AT91_HAVE_SRAM_128M=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y
arch/arm/configs/usb_a9263_bootstrap_defconfig new file +15 -0
new file mode 100644
index 0000000..c4b31ba
@@ -0,0 +1,25 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y

arch/arm/configs/usb_a9263_bootstrap_defconfig line 25

Quoted 10 lines
arch/arm/configs/usb_a9263_bootstrap_defconfig new file +10 -0
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y

These configs still fail with

arch/arm/mach-at91/built-in.o: In function `boot_seq':
at91sam9263_devices.c:(.text.boot_seq+0x28): undefined reference to `bootstrap_boot'

When CONFIG_BOOTSTRAP is disabled in make menuconfig. Should it be selected?

Sascha

Signature · 9 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#10 lore raw

Re: [PATCH 7/7] at91: usb_a9263: add bootstrap version

Quoted 113 lines · Sascha Hauer
Quoted 99 lines · Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/boards/usb-a926x/Makefile                 |    3 +++
 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c    |   16 ++++++++++++
 .../configs/usb_a9263_128mib_bootstrap_defconfig   |   26 ++++++++++++++++++++
 arch/arm/configs/usb_a9263_bootstrap_defconfig     |   25 +++++++++++++++++++
 4 files changed, 70 insertions(+)
 create mode 100644 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c
 create mode 100644 arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig
 create mode 100644 arch/arm/configs/usb_a9263_bootstrap_defconfig
arch/arm/boards/usb-a926x/Makefile +3 -0
index 9511a76..4c8cd64 100644
@@ -1,5 +1,8 @@
 obj-y += init.o
 
+bootstrap-$(CONFIG_MACH_USB_A9263) = usb_a9263_bootstrap.o
+obj-$(CONFIG_BOOTSTRAP) += $(bootstrap-y)
+
 lowlevel_init-$(CONFIG_MACH_USB_A9263) = usb_a9263_lowlevel_init.o
 
 obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c new file +16 -0
new file mode 100644
index 0000000..368c677
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#include <common.h>
+#include <bootstrap.h>
+#include <mach/bootstrap.h>
+
+#ifdef CONFIG_MTD_DATAFLASH
+void * bootstrap_board_read_dataflash(void)
+{
+	return bootstrap_read_devfs("dataflash0", false, 0xffc0, 204864, 204864);
+}
+#endif
arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig new file +26 -0
new file mode 100644
index 0000000..e71a3c5
@@ -0,0 +1,26 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_AT91_HAVE_SRAM_128M=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y
arch/arm/configs/usb_a9263_bootstrap_defconfig new file +15 -0
new file mode 100644
index 0000000..c4b31ba
@@ -0,0 +1,25 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y

arch/arm/configs/usb_a9263_bootstrap_defconfig line 25

Quoted 10 lines
arch/arm/configs/usb_a9263_bootstrap_defconfig new file +10 -0
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y

These configs still fail with

Quoted 5 lines

arch/arm/mach-at91/built-in.o: In function `boot_seq':
at91sam9263_devices.c:(.text.boot_seq+0x28): undefined reference to `bootstrap_boot'

When CONFIG_BOOTSTRAP is disabled in make menuconfig. Should it be selected?

yes BOOTSTRAP is mandatory

for this config

Best Regards,
J.

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

#11 lore raw

Re: [PATCH 7/7] at91: usb_a9263: add bootstrap version

Quoted 114 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 113 lines · Sascha Hauer
Quoted 99 lines · Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/boards/usb-a926x/Makefile                 |    3 +++
 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c    |   16 ++++++++++++
 .../configs/usb_a9263_128mib_bootstrap_defconfig   |   26 ++++++++++++++++++++
 arch/arm/configs/usb_a9263_bootstrap_defconfig     |   25 +++++++++++++++++++
 4 files changed, 70 insertions(+)
 create mode 100644 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c
 create mode 100644 arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig
 create mode 100644 arch/arm/configs/usb_a9263_bootstrap_defconfig
arch/arm/boards/usb-a926x/Makefile +3 -0
index 9511a76..4c8cd64 100644
@@ -1,5 +1,8 @@
 obj-y += init.o
 
+bootstrap-$(CONFIG_MACH_USB_A9263) = usb_a9263_bootstrap.o
+obj-$(CONFIG_BOOTSTRAP) += $(bootstrap-y)
+
 lowlevel_init-$(CONFIG_MACH_USB_A9263) = usb_a9263_lowlevel_init.o
 
 obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c new file +16 -0
new file mode 100644
index 0000000..368c677
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#include <common.h>
+#include <bootstrap.h>
+#include <mach/bootstrap.h>
+
+#ifdef CONFIG_MTD_DATAFLASH
+void * bootstrap_board_read_dataflash(void)
+{
+	return bootstrap_read_devfs("dataflash0", false, 0xffc0, 204864, 204864);
+}
+#endif
arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig new file +26 -0
new file mode 100644
index 0000000..e71a3c5
@@ -0,0 +1,26 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_AT91_HAVE_SRAM_128M=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y
arch/arm/configs/usb_a9263_bootstrap_defconfig new file +15 -0
new file mode 100644
index 0000000..c4b31ba
@@ -0,0 +1,25 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y

arch/arm/configs/usb_a9263_bootstrap_defconfig line 25

Quoted 10 lines
arch/arm/configs/usb_a9263_bootstrap_defconfig new file +10 -0
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y

These configs still fail with

Quoted 6 lines
Quoted 5 lines

arch/arm/mach-at91/built-in.o: In function `boot_seq':
at91sam9263_devices.c:(.text.boot_seq+0x28): undefined reference to `bootstrap_boot'

When CONFIG_BOOTSTRAP is disabled in make menuconfig. Should it be selected?

yes BOOTSTRAP is mandatory

By selected I meant something like:

config AT91_BOOTSTRAP

	bool "Build bootstrap barebox"
	depends on SOC_AT91SAM9263
	select HAVE_NOSHELL
	select BOOTSTRAP
	select SHELL_NONE

(I haven't tested this)

It should be possible to disable BOOTSTRAP when it's actually required to successfully build the binary.

Sascha

Signature · 9 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#12 lore raw

Re: [PATCH 7/7] at91: usb_a9263: add bootstrap version

Quoted 131 lines · Sascha Hauer
Quoted 114 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 113 lines · Sascha Hauer
Quoted 99 lines · Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/boards/usb-a926x/Makefile                 |    3 +++
 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c    |   16 ++++++++++++
 .../configs/usb_a9263_128mib_bootstrap_defconfig   |   26 ++++++++++++++++++++
 arch/arm/configs/usb_a9263_bootstrap_defconfig     |   25 +++++++++++++++++++
 4 files changed, 70 insertions(+)
 create mode 100644 arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c
 create mode 100644 arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig
 create mode 100644 arch/arm/configs/usb_a9263_bootstrap_defconfig
arch/arm/boards/usb-a926x/Makefile +3 -0
index 9511a76..4c8cd64 100644
@@ -1,5 +1,8 @@
 obj-y += init.o
 
+bootstrap-$(CONFIG_MACH_USB_A9263) = usb_a9263_bootstrap.o
+obj-$(CONFIG_BOOTSTRAP) += $(bootstrap-y)
+
 lowlevel_init-$(CONFIG_MACH_USB_A9263) = usb_a9263_lowlevel_init.o
 
 obj-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y)
arch/arm/boards/usb-a926x/usb_a9263_bootstrap.c new file +16 -0
new file mode 100644
index 0000000..368c677
@@ -0,0 +1,16 @@
+/*
+ * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2
+ */
+
+#include <common.h>
+#include <bootstrap.h>
+#include <mach/bootstrap.h>
+
+#ifdef CONFIG_MTD_DATAFLASH
+void * bootstrap_board_read_dataflash(void)
+{
+	return bootstrap_read_devfs("dataflash0", false, 0xffc0, 204864, 204864);
+}
+#endif
arch/arm/configs/usb_a9263_128mib_bootstrap_defconfig new file +26 -0
new file mode 100644
index 0000000..e71a3c5
@@ -0,0 +1,26 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_AT91_HAVE_SRAM_128M=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y
arch/arm/configs/usb_a9263_bootstrap_defconfig new file +15 -0
new file mode 100644
index 0000000..c4b31ba
@@ -0,0 +1,25 @@
+CONFIG_ARCH_AT91SAM9263=y
+CONFIG_MACH_USB_A9263=y
+CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x12000
+CONFIG_AEABI=y
+# CONFIG_CMD_ARM_CPUINFO is not set
+CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y
+CONFIG_ENVIRONMENT_VARIABLES=y
+CONFIG_PBL_IMAGE=y
+CONFIG_MMU=y
+CONFIG_MALLOC_DUMMY=y
+CONFIG_PROMPT="USB-9263:"
+CONFIG_SHELL_NONE=y
+# CONFIG_DEFAULT_ENVIRONMENT is not set
+# CONFIG_SPI is not set
+CONFIG_MTD=y

arch/arm/configs/usb_a9263_bootstrap_defconfig line 25

Quoted 10 lines
arch/arm/configs/usb_a9263_bootstrap_defconfig new file +10 -0
+# CONFIG_MTD_WRITE is not set
+# CONFIG_MTD_OOB_DEVICE is not set
+CONFIG_NAND=y
+# CONFIG_NAND_ECC_HW is not set
+# CONFIG_NAND_ECC_HW_SYNDROME is not set
+# CONFIG_NAND_ECC_HW_NONE is not set
+CONFIG_NAND_ATMEL=y
+# CONFIG_FS_RAMFS is not set
+CONFIG_BOOTSTRAP=y
+CONFIG_BOOTSTRAP_DEVFS=y

These configs still fail with

Quoted 6 lines
Quoted 5 lines

arch/arm/mach-at91/built-in.o: In function `boot_seq':
at91sam9263_devices.c:(.text.boot_seq+0x28): undefined reference to `bootstrap_boot'

When CONFIG_BOOTSTRAP is disabled in make menuconfig. Should it be selected?

yes BOOTSTRAP is mandatory

By selected I meant something like:

config AT91_BOOTSTRAP

	bool "Build bootstrap barebox"
	depends on SOC_AT91SAM9263
	select HAVE_NOSHELL
	select BOOTSTRAP
	select SHELL_NONE
Quoted 4 lines

(I haven't tested this)

It should be possible to disable BOOTSTRAP when it's actually required to successfully build the binary.

yeah

but we can build a non-shell binary without it too

Best Regards,
J.

Quoted 10 lines

Sascha

Signature · 4 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

#13 lore raw

Re: [PATCH 1/7] at91: add test commamd to emulate bootrom boot

In reply to Jean-Christophe PLAGNIOL-VILLARD
Quoted 13 lines · Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/mach-at91/Kconfig         |    6 +++
 arch/arm/mach-at91/Makefile        |    1 +
 arch/arm/mach-at91/boot_test_cmd.c |   99 ++++++++++++++++++++++++++++++++++++
 3 files changed, 106 insertions(+)
 create mode 100644 arch/arm/mach-at91/boot_test_cmd.c
arch/arm/mach-at91/Kconfig +0 -0
index fcba7fb..e703b3d 100644

arch/arm/mach-at91/Kconfig config CMD_AT91MUX · line 490

Quoted 8 lines
arch/arm/mach-at91/Kconfig +5 -0
@@ -483,4 +483,10 @@ config CMD_AT91MUX
 	bool "at91mux dump command"
 	default y
 
+config CONFIG_CMD_AT91_BOOT_TEST
+	bool "at91_boot_test"
+	help
+	  allow to upload a boot binary to sram and execute it
+	  usefull to test bootstrap or barebox lowlevel init

s/usefull/useful/

Quoted 40 lines
arch/arm/mach-at91/Kconfig +1 -0
+
 endif
arch/arm/mach-at91/Makefile +1 -0
index 53b4dd8..4404d23 100644
@@ -1,4 +1,5 @@
 obj-y += setup.o clock.o gpio.o
+obj-$(CONFIG_CMD_AT91_BOOT_TEST) += boot_test_cmd.o
 
 lowlevel_init-y = at91sam926x_lowlevel_init.o
 lowlevel_init-$(CONFIG_ARCH_AT91RM9200) = at91rm9200_lowlevel_init.o
arch/arm/mach-at91/boot_test_cmd.c new file +22 -0
new file mode 100644
index 0000000..02e16fd
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2 only
+ */
+
+#include <common.h>
+#include <command.h>
+#include <libbb.h>
+#include <getopt.h>
+#include <fs.h>
+#include <fcntl.h>
+#include <malloc.h>
+#include <errno.h>
+
+static int do_at91_boot_test(int argc, char *argv[])
+{
+	int opt;
+	u32 *buf32;
+	void *buf;
+	u32 jump = 0;
+	int fd;

arch/arm/mach-at91/boot_test_cmd.c line 32

Quoted 10 lines
arch/arm/mach-at91/boot_test_cmd.c new file +10 -0
+	int ret = 1;
+	char *sram = "/dev/sram0";
+	u32 read_size, write_size;
+	u32 tmp = 0;
+
+	while ((opt = getopt(argc, argv, "j:s:")) > 0) {
+		switch (opt) {
+		case 'j':
+			jump = simple_strtoul(optarg, NULL, 0);
+			break;

Without the 'j' option given the code will jump to 0x0. Is this intended?

Quoted 39 lines
arch/arm/mach-at91/boot_test_cmd.c new file +39 -0
+		case 's':
+			sram = optarg;
+			break;
+		default:
+			return COMMAND_ERROR_USAGE;
+		}
+	}
+
+	if (argc < optind + 1)
+		return COMMAND_ERROR_USAGE;
+
+	buf32 = buf = read_file(argv[optind], &read_size);
+	if (!buf)
+		return -EINVAL;
+
+	write_size = buf32[5];
+
+	printf("size of the size %d\n", read_size);
+	printf("size to load in sram %d\n", write_size);
+
+	if (write_size > read_size) {
+		printf("file smaller than requested sram loading size (%d < %d)\n", write_size, read_size);
+		goto err;
+	}
+
+	fd = open(sram, O_WRONLY);
+	if (fd < 0) {
+		printf("could not open %s: %s\n", sram, errno_str());
+		ret = fd;
+		goto err;
+	}
+
+	while(write_size) {
+		tmp = write(fd, buf, write_size);
+		if (tmp < 0) {
+			perror("write");
+			goto err_open;
+		}
+		buf += tmp;

arch/arm/mach-at91/boot_test_cmd.c line 81

Quoted 10 lines
arch/arm/mach-at91/boot_test_cmd.c new file +10 -0
+		write_size -= tmp;
+	}
+
+	shutdown_barebox();
+
+	__asm__ __volatile__(
+		"mov pc, %0\n"
+		:
+		: "r"(jump)
+		:);

Is this inline assemble needed? Why not

	void (*jump)(void);

	jump();
Quoted 27 lines
arch/arm/mach-at91/boot_test_cmd.c new file +18 -0
+
+err_open:
+	close(fd);
+err:
+	free(buf);
+	return ret;
+}
+
+BAREBOX_CMD_HELP_START(at91_boot_test)
+BAREBOX_CMD_HELP_USAGE("at91_boot_test [-j <jump addr>] [-s <sram>] file\n")
+BAREBOX_CMD_HELP_SHORT("upload the binary to sram and jump as will do the romcode\n")
+BAREBOX_CMD_HELP_END
+
+BAREBOX_CMD_START(at91_boot_test)
+	.cmd		= do_at91_boot_test,
+	.usage		= "upload the binary to sram and jump as will do the romcode",
+	BAREBOX_CMD_HELP(cmd_at91_boot_test_help)
+BAREBOX_CMD_END
Signature · 7 lines
1.7.10.4


_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
Signature · 9 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#14 lore raw

Re: [PATCH 1/7] at91: add test commamd to emulate bootrom boot

Quoted 70 lines · Sascha Hauer
Quoted 13 lines · Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/mach-at91/Kconfig         |    6 +++
 arch/arm/mach-at91/Makefile        |    1 +
 arch/arm/mach-at91/boot_test_cmd.c |   99 ++++++++++++++++++++++++++++++++++++
 3 files changed, 106 insertions(+)
 create mode 100644 arch/arm/mach-at91/boot_test_cmd.c
arch/arm/mach-at91/Kconfig +0 -0
index fcba7fb..e703b3d 100644

arch/arm/mach-at91/Kconfig config CMD_AT91MUX · line 490

Quoted 8 lines
arch/arm/mach-at91/Kconfig +5 -0
@@ -483,4 +483,10 @@ config CMD_AT91MUX
 	bool "at91mux dump command"
 	default y
 
+config CONFIG_CMD_AT91_BOOT_TEST
+	bool "at91_boot_test"
+	help
+	  allow to upload a boot binary to sram and execute it
+	  usefull to test bootstrap or barebox lowlevel init

s/usefull/useful/

Quoted 45 lines
arch/arm/mach-at91/Kconfig +1 -0
+
 endif
arch/arm/mach-at91/Makefile +1 -0
index 53b4dd8..4404d23 100644
@@ -1,4 +1,5 @@
 obj-y += setup.o clock.o gpio.o
+obj-$(CONFIG_CMD_AT91_BOOT_TEST) += boot_test_cmd.o
 
 lowlevel_init-y = at91sam926x_lowlevel_init.o
 lowlevel_init-$(CONFIG_ARCH_AT91RM9200) = at91rm9200_lowlevel_init.o
arch/arm/mach-at91/boot_test_cmd.c new file +27 -0
new file mode 100644
index 0000000..02e16fd
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2 only
+ */
+
+#include <common.h>
+#include <command.h>
+#include <libbb.h>
+#include <getopt.h>
+#include <fs.h>
+#include <fcntl.h>
+#include <malloc.h>
+#include <errno.h>
+
+static int do_at91_boot_test(int argc, char *argv[])
+{
+	int opt;
+	u32 *buf32;
+	void *buf;
+	u32 jump = 0;
+	int fd;
+	int ret = 1;
+	char *sram = "/dev/sram0";
+	u32 read_size, write_size;
+	u32 tmp = 0;
+
Quoted 8 lines

arch/arm/mach-at91/boot_test_cmd.c line 32

Quoted 5 lines
arch/arm/mach-at91/boot_test_cmd.c new file +5 -0
+	while ((opt = getopt(argc, argv, "j:s:")) > 0) {
+		switch (opt) {
+		case 'j':
+			jump = simple_strtoul(optarg, NULL, 0);
+			break;

Without the 'j' option given the code will jump to 0x0. Is this intended?

yes at91 we start at 0x0 for the code that run in sram

Quoted 53 lines
Quoted 40 lines
arch/arm/mach-at91/boot_test_cmd.c new file +39 -0
+		case 's':
+			sram = optarg;
+			break;
+		default:
+			return COMMAND_ERROR_USAGE;
+		}
+	}
+
+	if (argc < optind + 1)
+		return COMMAND_ERROR_USAGE;
+
+	buf32 = buf = read_file(argv[optind], &read_size);
+	if (!buf)
+		return -EINVAL;
+
+	write_size = buf32[5];
+
+	printf("size of the size %d\n", read_size);
+	printf("size to load in sram %d\n", write_size);
+
+	if (write_size > read_size) {
+		printf("file smaller than requested sram loading size (%d < %d)\n", write_size, read_size);
+		goto err;
+	}
+
+	fd = open(sram, O_WRONLY);
+	if (fd < 0) {
+		printf("could not open %s: %s\n", sram, errno_str());
+		ret = fd;
+		goto err;
+	}
+
+	while(write_size) {
+		tmp = write(fd, buf, write_size);
+		if (tmp < 0) {
+			perror("write");
+			goto err_open;
+		}
+		buf += tmp;

arch/arm/mach-at91/boot_test_cmd.c line 81

Quoted 10 lines
arch/arm/mach-at91/boot_test_cmd.c new file +10 -0
+		write_size -= tmp;
+	}
+
+	shutdown_barebox();
+
+	__asm__ __volatile__(
+		"mov pc, %0\n"
+		:
+		: "r"(jump)
+		:);

Is this inline assemble needed? Why not

Quoted 3 lines
	void (*jump)(void);

	jump();

jump can be NULL

Best Regards,
J.

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

#15 lore raw

Re: [PATCH 1/7] at91: add test commamd to emulate bootrom boot

Quoted 133 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 70 lines · Sascha Hauer
Quoted 13 lines · Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/mach-at91/Kconfig         |    6 +++
 arch/arm/mach-at91/Makefile        |    1 +
 arch/arm/mach-at91/boot_test_cmd.c |   99 ++++++++++++++++++++++++++++++++++++
 3 files changed, 106 insertions(+)
 create mode 100644 arch/arm/mach-at91/boot_test_cmd.c
arch/arm/mach-at91/Kconfig +0 -0
index fcba7fb..e703b3d 100644

arch/arm/mach-at91/Kconfig config CMD_AT91MUX · line 490

Quoted 8 lines
arch/arm/mach-at91/Kconfig +5 -0
@@ -483,4 +483,10 @@ config CMD_AT91MUX
 	bool "at91mux dump command"
 	default y
 
+config CONFIG_CMD_AT91_BOOT_TEST
+	bool "at91_boot_test"
+	help
+	  allow to upload a boot binary to sram and execute it
+	  usefull to test bootstrap or barebox lowlevel init

s/usefull/useful/

Quoted 45 lines
arch/arm/mach-at91/Kconfig +1 -0
+
 endif
arch/arm/mach-at91/Makefile +1 -0
index 53b4dd8..4404d23 100644
@@ -1,4 +1,5 @@
 obj-y += setup.o clock.o gpio.o
+obj-$(CONFIG_CMD_AT91_BOOT_TEST) += boot_test_cmd.o
 
 lowlevel_init-y = at91sam926x_lowlevel_init.o
 lowlevel_init-$(CONFIG_ARCH_AT91RM9200) = at91rm9200_lowlevel_init.o
arch/arm/mach-at91/boot_test_cmd.c new file +27 -0
new file mode 100644
index 0000000..02e16fd
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2 only
+ */
+
+#include <common.h>
+#include <command.h>
+#include <libbb.h>
+#include <getopt.h>
+#include <fs.h>
+#include <fcntl.h>
+#include <malloc.h>
+#include <errno.h>
+
+static int do_at91_boot_test(int argc, char *argv[])
+{
+	int opt;
+	u32 *buf32;
+	void *buf;
+	u32 jump = 0;
+	int fd;
+	int ret = 1;
+	char *sram = "/dev/sram0";
+	u32 read_size, write_size;
+	u32 tmp = 0;
+
Quoted 8 lines

arch/arm/mach-at91/boot_test_cmd.c line 32

Quoted 5 lines
arch/arm/mach-at91/boot_test_cmd.c new file +5 -0
+	while ((opt = getopt(argc, argv, "j:s:")) > 0) {
+		switch (opt) {
+		case 'j':
+			jump = simple_strtoul(optarg, NULL, 0);
+			break;

Without the 'j' option given the code will jump to 0x0. Is this intended?

yes at91 we start at 0x0 for the code that run in sram

Quoted 53 lines
Quoted 40 lines
arch/arm/mach-at91/boot_test_cmd.c new file +39 -0
+		case 's':
+			sram = optarg;
+			break;
+		default:
+			return COMMAND_ERROR_USAGE;
+		}
+	}
+
+	if (argc < optind + 1)
+		return COMMAND_ERROR_USAGE;
+
+	buf32 = buf = read_file(argv[optind], &read_size);
+	if (!buf)
+		return -EINVAL;
+
+	write_size = buf32[5];
+
+	printf("size of the size %d\n", read_size);
+	printf("size to load in sram %d\n", write_size);
+
+	if (write_size > read_size) {
+		printf("file smaller than requested sram loading size (%d < %d)\n", write_size, read_size);
+		goto err;
+	}
+
+	fd = open(sram, O_WRONLY);
+	if (fd < 0) {
+		printf("could not open %s: %s\n", sram, errno_str());
+		ret = fd;
+		goto err;
+	}
+
+	while(write_size) {
+		tmp = write(fd, buf, write_size);
+		if (tmp < 0) {
+			perror("write");
+			goto err_open;
+		}
+		buf += tmp;

arch/arm/mach-at91/boot_test_cmd.c line 81

Quoted 10 lines
arch/arm/mach-at91/boot_test_cmd.c new file +10 -0
+		write_size -= tmp;
+	}
+
+	shutdown_barebox();
+
+	__asm__ __volatile__(
+		"mov pc, %0\n"
+		:
+		: "r"(jump)
+		:);

Is this inline assemble needed? Why not

Quoted 4 lines
Quoted 3 lines
	void (*jump)(void);

	jump();

jump can be NULL

But that's not a reason for inline assembly.

Sascha

Signature · 9 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox
#16 lore raw

Re: [PATCH 1/7] at91: add test commamd to emulate bootrom boot

Quoted 134 lines · Sascha Hauer
Quoted 133 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 70 lines · Sascha Hauer
Quoted 13 lines · Jean-Christophe PLAGNIOL-VILLARD
---
 arch/arm/mach-at91/Kconfig         |    6 +++
 arch/arm/mach-at91/Makefile        |    1 +
 arch/arm/mach-at91/boot_test_cmd.c |   99 ++++++++++++++++++++++++++++++++++++
 3 files changed, 106 insertions(+)
 create mode 100644 arch/arm/mach-at91/boot_test_cmd.c
arch/arm/mach-at91/Kconfig +0 -0
index fcba7fb..e703b3d 100644

arch/arm/mach-at91/Kconfig config CMD_AT91MUX · line 490

Quoted 8 lines
arch/arm/mach-at91/Kconfig +5 -0
@@ -483,4 +483,10 @@ config CMD_AT91MUX
 	bool "at91mux dump command"
 	default y
 
+config CONFIG_CMD_AT91_BOOT_TEST
+	bool "at91_boot_test"
+	help
+	  allow to upload a boot binary to sram and execute it
+	  usefull to test bootstrap or barebox lowlevel init

s/usefull/useful/

Quoted 45 lines
arch/arm/mach-at91/Kconfig +1 -0
+
 endif
arch/arm/mach-at91/Makefile +1 -0
index 53b4dd8..4404d23 100644
@@ -1,4 +1,5 @@
 obj-y += setup.o clock.o gpio.o
+obj-$(CONFIG_CMD_AT91_BOOT_TEST) += boot_test_cmd.o
 
 lowlevel_init-y = at91sam926x_lowlevel_init.o
 lowlevel_init-$(CONFIG_ARCH_AT91RM9200) = at91rm9200_lowlevel_init.o
arch/arm/mach-at91/boot_test_cmd.c new file +27 -0
new file mode 100644
index 0000000..02e16fd
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
+ *
+ * Under GPLv2 only
+ */
+
+#include <common.h>
+#include <command.h>
+#include <libbb.h>
+#include <getopt.h>
+#include <fs.h>
+#include <fcntl.h>
+#include <malloc.h>
+#include <errno.h>
+
+static int do_at91_boot_test(int argc, char *argv[])
+{
+	int opt;
+	u32 *buf32;
+	void *buf;
+	u32 jump = 0;
+	int fd;
+	int ret = 1;
+	char *sram = "/dev/sram0";
+	u32 read_size, write_size;
+	u32 tmp = 0;
+
Quoted 8 lines

arch/arm/mach-at91/boot_test_cmd.c line 32

Quoted 5 lines
arch/arm/mach-at91/boot_test_cmd.c new file +5 -0
+	while ((opt = getopt(argc, argv, "j:s:")) > 0) {
+		switch (opt) {
+		case 'j':
+			jump = simple_strtoul(optarg, NULL, 0);
+			break;

Without the 'j' option given the code will jump to 0x0. Is this intended?

yes at91 we start at 0x0 for the code that run in sram

Quoted 53 lines
Quoted 40 lines
arch/arm/mach-at91/boot_test_cmd.c new file +39 -0
+		case 's':
+			sram = optarg;
+			break;
+		default:
+			return COMMAND_ERROR_USAGE;
+		}
+	}
+
+	if (argc < optind + 1)
+		return COMMAND_ERROR_USAGE;
+
+	buf32 = buf = read_file(argv[optind], &read_size);
+	if (!buf)
+		return -EINVAL;
+
+	write_size = buf32[5];
+
+	printf("size of the size %d\n", read_size);
+	printf("size to load in sram %d\n", write_size);
+
+	if (write_size > read_size) {
+		printf("file smaller than requested sram loading size (%d < %d)\n", write_size, read_size);
+		goto err;
+	}
+
+	fd = open(sram, O_WRONLY);
+	if (fd < 0) {
+		printf("could not open %s: %s\n", sram, errno_str());
+		ret = fd;
+		goto err;
+	}
+
+	while(write_size) {
+		tmp = write(fd, buf, write_size);
+		if (tmp < 0) {
+			perror("write");
+			goto err_open;
+		}
+		buf += tmp;

arch/arm/mach-at91/boot_test_cmd.c line 81

Quoted 10 lines
arch/arm/mach-at91/boot_test_cmd.c new file +10 -0
+		write_size -= tmp;
+	}
+
+	shutdown_barebox();
+
+	__asm__ __volatile__(
+		"mov pc, %0\n"
+		:
+		: "r"(jump)
+		:);

Is this inline assemble needed? Why not

Quoted 6 lines
Quoted 4 lines
Quoted 3 lines
	void (*jump)(void);

	jump();

jump can be NULL

But that's not a reason for inline assembly.

except if use call we get a NULL exception

Best Regards,
J.

Quoted 8 lines

Sascha

Signature · 4 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

#17 lore raw

Re: [PATCH 1/7] at91: add test commamd to emulate bootrom boot

Quoted 10 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 10 lines
Quoted 10 lines
Quoted 10 lines

arch/arm/mach-at91/boot_test_cmd.c line 81

Quoted 7 lines
arch/arm/mach-at91/boot_test_cmd.c new file +7 -0
+	shutdown_barebox();
+
+	__asm__ __volatile__(
+		"mov pc, %0\n"
+		:
+		: "r"(jump)
+		:);

Is this inline assemble needed? Why not

Quoted 7 lines
Quoted 6 lines
Quoted 4 lines
Quoted 3 lines
	void (*jump)(void);

	jump();

jump can be NULL

But that's not a reason for inline assembly.

except if use call we get a NULL exception

You won't get a NULL pointer exception when the MMU is disabled (which is the case after shutdown_basebox()), no matter which method you choose to jump to 0x0.

Sascha

Signature · 9 lines
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox