summaryrefslogtreecommitdiff
path: root/firmware/link
diff options
context:
space:
mode:
authorlaforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1>2006-09-22 21:29:57 +0000
committerlaforge <laforge@6dc7ffe9-61d6-0310-9af1-9938baff3ed1>2006-09-22 21:29:57 +0000
commit1c2b1d22016957bebe0a49c9069b85815f7cf936 (patch)
tree77046d2750dcb60ce46976f94027e65df67c502e /firmware/link
parent238c6c3c0ac40dcdef82c430fae52cad34ed5a10 (diff)
- we increase the DFU size from 4k to 16k size. This is mainly due to the
SAM7S128 and SAM7S256 being restricted to 16k lock region size. If we want to lock the bootloader, it has to be 16k aligned. This wastes a lot of memory, since a non-debug DFU implementation fits currently into less than 4k. But anyway, we have lots of flexibility for the future given that amount of space. - The DFU size change introduces also a change in dfu_api location to 0x103fd0 - Allow GETSTATE and GETSTATUS from runtime mode (optional in DFU spec) - Make dfu_status a .data.shared variable, since it is used from GETSTATUS which we already support in runtime mode - do some led switching while flashing via DFU - disable all non-usb/dbgu interrupts when switching to DFU mode - fix interrupt-storm problem when dbgu is used in DFU loader - add missing linker script for SAM7S128 git-svn-id: https://svn.openpcd.org:2342/trunk@218 6dc7ffe9-61d6-0310-9af1-9938baff3ed1
Diffstat (limited to 'firmware/link')
-rw-r--r--firmware/link/AT91SAM7S128-ROM-sam7dfu-app.ld94
-rw-r--r--firmware/link/AT91SAM7S128-ROM-sam7dfu-dfu.ld2
-rw-r--r--firmware/link/AT91SAM7S256-ROM-sam7dfu-app.ld8
-rw-r--r--firmware/link/AT91SAM7S256-ROM-sam7dfu-dfu.ld2
4 files changed, 100 insertions, 6 deletions
diff --git a/firmware/link/AT91SAM7S128-ROM-sam7dfu-app.ld b/firmware/link/AT91SAM7S128-ROM-sam7dfu-app.ld
new file mode 100644
index 0000000..0c6ac80
--- /dev/null
+++ b/firmware/link/AT91SAM7S128-ROM-sam7dfu-app.ld
@@ -0,0 +1,94 @@
+/* Memory Definitions */
+
+MEMORY
+{
+ FLASH (rx) : ORIGIN = 0x00104000, LENGTH = (0x00020000 - 0x4000)
+ DATA (rw) : ORIGIN = 0x00200028, LENGTH = (0x00008000 - 0x28)
+ STACK (rw) : ORIGIN = 0x00208000, LENGTH = 0x00000000
+}
+
+
+/* Section Definitions */
+
+SECTIONS
+{
+ . = 0x00000000;
+ /* first section is .text which is used for code */
+ .text 0x00104000: AT ( 0x00000000 ) {
+ src/start/Cstartup_app.o (.text)
+ * (.text)
+ * (.rodata*)
+ . = ALIGN(4);
+ } >FLASH
+
+ _etext = . ;
+ PROVIDE (etext = .);
+
+ /* 0x00200000 ... */
+ .data 0x00200028: AT ( ADDR(.text) + SIZEOF(.text) - ADDR(.text) ) {
+ _data = . ;
+ * (.data)
+ . = ALIGN(4);
+ } >DATA
+
+ _edata = . ;
+ PROVIDE (edata = .);
+
+ /* .bss section which is used for uninitialized data */
+ .bss : {
+ __bss_start = . ;
+ __bss_start__ = . ;
+ *(.bss)
+ *(COMMON)
+ } >DATA
+
+ . = ALIGN(4);
+ __bss_end__ = . ;
+ __bss_end__ = . ;
+
+ PROVIDE (main = .);
+
+ _end = . ;
+
+ . = ALIGN(4);
+ .int_data : {
+ *(.internal_ram_top)
+ } >STACK
+
+ PROVIDE (end = .);
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ /* DWARF debug sections.
+ Symbols in the DWARF debugging sections are relative to the beginning
+ of the section so we begin them at 0. */
+ /* DWARF 1 */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2 */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2 */
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+ /* SGI/MIPS DWARF 2 extensions */
+ .debug_weaknames 0 : { *(.debug_weaknames) }
+ .debug_funcnames 0 : { *(.debug_funcnames) }
+ .debug_typenames 0 : { *(.debug_typenames) }
+ .debug_varnames 0 : { *(.debug_varnames) }
+
+}
diff --git a/firmware/link/AT91SAM7S128-ROM-sam7dfu-dfu.ld b/firmware/link/AT91SAM7S128-ROM-sam7dfu-dfu.ld
index dfcfff1..1c5a15f 100644
--- a/firmware/link/AT91SAM7S128-ROM-sam7dfu-dfu.ld
+++ b/firmware/link/AT91SAM7S128-ROM-sam7dfu-dfu.ld
@@ -49,7 +49,7 @@ SECTIONS
/* dfu.functab addresses are valid as long as DFU is in flash, i.e.
* only while application calls those functions. Once executing in
* DFU mode, we are re-located to ram */
- .dfu.functab 0x00000fd0: AT ( ADDR(.dfu.functab) - ADDR(.text) ) {
+ .dfu.functab 0x00003fd0: AT ( ADDR(.dfu.functab) - ADDR(.text) ) {
*(.dfu.functab)
. = ALIGN(4096);
} >FLASH
diff --git a/firmware/link/AT91SAM7S256-ROM-sam7dfu-app.ld b/firmware/link/AT91SAM7S256-ROM-sam7dfu-app.ld
index 32bd787..8f60809 100644
--- a/firmware/link/AT91SAM7S256-ROM-sam7dfu-app.ld
+++ b/firmware/link/AT91SAM7S256-ROM-sam7dfu-app.ld
@@ -2,8 +2,8 @@
MEMORY
{
- FLASH (rx) : ORIGIN = 0x00101000, LENGTH = (0x00040000 - 0x1000)
- DATA (rw) : ORIGIN = 0x00200024, LENGTH = (0x00010000 - 0x24)
+ FLASH (rx) : ORIGIN = 0x00104000, LENGTH = (0x00040000 - 0x4000)
+ DATA (rw) : ORIGIN = 0x00200028, LENGTH = (0x00010000 - 0x28)
STACK (rw) : ORIGIN = 0x00210000, LENGTH = 0x00000000
}
@@ -14,7 +14,7 @@ SECTIONS
{
. = 0x00000000;
/* first section is .text which is used for code */
- .text 0x00101000: AT ( 0x00000000 ) {
+ .text 0x00104000: AT ( 0x00000000 ) {
src/start/Cstartup_app.o (.text)
* (.text)
* (.rodata*)
@@ -25,7 +25,7 @@ SECTIONS
PROVIDE (etext = .);
/* 0x00200000 ... */
- .data 0x00200024: AT ( ADDR(.text) + SIZEOF(.text) - ADDR(.text) ) {
+ .data 0x00200028: AT ( ADDR(.text) + SIZEOF(.text) - ADDR(.text) ) {
_data = . ;
* (.data)
. = ALIGN(4);
diff --git a/firmware/link/AT91SAM7S256-ROM-sam7dfu-dfu.ld b/firmware/link/AT91SAM7S256-ROM-sam7dfu-dfu.ld
index ca450a3..908f818 100644
--- a/firmware/link/AT91SAM7S256-ROM-sam7dfu-dfu.ld
+++ b/firmware/link/AT91SAM7S256-ROM-sam7dfu-dfu.ld
@@ -48,7 +48,7 @@ SECTIONS
/* dfu.functab addresses are valid as long as DFU is in flash, i.e.
* only while application calls those functions. Once executing in
* DFU mode, we are re-located to ram */
- .dfu.functab 0x00010fd0: AT ( ADDR(.dfu.functab) - ADDR(.text) ) {
+ .dfu.functab 0x00003fd0: AT ( ADDR(.dfu.functab) - ADDR(.text) ) {
*(.dfu.functab)
. = ALIGN(4096);
} >FLASH
personal git repositories of Harald Welte. Your mileage may vary