]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'master' of /home/wd/git/u-boot/custodians
authorWolfgang Denk <wd@denx.de>
Fri, 26 Nov 2010 20:52:52 +0000 (21:52 +0100)
committerWolfgang Denk <wd@denx.de>
Fri, 26 Nov 2010 20:52:52 +0000 (21:52 +0100)
46 files changed:
MAINTAINERS
arch/arm/cpu/arm1176/start.S
arch/arm/cpu/arm720t/start.S
arch/arm/cpu/arm720t/u-boot.lds
arch/arm/cpu/arm920t/start.S
arch/arm/cpu/arm920t/u-boot.lds
arch/arm/cpu/arm925t/start.S
arch/arm/cpu/arm925t/u-boot.lds
arch/arm/cpu/arm946es/start.S
arch/arm/cpu/arm946es/u-boot.lds
arch/arm/cpu/arm_intcm/start.S
arch/arm/cpu/arm_intcm/u-boot.lds
arch/arm/cpu/armv7/omap4/board.c
arch/arm/cpu/ixp/start.S
arch/arm/cpu/ixp/u-boot.lds
arch/arm/cpu/lh7a40x/start.S
arch/arm/cpu/lh7a40x/u-boot.lds
arch/arm/cpu/s3c44b0/start.S
arch/arm/cpu/s3c44b0/u-boot.lds
arch/arm/cpu/sa1100/start.S
arch/arm/cpu/sa1100/u-boot.lds
board/Seagate/dockstar/Makefile [new file with mode: 0644]
board/Seagate/dockstar/dockstar.c [new file with mode: 0644]
board/Seagate/dockstar/dockstar.h [new file with mode: 0644]
board/Seagate/dockstar/kwbimage.cfg [new file with mode: 0644]
board/davinci/da8xxevm/da850evm.c
board/pandora/config.mk [deleted file]
boards.cfg
doc/README.davinci
drivers/mmc/omap_hsmmc.c
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-ppc4xx.c
include/configs/da830evm.h
include/configs/da850evm.h
include/configs/davinci_dvevm.h
include/configs/davinci_sonata.h
include/configs/dockstar.h [new file with mode: 0644]
include/configs/omap3_beagle.h
include/configs/omap3_evm.h
include/configs/omap3_overo.h
include/configs/omap3_pandora.h
include/configs/omap3_sdp3430.h
include/configs/omap3_zoom1.h
include/configs/omap3_zoom2.h
include/configs/omap4_panda.h
include/configs/tnetv107x_evm.h

index 9258cb12732f23cfa8de54ea7d02a79f7c359be8..9bf52fa944a27549c2dce012dfc0f23ee3541916 100644 (file)
@@ -591,6 +591,10 @@ Po-Yu Chuang <ratbert@faraday-tech.com>
 
        a320evb         FA526 (ARM920T-like) (a320 SoC)
 
+Eric Cooper <ecc@cmu.edu>
+
+       dockstar        ARM926EJS (Kirkwood SoC)
+
 George G. Davis <gdavis@mvista.com>
 
        assabet         SA1100
index f04d2688814e238bf460f5a56bef9c11a4a9b24e..cd8f01637af621d292bedc0ee2ea1807ecf974fe 100644 (file)
@@ -123,34 +123,6 @@ _bss_start_ofs:
 _bss_end_ofs:
        .word _end - _start
 
-.globl _datarel_start_ofs
-_datarel_start_ofs:
-       .word __datarel_start - _start
-
-.globl _datarelrolocal_start_ofs
-_datarelrolocal_start_ofs:
-       .word __datarelrolocal_start - _start
-
-.globl _datarellocal_start_ofs
-_datarellocal_start_ofs:
-       .word __datarellocal_start - _start
-
-.globl _datarelro_start_ofs
-_datarelro_start_ofs:
-       .word __datarelro_start - _start
-
-.globl _rel_dyn_start_ofs
-_rel_dyn_start_ofs:
-       .word __rel_dyn_start - _start
-
-.globl _rel_dyn_end_ofs
-_rel_dyn_end_ofs:
-       .word __rel_dyn_end - _start
-
-.globl _dynsym_start_ofs
-_dynsym_start_ofs:
-       .word __dynsym_start - _start
-
 /* IRQ stack memory (calculated at run-time) + 8 bytes */
 .globl IRQ_STACK_START_IN
 IRQ_STACK_START_IN:
@@ -300,13 +272,13 @@ copy_loop:
        ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
        add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r0, [r2]        /* r0 <- location to fix up, IN FLASH! */
