* [PATCH 1/6] defaultenv: source the init_board so we can keep exported env @ 2012-01-03 5:00 Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 2/6] defaultenv: enable progress for cp Jean-Christophe PLAGNIOL-VILLARD ` (4 more replies) 0 siblings, 5 replies; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 UTC (permalink / raw) To: barebox Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- defaultenv/bin/init | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/defaultenv/bin/init b/defaultenv/bin/init index b66f7d9..b371c42 100644 --- a/defaultenv/bin/init +++ b/defaultenv/bin/init @@ -21,7 +21,7 @@ if [ -e /dev/nand0 -a -n "$nand_parts" ]; then fi if [ -f /env/bin/init_board ]; then - /env/bin/init_board + . /env/bin/init_board fi echo -- 1.7.7 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/6] defaultenv: enable progress for cp 2012-01-03 5:00 [PATCH 1/6] defaultenv: source the init_board so we can keep exported env Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 ` Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 3/6] poller_call: move from getc to is_timeout Jean-Christophe PLAGNIOL-VILLARD ` (3 subsequent siblings) 4 siblings, 0 replies; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 UTC (permalink / raw) To: barebox Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- defaultenv/bin/_update | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/defaultenv/bin/_update b/defaultenv/bin/_update index 1bcb71c..9e88dea 100644 --- a/defaultenv/bin/_update +++ b/defaultenv/bin/_update @@ -44,7 +44,7 @@ echo if [ x$mode = xtftp ]; then tftp $image $part || exit 1 else - cp $image $part || exit 1 + cp -v $image $part || exit 1 fi protect $part -- 1.7.7 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/6] poller_call: move from getc to is_timeout 2012-01-03 5:00 [PATCH 1/6] defaultenv: source the init_board so we can keep exported env Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 2/6] defaultenv: enable progress for cp Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 ` Jean-Christophe PLAGNIOL-VILLARD 2012-01-04 9:25 ` Sascha Hauer 2012-01-03 5:00 ` [PATCH 4/6] arm: introduce barebox_bare_init_size to known the bare_init size Jean-Christophe PLAGNIOL-VILLARD ` (2 subsequent siblings) 4 siblings, 1 reply; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 UTC (permalink / raw) To: barebox this will allow to always call poller_call even durring timeout and still the case in getc Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- common/clock.c | 4 ++++ common/console.c | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/common/clock.c b/common/clock.c index 79c06c8..f322db8 100644 --- a/common/clock.c +++ b/common/clock.c @@ -27,6 +27,7 @@ #include <common.h> #include <asm-generic/div64.h> #include <clock.h> +#include <poller.h> static struct clocksource *current_clock; static uint64_t time_ns; @@ -139,6 +140,9 @@ uint32_t clocksource_hz2mult(uint32_t hz, uint32_t shift_constant) int is_timeout(uint64_t start_ns, uint64_t time_offset_ns) { + if (time_offset_ns >= 100 * USECOND) + poller_call(); + if ((int64_t)(start_ns + time_offset_ns - get_time_ns()) < 0) return 1; else diff --git a/common/console.c b/common/console.c index cab8689..88c4010 100644 --- a/common/console.c +++ b/common/console.c @@ -225,8 +225,6 @@ int getc(void) */ start = get_time_ns(); while (1) { - poller_call(); - if (tstc_raw()) { kfifo_putc(console_input_buffer, getc_raw()); -- 1.7.7 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/6] poller_call: move from getc to is_timeout 2012-01-03 5:00 ` [PATCH 3/6] poller_call: move from getc to is_timeout Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-04 9:25 ` Sascha Hauer 2012-01-04 10:46 ` Jean-Christophe PLAGNIOL-VILLARD 0 siblings, 1 reply; 9+ messages in thread From: Sascha Hauer @ 2012-01-04 9:25 UTC (permalink / raw) To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox On Tue, Jan 03, 2012 at 06:00:47AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote: > this will allow to always call poller_call even durring timeout > and still the case in getc > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > --- > common/clock.c | 4 ++++ > common/console.c | 2 -- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/common/clock.c b/common/clock.c > index 79c06c8..f322db8 100644 > --- a/common/clock.c > +++ b/common/clock.c > @@ -27,6 +27,7 @@ > #include <common.h> > #include <asm-generic/div64.h> > #include <clock.h> > +#include <poller.h> > > static struct clocksource *current_clock; > static uint64_t time_ns; > @@ -139,6 +140,9 @@ uint32_t clocksource_hz2mult(uint32_t hz, uint32_t shift_constant) > > int is_timeout(uint64_t start_ns, uint64_t time_offset_ns) > { > + if (time_offset_ns >= 100 * USECOND) > + poller_call(); Do we need this if() at all? I think not. Sascha > + > if ((int64_t)(start_ns + time_offset_ns - get_time_ns()) < 0) > return 1; > else > diff --git a/common/console.c b/common/console.c > index cab8689..88c4010 100644 > --- a/common/console.c > +++ b/common/console.c > @@ -225,8 +225,6 @@ int getc(void) > */ > start = get_time_ns(); > while (1) { > - poller_call(); > - > if (tstc_raw()) { > kfifo_putc(console_input_buffer, getc_raw()); > > -- > 1.7.7 > > > _______________________________________________ > barebox mailing list > barebox@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/barebox > -- 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 barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/6] poller_call: move from getc to is_timeout 2012-01-04 9:25 ` Sascha Hauer @ 2012-01-04 10:46 ` Jean-Christophe PLAGNIOL-VILLARD 0 siblings, 0 replies; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-04 10:46 UTC (permalink / raw) To: Sascha Hauer; +Cc: barebox On 10:25 Wed 04 Jan , Sascha Hauer wrote: > On Tue, Jan 03, 2012 at 06:00:47AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote: > > this will allow to always call poller_call even durring timeout > > and still the case in getc > > > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > > --- > > common/clock.c | 4 ++++ > > common/console.c | 2 -- > > 2 files changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/common/clock.c b/common/clock.c > > index 79c06c8..f322db8 100644 > > --- a/common/clock.c > > +++ b/common/clock.c > > @@ -27,6 +27,7 @@ > > #include <common.h> > > #include <asm-generic/div64.h> > > #include <clock.h> > > +#include <poller.h> > > > > static struct clocksource *current_clock; > > static uint64_t time_ns; > > @@ -139,6 +140,9 @@ uint32_t clocksource_hz2mult(uint32_t hz, uint32_t shift_constant) > > > > int is_timeout(uint64_t start_ns, uint64_t time_offset_ns) > > { > > + if (time_offset_ns >= 100 * USECOND) > > + poller_call(); > > Do we need this if() at all? I think not. for small delay such as bitbanging i2c delay need to be constant Best Regards, J. > > Sascha > > > + > > if ((int64_t)(start_ns + time_offset_ns - get_time_ns()) < 0) > > return 1; > > else > > diff --git a/common/console.c b/common/console.c > > index cab8689..88c4010 100644 > > --- a/common/console.c > > +++ b/common/console.c > > @@ -225,8 +225,6 @@ int getc(void) > > */ > > start = get_time_ns(); > > while (1) { > > - poller_call(); > > - > > if (tstc_raw()) { > > kfifo_putc(console_input_buffer, getc_raw()); > > > > -- > > 1.7.7 > > > > > > _______________________________________________ > > barebox mailing list > > barebox@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/barebox > > > > -- > 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 barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/6] arm: introduce barebox_bare_init_size to known the bare_init size 2012-01-03 5:00 [PATCH 1/6] defaultenv: source the init_board so we can keep exported env Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 2/6] defaultenv: enable progress for cp Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 3/6] poller_call: move from getc to is_timeout Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 ` Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 5/6] ARM: add ARM_EXCEPTION_VECTOR6 options Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 6/6] at91: use " Jean-Christophe PLAGNIOL-VILLARD 4 siblings, 0 replies; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 UTC (permalink / raw) To: barebox Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- arch/arm/include/asm/sections.h | 6 ++++++ arch/arm/lib/barebox.lds.S | 3 +++ 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/arch/arm/include/asm/sections.h b/arch/arm/include/asm/sections.h index 2b8c516..5a11aad 100644 --- a/arch/arm/include/asm/sections.h +++ b/arch/arm/include/asm/sections.h @@ -1 +1,7 @@ #include <asm-generic/sections.h> + +extern char __bare_init_start[], __bare_init_end[]; + +extern void *_barebox_bare_init_size; + +#define barebox_bare_init_size (unsigned int)&_barebox_bare_init_size diff --git a/arch/arm/lib/barebox.lds.S b/arch/arm/lib/barebox.lds.S index f05f345..defcb18 100644 --- a/arch/arm/lib/barebox.lds.S +++ b/arch/arm/lib/barebox.lds.S @@ -44,9 +44,12 @@ SECTIONS . = 0x1000; LONG(0x53555243) /* 'CRUS' */ #endif + __bare_init_start = .; *(.text_bare_init*) + __bare_init_end = .; *(.text*) } + _barebox_bare_init_size = __bare_init_end - _text; . = ALIGN(4); .rodata : { *(.rodata*) } -- 1.7.7 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 5/6] ARM: add ARM_EXCEPTION_VECTOR6 options 2012-01-03 5:00 [PATCH 1/6] defaultenv: source the init_board so we can keep exported env Jean-Christophe PLAGNIOL-VILLARD ` (2 preceding siblings ...) 2012-01-03 5:00 ` [PATCH 4/6] arm: introduce barebox_bare_init_size to known the bare_init size Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 ` Jean-Christophe PLAGNIOL-VILLARD 2012-01-04 10:26 ` Sascha Hauer 2012-01-03 5:00 ` [PATCH 6/6] at91: use " Jean-Christophe PLAGNIOL-VILLARD 4 siblings, 1 reply; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 UTC (permalink / raw) To: barebox to pass the bare_init or barebox size via the vector 6 ARM_EXCEPTION_VECTOR6_BARE_INIT_SIZE bare_init size ARM_EXCEPTION_VECTOR6_SIZE barebox size Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- arch/arm/Kconfig | 11 +++++++++++ arch/arm/cpu/start.c | 14 ++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index b600179..49445fb 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -26,6 +26,17 @@ config ARM_LINUX default y depends on CMD_BOOTZ || CMD_BOOTU || CMD_BOOTM +config ARM_EXCEPTION_VECTOR6 + bool + +config ARM_EXCEPTION_VECTOR6_SIZE + bool + depends on ARM_EXCEPTION_VECTOR6 + +config ARM_EXCEPTION_VECTOR6_BARE_INIT_SIZE + bool + depends on ARM_EXCEPTION_VECTOR6 + menu "System Type " choice diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c index 5e09300..09e80d7 100644 --- a/arch/arm/cpu/start.c +++ b/arch/arm/cpu/start.c @@ -27,6 +27,16 @@ #include <asm-generic/memory_layout.h> #include <asm/sections.h> +#ifdef CONFIG_ARM_EXCEPTION_VECTOR6 +#ifdef CONFIG_ARM_EXCEPTION_VECTOR6_BARE_INIT_SIZE +#define exception_vector_6 ".word _barebox_bare_init_size\n" +#else +#define exception_vector_6 ".word _barebox_image_size\n" +#endif +#else +#define exception_vector_6 "1: bne 1b\n" +#endif + void __naked __section(.text_entry) exception_vectors(void) { __asm__ __volatile__ ( @@ -36,7 +46,7 @@ void __naked __section(.text_entry) exception_vectors(void) "ldr pc, =software_interrupt\n" /* software interrupt (SWI) */ "ldr pc, =prefetch_abort\n" /* prefetch abort */ "ldr pc, =data_abort\n" /* data abort */ - "1: bne 1b\n" /* (reserved) */ + exception_vector_6 /* (reserved) */ "ldr pc, =irq\n" /* irq (interrupt) */ "ldr pc, =fiq\n" /* fiq (fast interrupt) */ #else @@ -44,7 +54,7 @@ void __naked __section(.text_entry) exception_vectors(void) "1: bne 1b\n" /* software interrupt (SWI) */ "1: bne 1b\n" /* prefetch abort */ "1: bne 1b\n" /* data abort */ - "1: bne 1b\n" /* (reserved) */ + exception_vector_6 /* (reserved) */ "1: bne 1b\n" /* irq (interrupt) */ "1: bne 1b\n" /* fiq (fast interrupt) */ #endif -- 1.7.7 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 5/6] ARM: add ARM_EXCEPTION_VECTOR6 options 2012-01-03 5:00 ` [PATCH 5/6] ARM: add ARM_EXCEPTION_VECTOR6 options Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-04 10:26 ` Sascha Hauer 0 siblings, 0 replies; 9+ messages in thread From: Sascha Hauer @ 2012-01-04 10:26 UTC (permalink / raw) To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox On Tue, Jan 03, 2012 at 06:00:49AM +0100, Jean-Christophe PLAGNIOL-VILLARD wrote: > to pass the bare_init or barebox size via the vector 6 > > ARM_EXCEPTION_VECTOR6_BARE_INIT_SIZE bare_init size > ARM_EXCEPTION_VECTOR6_SIZE barebox size > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > --- > arch/arm/Kconfig | 11 +++++++++++ > arch/arm/cpu/start.c | 14 ++++++++++++-- > 2 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig > index b600179..49445fb 100644 > --- a/arch/arm/Kconfig > +++ b/arch/arm/Kconfig > @@ -26,6 +26,17 @@ config ARM_LINUX > default y > depends on CMD_BOOTZ || CMD_BOOTU || CMD_BOOTM > > +config ARM_EXCEPTION_VECTOR6 > + bool > + > +config ARM_EXCEPTION_VECTOR6_SIZE > + bool > + depends on ARM_EXCEPTION_VECTOR6 > + > +config ARM_EXCEPTION_VECTOR6_BARE_INIT_SIZE > + bool > + depends on ARM_EXCEPTION_VECTOR6 > + > menu "System Type " > > choice > diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c > index 5e09300..09e80d7 100644 > --- a/arch/arm/cpu/start.c > +++ b/arch/arm/cpu/start.c > @@ -27,6 +27,16 @@ > #include <asm-generic/memory_layout.h> > #include <asm/sections.h> > > +#ifdef CONFIG_ARM_EXCEPTION_VECTOR6 > +#ifdef CONFIG_ARM_EXCEPTION_VECTOR6_BARE_INIT_SIZE > +#define exception_vector_6 ".word _barebox_bare_init_size\n" > +#else > +#define exception_vector_6 ".word _barebox_image_size\n" > +#endif > +#else > +#define exception_vector_6 "1: bne 1b\n" > +#endif Sorry, I don't like this at all. This solves the AT91 case, but requires even more ifdefs to support some other architecture which might need some magic as exception vector 6. Additionally we don't need the exception vectors at the start of the binary. AT91 (and others) might need something that *looks* like arm exception vectors, but this don't need to be our original exception vectors. My suggestion is that we extend my original 'move exception vectors away from start of binary' patch in a way that the header can be fully customized on board or architecture level. See the following patch for a first version. Sascha 8<------------------------------------------------- ARM: move exception vectors away from start of binary Traditionally U-Boot and barebox have the exception vectors at the start of the binary. There is no real reason in doing so, because in the majority of cases this data will not be at 0x0 where it could be used as vectors directly anyway. This patch puts the vectors into a separate linker section and defines an head function which is placed at the start of the image instead. Putting this in a separate function also has the advantage that it can be placed at the start of images which require an additional header like several Freescale i.MX images. As the head function contains the barebox arm magic those images can now also be detected as barebox images. The header of the image can be customized using CONFIG_ARM_CUSTOM_HEAD. If this is set the user must specify a custom barebox_arm_head function in the text_entry section. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- arch/arm/Kconfig | 6 ++++ arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c | 3 +- arch/arm/boards/eukrea_cpuimx35/flash_header.c | 3 +- arch/arm/boards/eukrea_cpuimx51/flash_header.c | 3 +- arch/arm/boards/freescale-mx25-3-stack/3stack.c | 3 +- .../boards/freescale-mx35-3-stack/flash_header.c | 3 +- arch/arm/boards/freescale-mx51-pdk/flash_header.c | 3 +- arch/arm/boards/freescale-mx53-loco/flash_header.c | 3 +- arch/arm/boards/freescale-mx53-smd/flash_header.c | 3 +- arch/arm/cpu/mmu.c | 4 +- arch/arm/cpu/start.c | 20 ++++++++------ arch/arm/include/asm/barebox-arm-head.h | 28 ++++++++++++++++++++ arch/arm/include/asm/barebox-arm.h | 2 + arch/arm/lib/barebox.lds.S | 5 +++- 14 files changed, 69 insertions(+), 20 deletions(-) create mode 100644 arch/arm/include/asm/barebox-arm-head.h diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index b600179..b0b8f9c 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -26,6 +26,12 @@ config ARM_LINUX default y depends on CMD_BOOTZ || CMD_BOOTU || CMD_BOOTM +config ARM_CUSTOM_HEAD + bool + help + specify a board or architecture specific custom head + function + menu "System Type " choice diff --git a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c index 162c117..c7b0d2d 100644 --- a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c +++ b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c @@ -46,13 +46,14 @@ #include <usb/fsl_usb2.h> #include <mach/usb.h> #include <mach/devices-imx25.h> +#include <asm/barebox-arm-head.h> extern unsigned long _stext; extern void exception_vectors(void); void __naked __flash_header_start go(void) { - __asm__ __volatile__("b exception_vectors\n"); + barebox_arm_default_head(); } struct imx_dcd_entry __dcd_entry_section dcd_entry[] = { diff --git a/arch/arm/boards/eukrea_cpuimx35/flash_header.c b/arch/arm/boards/eukrea_cpuimx35/flash_header.c index 93c8348..4ded270 100644 --- a/arch/arm/boards/eukrea_cpuimx35/flash_header.c +++ b/arch/arm/boards/eukrea_cpuimx35/flash_header.c @@ -1,12 +1,13 @@ #include <common.h> #include <mach/imx-flash-header.h> #include <mach/imx-regs.h> +#include <asm/barebox-arm-head.h> extern void exception_vectors(void); void __naked __flash_header_start go(void) { - __asm__ __volatile__("b exception_vectors\n"); + barebox_arm_default_head(); } struct imx_dcd_entry __dcd_entry_section dcd_entry[] = { diff --git a/arch/arm/boards/eukrea_cpuimx51/flash_header.c b/arch/arm/boards/eukrea_cpuimx51/flash_header.c index f953b09..4f29dd9 100644 --- a/arch/arm/boards/eukrea_cpuimx51/flash_header.c +++ b/arch/arm/boards/eukrea_cpuimx51/flash_header.c @@ -1,11 +1,12 @@ #include <common.h> #include <mach/imx-flash-header.h> +#include <asm/barebox-arm-head.h> extern unsigned long _stext; void __naked __flash_header_start go(void) { - __asm__ __volatile__("b exception_vectors\n"); + barebox_arm_default_head(); } struct imx_dcd_entry __dcd_entry_section dcd_entry[] = { diff --git a/arch/arm/boards/freescale-mx25-3-stack/3stack.c b/arch/arm/boards/freescale-mx25-3-stack/3stack.c index 5aa54e4..78b872c 100644 --- a/arch/arm/boards/freescale-mx25-3-stack/3stack.c +++ b/arch/arm/boards/freescale-mx25-3-stack/3stack.c @@ -42,13 +42,14 @@ #include <i2c/i2c.h> #include <mfd/mc34704.h> #include <mach/devices-imx25.h> +#include <asm/barebox-arm-head.h> extern unsigned long _stext; extern void exception_vectors(void); void __naked __flash_header_start go(void) { - __asm__ __volatile__("b exception_vectors\n"); + barebox_arm_default_head(); } struct imx_dcd_entry __dcd_entry_section dcd_entry[] = { diff --git a/arch/arm/boards/freescale-mx35-3-stack/flash_header.c b/arch/arm/boards/freescale-mx35-3-stack/flash_header.c index 4bee797..63c1502 100644 --- a/arch/arm/boards/freescale-mx35-3-stack/flash_header.c +++ b/arch/arm/boards/freescale-mx35-3-stack/flash_header.c @@ -1,12 +1,13 @@ #include <common.h> #include <mach/imx-flash-header.h> #include <mach/imx-regs.h> +#include <asm/barebox-arm-head.h> extern void exception_vectors(void); void __naked __flash_header_start go(void) { - __asm__ __volatile__("b exception_vectors\n"); + barebox_arm_default_head(); } struct imx_dcd_entry __dcd_entry_section dcd_entry[] = { diff --git a/arch/arm/boards/freescale-mx51-pdk/flash_header.c b/arch/arm/boards/freescale-mx51-pdk/flash_header.c index 5f94506..d513c8c 100644 --- a/arch/arm/boards/freescale-mx51-pdk/flash_header.c +++ b/arch/arm/boards/freescale-mx51-pdk/flash_header.c @@ -1,11 +1,12 @@ #include <common.h> #include <mach/imx-flash-header.h> +#include <asm/barebox-arm-head.h> extern unsigned long _stext; void __naked __flash_header_start go(void) { - __asm__ __volatile__("b exception_vectors\n"); + barebox_arm_default_head(); } struct imx_dcd_entry __dcd_entry_section dcd_entry[] = { diff --git a/arch/arm/boards/freescale-mx53-loco/flash_header.c b/arch/arm/boards/freescale-mx53-loco/flash_header.c index 490e223..105f54a 100644 --- a/arch/arm/boards/freescale-mx53-loco/flash_header.c +++ b/arch/arm/boards/freescale-mx53-loco/flash_header.c @@ -16,10 +16,11 @@ #include <common.h> #include <asm/byteorder.h> #include <mach/imx-flash-header.h> +#include <asm/barebox-arm-head.h> void __naked __flash_header_start go(void) { - __asm__ __volatile__("b exception_vectors\n"); + barebox_arm_default_head(); } struct imx_dcd_v2_entry __dcd_entry_section dcd_entry[] = { diff --git a/arch/arm/boards/freescale-mx53-smd/flash_header.c b/arch/arm/boards/freescale-mx53-smd/flash_header.c index 490e223..105f54a 100644 --- a/arch/arm/boards/freescale-mx53-smd/flash_header.c +++ b/arch/arm/boards/freescale-mx53-smd/flash_header.c @@ -16,10 +16,11 @@ #include <common.h> #include <asm/byteorder.h> #include <mach/imx-flash-header.h> +#include <asm/barebox-arm-head.h> void __naked __flash_header_start go(void) { - __asm__ __volatile__("b exception_vectors\n"); + barebox_arm_default_head(); } struct imx_dcd_v2_entry __dcd_entry_section dcd_entry[] = { diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c index c6c91df..e8ff676 100644 --- a/arch/arm/cpu/mmu.c +++ b/arch/arm/cpu/mmu.c @@ -4,6 +4,7 @@ #include <errno.h> #include <sizes.h> #include <asm/memory.h> +#include <asm/barebox-arm.h> #include <asm/system.h> #include <memory.h> @@ -182,7 +183,6 @@ static void vectors_init(void) { u32 *exc, *zero = NULL; void *vectors; - extern unsigned long exception_vectors; u32 cr; cr = get_cr(); @@ -210,7 +210,7 @@ static void vectors_init(void) vectors = xmemalign(PAGE_SIZE, PAGE_SIZE); memset(vectors, 0, PAGE_SIZE); - memcpy(vectors, &exception_vectors, ARM_VECTORS_SIZE); + memcpy(vectors, __exceptions_start, __exceptions_stop - __exceptions_start); if (cr & CR_V) exc[256 - 16] = (u32)vectors | PTE_TYPE_SMALL | PTE_FLAGS_CACHED; diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c index 5e09300..e78d749 100644 --- a/arch/arm/cpu/start.c +++ b/arch/arm/cpu/start.c @@ -23,14 +23,22 @@ #include <common.h> #include <init.h> #include <asm/barebox-arm.h> +#include <asm/barebox-arm-head.h> #include <asm/system.h> #include <asm-generic/memory_layout.h> #include <asm/sections.h> -void __naked __section(.text_entry) exception_vectors(void) +#ifndef CONFIG_ARM_CUSTOM_HEAD +void __naked __section(.text_entry) barebox_arm_head(void) +{ + barebox_arm_default_head(); +} +#endif + +void __naked __section(.text_exceptions) exception_vectors(void) { __asm__ __volatile__ ( - "b reset\n" /* reset */ + "b start_arm_barebox\n" /* reset */ #ifdef CONFIG_ARM_EXCEPTIONS "ldr pc, =undefined_instruction\n" /* undefined instruction */ "ldr pc, =software_interrupt\n" /* software interrupt (SWI) */ @@ -48,12 +56,6 @@ void __naked __section(.text_entry) exception_vectors(void) "1: bne 1b\n" /* irq (interrupt) */ "1: bne 1b\n" /* fiq (fast interrupt) */ #endif - ".word 0x65726162\n" /* 'bare' */ - ".word 0x00786f62\n" /* 'box' */ - ".word _text\n" /* text base. If copied there, - * barebox can skip relocation - */ - ".word _barebox_image_size\n" /* image size to copy */ ); } @@ -61,7 +63,7 @@ void __naked __section(.text_entry) exception_vectors(void) * The actual reset vector. This code is position independent and usually * does not run at the address it's linked at. */ -void __naked __bare_init reset(void) +void __naked __bare_init start_arm_barebox(void) { uint32_t r; diff --git a/arch/arm/include/asm/barebox-arm-head.h b/arch/arm/include/asm/barebox-arm-head.h new file mode 100644 index 0000000..72ad8ec --- /dev/null +++ b/arch/arm/include/asm/barebox-arm-head.h @@ -0,0 +1,28 @@ +#ifndef __BAREBOX_ARM_HEAD_H +#define __BAREBOX_ARM_HEAD_H + +#ifndef ARM_EXCEPTION_VECTOR_6 +#define ARM_EXCEPTION_VECTOR_6 ".word 0x0\n" +#endif + +static inline void barebox_arm_default_head(void) +{ + __asm__ __volatile__ ( + "b start_arm_barebox\n" + ".word 0x0\n" + ".word 0x0\n" + ".word 0x0\n" + ".word 0x0\n" + ARM_EXCEPTION_VECTOR_6 + ".word 0x0\n" + ".word 0x0\n" + ".word 0x65726162\n" /* 'bare' */ + ".word 0x00786f62\n" /* 'box' */ + ".word _text\n" /* text base. If copied there, + * barebox can skip relocation + */ + ".word _barebox_image_size\n" /* image size to copy */ + ); +} + +#endif /* __BAREBOX_ARM_HEAD_H */ diff --git a/arch/arm/include/asm/barebox-arm.h b/arch/arm/include/asm/barebox-arm.h index 7bb1af1..3339782 100644 --- a/arch/arm/include/asm/barebox-arm.h +++ b/arch/arm/include/asm/barebox-arm.h @@ -36,6 +36,8 @@ int cleanup_before_linux(void); int board_init(void); int dram_init (void); +extern char __exceptions_start[], __exceptions_stop[]; + void board_init_lowlevel(void); void board_init_lowlevel_return(void); void arch_init_lowlevel(void); diff --git a/arch/arm/lib/barebox.lds.S b/arch/arm/lib/barebox.lds.S index f05f345..f0d675b 100644 --- a/arch/arm/lib/barebox.lds.S +++ b/arch/arm/lib/barebox.lds.S @@ -26,7 +26,7 @@ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) -ENTRY(exception_vectors) +ENTRY(barebox_arm_head) SECTIONS { . = TEXT_BASE; @@ -45,6 +45,9 @@ SECTIONS LONG(0x53555243) /* 'CRUS' */ #endif *(.text_bare_init*) + __exceptions_start = .; + KEEP(*(.text_exceptions*)) + __exceptions_stop = .; *(.text*) } -- 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 barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 6/6] at91: use ARM_EXCEPTION_VECTOR6 options 2012-01-03 5:00 [PATCH 1/6] defaultenv: source the init_board so we can keep exported env Jean-Christophe PLAGNIOL-VILLARD ` (3 preceding siblings ...) 2012-01-03 5:00 ` [PATCH 5/6] ARM: add ARM_EXCEPTION_VECTOR6 options Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 ` Jean-Christophe PLAGNIOL-VILLARD 4 siblings, 0 replies; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-01-03 5:00 UTC (permalink / raw) To: barebox to pass the bare_init or barebox size via the vector 6 ARM_EXCEPTION_VECTOR6_BARE_INIT_SIZE bare_init size ARM_EXCEPTION_VECTOR6_SIZE barebox size need by at91 bootstrap (optional, binary size) or rom code to boot from nand as example (mandatory, code to load and run in sram) and the exception vector MUST be at the beginning of the binary for now use barebox size Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- arch/arm/mach-at91/Kconfig | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 0e56afb..0df8e68 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -49,34 +49,46 @@ config ARCH_AT91SAM9260 select CPU_ARM926T select HAS_MACB select AT91SAM9_RESET + select ARM_EXCEPTION_VECTOR6 + select ARM_EXCEPTION_VECTOR6_SIZE config ARCH_AT91SAM9261 bool "AT91SAM9261" select CPU_ARM926T select AT91SAM9_RESET + select ARM_EXCEPTION_VECTOR6 + select ARM_EXCEPTION_VECTOR6_SIZE config ARCH_AT91SAM9263 bool "AT91SAM9263" select CPU_ARM926T select HAS_MACB select AT91SAM9_RESET + select ARM_EXCEPTION_VECTOR6 + select ARM_EXCEPTION_VECTOR6_SIZE config ARCH_AT91SAM9G10 bool "AT91SAM9G10" select CPU_ARM926T select AT91SAM9_RESET + select ARM_EXCEPTION_VECTOR6 + select ARM_EXCEPTION_VECTOR6_SIZE config ARCH_AT91SAM9G20 bool "AT91SAM9G20" select CPU_ARM926T select HAS_MACB select AT91SAM9_RESET + select ARM_EXCEPTION_VECTOR6 + select ARM_EXCEPTION_VECTOR6_SIZE config ARCH_AT91SAM9G45 bool "AT91SAM9G45 or AT91SAM9M10" select CPU_ARM926T select HAS_MACB select AT91SAM9G45_RESET + select ARM_EXCEPTION_VECTOR6 + select ARM_EXCEPTION_VECTOR6_SIZE endchoice -- 1.7.7 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-01-04 10:52 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-01-03 5:00 [PATCH 1/6] defaultenv: source the init_board so we can keep exported env Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 2/6] defaultenv: enable progress for cp Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 3/6] poller_call: move from getc to is_timeout Jean-Christophe PLAGNIOL-VILLARD 2012-01-04 9:25 ` Sascha Hauer 2012-01-04 10:46 ` Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 4/6] arm: introduce barebox_bare_init_size to known the bare_init size Jean-Christophe PLAGNIOL-VILLARD 2012-01-03 5:00 ` [PATCH 5/6] ARM: add ARM_EXCEPTION_VECTOR6 options Jean-Christophe PLAGNIOL-VILLARD 2012-01-04 10:26 ` Sascha Hauer 2012-01-03 5:00 ` [PATCH 6/6] at91: use " Jean-Christophe PLAGNIOL-VILLARD
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox