From: Michal Sojka Date: Wed, 16 Mar 2011 15:48:07 +0000 (+0100) Subject: h8300: Port the newest bloader to h8eurobot board X-Git-Url: https://rtime.felk.cvut.cz/gitweb/sysless.git/commitdiff_plain/66b01e5d4fdb3dd9a2ccacbd95d23ed8bd53d233 h8300: Port the newest bloader to h8eurobot board --- diff --git a/board/h8300/h8eurobot/libs/bspbase/bsp0hwinit.c b/board/h8300/h8eurobot/libs/bspbase/bsp0hwinit.c index 3fb011e..5e91e12 100644 --- a/board/h8300/h8eurobot/libs/bspbase/bsp0hwinit.c +++ b/board/h8300/h8eurobot/libs/bspbase/bsp0hwinit.c @@ -31,6 +31,20 @@ static void deb_led_out(char val) DEB_LED_OFF(3); } +/* Provided by linker script */ +extern char __boot_fn_load; +extern char __boot_fn_start; +extern char __boot_fn_end; + +static void relocate_boot_fn() +{ + size_t reloc_size=&__boot_fn_end-&__boot_fn_start; + + if(&__boot_fn_load != &__boot_fn_start) { + memcpy(&__boot_fn_start,&__boot_fn_load,reloc_size); + } +} + void _setup_board() { //int i, j;// POE-100 @@ -56,6 +70,8 @@ void _setup_board() DEB_LED_INIT(); + relocate_boot_fn(); + /* show something on debug leds */ deb_led_out(0); FlWait(1*100000); diff --git a/board/h8300/h8eurobot/libs/h8canusb.ld-bload b/board/h8300/h8eurobot/libs/h8canusb.ld-bload index 95a6a50..07a495f 100644 --- a/board/h8300/h8eurobot/libs/h8canusb.ld-bload +++ b/board/h8300/h8eurobot/libs/h8canusb.ld-bload @@ -17,6 +17,7 @@ SECTIONS *(.strings) . = ALIGN( 4 ) ; ___boot_fn_start = ALIGN( 0x4 ) ; + ___boot_fn_load = ALIGN( 0x4 ) ; KEEP (*boot_fn.o(.text)) KEEP (*boot_fn.o(.rodata)) . = ALIGN( 4 ) ; diff --git a/board/h8300/h8eurobot/libs/h8canusb.ld-boot b/board/h8300/h8eurobot/libs/h8canusb.ld-boot index d3d2bfa..b50ec7d 100644 --- a/board/h8300/h8eurobot/libs/h8canusb.ld-boot +++ b/board/h8300/h8eurobot/libs/h8canusb.ld-boot @@ -24,29 +24,30 @@ SECTIONS . = ALIGN( 0x4 ) ; } > iram0 - .text : + .text.boot_fn ALIGN(4) : { - text_start = . ; - KEEP (crt0.o(.text)) - *(EXCLUDE_FILE(*boot_fn.o) .text) - *(EXCLUDE_FILE(*boot_fn.o) .rodata) - *(EXCLUDE_FILE(*boot_fn.o) .text .stub .text.* .gnu.linkonce.t.*) - *(EXCLUDE_FILE(*boot_fn.o) .rodata .rodata.* .gnu.linkonce.r.*) - *(EXCLUDE_FILE(*boot_fn.o) .strings) . = ALIGN( 0x4 ) ; - _etext = ALIGN( 0x4 ) ; - } > flashbb - .text.boot_fn : - { - . = ALIGN( 4 ) ; - ___boot_fn_start = ALIGN( 0x4 ) ; KEEP (boot_fn.o(.text)) KEEP (boot_fn.o(.rodata)) KEEP (boot_fn.o(.strings)) . = ALIGN( 4 ) ; - ___boot_fn_end = ALIGN( 0x4 ) ; } > iram0 AT>flashbb + ___boot_fn_start = ADDR(.text.boot_fn); + ___boot_fn_end = ADDR(.text.boot_fn) + SIZEOF(.text.boot_fn); + ___boot_fn_load = LOADADDR(.text.boot_fn); + .text : + { + text_start = . ; + KEEP (crt0.o(.text)) + *(.text) + *(.rodata) + *(.text .stub .text.* .gnu.linkonce.t.*) + *(.rodata .rodata.* .gnu.linkonce.r.*) + *(.strings) + . = ALIGN( 0x4 ) ; + _etext = ALIGN( 0x4 ) ; + } > flashbb .tors : { ___ctors = . ; diff --git a/board/h8300/h8eurobot/libs/h8canusb.ld-flash b/board/h8300/h8eurobot/libs/h8canusb.ld-flash index 414077f..5882d68 100644 --- a/board/h8300/h8eurobot/libs/h8canusb.ld-flash +++ b/board/h8300/h8eurobot/libs/h8canusb.ld-flash @@ -20,6 +20,7 @@ SECTIONS LONG( ABSOLUTE( _start ) + 0x5a000000 ) /* JMP _start */ /* KEEP (crt0.o(.text)) */ . = ALIGN( 4 ) ; + ___boot_fn_load = ALIGN( 0x4 ) ; ___boot_fn_start = ALIGN( 0x4 ) ; KEEP (*boot_fn.o(.text)) KEEP (*boot_fn.o(.rodata))