-       add     r0, r0, r9      /* r0 <- location to fix up in RAM */
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
        ldr     r1, [r2, #4]
        and     r8, r1, #0xff
-       cmp     r8, #23         /* relative fixup? */
+       cmp     r8, #23                 /* relative fixup? */
        beq     fixrel
-       cmp     r8, #2          /* absolute fixup? */
+       cmp     r8, #2                  /* absolute fixup? */
        beq     fixabs
        /* ignore unknown type of fixup */
        b       fixnext
@@ -315,7 +287,7 @@ fixabs:
        mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
        add     r1, r10, r1             /* r1 <- address of symbol in table */
        ldr     r1, [r1, #4]            /* r1 <- symbol value */
-       add     r1, r1, r9              /* r1 <- relocated sym addr */
+       add     r1, r9                  /* r1 <- relocated sym addr */
        b       fixnext
 fixrel:
        /* relative fix: increase location by offset */
@@ -323,7 +295,7 @@ fixrel:
        add     r1, r1, r9
 fixnext:
        str     r1, [r0]
-       add     r2, r2, #8      /* each rel.dyn entry is 8 bytes */
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
@@ -408,6 +380,13 @@ _board_init_r_ofs:
        .word board_init_r - _start
 #endif
 
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
+
 #ifdef CONFIG_ENABLE_MMU
 _mmu_table_base:
        .word mmu_table
index 8cd267b352a215bfcad139d75d40802066c599cc..46050dab6e9bca9f4b2435274b81725afdabb568 100644 (file)
@@ -81,14 +81,17 @@ _TEXT_BASE:
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
-.globl _bss_start
-_bss_start:
-       .word __bss_start
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
 
-.globl _bss_end
-_bss_end:
-       .word _end
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word _end - _start
 
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
@@ -107,30 +110,6 @@ FIQ_STACK_START:
 IRQ_STACK_START_IN:
        .word   0x0badc0de
 
-.globl _datarel_start
-_datarel_start:
-       .word __datarel_start
-
-.globl _datarelrolocal_start
-_datarelrolocal_start:
-       .word __datarelrolocal_start
-
-.globl _datarellocal_start
-_datarellocal_start:
-       .word __datarellocal_start
-
-.globl _datarelro_start
-_datarelro_start:
-       .word __datarelro_start
-
-.globl _got_start
-_got_start:
-       .word __got_start
-
-.globl _got_end
-_got_end:
-       .word __got_end
-
 /*
  * the actual reset code
  */
@@ -184,9 +163,8 @@ stack_setup:
 
        adr     r0, _start
        ldr     r2, _TEXT_BASE
-       ldr     r3, _bss_start
-       sub     r2, r3, r2              /* r2 <- size of armboot            */
-       add     r2, r0, r2              /* r2 <- source end address         */
+       ldr     r3, _bss_start_ofs
+       add     r2, r0, r3              /* r2 <- source end address         */
        cmp     r0, r6
        beq     clear_bss
 
@@ -197,35 +175,53 @@ copy_loop:
        blo     copy_loop
 
 #ifndef CONFIG_PRELOADER
-       /* fix got entries */
-       ldr     r1, _TEXT_BASE          /* Text base */
-       mov     r0, r7                  /* reloc addr */
-       ldr     r2, _got_start          /* addr in Flash */
-       ldr     r3, _got_end            /* addr in Flash */
-       sub     r3, r3, r1
-       add     r3, r3, r0
-       sub     r2, r2, r1
-       add     r2, r2, r0
-
+       /*
+        * fix .rel.dyn relocations
+        */
+       ldr     r0, _TEXT_BASE          /* r0 <- Text base */
+       sub     r9, r7, r0              /* r9 <- relocation offset */
+       ldr     r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
+       add     r10, r10, r0            /* r10 <- sym table in FLASH */
+       ldr     r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
+       add     r2, r2, r0              /* r2 <- rel dyn start in FLASH */
+       ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
+       add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r4, [r2]
-       sub     r4, r4, r1
-       add     r4, r4, r0
-       str     r4, [r2]
-       add     r2, r2, #4
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
+       ldr     r1, [r2, #4]
+       and     r8, r1, #0xff
+       cmp     r8, #23                 /* relative fixup? */
+       beq     fixrel
+       cmp     r8, #2                  /* absolute fixup? */
+       beq     fixabs
+       /* ignore unknown type of fixup */
+       b       fixnext
+fixabs:
+       /* absolute fix: set location to (offset) symbol value */
+       mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
+       add     r1, r10, r1             /* r1 <- address of symbol in table */
+       ldr     r1, [r1, #4]            /* r1 <- symbol value */
+       add     r1, r9                  /* r1 <- relocated sym addr */
+       b       fixnext
+fixrel:
+       /* relative fix: increase location by offset */
+       ldr     r1, [r0]
+       add     r1, r1, r9
+fixnext:
+       str     r1, [r0]
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
 
 clear_bss:
 #ifndef CONFIG_PRELOADER
-       ldr     r0, _bss_start
-       ldr     r1, _bss_end
+       ldr     r0, _bss_start_ofs
+       ldr     r1, _bss_end_ofs
        ldr     r3, _TEXT_BASE          /* Text base */
        mov     r4, r7                  /* reloc addr */
-       sub     r0, r0, r3
        add     r0, r0, r4
-       sub     r1, r1, r3
        add     r1, r1, r4
        mov     r2, #0x00000000         /* clear                            */
 
@@ -242,18 +238,25 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
  * We are done. Do not return, instead branch to second part of board
  * initialization, now running from RAM.
  */
-       ldr     r0, _TEXT_BASE
-       ldr     r2, _board_init_r
-       sub     r2, r2, r0
-       add     r2, r2, r7      /* position from board_init_r in RAM */
+       ldr     r0, _board_init_r_ofs
+       adr     r1, _start
+       add     lr, r0, r1
+       add     lr, lr, r9
        /* setup parameters for board_init_r */
        mov     r0, r5          /* gd_t */
        mov     r1, r7          /* dest_addr */
        /* jump to it ... */
-       mov     lr, r2
        mov     pc, lr
 
-_board_init_r: .word board_init_r
+_board_init_r_ofs:
+       .word board_init_r - _start
+
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
 
 /*
  *************************************************************************
index 4a0bc70c77090403103dca9add52f188f16a6beb..0686e423e243bfbb9939d9a57dd5310db6b82c55 100644 (file)
@@ -40,29 +40,38 @@ SECTIONS
 
        . = ALIGN(4);
        .data : {
-               *(.data)
-       __datarel_start = .;
-               *(.data.rel)
-       __datarelrolocal_start = .;
-               *(.data.rel.ro.local)
-       __datarellocal_start = .;
-               *(.data.rel.local)
-       __datarelro_start = .;
-               *(.data.rel.ro)
        }
 
-       __got_start = .;
        . = ALIGN(4);
-       .got : { *(.got) }
 
-       __got_end = .;
        . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
 
        . = ALIGN(4);
-       __bss_start = .;
-       .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
-       _end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               _end = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
 }
index d4edde797b7b24327f1db896b374e59eddf071d5..01edb9bdcbeaf04336a0a0c477c7da986f39221d 100644 (file)
@@ -77,14 +77,17 @@ _TEXT_BASE:
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
-.globl _bss_start
-_bss_start:
-       .word __bss_start
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
 
-.globl _bss_end
-_bss_end:
-       .word _end
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word _end - _start
 
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
@@ -103,30 +106,6 @@ FIQ_STACK_START:
 IRQ_STACK_START_IN:
        .word   0x0badc0de
 
-.globl _datarel_start
-_datarel_start:
-       .word __datarel_start
-
-.globl _datarelrolocal_start
-_datarelrolocal_start:
-       .word __datarelrolocal_start
-
-.globl _datarellocal_start
-_datarellocal_start:
-       .word __datarellocal_start
-
-.globl _datarelro_start
-_datarelro_start:
-       .word __datarelro_start
-
-.globl _got_start
-_got_start:
-       .word __got_start
-
-.globl _got_end
-_got_end:
-       .word __got_end
-
 /*
  * the actual start code
  */
@@ -230,9 +209,8 @@ stack_setup:
 
        adr     r0, _start
        ldr     r2, _TEXT_BASE
-       ldr     r3, _bss_start
-       sub     r2, r3, r2              /* r2 <- size of armboot            */
-       add     r2, r0, r2              /* r2 <- source end address         */
+       ldr     r3, _bss_start_ofs
+       add     r2, r0, r3              /* r2 <- source end address         */
        cmp     r0, r6
        beq     clear_bss
 
@@ -243,35 +221,53 @@ copy_loop:
        blo     copy_loop
 
 #ifndef CONFIG_PRELOADER
-       /* fix got entries */
-       ldr     r1, _TEXT_BASE          /* Text base */
-       mov     r0, r7                  /* reloc addr */
-       ldr     r2, _got_start          /* addr in Flash */
-       ldr     r3, _got_end            /* addr in Flash */
-       sub     r3, r3, r1
-       add     r3, r3, r0
-       sub     r2, r2, r1
-       add     r2, r2, r0
-
+       /*
+        * fix .rel.dyn relocations
+        */
+       ldr     r0, _TEXT_BASE          /* r0 <- Text base */
+       sub     r9, r7, r0              /* r9 <- relocation offset */
+       ldr     r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
+       add     r10, r10, r0            /* r10 <- sym table in FLASH */
+       ldr     r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
+       add     r2, r2, r0              /* r2 <- rel dyn start in FLASH */
+       ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
+       add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r4, [r2]
-       sub     r4, r4, r1
-       add     r4, r4, r0
-       str     r4, [r2]
-       add     r2, r2, #4
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
+       ldr     r1, [r2, #4]
+       and     r8, r1, #0xff
+       cmp     r8, #23                 /* relative fixup? */
+       beq     fixrel
+       cmp     r8, #2                  /* absolute fixup? */
+       beq     fixabs
+       /* ignore unknown type of fixup */
+       b       fixnext
+fixabs:
+       /* absolute fix: set location to (offset) symbol value */
+       mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
+       add     r1, r10, r1             /* r1 <- address of symbol in table */
+       ldr     r1, [r1, #4]            /* r1 <- symbol value */
+       add     r1, r9                  /* r1 <- relocated sym addr */
+       b       fixnext
+fixrel:
+       /* relative fix: increase location by offset */
+       ldr     r1, [r0]
+       add     r1, r1, r9
+fixnext:
+       str     r1, [r0]
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
 
 clear_bss:
 #ifndef CONFIG_PRELOADER
-       ldr     r0, _bss_start
-       ldr     r1, _bss_end
+       ldr     r0, _bss_start_ofs
+       ldr     r1, _bss_end_ofs
        ldr     r3, _TEXT_BASE          /* Text base */
        mov     r4, r7                  /* reloc addr */
-       sub     r0, r0, r3
        add     r0, r0, r4
-       sub     r1, r1, r3
        add     r1, r1, r4
        mov     r2, #0x00000000         /* clear                            */
 
@@ -289,24 +285,33 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
  * initialization, now running from RAM.
  */
 #ifdef CONFIG_NAND_SPL
-       ldr     pc, _nand_boot
+       ldr     r0, _nand_boot_ofs
+       mov     pc, r0
 
-_nand_boot: .word nand_boot
+_nand_boot_ofs:
+       .word nand_boot
 #else
-       ldr     r0, _TEXT_BASE
-       ldr     r2, _board_init_r
-       sub     r2, r2, r0
-       add     r2, r2, r7      /* position from board_init_r in RAM */
+       ldr     r0, _board_init_r_ofs
+       adr     r1, _start
+       add     lr, r0, r1
+       add     lr, lr, r9
        /* setup parameters for board_init_r */
        mov     r0, r5          /* gd_t */
        mov     r1, r7          /* dest_addr */
        /* jump to it ... */
-       mov     lr, r2
        mov     pc, lr
 
-_board_init_r: .word board_init_r
+_board_init_r_ofs:
+       .word board_init_r - _start
 #endif
 
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
+
 /*
  *************************************************************************
  *
index 69854347952f11a6bed118d61bc6414b28ab7f2b..a6f8b56a3ab106097e960909529842f87c608701 100644 (file)
@@ -49,28 +49,38 @@ SECTIONS
        . = ALIGN(4);
        .data : {
                *(.data)
-       __datarel_start = .;
-               *(.data.rel)
-       __datarelrolocal_start = .;
-               *(.data.rel.ro.local)
-       __datarellocal_start = .;
-               *(.data.rel.local)
-       __datarelro_start = .;
-               *(.data.rel.ro)
        }
 
-       __got_start = .;
        . = ALIGN(4);
-       .got : { *(.got) }
 
-       __got_end = .;
        . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
 
        . = ALIGN(4);
-       __bss_start = .;
-       .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
-       _end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               _end = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
 }
index 51229c61544383f58a1e84295f2f6971e5fc202f..ce590a703823fc3e64e8c2658f7dc5aaf7f72552 100644 (file)
@@ -87,14 +87,17 @@ _TEXT_BASE:
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
-.globl _bss_start
-_bss_start:
-       .word __bss_start
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
 
-.globl _bss_end
-_bss_end:
-       .word _end
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word _end - _start
 
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
@@ -113,30 +116,6 @@ FIQ_STACK_START:
 IRQ_STACK_START_IN:
        .word   0x0badc0de
 
-.globl _datarel_start
-_datarel_start:
-       .word __datarel_start
-
-.globl _datarelrolocal_start
-_datarelrolocal_start:
-       .word __datarelrolocal_start
-
-.globl _datarellocal_start
-_datarellocal_start:
-       .word __datarellocal_start
-
-.globl _datarelro_start
-_datarelro_start:
-       .word __datarelro_start
-
-.globl _got_start
-_got_start:
-       .word __got_start
-
-.globl _got_end
-_got_end:
-       .word __got_end
-
 /*
  * the actual reset code
  */
@@ -221,9 +200,8 @@ stack_setup:
 
        adr     r0, _start
        ldr     r2, _TEXT_BASE
-       ldr     r3, _bss_start
-       sub     r2, r3, r2              /* r2 <- size of armboot            */
-       add     r2, r0, r2              /* r2 <- source end address         */
+       ldr     r3, _bss_start_ofs
+       add     r2, r0, r3              /* r2 <- source end address         */
        cmp     r0, r6
        beq     clear_bss
 
@@ -234,35 +212,53 @@ copy_loop:
        blo     copy_loop
 
 #ifndef CONFIG_PRELOADER
-       /* fix got entries */
-       ldr     r1, _TEXT_BASE          /* Text base */
-       mov     r0, r7                  /* reloc addr */
-       ldr     r2, _got_start          /* addr in Flash */
-       ldr     r3, _got_end            /* addr in Flash */
-       sub     r3, r3, r1
-       add     r3, r3, r0
-       sub     r2, r2, r1
-       add     r2, r2, r0
-
+       /*
+        * fix .rel.dyn relocations
+        */
+       ldr     r0, _TEXT_BASE          /* r0 <- Text base */
+       sub     r9, r7, r0              /* r9 <- relocation offset */
+       ldr     r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
+       add     r10, r10, r0            /* r10 <- sym table in FLASH */
+       ldr     r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
+       add     r2, r2, r0              /* r2 <- rel dyn start in FLASH */
+       ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
+       add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r4, [r2]
-       sub     r4, r4, r1
-       add     r4, r4, r0
-       str     r4, [r2]
-       add     r2, r2, #4
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
+       ldr     r1, [r2, #4]
+       and     r8, r1, #0xff
+       cmp     r8, #23                 /* relative fixup? */
+       beq     fixrel
+       cmp     r8, #2                  /* absolute fixup? */
+       beq     fixabs
+       /* ignore unknown type of fixup */
+       b       fixnext
+fixabs:
+       /* absolute fix: set location to (offset) symbol value */
+       mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
+       add     r1, r10, r1             /* r1 <- address of symbol in table */
+       ldr     r1, [r1, #4]            /* r1 <- symbol value */
+       add     r1, r9                  /* r1 <- relocated sym addr */
+       b       fixnext
+fixrel:
+       /* relative fix: increase location by offset */
+       ldr     r1, [r0]
+       add     r1, r1, r9
+fixnext:
+       str     r1, [r0]
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
 
 clear_bss:
 #ifndef CONFIG_PRELOADER
-       ldr     r0, _bss_start
-       ldr     r1, _bss_end
+       ldr     r0, _bss_start_ofs
+       ldr     r1, _bss_end_ofs
        ldr     r3, _TEXT_BASE          /* Text base */
        mov     r4, r7                  /* reloc addr */
-       sub     r0, r0, r3
        add     r0, r0, r4
-       sub     r1, r1, r3
        add     r1, r1, r4
        mov     r2, #0x00000000         /* clear                            */
 
@@ -271,6 +267,8 @@ clbss_l:str r2, [r0]                /* clear loop...                    */
        cmp     r0, r1
        bne     clbss_l
 
+       bl coloured_LED_init
+       bl red_LED_on
 #endif
 
 /*
@@ -278,24 +276,33 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
  * initialization, now running from RAM.
  */
 #ifdef CONFIG_NAND_SPL
-       ldr     pc, _nand_boot
+       ldr     r0, _nand_boot_ofs
+       mov     pc, r0
 
-_nand_boot: .word nand_boot
+_nand_boot_ofs:
+       .word nand_boot
 #else
-       ldr     r0, _TEXT_BASE
-       ldr     r2, _board_init_r
-       sub     r2, r2, r0
-       add     r2, r2, r7      /* position from board_init_r in RAM */
+       ldr     r0, _board_init_r_ofs
+       adr     r1, _start
+       add     lr, r0, r1
+       add     lr, lr, r9
        /* setup parameters for board_init_r */
        mov     r0, r5          /* gd_t */
        mov     r1, r7          /* dest_addr */
        /* jump to it ... */
-       mov     lr, r2
        mov     pc, lr
 
-_board_init_r: .word board_init_r
+_board_init_r_ofs:
+       .word board_init_r - _start
 #endif
 
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
+
 /*
  *************************************************************************
  *
index 1c4e9bcfb5055f9d42e010ca057b8b6f2a1ee857..7b53edb9be10e7c60bffec36cbf2a785e6b89ad0 100644 (file)
@@ -44,28 +44,38 @@ SECTIONS
        . = ALIGN(4);
        .data : {
                *(.data)
-       __datarel_start = .;
-               *(.data.rel)
-       __datarelrolocal_start = .;
-               *(.data.rel.ro.local)
-       __datarellocal_start = .;
-               *(.data.rel.local)
-       __datarelro_start = .;
-               *(.data.rel.ro)
        }
 
-       __got_start = .;
        . = ALIGN(4);
-       .got : { *(.got) }
 
-       __got_end = .;
        . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
 
        . = ALIGN(4);
-       __bss_start = .;
-       .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
-       _end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               _end = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
 }
index cad43ba0485631762b8edafa9cfafd3c2a8349ad..f4950f70729a832d58df9150dc0134a8f2678e54 100644 (file)
@@ -10,6 +10,7 @@
  *  Copyright (c) 2002 Gary Jennejohn <garyj@denx.de>
  *  Copyright (c) 2003 Richard Woodruff <r-woodruff2@ti.com>
  *  Copyright (c) 2003 Kshitij <kshitij@ti.com>
+ *  Copyright (c) 2010 Albert Aribaud <albert.aribaud@free.fr>
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -71,6 +72,7 @@ _fiq:
 
        .balignl 16,0xdeadbeef
 
+_vectors_end:
 
 /*
  *************************************************************************
@@ -91,14 +93,17 @@ _TEXT_BASE:
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
-.globl _bss_start
-_bss_start:
-       .word __bss_start
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
 
-.globl _bss_end
-_bss_end:
-       .word _end
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word _end - _start
 
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
@@ -117,30 +122,6 @@ FIQ_STACK_START:
 IRQ_STACK_START_IN:
        .word   0x0badc0de
 
-.globl _datarel_start
-_datarel_start:
-       .word __datarel_start
-
-.globl _datarelrolocal_start
-_datarelrolocal_start:
-       .word __datarelrolocal_start
-
-.globl _datarellocal_start
-_datarellocal_start:
-       .word __datarellocal_start
-
-.globl _datarelro_start
-_datarelro_start:
-       .word __datarelro_start
-
-.globl _got_start
-_got_start:
-       .word __got_start
-
-.globl _got_end
-_got_end:
-       .word __got_end
-
 /*
  * the actual reset code
  */
@@ -190,9 +171,8 @@ stack_setup:
 
        adr     r0, _start
        ldr     r2, _TEXT_BASE
-       ldr     r3, _bss_start
-       sub     r2, r3, r2              /* r2 <- size of armboot            */
-       add     r2, r0, r2              /* r2 <- source end address         */
+       ldr     r3, _bss_start_ofs
+       add     r2, r0, r3              /* r2 <- source end address         */
        cmp     r0, r6
        beq     clear_bss
 
@@ -203,42 +183,60 @@ copy_loop:
        blo     copy_loop
 
 #ifndef CONFIG_PRELOADER
-       /* fix got entries */
-       ldr     r1, _TEXT_BASE          /* Text base */
-       mov     r0, r7                  /* reloc addr */
-       ldr     r2, _got_start          /* addr in Flash */
-       ldr     r3, _got_end            /* addr in Flash */
-       sub     r3, r3, r1
-       add     r3, r3, r0
-       sub     r2, r2, r1
-       add     r2, r2, r0
-
+       /*
+        * fix .rel.dyn relocations
+        */
+       ldr     r0, _TEXT_BASE          /* r0 <- Text base */
+       sub     r9, r7, r0              /* r9 <- relocation offset */
+       ldr     r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
+       add     r10, r10, r0            /* r10 <- sym table in FLASH */
+       ldr     r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
+       add     r2, r2, r0              /* r2 <- rel dyn start in FLASH */
+       ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
+       add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r4, [r2]
-       sub     r4, r4, r1
-       add     r4, r4, r0
-       str     r4, [r2]
-       add     r2, r2, #4
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
+       ldr     r1, [r2, #4]
+       and     r8, r1, #0xff
+       cmp     r8, #23                 /* relative fixup? */
+       beq     fixrel
+       cmp     r8, #2                  /* absolute fixup? */
+       beq     fixabs
+       /* ignore unknown type of fixup */
+       b       fixnext
+fixabs:
+       /* absolute fix: set location to (offset) symbol value */
+       mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
+       add     r1, r10, r1             /* r1 <- address of symbol in table */
+       ldr     r1, [r1, #4]            /* r1 <- symbol value */
+       add     r1, r9                  /* r1 <- relocated sym addr */
+       b       fixnext
+fixrel:
+       /* relative fix: increase location by offset */
+       ldr     r1, [r0]
+       add     r1, r1, r9
+fixnext:
+       str     r1, [r0]
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
 
 clear_bss:
 #ifndef CONFIG_PRELOADER
-       ldr     r0, _bss_start
-       ldr     r1, _bss_end
+       ldr     r0, _bss_start_ofs
+       ldr     r1, _bss_end_ofs
        ldr     r3, _TEXT_BASE          /* Text base */
        mov     r4, r7                  /* reloc addr */
-       sub     r0, r0, r3
        add     r0, r0, r4
-       sub     r1, r1, r3
        add     r1, r1, r4
        mov     r2, #0x00000000         /* clear                            */
 
 clbss_l:str    r2, [r0]                /* clear loop...                    */
        add     r0, r0, #4
        cmp     r0, r1
-       bne     clbss_l
+       blo     clbss_l
 #endif
 
 /*
@@ -250,20 +248,27 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
 
 _nand_boot: .word nand_boot
 #else
-       ldr     r0, _TEXT_BASE
-       ldr     r2, _board_init_r
-       sub     r2, r2, r0
-       add     r2, r2, r7      /* position from board_init_r in RAM */
+       ldr     r0, _board_init_r_ofs
+       adr     r1, _start
+       add     lr, r0, r1
+       add     lr, lr, r9
        /* setup parameters for board_init_r */
        mov     r0, r5          /* gd_t */
        mov     r1, r7          /* dest_addr */
        /* jump to it ... */
-       mov     lr, r2
        mov     pc, lr
 
-_board_init_r: .word board_init_r
+_board_init_r_ofs:
+       .word board_init_r - _start
 #endif
 
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
+
 /*
  *************************************************************************
  *
index 65359630933f597a2cfb6f1cf8e17ddc7b47f3d8..eb91979711c036fcdd4ddca1d69592061c3d83b2 100644 (file)
@@ -41,28 +41,38 @@ SECTIONS
        . = ALIGN(4);
        .data : {
                *(.data)
-       __datarel_start = .;
-               *(.data.rel)
-       __datarelrolocal_start = .;
-               *(.data.rel.ro.local)
-       __datarellocal_start = .;
-               *(.data.rel.local)
-       __datarelro_start = .;
-               *(.data.rel.ro)
        }
 
-       __got_start = .;
        . = ALIGN(4);
-       .got : { *(.got) }
 
-       __got_end = .;
        . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
 
        . = ALIGN(4);
-       __bss_start = .;
-       .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
-       _end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               _end = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
 }
index 957ca34766c333baaf943c8018fa552ce64ce97d..fcaba30f586b6896b472eeff5ab4b4f3e2592010 100644 (file)
@@ -89,14 +89,17 @@ _TEXT_BASE:
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
-.globl _bss_start
-_bss_start:
-       .word __bss_start
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
 
-.globl _bss_end
-_bss_end:
-       .word _end
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word _end - _start
 
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
@@ -115,30 +118,6 @@ FIQ_STACK_START:
 IRQ_STACK_START_IN:
        .word   0x0badc0de
 
-.globl _datarel_start
-_datarel_start:
-       .word __datarel_start
-
-.globl _datarelrolocal_start
-_datarelrolocal_start:
-       .word __datarelrolocal_start
-
-.globl _datarellocal_start
-_datarellocal_start:
-       .word __datarellocal_start
-
-.globl _datarelro_start
-_datarelro_start:
-       .word __datarelro_start
-
-.globl _got_start
-_got_start:
-       .word __got_start
-
-.globl _got_end
-_got_end:
-       .word __got_end
-
 /*
  * the actual reset code
  */
@@ -188,9 +167,8 @@ stack_setup:
 
        adr     r0, _start
        ldr     r2, _TEXT_BASE
-       ldr     r3, _bss_start
-       sub     r2, r3, r2              /* r2 <- size of armboot            */
-       add     r2, r0, r2              /* r2 <- source end address         */
+       ldr     r3, _bss_start_ofs
+       add     r2, r0, r3              /* r2 <- source end address         */
        cmp     r0, r6
        beq     clear_bss
 
@@ -201,35 +179,53 @@ copy_loop:
        blo     copy_loop
 
 #ifndef CONFIG_PRELOADER
-       /* fix got entries */
-       ldr     r1, _TEXT_BASE          /* Text base */
-       mov     r0, r7                  /* reloc addr */
-       ldr     r2, _got_start          /* addr in Flash */
-       ldr     r3, _got_end            /* addr in Flash */
-       sub     r3, r3, r1
-       add     r3, r3, r0
-       sub     r2, r2, r1
-       add     r2, r2, r0
-
+       /*
+        * fix .rel.dyn relocations
+        */
+       ldr     r0, _TEXT_BASE          /* r0 <- Text base */
+       sub     r9, r7, r0              /* r9 <- relocation offset */
+       ldr     r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
+       add     r10, r10, r0            /* r10 <- sym table in FLASH */
+       ldr     r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
+       add     r2, r2, r0              /* r2 <- rel dyn start in FLASH */
+       ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
+       add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r4, [r2]
-       sub     r4, r4, r1
-       add     r4, r4, r0
-       str     r4, [r2]
-       add     r2, r2, #4
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
+       ldr     r1, [r2, #4]
+       and     r8, r1, #0xff
+       cmp     r8, #23                 /* relative fixup? */
+       beq     fixrel
+       cmp     r8, #2                  /* absolute fixup? */
+       beq     fixabs
+       /* ignore unknown type of fixup */
+       b       fixnext
+fixabs:
+       /* absolute fix: set location to (offset) symbol value */
+       mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
+       add     r1, r10, r1             /* r1 <- address of symbol in table */
+       ldr     r1, [r1, #4]            /* r1 <- symbol value */
+       add     r1, r9                  /* r1 <- relocated sym addr */
+       b       fixnext
+fixrel:
+       /* relative fix: increase location by offset */
+       ldr     r1, [r0]
+       add     r1, r1, r9
+fixnext:
+       str     r1, [r0]
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
 
 clear_bss:
 #ifndef CONFIG_PRELOADER
-       ldr     r0, _bss_start
-       ldr     r1, _bss_end
+       ldr     r0, _bss_start_ofs
+       ldr     r1, _bss_end_ofs
        ldr     r3, _TEXT_BASE          /* Text base */
        mov     r4, r7                  /* reloc addr */
-       sub     r0, r0, r3
        add     r0, r0, r4
-       sub     r1, r1, r3
        add     r1, r1, r4
        mov     r2, #0x00000000         /* clear                            */
 
@@ -246,18 +242,33 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
  * We are done. Do not return, instead branch to second part of board
  * initialization, now running from RAM.
  */
-       ldr     r0, _TEXT_BASE
-       ldr     r2, _board_init_r
-       sub     r2, r2, r0
-       add     r2, r2, r7      /* position from board_init_r in RAM */
+#ifdef CONFIG_NAND_SPL
+       ldr     r0, _nand_boot_ofs
+       mov     pc, r0
+
+_nand_boot_ofs:
+       .word nand_boot
+#else
+       ldr     r0, _board_init_r_ofs
+       adr     r1, _start
+       add     lr, r0, r1
+       add     lr, lr, r9
        /* setup parameters for board_init_r */
        mov     r0, r5          /* gd_t */
        mov     r1, r7          /* dest_addr */
        /* jump to it ... */
-       mov     lr, r2
        mov     pc, lr
 
-_board_init_r: .word board_init_r
+_board_init_r_ofs:
+       .word board_init_r - _start
+#endif
+
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
 
 /*
  *************************************************************************
index 242c7ece020b5f4d383a7707f55721f8bcf4eeec..3b5c18d72a17753ad0599187d7e28243846b745a 100644 (file)
@@ -41,28 +41,38 @@ SECTIONS
        . = ALIGN(4);
        .data : {
                *(.data)
-       __datarel_start = .;
-               *(.data.rel)
-       __datarelrolocal_start = .;
-               *(.data.rel.ro.local)
-       __datarellocal_start = .;
-               *(.data.rel.local)
-       __datarelro_start = .;
-               *(.data.rel.ro)
        }
 
-       __got_start = .;
        . = ALIGN(4);
-       .got : { *(.got) }
 
-       __got_end = .;
        . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
 
        . = ALIGN(4);
-       __bss_start = .;
-       .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
-       _end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               _end = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
 }
index e7651d2dd5b5007aa27c95677d8b070b71b5038d..fcd29a73e0e51dc7ffaf64896d770073a20782e0 100644 (file)
@@ -32,6 +32,8 @@
 #include <asm/arch/sys_proto.h>
 #include <asm/sizes.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 /*
  * Routine: s_init
  * Description: Does early system init of muxing and clocks.
@@ -100,7 +102,6 @@ u32 sdram_size(void)
  */
 int dram_init(void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
 
        gd->ram_size = sdram_size();
 
index 8d1aebc7199892cbdb53af18a2f4e98fe3c69f33..d1ab19bf5da25cb4904c5de6a33786bd760f8b4b 100644 (file)
@@ -100,14 +100,17 @@ _TEXT_BASE:
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
-.globl _bss_start
-_bss_start:
-       .word __bss_start
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
 
-.globl _bss_end
-_bss_end:
-       .word _end
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word _end - _start
 
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
@@ -126,30 +129,6 @@ FIQ_STACK_START:
 IRQ_STACK_START_IN:
        .word   0x0badc0de
 
-.globl _datarel_start
-_datarel_start:
-       .word __datarel_start
-
-.globl _datarelrolocal_start
-_datarelrolocal_start:
-       .word __datarelrolocal_start
-
-.globl _datarellocal_start
-_datarellocal_start:
-       .word __datarellocal_start
-
-.globl _datarelro_start
-_datarelro_start:
-       .word __datarelro_start
-
-.globl _got_start
-_got_start:
-       .word __got_start
-
-.globl _got_end
-_got_end:
-       .word __got_end
-
 /*
  * the actual reset code
  */
@@ -314,9 +293,8 @@ stack_setup:
 
        adr     r0, _start
        ldr     r2, _TEXT_BASE
-       ldr     r3, _bss_start
-       sub     r2, r3, r2              /* r2 <- size of armboot            */
-       add     r2, r0, r2              /* r2 <- source end address         */
+       ldr     r3, _bss_start_ofs
+       add     r2, r0, r3              /* r2 <- source end address         */
        cmp     r0, r6
        beq     clear_bss
 
@@ -327,35 +305,53 @@ copy_loop:
        blo     copy_loop
 
 #ifndef CONFIG_PRELOADER
-       /* fix got entries */
-       ldr     r1, _TEXT_BASE          /* Text base */
-       mov     r0, r7                  /* reloc addr */
-       ldr     r2, _got_start          /* addr in Flash */
-       ldr     r3, _got_end            /* addr in Flash */
-       sub     r3, r3, r1
-       add     r3, r3, r0
-       sub     r2, r2, r1
-       add     r2, r2, r0
-
+       /*
+        * fix .rel.dyn relocations
+        */
+       ldr     r0, _TEXT_BASE          /* r0 <- Text base */
+       sub     r9, r7, r0              /* r9 <- relocation offset */
+       ldr     r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
+       add     r10, r10, r0            /* r10 <- sym table in FLASH */
+       ldr     r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
+       add     r2, r2, r0              /* r2 <- rel dyn start in FLASH */
+       ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
+       add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r4, [r2]
-       sub     r4, r4, r1
-       add     r4, r4, r0
-       str     r4, [r2]
-       add     r2, r2, #4
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
+       ldr     r1, [r2, #4]
+       and     r8, r1, #0xff
+       cmp     r8, #23                 /* relative fixup? */
+       beq     fixrel
+       cmp     r8, #2                  /* absolute fixup? */
+       beq     fixabs
+       /* ignore unknown type of fixup */
+       b       fixnext
+fixabs:
+       /* absolute fix: set location to (offset) symbol value */
+       mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
+       add     r1, r10, r1             /* r1 <- address of symbol in table */
+       ldr     r1, [r1, #4]            /* r1 <- symbol value */
+       add     r1, r9                  /* r1 <- relocated sym addr */
+       b       fixnext
+fixrel:
+       /* relative fix: increase location by offset */
+       ldr     r1, [r0]
+       add     r1, r1, r9
+fixnext:
+       str     r1, [r0]
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
 
 clear_bss:
 #ifndef CONFIG_PRELOADER
-       ldr     r0, _bss_start
-       ldr     r1, _bss_end
+       ldr     r0, _bss_start_ofs
+       ldr     r1, _bss_end_ofs
        ldr     r3, _TEXT_BASE          /* Text base */
        mov     r4, r7                  /* reloc addr */
-       sub     r0, r0, r3
        add     r0, r0, r4
-       sub     r1, r1, r3
        add     r1, r1, r4
        mov     r2, #0x00000000         /* clear                            */
 
@@ -372,19 +368,25 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
  * We are done. Do not return, instead branch to second part of board
  * initialization, now running from RAM.
  */
-       ldr     r0, _TEXT_BASE
-       ldr     r2, _board_init_r
-       sub     r2, r2, r0
-       add     r2, r2, r7      /* position from board_init_r in RAM */
+       ldr     r0, _board_init_r_ofs
+       adr     r1, _start
+       add     lr, r0, r1
+       add     lr, lr, r9
        /* setup parameters for board_init_r */
        mov     r0, r5          /* gd_t */
        mov     r1, r7          /* dest_addr */
        /* jump to it ... */
-       mov     lr, r2
        mov     pc, lr
 
-_board_init_r: .word board_init_r
+_board_init_r_ofs:
+       .word board_init_r - _start
 
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
 
 /****************************************************************************/
 /*                                                                         */
index f3d9dc51487ba7deb10def6ce5636cb2303ab1af..a55eb8a509b48f5802a71774d80abc1497278356 100644 (file)
@@ -41,28 +41,38 @@ SECTIONS
        . = ALIGN(4);
        .data : {
                *(.data)
-       __datarel_start = .;
-               *(.data.rel)
-       __datarelrolocal_start = .;
-               *(.data.rel.ro.local)
-       __datarellocal_start = .;
-               *(.data.rel.local)
-       __datarelro_start = .;
-               *(.data.rel.ro)
        }
 
-       __got_start = .;
        . = ALIGN(4);
-       .got : { *(.got) }
 
-       __got_end = .;
        . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
 
        . = ALIGN(4);
-       __bss_start = .;
-       .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
-       _end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               _end = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
 }
index fd8a40b8aa4a2aea201be7cf6d1d4c2d07658164..5cf477b1a36459b614ffe405743ca3b685ea6150 100644 (file)
@@ -77,14 +77,17 @@ _TEXT_BASE:
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
-.globl _bss_start
-_bss_start:
-       .word __bss_start
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
 
-.globl _bss_end
-_bss_end:
-       .word _end
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word _end - _start
 
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
@@ -103,30 +106,6 @@ FIQ_STACK_START:
 IRQ_STACK_START_IN:
        .word   0x0badc0de
 
-.globl _datarel_start
-_datarel_start:
-       .word __datarel_start
-
-.globl _datarelrolocal_start
-_datarelrolocal_start:
-       .word __datarelrolocal_start
-
-.globl _datarellocal_start
-_datarellocal_start:
-       .word __datarellocal_start
-
-.globl _datarelro_start
-_datarelro_start:
-       .word __datarelro_start
-
-.globl _got_start
-_got_start:
-       .word __got_start
-
-.globl _got_end
-_got_end:
-       .word __got_end
-
 /*
  * the actual reset code
  */
@@ -201,9 +180,8 @@ stack_setup:
 
        adr     r0, _start
        ldr     r2, _TEXT_BASE
-       ldr     r3, _bss_start
-       sub     r2, r3, r2              /* r2 <- size of armboot            */
-       add     r2, r0, r2              /* r2 <- source end address         */
+       ldr     r3, _bss_start_ofs
+       add     r2, r0, r3              /* r2 <- source end address         */
        cmp     r0, r6
        beq     clear_bss
 
@@ -214,35 +192,53 @@ copy_loop:
        blo     copy_loop
 
 #ifndef CONFIG_PRELOADER
-       /* fix got entries */
-       ldr     r1, _TEXT_BASE          /* Text base */
-       mov     r0, r7                  /* reloc addr */
-       ldr     r2, _got_start          /* addr in Flash */
-       ldr     r3, _got_end            /* addr in Flash */
-       sub     r3, r3, r1
-       add     r3, r3, r0
-       sub     r2, r2, r1
-       add     r2, r2, r0
-
+       /*
+        * fix .rel.dyn relocations
+        */
+       ldr     r0, _TEXT_BASE          /* r0 <- Text base */
+       sub     r9, r7, r0              /* r9 <- relocation offset */
+       ldr     r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
+       add     r10, r10, r0            /* r10 <- sym table in FLASH */
+       ldr     r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
+       add     r2, r2, r0              /* r2 <- rel dyn start in FLASH */
+       ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
+       add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r4, [r2]
-       sub     r4, r4, r1
-       add     r4, r4, r0
-       str     r4, [r2]
-       add     r2, r2, #4
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
+       ldr     r1, [r2, #4]
+       and     r8, r1, #0xff
+       cmp     r8, #23                 /* relative fixup? */
+       beq     fixrel
+       cmp     r8, #2                  /* absolute fixup? */
+       beq     fixabs
+       /* ignore unknown type of fixup */
+       b       fixnext
+fixabs:
+       /* absolute fix: set location to (offset) symbol value */
+       mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
+       add     r1, r10, r1             /* r1 <- address of symbol in table */
+       ldr     r1, [r1, #4]            /* r1 <- symbol value */
+       add     r1, r9                  /* r1 <- relocated sym addr */
+       b       fixnext
+fixrel:
+       /* relative fix: increase location by offset */
+       ldr     r1, [r0]
+       add     r1, r1, r9
+fixnext:
+       str     r1, [r0]
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
 
 clear_bss:
 #ifndef CONFIG_PRELOADER
-       ldr     r0, _bss_start
-       ldr     r1, _bss_end
+       ldr     r0, _bss_start_ofs
+       ldr     r1, _bss_end_ofs
        ldr     r3, _TEXT_BASE          /* Text base */
        mov     r4, r7                  /* reloc addr */
-       sub     r0, r0, r3
        add     r0, r0, r4
-       sub     r1, r1, r3
        add     r1, r1, r4
        mov     r2, #0x00000000         /* clear                            */
 
@@ -256,18 +252,25 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
  * We are done. Do not return, instead branch to second part of board
  * initialization, now running from RAM.
  */
-       ldr     r0, _TEXT_BASE
-       ldr     r2, _board_init_r
-       sub     r2, r2, r0
-       add     r2, r2, r7      /* position from board_init_r in RAM */
+       ldr     r0, _board_init_r_ofs
+       adr     r1, _start
+       add     lr, r0, r1
+       add     lr, lr, r9
        /* setup parameters for board_init_r */
        mov     r0, r5          /* gd_t */
        mov     r1, r7          /* dest_addr */
        /* jump to it ... */
-       mov     lr, r2
        mov     pc, lr
 
-_board_init_r: .word board_init_r
+_board_init_r_ofs:
+       .word board_init_r - _start
+
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
 
 /*
  *************************************************************************
index cb55b0a2748185e05cee327cb27cd23f3976d66c..463237d916c70d2a466f78337d6320a452a5b678 100644 (file)
@@ -41,28 +41,38 @@ SECTIONS
        . = ALIGN(4);
        .data : {
                *(.data)
-       __datarel_start = .;
-               *(.data.rel)
-       __datarelrolocal_start = .;
-               *(.data.rel.ro.local)
-       __datarellocal_start = .;
-               *(.data.rel.local)
-       __datarelro_start = .;
-               *(.data.rel.ro)
        }
 
-       __got_start = .;
        . = ALIGN(4);
-       .got : { *(.got) }
 
-       __got_end = .;
        . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
 
        . = ALIGN(4);
-       __bss_start = .;
-       .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
-       _end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               _end = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
 }
index 67b2c6a695576701d72fee325be1da8f2d3f78ee..8c7100c2bf756c49c86ceb053bb1fe6d25320a3b 100644 (file)
@@ -68,14 +68,17 @@ _TEXT_BASE:
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
-.globl _bss_start
-_bss_start:
-       .word __bss_start
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
 
-.globl _bss_end
-_bss_end:
-       .word _end
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word _end - _start
 
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
@@ -94,30 +97,6 @@ FIQ_STACK_START:
 IRQ_STACK_START_IN:
        .word   0x0badc0de
 
-.globl _datarel_start
-_datarel_start:
-       .word __datarel_start
-
-.globl _datarelrolocal_start
-_datarelrolocal_start:
-       .word __datarelrolocal_start
-
-.globl _datarellocal_start
-_datarellocal_start:
-       .word __datarellocal_start
-
-.globl _datarelro_start
-_datarelro_start:
-       .word __datarelro_start
-
-.globl _got_start
-_got_start:
-       .word __got_start
-
-.globl _got_end
-_got_end:
-       .word __got_end
-
 /*
  * the actual reset code
  */
@@ -173,9 +152,8 @@ stack_setup:
 
        adr     r0, _start
        ldr     r2, _TEXT_BASE
-       ldr     r3, _bss_start
-       sub     r2, r3, r2              /* r2 <- size of armboot            */
-       add     r2, r0, r2              /* r2 <- source end address         */
+       ldr     r3, _bss_start_ofs
+       add     r2, r0, r3              /* r2 <- source end address         */
        cmp     r0, r6
        beq     clear_bss
 
@@ -186,47 +164,53 @@ copy_loop:
        blo     copy_loop
 
 #ifndef CONFIG_PRELOADER
-       /* fix got entries */
-       ldr     r1, _TEXT_BASE          /* Text base */
-       mov     r0, r7                  /* reloc addr */
-       ldr     r2, _got_start          /* addr in Flash */
-       ldr     r3, _got_end            /* addr in Flash */
-       sub     r3, r3, r1
-       add     r3, r3, r0
-       sub     r2, r2, r1
-       add     r2, r2, r0
-
+       /*
+        * fix .rel.dyn relocations
+        */
+       ldr     r0, _TEXT_BASE          /* r0 <- Text base */
+       sub     r9, r7, r0              /* r9 <- relocation offset */
+       ldr     r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
+       add     r10, r10, r0            /* r10 <- sym table in FLASH */
+       ldr     r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
+       add     r2, r2, r0              /* r2 <- rel dyn start in FLASH */
+       ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
+       add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r4, [r2]
-       sub     r4, r4, r1
-       add     r4, r4, r0
-       str     r4, [r2]
-       add     r2, r2, #4
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
+       ldr     r1, [r2, #4]
+       and     r8, r1, #0xff
+       cmp     r8, #23                 /* relative fixup? */
+       beq     fixrel
+       cmp     r8, #2                  /* absolute fixup? */
+       beq     fixabs
+       /* ignore unknown type of fixup */
+       b       fixnext
+fixabs:
+       /* absolute fix: set location to (offset) symbol value */
+       mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
+       add     r1, r10, r1             /* r1 <- address of symbol in table */
+       ldr     r1, [r1, #4]            /* r1 <- symbol value */
+       add     r1, r9                  /* r1 <- relocated sym addr */
+       b       fixnext
+fixrel:
+       /* relative fix: increase location by offset */
+       ldr     r1, [r0]
+       add     r1, r1, r9
+fixnext:
+       str     r1, [r0]
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
-/*
-       now copy to sram the interrupt vector
-*/
-       adr     r0, real_vectors
-       add     r2, r0, #1024
-       ldr     r1, =0x0c000000
-       add     r1, r1, #0x08
-vector_copy_loop:
-       ldmia   r0!, {r3-r10}
-       stmia   r1!, {r3-r10}
-       cmp     r0, r2
-       blo     vector_copy_loop
 
 clear_bss:
 #ifndef CONFIG_PRELOADER
-       ldr     r0, _bss_start
-       ldr     r1, _bss_end
+       ldr     r0, _bss_start_ofs
+       ldr     r1, _bss_end_ofs
        ldr     r3, _TEXT_BASE          /* Text base */
        mov     r4, r7                  /* reloc addr */
-       sub     r0, r0, r3
        add     r0, r0, r4
-       sub     r1, r1, r3
        add     r1, r1, r4
        mov     r2, #0x00000000         /* clear                            */
 
@@ -243,18 +227,25 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
  * We are done. Do not return, instead branch to second part of board
  * initialization, now running from RAM.
  */
-       ldr     r0, _TEXT_BASE
-       ldr     r2, _board_init_r
-       sub     r2, r2, r0
-       add     r2, r2, r7      /* position from board_init_r in RAM */
+       ldr     r0, _board_init_r_ofs
+       adr     r1, _start
+       add     lr, r0, r1
+       add     lr, lr, r9
        /* setup parameters for board_init_r */
        mov     r0, r5          /* gd_t */
        mov     r1, r7          /* dest_addr */
        /* jump to it ... */
-       mov     lr, r2
        mov     pc, lr
 
-_board_init_r: .word board_init_r
+_board_init_r_ofs:
+       .word board_init_r - _start
+
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
 
 /*
  *************************************************************************
index bbc8c3aa552e0887028293322bb249a315c3c661..ac2944018223f37f742902bac86fcb0b2967bbe3 100644 (file)
@@ -41,28 +41,38 @@ SECTIONS
        . = ALIGN(4);
        .data : {
                *(.data)
-       __datarel_start = .;
-               *(.data.rel)
-       __datarelrolocal_start = .;
-               *(.data.rel.ro.local)
-       __datarellocal_start = .;
-               *(.data.rel.local)
-       __datarelro_start = .;
-               *(.data.rel.ro)
        }
 
-       __got_start = .;
        . = ALIGN(4);
-       .got : { *(.got) }
 
-       __got_end = .;
        . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
 
        . = ALIGN(4);
-       __bss_start = .;
-       .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
-       _end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               _end = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
 }
index ace0c074df77f409f2e7f64d04eb648d04615948..36d44da1f83819d6695bdb396d8b356b13a1ca2f 100644 (file)
@@ -78,14 +78,17 @@ _TEXT_BASE:
 
 /*
  * These are defined in the board-specific linker script.
+ * Subtracting _start from them lets the linker put their
+ * relative position in the executable instead of leaving
+ * them null.
  */
-.globl _bss_start
-_bss_start:
-       .word __bss_start
+.globl _bss_start_ofs
+_bss_start_ofs:
+       .word __bss_start - _start
 
-.globl _bss_end
-_bss_end:
-       .word _end
+.globl _bss_end_ofs
+_bss_end_ofs:
+       .word _end - _start
 
 #ifdef CONFIG_USE_IRQ
 /* IRQ stack memory (calculated at run-time) */
@@ -104,30 +107,6 @@ FIQ_STACK_START:
 IRQ_STACK_START_IN:
        .word   0x0badc0de
 
-.globl _datarel_start
-_datarel_start:
-       .word __datarel_start
-
-.globl _datarelrolocal_start
-_datarelrolocal_start:
-       .word __datarelrolocal_start
-
-.globl _datarellocal_start
-_datarellocal_start:
-       .word __datarellocal_start
-
-.globl _datarelro_start
-_datarelro_start:
-       .word __datarelro_start
-
-.globl _got_start
-_got_start:
-       .word __got_start
-
-.globl _got_end
-_got_end:
-       .word __got_end
-
 /*
  * the actual reset code
  */
@@ -177,9 +156,8 @@ stack_setup:
 
        adr     r0, _start
        ldr     r2, _TEXT_BASE
-       ldr     r3, _bss_start
-       sub     r2, r3, r2              /* r2 <- size of armboot            */
-       add     r2, r0, r2              /* r2 <- source end address         */
+       ldr     r3, _bss_start_ofs
+       add     r2, r0, r3              /* r2 <- source end address         */
        cmp     r0, r6
        beq     clear_bss
 
@@ -190,35 +168,53 @@ copy_loop:
        blo     copy_loop
 
 #ifndef CONFIG_PRELOADER
-       /* fix got entries */
-       ldr     r1, _TEXT_BASE          /* Text base */
-       mov     r0, r7                  /* reloc addr */
-       ldr     r2, _got_start          /* addr in Flash */
-       ldr     r3, _got_end            /* addr in Flash */
-       sub     r3, r3, r1
-       add     r3, r3, r0
-       sub     r2, r2, r1
-       add     r2, r2, r0
-
+       /*
+        * fix .rel.dyn relocations
+        */
+       ldr     r0, _TEXT_BASE          /* r0 <- Text base */
+       sub     r9, r7, r0              /* r9 <- relocation offset */
+       ldr     r10, _dynsym_start_ofs  /* r10 <- sym table ofs */
+       add     r10, r10, r0            /* r10 <- sym table in FLASH */
+       ldr     r2, _rel_dyn_start_ofs  /* r2 <- rel dyn start ofs */
+       add     r2, r2, r0              /* r2 <- rel dyn start in FLASH */
+       ldr     r3, _rel_dyn_end_ofs    /* r3 <- rel dyn end ofs */
+       add     r3, r3, r0              /* r3 <- rel dyn end in FLASH */
 fixloop:
-       ldr     r4, [r2]
-       sub     r4, r4, r1
-       add     r4, r4, r0
-       str     r4, [r2]
-       add     r2, r2, #4
+       ldr     r0, [r2]                /* r0 <- location to fix up, IN FLASH! */
+       add     r0, r0, r9              /* r0 <- location to fix up in RAM */
+       ldr     r1, [r2, #4]
+       and     r8, r1, #0xff
+       cmp     r8, #23                 /* relative fixup? */
+       beq     fixrel
+       cmp     r8, #2                  /* absolute fixup? */
+       beq     fixabs
+       /* ignore unknown type of fixup */
+       b       fixnext
+fixabs:
+       /* absolute fix: set location to (offset) symbol value */
+       mov     r1, r1, LSR #4          /* r1 <- symbol index in .dynsym */
+       add     r1, r10, r1             /* r1 <- address of symbol in table */
+       ldr     r1, [r1, #4]            /* r1 <- symbol value */
+       add     r1, r9                  /* r1 <- relocated sym addr */
+       b       fixnext
+fixrel:
+       /* relative fix: increase location by offset */
+       ldr     r1, [r0]
+       add     r1, r1, r9
+fixnext:
+       str     r1, [r0]
+       add     r2, r2, #8              /* each rel.dyn entry is 8 bytes */
        cmp     r2, r3
        blo     fixloop
 #endif
 
 clear_bss:
 #ifndef CONFIG_PRELOADER
-       ldr     r0, _bss_start
-       ldr     r1, _bss_end
+       ldr     r0, _bss_start_ofs
+       ldr     r1, _bss_end_ofs
        ldr     r3, _TEXT_BASE          /* Text base */
        mov     r4, r7                  /* reloc addr */
-       sub     r0, r0, r3
        add     r0, r0, r4
-       sub     r1, r1, r3
        add     r1, r1, r4
        mov     r2, #0x00000000         /* clear                            */
 
@@ -232,18 +228,25 @@ clbss_l:str       r2, [r0]                /* clear loop...                    */
  * We are done. Do not return, instead branch to second part of board
  * initialization, now running from RAM.
  */
-       ldr     r0, _TEXT_BASE
-       ldr     r2, _board_init_r
-       sub     r2, r2, r0
-       add     r2, r2, r7      /* position from board_init_r in RAM */
+       ldr     r0, _board_init_r_ofs
+       adr     r1, _start
+       add     lr, r0, r1
+       add     lr, lr, r9
        /* setup parameters for board_init_r */
        mov     r0, r5          /* gd_t */
        mov     r1, r7          /* dest_addr */
        /* jump to it ... */
-       mov     lr, r2
        mov     pc, lr
 
-_board_init_r: .word board_init_r
+_board_init_r_ofs:
+       .word board_init_r - _start
+
+_rel_dyn_start_ofs:
+       .word __rel_dyn_start - _start
+_rel_dyn_end_ofs:
+       .word __rel_dyn_end - _start
+_dynsym_start_ofs:
+       .word __dynsym_start - _start
 
 /*
  *************************************************************************
index 2e29291909176db3eba4239e05c93106c889e507..fa6d05cdf7db38ef2d747739dcb1fbf156cfff3e 100644 (file)
@@ -44,28 +44,38 @@ SECTIONS
        . = ALIGN(4);
        .data : {
                *(.data)
-       __datarel_start = .;
-               *(.data.rel)
-       __datarelrolocal_start = .;
-               *(.data.rel.ro.local)
-       __datarellocal_start = .;
-               *(.data.rel.local)
-       __datarelro_start = .;
-               *(.data.rel.ro)
        }
 
-       __got_start = .;
        . = ALIGN(4);
-       .got : { *(.got) }
 
-       __got_end = .;
        . = .;
        __u_boot_cmd_start = .;
        .u_boot_cmd : { *(.u_boot_cmd) }
        __u_boot_cmd_end = .;
 
        . = ALIGN(4);
-       __bss_start = .;
-       .bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
-       _end = .;
+
+       .rel.dyn : {
+               __rel_dyn_start = .;
+               *(.rel*)
+               __rel_dyn_end = .;
+       }
+
+       .dynsym : {
+               __dynsym_start = .;
+               *(.dynsym)
+       }
+
+       .bss __rel_dyn_start (OVERLAY) : {
+               __bss_start = .;
+               *(.bss)
+                . = ALIGN(4);
+               _end = .;
+       }
+
+       /DISCARD/ : { *(.dynstr*) }
+       /DISCARD/ : { *(.dynamic*) }
+       /DISCARD/ : { *(.plt*) }
+       /DISCARD/ : { *(.interp*) }
+       /DISCARD/ : { *(.gnu*) }
 }
diff --git a/board/Seagate/dockstar/Makefile b/board/Seagate/dockstar/Makefile
new file mode 100644 (file)
index 0000000..bfcc6d9
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Copyright (C) 2010  Eric C. Cooper <ecc@cmu.edu>
+#
+# Based on sheevaplug/Makefile originally written by
+# Prafulla Wadaskar <prafulla@marvell.com>
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).o
+
+COBJS  := dockstar.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/Seagate/dockstar/dockstar.c b/board/Seagate/dockstar/dockstar.c
new file mode 100644 (file)
index 0000000..cab3a83
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2010  Eric C. Cooper <ecc@cmu.edu>
+ *
+ * Based on sheevaplug.c originally written by
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <common.h>
+#include <miiphy.h>
+#include <asm/arch/kirkwood.h>
+#include <asm/arch/mpp.h>
+#include "dockstar.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_early_init_f(void)
+{
+       /*
+        * default gpio configuration
+        * There are maximum 64 gpios controlled through 2 sets of registers
+        * the  below configuration configures mainly initial LED status
+        */
+       kw_config_gpio(DOCKSTAR_OE_VAL_LOW,
+                       DOCKSTAR_OE_VAL_HIGH,
+                       DOCKSTAR_OE_LOW, DOCKSTAR_OE_HIGH);
+
+       /* Multi-Purpose Pins Functionality configuration */
+       u32 kwmpp_config[] = {
+               MPP0_NF_IO2,
+               MPP1_NF_IO3,
+               MPP2_NF_IO4,
+               MPP3_NF_IO5,
+               MPP4_NF_IO6,
+               MPP5_NF_IO7,
+               MPP6_SYSRST_OUTn,
+               MPP7_GPO,
+               MPP8_UART0_RTS,
+               MPP9_UART0_CTS,
+               MPP10_UART0_TXD,
+               MPP11_UART0_RXD,
+               MPP12_SD_CLK,
+               MPP13_SD_CMD,
+               MPP14_SD_D0,
+               MPP15_SD_D1,
+               MPP16_SD_D2,
+               MPP17_SD_D3,
+               MPP18_NF_IO0,
+               MPP19_NF_IO1,
+               MPP20_GPIO,
+               MPP21_GPIO,
+               MPP22_GPIO,
+               MPP23_GPIO,
+               MPP24_GPIO,
+               MPP25_GPIO,
+               MPP26_GPIO,
+               MPP27_GPIO,
+               MPP28_GPIO,
+               MPP29_TSMP9,
+               MPP30_GPIO,
+               MPP31_GPIO,
+               MPP32_GPIO,
+               MPP33_GPIO,
+               MPP34_GPIO,
+               MPP35_GPIO,
+               MPP36_GPIO,
+               MPP37_GPIO,
+               MPP38_GPIO,
+               MPP39_GPIO,
+               MPP40_GPIO,
+               MPP41_GPIO,
+               MPP42_GPIO,
+               MPP43_GPIO,
+               MPP44_GPIO,
+               MPP45_GPIO,
+               MPP46_GPIO,
+               MPP47_GPIO,
+               MPP48_GPIO,
+               MPP49_GPIO,
+               0
+       };
+       kirkwood_mpp_conf(kwmpp_config);
+       return 0;
+}
+
+int board_init(void)
+{
+       /*
+        * arch number of board
+        */
+       gd->bd->bi_arch_number = MACH_TYPE_DOCKSTAR;
+
+       /* address of boot parameters */
+       gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
+
+       return 0;
+}
+
+#ifdef CONFIG_RESET_PHY_R
+/* Configure and enable MV88E1116 PHY */
+void reset_phy(void)
+{
+       u16 reg;
+       u16 devadr;
+       char *name = "egiga0";
+
+       if (miiphy_set_current_dev(name))
+               return;
+
+       /* command to read PHY dev address */
+       if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) {
+               printf("Err..%s could not read PHY dev address\n",
+                       __FUNCTION__);
+               return;
+       }
+
+       /*
+        * Enable RGMII delay on Tx and Rx for CPU port
+        * Ref: sec 4.7.2 of chip datasheet
+        */
+       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
+       miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, &reg);
+       reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
+       miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
+       miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
+
+       /* reset the phy */
+       miiphy_reset(name, devadr);
+
+       printf("88E1116 Initialized on %s\n", name);
+}
+#endif /* CONFIG_RESET_PHY_R */
+
+#define GREEN_LED      (1 << 14)
+#define ORANGE_LED     (1 << 15)
+#define BOTH_LEDS      (GREEN_LED | ORANGE_LED)
+#define NEITHER_LED    0
+
+static void set_leds(u32 leds, u32 blinking)
+{
+       struct kwgpio_registers *r = (struct kwgpio_registers *)KW_GPIO1_BASE;
+       u32 oe = readl(&r->oe) | BOTH_LEDS;
+       writel(oe & ~leds, &r->oe);     /* active low */
+       u32 bl = readl(&r->blink_en) & ~BOTH_LEDS;
+       writel(bl | blinking, &r->blink_en);
+}
+
+void show_boot_progress(int val)
+{
+       switch (val) {
+       case 15:                /* booting Linux */
+               set_leds(BOTH_LEDS, NEITHER_LED);
+               break;
+       case 64:                /* Ethernet initialization */
+               set_leds(GREEN_LED, GREEN_LED);
+               break;
+       default:
+               if (val < 0)    /* error */
+                       set_leds(ORANGE_LED, ORANGE_LED);
+               break;
+       }
+}
diff --git a/board/Seagate/dockstar/dockstar.h b/board/Seagate/dockstar/dockstar.h
new file mode 100644 (file)
index 0000000..a2efe87
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2010  Eric C. Cooper <ecc@cmu.edu>
+ *
+ * Based on sheevaplug.h originally written by
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#ifndef __DOCKSTAR_H
+#define __DOCKSTAR_H
+
+#define DOCKSTAR_OE_LOW                (~(0))
+#define DOCKSTAR_OE_HIGH               (~(0))
+#define DOCKSTAR_OE_VAL_LOW            (1 << 29)       /* USB_PWEN low */
+#define DOCKSTAR_OE_VAL_HIGH           (1 << 17)       /* LED pin high */
+
+/* PHY related */
+#define MV88E1116_LED_FCTRL_REG                10
+#define MV88E1116_CPRSP_CR3_REG                21
+#define MV88E1116_MAC_CTRL_REG         21
+#define MV88E1116_PGADR_REG            22
+#define MV88E1116_RGMII_TXTM_CTRL      (1 << 4)
+#define MV88E1116_RGMII_RXTM_CTRL      (1 << 5)
+
+#endif /* __DOCKSTAR_H */
diff --git a/board/Seagate/dockstar/kwbimage.cfg b/board/Seagate/dockstar/kwbimage.cfg
new file mode 100644 (file)
index 0000000..98b514d
--- /dev/null
@@ -0,0 +1,165 @@
+#
+# Copyright (C) 2010  Eric C. Cooper <ecc@cmu.edu>
+#
+# Based on sheevaplug/kwbimage.cfg originally written by
+# Prafulla Wadaskar <prafulla@marvell.com>
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+#
+# Refer docs/README.kwimage for more details about how-to configure
+# and create kirkwood boot image
+#
+
+# Boot Media configurations
+BOOT_FROM      nand
+NAND_ECC_MODE  default
+NAND_PAGE_SIZE 0x0800
+
+# SOC registers configuration using bootrom header extension
+# Maximum KWBIMAGE_MAX_CONFIG configurations allowed
+
+# Configure RGMII-0 interface pad voltage to 1.8V
+DATA 0xFFD100e0 0x1b1b1b9b
+
+#Dram initalization for SINGLE x16 CL=5 @ 400MHz
+DATA 0xFFD01400 0x43000c30     # DDR Configuration register
+# bit13-0:  0xc30 (3120 DDR2 clks refresh rate)
+# bit23-14: zero
+# bit24: 1= enable exit self refresh mode on DDR access
+# bit25: 1 required
+# bit29-26: zero
+# bit31-30: 01
+
+DATA 0xFFD01404 0x37543000     # DDR Controller Control Low
+# bit 4:    0=addr/cmd in smame cycle
+# bit 5:    0=clk is driven during self refresh, we don't care for APX
+# bit 6:    0=use recommended falling edge of clk for addr/cmd
+# bit14:    0=input buffer always powered up
+# bit18:    1=cpu lock transaction enabled
+# bit23-20: 5=recommended value for CL=5 and STARTBURST_DEL disabled bit31=0
+# bit27-24: 7= CL+2, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM
+# bit30-28: 3 required
+# bit31:    0=no additional STARTBURST delay
+
+DATA 0xFFD01408 0x22125451     # DDR Timing (Low) (active cycles value +1)
+# bit3-0:   TRAS lsbs
+# bit7-4:   TRCD
+# bit11- 8: TRP
+# bit15-12: TWR
+# bit19-16: TWTR
+# bit20:    TRAS msb
+# bit23-21: 0x0
+# bit27-24: TRRD
+# bit31-28: TRTP
+
+DATA 0xFFD0140C 0x00000a33     #  DDR Timing (High)
+# bit6-0:   TRFC
+# bit8-7:   TR2R
+# bit10-9:  TR2W
+# bit12-11: TW2W
+# bit31-13: zero required
+
+DATA 0xFFD01410 0x0000000d     #  DDR Address Control
+# bit1-0:   00, Cs0width=x8
+# bit3-2:   11, Cs0size=1Gb
+# bit5-4:   00, Cs1width=nonexistent
+# bit7-6:   00, Cs1size =nonexistent
+# bit9-8:   00, Cs2width=nonexistent
+# bit11-10: 00, Cs2size =nonexistent
+# bit13-12: 00, Cs3width=nonexistent
+# bit15-14: 00, Cs3size =nonexistent
+# bit16:    0,  Cs0AddrSel
+# bit17:    0,  Cs1AddrSel
+# bit18:    0,  Cs2AddrSel
+# bit19:    0,  Cs3AddrSel
+# bit31-20: 0 required
+
+DATA 0xFFD01414 0x00000000     #  DDR Open Pages Control
+# bit0:    0,  OpenPage enabled
+# bit31-1: 0 required
+
+DATA 0xFFD01418 0x00000000     #  DDR Operation
+# bit3-0:   0x0, DDR cmd
+# bit31-4:  0 required
+
+DATA 0xFFD0141C 0x00000C52     #  DDR Mode
+# bit2-0:   2, BurstLen=2 required
+# bit3:     0, BurstType=0 required
+# bit6-4:   4, CL=5
+# bit7:     0, TestMode=0 normal
+# bit8:     0, DLL reset=0 normal
+# bit11-9:  6, auto-precharge write recovery ????????????
+# bit12:    0, PD must be zero
+# bit31-13: 0 required
+
+DATA 0xFFD01420 0x00000040     #  DDR Extended Mode
+# bit0:    0,  DDR DLL enabled
+# bit1:    0,  DDR drive strenght normal
+# bit2:    0,  DDR ODT control lsd (disabled)
+# bit5-3:  000, required
+# bit6:    1,  DDR ODT control msb, (disabled)
+# bit9-7:  000, required
+# bit10:   0,  differential DQS enabled
+# bit11:   0, required
+# bit12:   0, DDR output buffer enabled
+# bit31-13: 0 required
+
+DATA 0xFFD01424 0x0000F17F     #  DDR Controller Control High
+# bit2-0:  111, required
+# bit3  :  1  , MBUS Burst Chop disabled
+# bit6-4:  111, required
+# bit7  :  0
+# bit8  :  1  , add writepath sample stage, must be 1 for DDR freq >= 300MHz
+# bit9  :  0  , no half clock cycle addition to dataout
+# bit10 :  0  , 1/4 clock cycle skew enabled for addr/ctl signals
+# bit11 :  0  , 1/4 clock cycle skew disabled for write mesh
+# bit15-12: 1111 required
+# bit31-16: 0    required
+
+DATA 0xFFD01428 0x00085520     # DDR2 ODT Read Timing (default values)
+DATA 0xFFD0147C 0x00008552     # DDR2 ODT Write Timing (default values)
+
+DATA 0xFFD01500 0x00000000     # CS[0]n Base address to 0x0
+DATA 0xFFD01504 0x07FFFFF1     # CS[0]n Size
+# bit0:    1,  Window enabled
+# bit1:    0,  Write Protect disabled
+# bit3-2:  00, CS0 hit selected
+# bit23-4: ones, required
+# bit31-24: 0x07, Size (i.e. 128MB)
+
+DATA 0xFFD01508 0x10000000     # CS[1]n Base address to 256Mb
+DATA 0xFFD0150C 0x00000000     # CS[1]n Size, window disabled
+
+DATA 0xFFD01514 0x00000000     # CS[2]n Size, window disabled
+DATA 0xFFD0151C 0x00000000     # CS[3]n Size, window disabled
+
+DATA 0xFFD01494 0x00030000     #  DDR ODT Control (Low)
+DATA 0xFFD01498 0x00000000     #  DDR ODT Control (High)
+# bit1-0:  00, ODT0 controlled by ODT Control (low) register above
+# bit3-2:  01, ODT1 active NEVER!
+# bit31-4: zero, required
+
+DATA 0xFFD0149C 0x0000E803     # CPU ODT Control
+DATA 0xFFD01480 0x00000001     # DDR Initialization Control
+#bit0=1, enable DDR init upon this register write
+
+# End of Header extension
+DATA 0x0 0x0
index c8c5e1b30edb5f08fdbb0b5f2c8b3b82ad1e6c04..c3267cbf51a6502e0665b2c930e1fb55f47c56e9 100644 (file)
@@ -118,6 +118,39 @@ static const struct lpsc_resource lpsc[] = {
        { DAVINCI_LPSC_GPIO },
 };
 
+#ifndef CONFIG_DA850_EVM_MAX_CPU_CLK
+#define CONFIG_DA850_EVM_MAX_CPU_CLK   300000000
+#endif
+
+/*
+ * get_board_rev() - setup to pass kernel board revision information
+ * Returns:
+ * bit[0-3]    Maximum cpu clock rate supported by onboard SoC
+ *             0000b - 300 MHz
+ *             0001b - 372 MHz
+ *             0010b - 408 MHz
+ *             0011b - 456 MHz
+ */
+u32 get_board_rev(void)
+{
+       char *s;
+       u32 maxcpuclk = CONFIG_DA850_EVM_MAX_CPU_CLK;
+       u32 rev = 0;
+
+       s = getenv("maxcpuclk");
+       if (s)
+               maxcpuclk = simple_strtoul(s, NULL, 10);
+
+       if (maxcpuclk >= 456000000)
+               rev = 3;
+       else if (maxcpuclk >= 408000000)
+               rev = 2;
+       else if (maxcpuclk >= 372000000)
+               rev = 1;
+
+       return rev;
+}
+
 int board_init(void)
 {
 #ifndef CONFIG_USE_IRQ
diff --git a/board/pandora/config.mk b/board/pandora/config.mk
deleted file mode 100644 (file)
index 0fab80c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# (C) Copyright 2006
-# Texas Instruments, <www.ti.com>
-#
-# Pandora uses OMAP3 (ARM-CortexA8) cpu
-# see http://www.ti.com/ for more information on Texas Instruments
-#
-# See file CREDITS for list of people who contributed to this
-# project.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-# MA 02111-1307 USA
-#
-# Physical Address:
-# 8000'0000 (bank0)
-# A000/0000 (bank1)
-# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
-# (mem base + reserved)
-
-# For use with external or internal boots.
-CONFIG_SYS_TEXT_BASE = 0x80e80000
index a37ccc5255627660a2aef2839ca7e2f2328ac5b6..87003bd3a1be9721a073c07044e3f99fde216a10 100644 (file)
@@ -53,6 +53,7 @@ pm9261                arm     arm926ejs       -               ronetix         at91
 pm9263         arm     arm926ejs       -               ronetix         at91
 suen3          arm     arm926ejs       km_arm          keymile         kirkwood
 rd6281a                arm     arm926ejs       -               Marvell         kirkwood
+dockstar       arm     arm926ejs       -               Seagate         kirkwood
 jadecpu                arm     arm926ejs       jadecpu         syteco          mb86r0x
 mx51evk                arm     armv7           mx51evk         freescale       mx5
 vision2                arm     armv7           vision2         ttcontrol       mx5
index 506f0d4327283b9c883a13f05f121b65cef33c54..0204372a2f484ebf1d1894b1af31f65461e1d285 100644 (file)
@@ -21,6 +21,8 @@ Currently the following boards are supported:
 
 * TI DA830 EVM
 
+* TI DA850 EVM
+
 * DM355 based Leopard board
 
 * DM644x based schmoogie board
@@ -57,6 +59,11 @@ make
 make da830evm_config
 make
 
+* TI DA850 EVM:
+
+make da850evm_config
+make
+
 * DM355 based Leopard board:
 
 make davinci_dm355leopard_config
@@ -88,6 +95,20 @@ into the RAM.
 The programmers and UBL are always released as part of any standard TI
 software release associated with an SOC.
 
+Environment Variables
+=====================
+
+The DA850 EVM allows the user to specify the maximum cpu clock allowed by the
+silicon, in Hz, via an environment variable "maxcpuclk".
+
+The maximum clock rate allowed depends on the silicon populated on the EVM.
+Please make sure you understand the restrictions placed on this clock in the
+device specific datasheet before setting up this variable. This information is
+passed to the Linux kernel using the ATAG_REVISION atag.
+
+If "maxcpuclk" is not defined, the configuration CONFIG_DA850_EVM_MAX_CPU_CLK
+is used to obtain this information.
+
 Links
 =====
 
@@ -114,3 +135,7 @@ http://www.spectrumdigital.com/product_info.php?cPath=103&products_id=222
 6) TI DA830 EVM
 http://focus.ti.com/apps/docs/gencontent.tsp?appId=1&contentId=52385
 http://www.spectrumdigital.com/product_info.php?cPath=37&products_id=214
+
+7) TI DA850 EVM
+http://focus.ti.com/docs/prod/folders/print/omap-l138.html
+http://www.logicpd.com/products/development-kits/zoom-omap-l138-evm-development-kit
index c7f76209f33cbe8a6ca23d490bf31958c121ec4c..6f2280abff91af577644e0249a175702d477524e 100644 (file)
@@ -31,6 +31,9 @@
 #include <asm/io.h>
 #include <asm/arch/mmc_host_def.h>
 
+/* If we fail after 1 second wait, something is really bad */
+#define MAX_RETRY_MS   1000
+
 static int mmc_read_data(hsmmc_t *mmc_base, char *buf, unsigned int size);
 static int mmc_write_data(hsmmc_t *mmc_base, const char *buf, unsigned int siz);
 static struct mmc hsmmc_dev[2];
@@ -70,18 +73,29 @@ unsigned char mmc_board_init(hsmmc_t *mmc_base)
 
 void mmc_init_stream(hsmmc_t *mmc_base)
 {
+       ulong start;
 
        writel(readl(&mmc_base->con) | INIT_INITSTREAM, &mmc_base->con);
 
        writel(MMC_CMD0, &mmc_base->cmd);
-       while (!(readl(&mmc_base->stat) & CC_MASK))
-               ;
+       start = get_timer(0);
+       while (!(readl(&mmc_base->stat) & CC_MASK)) {
+               if (get_timer(0) - start > MAX_RETRY_MS) {
+                       printf("%s: timedout waiting for cc!\n", __func__);
+                       return;
+               }
+       }
        writel(CC_MASK, &mmc_base->stat)
                ;
        writel(MMC_CMD0, &mmc_base->cmd)
                ;
-       while (!(readl(&mmc_base->stat) & CC_MASK))
-               ;
+       start = get_timer(0);
+       while (!(readl(&mmc_base->stat) & CC_MASK)) {
+               if (get_timer(0) - start > MAX_RETRY_MS) {
+                       printf("%s: timedout waiting for cc2!\n", __func__);
+                       return;
+               }
+       }
        writel(readl(&mmc_base->con) & ~INIT_INITSTREAM, &mmc_base->con);
 }
 
@@ -91,16 +105,28 @@ static int mmc_init_setup(struct mmc *mmc)
        hsmmc_t *mmc_base = (hsmmc_t *)mmc->priv;
        unsigned int reg_val;
        unsigned int dsor;
+       ulong start;
 
        mmc_board_init(mmc_base);
 
        writel(readl(&mmc_base->sysconfig) | MMC_SOFTRESET,
                &mmc_base->sysconfig);
-       while ((readl(&mmc_base->sysstatus) & RESETDONE) == 0)
-               ;
+       start = get_timer(0);
+       while ((readl(&mmc_base->sysstatus) & RESETDONE) == 0) {
+               if (get_timer(0) - start > MAX_RETRY_MS) {
+                       printf("%s: timedout waiting for cc2!\n", __func__);
+                       return TIMEOUT;
+               }
+       }
        writel(readl(&mmc_base->sysctl) | SOFTRESETALL, &mmc_base->sysctl);
-       while ((readl(&mmc_base->sysctl) & SOFTRESETALL) != 0x0)
-               ;
+       start = get_timer(0);
+       while ((readl(&mmc_base->sysctl) & SOFTRESETALL) != 0x0) {
+               if (get_timer(0) - start > MAX_RETRY_MS) {
+                       printf("%s: timedout waiting for softresetall!\n",
+                               __func__);
+                       return TIMEOUT;
+               }
+       }
        writel(DTW_1_BITMODE | SDBP_PWROFF | SDVS_3V0, &mmc_base->hctl);
        writel(readl(&mmc_base->capa) | VS30_3V0SUP | VS18_1V8SUP,
                &mmc_base->capa);
@@ -116,8 +142,13 @@ static int mmc_init_setup(struct mmc *mmc)
                (ICE_STOP | DTO_15THDTO | CEN_DISABLE));
        mmc_reg_out(&mmc_base->sysctl, ICE_MASK | CLKD_MASK,
                (dsor << CLKD_OFFSET) | ICE_OSCILLATE);
-       while ((readl(&mmc_base->sysctl) & ICS_MASK) == ICS_NOTREADY)
-               ;
+       start = get_timer(0);
+       while ((readl(&mmc_base->sysctl) & ICS_MASK) == ICS_NOTREADY) {
+               if (get_timer(0) - start > MAX_RETRY_MS) {
+                       printf("%s: timedout waiting for ics!\n", __func__);
+                       return TIMEOUT;
+               }
+       }
        writel(readl(&mmc_base->sysctl) | CEN_ENABLE, &mmc_base->sysctl);
 
        writel(readl(&mmc_base->hctl) | SDBP_PWRON, &mmc_base->hctl);
@@ -137,14 +168,23 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
 {
        hsmmc_t *mmc_base = (hsmmc_t *)mmc->priv;
        unsigned int flags, mmc_stat;
-       unsigned int retry = 0x100000;
+       ulong start;
 
-
-       while ((readl(&mmc_base->pstate) & DATI_MASK) == DATI_CMDDIS)
-               ;
+       start = get_timer(0);
+       while ((readl(&mmc_base->pstate) & DATI_MASK) == DATI_CMDDIS) {
+               if (get_timer(0) - start > MAX_RETRY_MS) {
+                       printf("%s: timedout waiting for cmddis!\n", __func__);
+                       return TIMEOUT;
+               }
+       }
        writel(0xFFFFFFFF, &mmc_base->stat);
-       while (readl(&mmc_base->stat))
-               ;
+       start = get_timer(0);
+       while (readl(&mmc_base->stat)) {
+               if (get_timer(0) - start > MAX_RETRY_MS) {
+                       printf("%s: timedout waiting for stat!\n", __func__);
+                       return TIMEOUT;
+               }
+       }
        /*
         * CMDREG
         * CMDIDX[13:8] : Command index
@@ -200,15 +240,14 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
        writel(cmd->cmdarg, &mmc_base->arg);
        writel((cmd->cmdidx << 24) | flags, &mmc_base->cmd);
 
+       start = get_timer(0);
        do {
                mmc_stat = readl(&mmc_base->stat);
-               retry--;
-       } while ((mmc_stat == 0) && (retry > 0));
-
-       if (retry == 0) {
-               printf("%s : timeout: No status update\n", __func__);
-               return TIMEOUT;
-       }
+               if (get_timer(0) - start > MAX_RETRY_MS) {
+                       printf("%s : timeout: No status update\n", __func__);
+                       return TIMEOUT;
+               }
+       } while (!mmc_stat);
 
        if ((mmc_stat & IE_CTO) != 0)
                return TIMEOUT;
@@ -253,8 +292,14 @@ static int mmc_read_data(hsmmc_t *mmc_base, char *buf, unsigned int size)
        count /= 4;
 
        while (size) {
+               ulong start = get_timer(0);
                do {
                        mmc_stat = readl(&mmc_base->stat);
+                       if (get_timer(0) - start > MAX_RETRY_MS) {
+                               printf("%s: timedout waiting for status!\n",
+                                               __func__);
+                               return TIMEOUT;
+                       }
                } while (mmc_stat == 0);
 
                if ((mmc_stat & ERRI_MASK) != 0)
@@ -298,8 +343,14 @@ static int mmc_write_data(hsmmc_t *mmc_base, const char *buf, unsigned int size)
        count /= 4;
 
        while (size) {
+               ulong start = get_timer(0);
                do {
                        mmc_stat = readl(&mmc_base->stat);
+                       if (get_timer(0) - start > MAX_RETRY_MS) {
+                               printf("%s: timedout waiting for status!\n",
+                                               __func__);
+                               return TIMEOUT;
+                       }
                } while (mmc_stat == 0);
 
                if ((mmc_stat & ERRI_MASK) != 0)
@@ -334,6 +385,7 @@ static void mmc_set_ios(struct mmc *mmc)
 {
        hsmmc_t *mmc_base = (hsmmc_t *)mmc->priv;
        unsigned int dsor = 0;
+       ulong start;
 
        /* configue bus width */
        switch (mmc->bus_width) {
@@ -372,8 +424,13 @@ static void mmc_set_ios(struct mmc *mmc)
        mmc_reg_out(&mmc_base->sysctl, ICE_MASK | CLKD_MASK,
                                (dsor << CLKD_OFFSET) | ICE_OSCILLATE);
 
-       while ((readl(&mmc_base->sysctl) & ICS_MASK) == ICS_NOTREADY)
-               ;
+       start = get_timer(0);
+       while ((readl(&mmc_base->sysctl) & ICS_MASK) == ICS_NOTREADY) {
+               if (get_timer(0) - start > MAX_RETRY_MS) {
+                       printf("%s: timedout waiting for ics!\n", __func__);
+                       return;
+               }
+       }
        writel(readl(&mmc_base->sysctl) | CEN_ENABLE, &mmc_base->sysctl);
 }
 
index 982f96e8b8ff242d7617389f5181abab4238b3fe..6eb38a4131f0ed83c905f21af4237b3bfbb2b5a8 100644 (file)
@@ -25,6 +25,7 @@
 #include <usb.h>
 #include <asm/io.h>
 #include <malloc.h>
+#include <watchdog.h>
 
 #include "ehci.h"
 
@@ -229,7 +230,7 @@ static int ehci_reset(void)
        int ret = 0;
 
        cmd = ehci_readl(&hcor->or_usbcmd);
-       cmd |= CMD_RESET;
+       cmd = (cmd & ~CMD_RUN) | CMD_RESET;
        ehci_writel(&hcor->or_usbcmd, cmd);
        ret = handshake((uint32_t *)&hcor->or_usbcmd, CMD_RESET, 0, 250 * 1000);
        if (ret < 0) {
@@ -452,6 +453,7 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
                token = hc32_to_cpu(vtd->qt_token);
                if (!(token & 0x80))
                        break;
+               WATCHDOG_RESET();
        } while (get_timer(ts) < CONFIG_SYS_HZ);
 
        /* Disable async schedule. */
@@ -491,6 +493,8 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
                        break;
                default:
                        dev->status = USB_ST_CRC_ERR;
+                       if ((token & 0x40) == 0x40)
+                               dev->status |= USB_ST_STALLED;
                        break;
                }
                dev->act_len = length - ((token >> 16) & 0x7fff);
index 946a0a07efa7ba69e796d680897bbfa4fb2981bf..11799199871ed8ab9e794f9badcc5da7912f67eb 100644 (file)
@@ -34,7 +34,6 @@ int ehci_hcd_init(void)
        hccr = (struct ehci_hccr *)(CONFIG_SYS_PPC4XX_USB_ADDR);
        hcor = (struct ehci_hcor *)((uint32_t) hccr +
                HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
-       usb_dev_init();
        return 0;
 }
 
index 1feada926321272f1206cf40dba86496ff147b79..bcf8ee04da17cd203606ae8c7ce9319290f4c771 100644 (file)
@@ -47,8 +47,7 @@
  * Memory Info
  */
 #define CONFIG_SYS_MALLOC_LEN  (0x10000 + 1*1024*1024) /* malloc() len */
-#define PHYS_SDRAM_1           DAVINCI_DDR_EMIF_DATA_BASE /* DDR Start */
-#define PHYS_SDRAM_1_SIZE      (64 << 20) /* SDRAM size 64MB */
+#define PHYS_SDRAM_1                   0xc0000000 /* SDRAM Start */
 #define CONFIG_SYS_MEMTEST_START       PHYS_SDRAM_1 /* memtest start addr */
 #define CONFIG_SYS_MEMTEST_END         (PHYS_SDRAM_1 + 16*1024*1024) /* 16MB test */
 #define CONFIG_NR_DRAM_BANKS   1 /* we have 1 bank of DRAM */
 #define CONFIG_SYS_ALE_MASK            0x8
 #define CONFIG_SYS_MAX_NAND_DEVICE     1 /* Max number of NAND devices */
 #define NAND_MAX_CHIPS                 1
-#define DEF_BOOTM                      ""
 #endif
 
 #ifdef CONFIG_USE_NOR
        "mtdparts=davinci_nand.1:" PART_BOOT PART_PARAMS PART_KERNEL PART_REST
 #endif
 
+#define CONFIG_MAX_RAM_BANK_SIZE (512 << 20) /* max size from SPRS586*/
+
+/* additions for new relocation code, must be added to all boards */
+#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
+#define CONFIG_SYS_INIT_SP_ADDR                \
+       (CONFIG_SYS_SDRAM_BASE + 0x1000 - GENERATED_GBL_DATA_SIZE)
+
 #endif /* __CONFIG_H */
index 7b04be05b9be408af3991fb99a47db2b738b7c5f..4224258a9a47b54f234f40557cabe6a9f525bf7e 100644 (file)
@@ -99,7 +99,6 @@
 #undef CONFIG_SYS_NAND_HW_ECC
 #define CONFIG_SYS_MAX_NAND_DEVICE     1 /* Max number of NAND devices */
 #define NAND_MAX_CHIPS                 1
-#define DEF_BOOTM                      ""
 #endif
 
 /*
  */
 #define LINUX_BOOT_PARAM_ADDR  (PHYS_SDRAM_1 + 0x100)
 #define CONFIG_CMDLINE_TAG
+#define CONFIG_REVISION_TAG
 #define CONFIG_SETUP_MEMORY_TAGS
 #define CONFIG_BOOTARGS                \
        "mem=32M console=ttyS2,115200n8 root=/dev/mtdblock2 rw noinitrd ip=dhcp"
index 186726d3a6759944e790d1ced74a95a52c416ae9..e1b1db16e19052a4e3869c0be3d17499d2c3d541 100644 (file)
 #define CONFIG_SYS_NAND_HW_ECC
 #define CONFIG_SYS_MAX_NAND_DEVICE     1       /* Max number of NAND devices */
 #define CONFIG_ENV_OFFSET              0x0     /* Block 0--not used by bootcode */
-#define DEF_BOOTM              ""
 #elif defined(CONFIG_SYS_USE_NOR)
 #ifdef CONFIG_NOR_UART_BOOT
 #define CONFIG_SKIP_LOWLEVEL_INIT      /* U-Boot is loaded by a bootloader */
index 0dc89ef41e2c2b329105c255a323ced809380843..f0eeb90e9df1cc7d585d55aeb8e5bea408a57375 100644 (file)
 #define CONFIG_SYS_NAND_HW_ECC
 #define CONFIG_SYS_MAX_NAND_DEVICE     1       /* Max number of NAND devices */
 #define CONFIG_ENV_OFFSET              0x0     /* Block 0--not used by bootcode */
-#define DEF_BOOTM              ""
 #elif defined(CONFIG_SYS_USE_NOR)
 #ifdef CONFIG_NOR_UART_BOOT
 #define CONFIG_SKIP_LOWLEVEL_INIT      /* U-Boot is loaded by a bootloader */
diff --git a/include/configs/dockstar.h b/include/configs/dockstar.h
new file mode 100644 (file)
index 0000000..249f93b
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2010  Eric C. Cooper <ecc@cmu.edu>
+ *
+ * Based on sheevaplug.h originally written by
+ * Prafulla Wadaskar <prafulla@marvell.com>
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#ifndef _CONFIG_DOCKSTAR_H
+#define _CONFIG_DOCKSTAR_H
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING    "\nSeagate FreeAgent DockStar"
+
+/*
+ * High Level Configuration Options (easy to change)
+ */
+#define CONFIG_FEROCEON_88FR131        1       /* CPU Core subversion */
+#define CONFIG_KIRKWOOD                1       /* SOC Family Name */
+#define CONFIG_KW88F6281       1       /* SOC Name */
+#define CONFIG_MACH_DOCKSTAR   /* Machine type */
+#define CONFIG_SKIP_LOWLEVEL_INIT      /* disable board lowlevel_init */
+
+/*
+ * Commands configuration
+ */
+#define CONFIG_SYS_NO_FLASH            /* Declare no flash (NOR/SPI) */
+#include <config_cmd_default.h>
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_ENV
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_USB
+/*
+ * mv-common.h should be defined after CMD configs since it used them
+ * to enable certain macros
+ */
+#include "mv-common.h"
+
+#undef CONFIG_SYS_PROMPT       /* previously defined in mv-common.h */
+#define CONFIG_SYS_PROMPT      "DockStar> "    /* Command Prompt */
+
+/*
+ *  Environment variables configurations
+ */
+#ifdef CONFIG_CMD_NAND
+#define CONFIG_ENV_IS_IN_NAND          1
+#define CONFIG_ENV_SECT_SIZE           0x20000 /* 128K */
+#else
+#define CONFIG_ENV_IS_NOWHERE          1       /* if env in SDRAM */
+#endif
+/*
+ * max 4k env size is enough, but in case of nand
+ * it has to be rounded to sector size
+ */
+#define CONFIG_ENV_SIZE                        0x20000 /* 128k */
+#define CONFIG_ENV_ADDR                        0x60000
+#define CONFIG_ENV_OFFSET              0x60000 /* env starts here */
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_BOOTCOMMAND \
+       "setenv bootargs ${console} ${mtdparts} ${bootargs_root}; "     \
+       "ubi part root; " \
+       "ubifsmount root; " \
+       "ubifsload 0x800000 ${kernel}; " \
+       "ubifsload 0x1100000 ${initrd}; " \
+       "bootm 0x800000 0x1100000"
+
+#define CONFIG_MTDPARTS                "mtdparts=orion_nand:1m(uboot),-(root)\0"
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "console=console=ttyS0,115200\0" \
+       "mtdids=nand0=orion_nand\0" \
+       "mtdparts="CONFIG_MTDPARTS \
+       "kernel=/boot/uImage\0" \
+       "initrd=/boot/uInitrd\0" \
+       "bootargs_root=ubi.mtd=1 root=ubi0:root rootfstype=ubifs ro\0"
+
+/*
+ * Ethernet Driver configuration
+ */
+#ifdef CONFIG_CMD_NET
+#define CONFIG_MVGBE_PORTS     {1, 0}  /* enable port 0 only */
+#define CONFIG_PHY_BASE_ADR    0
+#endif /* CONFIG_CMD_NET */
+
+/*
+ * File system
+ */
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_JFFS2
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#define CONFIG_RBTREE
+#define CONFIG_MTD_DEVICE               /* needed for mtdparts commands */
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_LZO
+
+#endif /* _CONFIG_DOCKSTAR_H */
index 076dd5a8afaa5b08b81107fb0560486f0baa3274..56363f762b040e84864585fe7a761d3d4a120464 100644 (file)
 #define PISMO1_NAND_SIZE               GPMC_SIZE_128M
 #define PISMO1_ONEN_SIZE               GPMC_SIZE_128M
 
-#define CONFIG_SYS_MAX_FLASH_SECT      520     /* max number of sectors on */
-                                               /* one chip */
-#define CONFIG_SYS_MAX_FLASH_BANKS     2       /* max number of flash banks */
 #define CONFIG_SYS_MONITOR_LEN         (256 << 10)     /* Reserve 2 sectors */
 
 #define CONFIG_SYS_FLASH_BASE          boot_flash_base
 #define CONFIG_ENV_OFFSET              boot_flash_off
 #define CONFIG_ENV_ADDR                        SMNAND_ENV_OFFSET
 
-/*-----------------------------------------------------------------------
- * CFI FLASH driver setup
- */
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (100 * CONFIG_SYS_HZ)
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (100 * CONFIG_SYS_HZ)
-
-/* Flash banks JFFS2 should use */
-#define CONFIG_SYS_MAX_MTD_BANKS       (CONFIG_SYS_MAX_FLASH_BANKS + \
-                                       CONFIG_SYS_MAX_NAND_DEVICE)
-#define CONFIG_SYS_JFFS2_MEM_NAND
-/* use flash_info[2] */
-#define CONFIG_SYS_JFFS2_FIRST_BANK    CONFIG_SYS_MAX_FLASH_BANKS
-#define CONFIG_SYS_JFFS2_NUM_BANKS     1
-
 #ifndef __ASSEMBLY__
 extern unsigned int boot_flash_base;
 extern volatile unsigned int boot_flash_env_addr;
index aeb45c6b675fe3b80ee25b96b006406042d3cad3..84b29866bcc0c796c2c9d0a5c16d292a4dcba2a5 100644 (file)
 #define PISMO1_NAND_SIZE               GPMC_SIZE_128M
 #define PISMO1_ONEN_SIZE               GPMC_SIZE_128M
 
-#define CONFIG_SYS_MAX_FLASH_SECT      520     /* max number of sectors */
-                                               /* on one chip */
-#define CONFIG_SYS_MAX_FLASH_BANKS     2       /* max number of flash banks */
 #define CONFIG_SYS_MONITOR_LEN         (256 << 10)     /* Reserve 2 sectors */
 
 #define CONFIG_SYS_FLASH_BASE          boot_flash_base
 #define CONFIG_ENV_OFFSET              boot_flash_off
 #define CONFIG_ENV_ADDR                        boot_flash_env_addr
 
-/*-----------------------------------------------------------------------
- * CFI FLASH driver setup
- */
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (100 * CONFIG_SYS_HZ)
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (100 * CONFIG_SYS_HZ)
-
-/* Flash banks JFFS2 should use */
-#define CONFIG_SYS_MAX_MTD_BANKS       (CONFIG_SYS_MAX_FLASH_BANKS + \
-                                       CONFIG_SYS_MAX_NAND_DEVICE)
-#define CONFIG_SYS_JFFS2_MEM_NAND
-/* use flash_info[2] */
-#define CONFIG_SYS_JFFS2_FIRST_BANK    CONFIG_SYS_MAX_FLASH_BANKS
-#define CONFIG_SYS_JFFS2_NUM_BANKS     1
-
 #ifndef __ASSEMBLY__
 extern unsigned int boot_flash_base;
 extern volatile unsigned int boot_flash_env_addr;
index 79a5b855d7df8fc246aea312166c8c185624c8ec..1b3d43979d9c987bfc6c9aa6f58aa13ff1513553 100644 (file)
 #define PISMO1_NAND_SIZE               GPMC_SIZE_128M
 #define PISMO1_ONEN_SIZE               GPMC_SIZE_128M
 
-#define CONFIG_SYS_MAX_FLASH_SECT      520     /* max number of sectors on */
-                                               /* one chip */
-#define CONFIG_SYS_MAX_FLASH_BANKS     2       /* max number of flash banks */
 #define CONFIG_SYS_MONITOR_LEN         (256 << 10)     /* Reserve 2 sectors */
 
 #define CONFIG_SYS_FLASH_BASE          boot_flash_base
 #define CONFIG_ENV_OFFSET              boot_flash_off
 #define CONFIG_ENV_ADDR                        SMNAND_ENV_OFFSET
 
-/*-----------------------------------------------------------------------
- * CFI FLASH driver setup
- */
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (100 * CONFIG_SYS_HZ)
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (100 * CONFIG_SYS_HZ)
-
-/* Flash banks JFFS2 should use */
-#define CONFIG_SYS_MAX_MTD_BANKS       (CONFIG_SYS_MAX_FLASH_BANKS + \
-                                       CONFIG_SYS_MAX_NAND_DEVICE)
-#define CONFIG_SYS_JFFS2_MEM_NAND
-/* use flash_info[2] */
-#define CONFIG_SYS_JFFS2_FIRST_BANK    CONFIG_SYS_MAX_FLASH_BANKS
-#define CONFIG_SYS_JFFS2_NUM_BANKS     1
-
 #ifndef __ASSEMBLY__
 extern unsigned int boot_flash_base;
 extern volatile unsigned int boot_flash_env_addr;
index b78aacfa088dcc79a4733765491efec05c91771f..72b0cc223b47c72fe4496cd23678d2e599d28ea6 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * (C) Copyright 2008
- * Grazvydas Ignotas <notasas@gmail.com>
+ * (C) Copyright 2008-2010
+ * GraΕΎvydas Ignotas <notasas@gmail.com>
  *
  * Configuration settings for the OMAP3 Pandora.
  *
  * Size of malloc() pool
  */
 #define CONFIG_ENV_SIZE                        (128 << 10)     /* 128 KiB */
-                                               /* Sector */
-#define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + (128 << 10))
-                                               /* initial data */
+#define CONFIG_SYS_MALLOC_LEN          (1024 * 1024 + CONFIG_ENV_SIZE)
 
 /*
  * Hardware drivers
  */
 
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV   1
+#define CONFIG_SYS_DEVICE_NULLDEV      1
+
+/* USB */
+#define CONFIG_MUSB_UDC                        1
+#define CONFIG_USB_OMAP3               1
+#define CONFIG_TWL4030_USB             1
+
+/* USB device configuration */
+#define CONFIG_USB_DEVICE              1
+#define CONFIG_USB_TTY                 1
+
 /*
  * NS16550 Configuration
  */
 
 #define CONFIG_CMD_EXT2                /* EXT2 Support                 */
 #define CONFIG_CMD_FAT         /* FAT support                  */
-#define CONFIG_CMD_JFFS2       /* JFFS2 Support                */
 
 #define CONFIG_CMD_I2C         /* I2C serial bus support       */
 #define CONFIG_CMD_MMC         /* MMC support                  */
 #define CONFIG_CMD_NAND                /* NAND support                 */
+#define CONFIG_CMD_CACHE       /* Cache control                */
 
 #undef CONFIG_CMD_FLASH                /* flinfo, erase, protect       */
 #undef CONFIG_CMD_FPGA         /* FPGA configuration Support   */
 
 #define CONFIG_SYS_MAX_NAND_DEVICE     1       /* Max number of NAND */
                                                /* devices */
-#define CONFIG_JFFS2_NAND
-/* nand device jffs2 lives on */
-#define CONFIG_JFFS2_DEV               "nand0"
-/* start of jffs2 partition */
-#define CONFIG_JFFS2_PART_OFFSET       0x680000
-#define CONFIG_JFFS2_PART_SIZE         0xf980000       /* size of jffs2 */
-                                                       /* partition */
+
+#ifdef CONFIG_CMD_NAND
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_MTD_DEVICE
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#define CONFIG_RBTREE
+#define CONFIG_LZO
+
+#define MTDIDS_DEFAULT                 "nand0=nand"
+#define MTDPARTS_DEFAULT               "mtdparts=nand:512k(xloader),"\
+                                       "1920k(uboot),128k(uboot-env),"\
+                                       "10m(boot),-(rootfs)"
+#else
+#define MTDPARTS_DEFAULT
+#endif
 
 /* Environment information */
 #define CONFIG_BOOTDELAY               1
 
 #define CONFIG_EXTRA_ENV_SETTINGS \
+       "usbtty=cdc_acm\0" \
        "loadaddr=0x82000000\0" \
-       "console=ttyS0,115200n8\0" \
-       "videospec=omapfb:vram:2M,vram:4M\0" \
-       "mmcargs=setenv bootargs console=${console} " \
-               "video=${videospec} " \
-               "root=/dev/mmcblk0p2 rw " \
-               "rootfstype=ext3 rootwait\0" \
-       "nandargs=setenv bootargs console=${console} " \
-               "video=${videospec} " \
-               "root=/dev/mtdblock4 rw " \
-               "rootfstype=jffs2\0" \
-       "loadbootscript=fatload mmc 0 ${loadaddr} boot.scr\0" \
-       "bootscript=echo Running bootscript from mmc ...; " \
-               "source ${loadaddr}\0" \
-       "loaduimage=fatload mmc 0 ${loadaddr} uImage\0" \
-       "mmcboot=echo Booting from mmc ...; " \
-               "run mmcargs; " \
-               "bootm ${loadaddr}\0" \
-       "nandboot=echo Booting from nand ...; " \
-               "run nandargs; " \
-               "nand read ${loadaddr} 280000 400000; " \
-               "bootm ${loadaddr}\0" \
+       "bootargs=ubi.mtd=4 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs " \
+       "rw rootflags=bulk_read console=ttyS0,115200n8 " \
+       "vram=6272K omapfb.vram=0:3000K\0" \
+       "mtdparts=" MTDPARTS_DEFAULT "\0" \
 
 #define CONFIG_BOOTCOMMAND \
-       "if mmc init; then " \
-               "if run loadbootscript; then " \
-                       "run bootscript; " \
-               "else " \
-                       "if run loaduimage; then " \
-                               "run mmcboot; " \
-                       "else run nandboot; " \
-                       "fi; " \
-               "fi; " \
-       "else run nandboot; fi"
+       "if mmc init && fatload mmc1 0 ${loadaddr} autoboot.scr || " \
+                       "ext2load mmc1 0 ${loadaddr} autoboot.scr; then " \
+               "source ${loadaddr}; " \
+       "fi; " \
+       "ubi part boot && ubifsmount boot && ubifsload ${loadaddr} uImage && bootm ${loadaddr}"
 
 #define CONFIG_AUTO_COMPLETE   1
 /*
 /* SDRAM Bank Allocation method */
 #define SDRC_R_B_C             1
 
+#define CONFIG_SYS_TEXT_BASE           0x80008000
+#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
+#define CONFIG_SYS_INIT_RAM_ADDR       0x4020f800
+#define CONFIG_SYS_INIT_RAM_SIZE       0x800
+#define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_INIT_RAM_ADDR + \
+                                       CONFIG_SYS_INIT_RAM_SIZE - \
+                                       GENERATED_GBL_DATA_SIZE)
+
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
 #define PISMO1_NAND_SIZE               GPMC_SIZE_128M
 #define PISMO1_ONEN_SIZE               GPMC_SIZE_128M
 
-#define CONFIG_SYS_MAX_FLASH_SECT      520     /* max number of sectors on */
-                                               /* one chip */
-#define CONFIG_SYS_MAX_FLASH_BANKS     2       /* max number of flash banks */
 #define CONFIG_SYS_MONITOR_LEN         (256 << 10)     /* Reserve 2 sectors */
 
 #define CONFIG_SYS_FLASH_BASE          boot_flash_base
 
 /* Monitor at start of flash */
 #define CONFIG_SYS_MONITOR_BASE                CONFIG_SYS_FLASH_BASE
-#define CONFIG_SYS_ONENAND_BASE                ONENAND_MAP
 
 #define CONFIG_ENV_IS_IN_NAND          1
-#define ONENAND_ENV_OFFSET             0x240000 /* environment starts here */
-#define SMNAND_ENV_OFFSET              0x240000 /* environment starts here */
+#define SMNAND_ENV_OFFSET              0x260000 /* environment starts here */
 
 #define CONFIG_SYS_ENV_SECT_SIZE       boot_flash_sec
 #define CONFIG_ENV_OFFSET              boot_flash_off
 #define CONFIG_ENV_ADDR                        SMNAND_ENV_OFFSET
 
-/*-----------------------------------------------------------------------
- * CFI FLASH driver setup
- */
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (100 * CONFIG_SYS_HZ)
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (100 * CONFIG_SYS_HZ)
-
-/* Flash banks JFFS2 should use */
-#define CONFIG_SYS_MAX_MTD_BANKS       (CONFIG_SYS_MAX_FLASH_BANKS + \
-                                       CONFIG_SYS_MAX_NAND_DEVICE)
-#define CONFIG_SYS_JFFS2_MEM_NAND
-/* use flash_info[2] */
-#define CONFIG_SYS_JFFS2_FIRST_BANK    CONFIG_SYS_MAX_FLASH_BANKS
-#define CONFIG_SYS_JFFS2_NUM_BANKS     1
-
 #ifndef __ASSEMBLY__
 extern unsigned int boot_flash_base;
 extern volatile unsigned int boot_flash_env_addr;
index fab263d6cbd992b0728cb0215e5a2f4fabcc2c1a..a5eb6483b6f3d6239e90c297f8b82c01dbc91666 100644 (file)
 #define PHYS_FLASH_SIZE                        (128 << 20)
 #define CONFIG_SYS_MAX_FLASH_SECT      512     /* max sectors on one chip */
 
-/* timeout values are in milliseconds */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (100 * CONFIG_SYS_HZ)
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (100 * CONFIG_SYS_HZ)
-
 /* OMITTED:  single 2 Gbit KFM2G16 OneNAND flash */
 
 #define CONFIG_ENV_IS_IN_FLASH         1
 #define CONFIG_SYS_MONITOR_BASE                CONFIG_SYS_FLASH_BASE
 #define CONFIG_SYS_MONITOR_LEN         (256 << 10)
 
-#define CONFIG_SYS_JFFS2_FIRST_BANK    CONFIG_SYS_MAX_FLASH_BANKS
-#define CONFIG_SYS_JFFS2_NUM_BANKS     1
-
 /*
  * NAND FLASH usage ... default nCS1:
  *  - four 128KB sectors for X-Loader
index 10b248ad865ef17f914f0fb7064a73ad532991f8..d9e8ea010fd2812e0b80102087e10e9363c45c5c 100644 (file)
 #define PISMO1_NAND_SIZE               GPMC_SIZE_128M
 #define PISMO1_ONEN_SIZE               GPMC_SIZE_128M
 
-#define CONFIG_SYS_MAX_FLASH_SECT      520     /* max number of sectors on */
-                                               /* one chip */
-#define CONFIG_SYS_MAX_FLASH_BANKS     2       /* max number of flash banks */
 #define CONFIG_SYS_MONITOR_LEN         (256 << 10)     /* Reserve 2 sectors */
 
 #define CONFIG_SYS_FLASH_BASE          boot_flash_base
 #define CONFIG_ENV_OFFSET              boot_flash_off
 #define CONFIG_ENV_ADDR                        SMNAND_ENV_OFFSET
 
-/*-----------------------------------------------------------------------
- * CFI FLASH driver setup
- */
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (100 * CONFIG_SYS_HZ)
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (100 * CONFIG_SYS_HZ)
-
-/* Flash banks JFFS2 should use */
-#define CONFIG_SYS_MAX_MTD_BANKS       (CONFIG_SYS_MAX_FLASH_BANKS + \
-                                       CONFIG_SYS_MAX_NAND_DEVICE)
-#define CONFIG_SYS_JFFS2_MEM_NAND
-/* use flash_info[2] */
-#define CONFIG_SYS_JFFS2_FIRST_BANK    CONFIG_SYS_MAX_FLASH_BANKS
-#define CONFIG_SYS_JFFS2_NUM_BANKS     1
-
 #ifndef __ASSEMBLY__
 extern unsigned int boot_flash_base;
 extern volatile unsigned int boot_flash_env_addr;
index b7c301f8ed7eb9b21ffb3a9cd64c1e785b9b8de1..41abe044edd0affe367b10d4ad3db9c0eb021f13 100644 (file)
 #define PISMO1_NAND_SIZE               GPMC_SIZE_128M
 #define PISMO1_ONEN_SIZE               GPMC_SIZE_128M
 
-#define CONFIG_SYS_MAX_FLASH_SECT      520     /* max number of sectors on */
-                                               /* one chip */
-#define CONFIG_SYS_MAX_FLASH_BANKS     2       /* max number of flash banks */
 #define CONFIG_SYS_MONITOR_LEN         (256 << 10)     /* Reserve 2 sectors */
 
 #define CONFIG_SYS_FLASH_BASE          boot_flash_base
 #define CONFIG_ENV_OFFSET              boot_flash_off
 #define CONFIG_ENV_ADDR                        SMNAND_ENV_OFFSET
 
-/*-----------------------------------------------------------------------
- * CFI FLASH driver setup
- */
-/* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (100 * CONFIG_SYS_HZ)
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (100 * CONFIG_SYS_HZ)
-
 #ifndef __ASSEMBLY__
 extern unsigned int boot_flash_base;
 extern volatile unsigned int boot_flash_env_addr;
index eeab11c85702a5c8c04e85812fd9674d1d4c461c..2b03b0f2b629b7b1a300eab2c4919514c0f0831b 100644 (file)
 
 /* Disabled commands */
 #undef CONFIG_CMD_NET
+#undef CONFIG_CMD_NFS
 #undef CONFIG_CMD_FPGA         /* FPGA configuration Support   */
 #undef CONFIG_CMD_IMLS         /* List all found images        */
 
index 68290efca5624bd41cd8d7870b6c759590c86ae9..3627ce7d3a0c9cac6834101c68b606f261316cd5 100644 (file)
@@ -86,7 +86,6 @@
 #define CONFIG_JFFS2_NAND
 #define NAND_MAX_CHIPS                 1
 #define CONFIG_ENV_OFFSET              0x180000
-#define DEF_BOOTM                      ""
 
 /*
  * davinci_nand is a bit of a misnomer since this particular EMIF block is