diff options
| author | Wolfgang Denk <wd@denx.de> | 2010-11-26 21:52:52 +0100 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2010-11-26 21:52:52 +0100 | 
| commit | d4752d5d2c6b240637a51a2f111b1b1a318fb0bf (patch) | |
| tree | 70f78b1eadbd6d4ac1f4e7b8b25955da64754a16 | |
| parent | 50e2df374952549fb378fd342eebeb8afd1103f5 (diff) | |
| parent | fc90c06cac1966ca3a4e5826cf795996882d1095 (diff) | |
| download | olio-uboot-2014.01-d4752d5d2c6b240637a51a2f111b1b1a318fb0bf.tar.xz olio-uboot-2014.01-d4752d5d2c6b240637a51a2f111b1b1a318fb0bf.zip | |
Merge branch 'master' of /home/wd/git/u-boot/custodians
46 files changed, 1581 insertions, 922 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index 9258cb127..9bf52fa94 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -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 diff --git a/arch/arm/cpu/arm1176/start.S b/arch/arm/cpu/arm1176/start.S index f04d26888..cd8f01637 100644 --- a/arch/arm/cpu/arm1176/start.S +++ b/arch/arm/cpu/arm1176/start.S @@ -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 diff --git a/arch/arm/cpu/arm720t/start.S b/arch/arm/cpu/arm720t/start.S index 8cd267b35..46050dab6 100644 --- a/arch/arm/cpu/arm720t/start.S +++ b/arch/arm/cpu/arm720t/start.S @@ -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  /*   ************************************************************************* diff --git a/arch/arm/cpu/arm720t/u-boot.lds b/arch/arm/cpu/arm720t/u-boot.lds index 4a0bc70c7..0686e423e 100644 --- a/arch/arm/cpu/arm720t/u-boot.lds +++ b/arch/arm/cpu/arm720t/u-boot.lds @@ -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*) }  } diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S index d4edde797..01edb9bdc 100644 --- a/arch/arm/cpu/arm920t/start.S +++ b/arch/arm/cpu/arm920t/start.S @@ -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 +  /*   *************************************************************************   * diff --git a/arch/arm/cpu/arm920t/u-boot.lds b/arch/arm/cpu/arm920t/u-boot.lds index 698543479..a6f8b56a3 100644 --- a/arch/arm/cpu/arm920t/u-boot.lds +++ b/arch/arm/cpu/arm920t/u-boot.lds @@ -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*) }  } diff --git a/arch/arm/cpu/arm925t/start.S b/arch/arm/cpu/arm925t/start.S index 51229c615..ce590a703 100644 --- a/arch/arm/cpu/arm925t/start.S +++ b/arch/arm/cpu/arm925t/start.S @@ -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 +  /*   *************************************************************************   * diff --git a/arch/arm/cpu/arm925t/u-boot.lds b/arch/arm/cpu/arm925t/u-boot.lds index 1c4e9bcfb..7b53edb9b 100644 --- a/arch/arm/cpu/arm925t/u-boot.lds +++ b/arch/arm/cpu/arm925t/u-boot.lds @@ -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/arch/arm/cpu/arm946es/start.S b/arch/arm/cpu/arm946es/start.S index cad43ba04..f4950f707 100644 --- a/arch/arm/cpu/arm946es/start.S +++ b/arch/arm/cpu/arm946es/start.S @@ -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 +  /*   *************************************************************************   * diff --git a/arch/arm/cpu/arm946es/u-boot.lds b/arch/arm/cpu/arm946es/u-boot.lds index 653596309..eb9197971 100644 --- a/arch/arm/cpu/arm946es/u-boot.lds +++ b/arch/arm/cpu/arm946es/u-boot.lds @@ -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*) }  } diff --git a/arch/arm/cpu/arm_intcm/start.S b/arch/arm/cpu/arm_intcm/start.S index 957ca3476..fcaba30f5 100644 --- a/arch/arm/cpu/arm_intcm/start.S +++ b/arch/arm/cpu/arm_intcm/start.S @@ -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  /*   ************************************************************************* diff --git a/arch/arm/cpu/arm_intcm/u-boot.lds b/arch/arm/cpu/arm_intcm/u-boot.lds index 242c7ece0..3b5c18d72 100644 --- a/arch/arm/cpu/arm_intcm/u-boot.lds +++ b/arch/arm/cpu/arm_intcm/u-boot.lds @@ -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*) }  } diff --git a/arch/arm/cpu/armv7/omap4/board.c b/arch/arm/cpu/armv7/omap4/board.c index e7651d2dd..fcd29a73e 100644 --- a/arch/arm/cpu/armv7/omap4/board.c +++ b/arch/arm/cpu/armv7/omap4/board.c @@ -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(); diff --git a/arch/arm/cpu/ixp/start.S b/arch/arm/cpu/ixp/start.S index 8d1aebc71..d1ab19bf5 100644 --- a/arch/arm/cpu/ixp/start.S +++ b/arch/arm/cpu/ixp/start.S @@ -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  /****************************************************************************/  /*									    */ diff --git a/arch/arm/cpu/ixp/u-boot.lds b/arch/arm/cpu/ixp/u-boot.lds index f3d9dc514..a55eb8a50 100644 --- a/arch/arm/cpu/ixp/u-boot.lds +++ b/arch/arm/cpu/ixp/u-boot.lds @@ -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*) }  } diff --git a/arch/arm/cpu/lh7a40x/start.S b/arch/arm/cpu/lh7a40x/start.S index fd8a40b8a..5cf477b1a 100644 --- a/arch/arm/cpu/lh7a40x/start.S +++ b/arch/arm/cpu/lh7a40x/start.S @@ -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  /*   ************************************************************************* diff --git a/arch/arm/cpu/lh7a40x/u-boot.lds b/arch/arm/cpu/lh7a40x/u-boot.lds index cb55b0a27..463237d91 100644 --- a/arch/arm/cpu/lh7a40x/u-boot.lds +++ b/arch/arm/cpu/lh7a40x/u-boot.lds @@ -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*) }  } diff --git a/arch/arm/cpu/s3c44b0/start.S b/arch/arm/cpu/s3c44b0/start.S index 67b2c6a69..8c7100c2b 100644 --- a/arch/arm/cpu/s3c44b0/start.S +++ b/arch/arm/cpu/s3c44b0/start.S @@ -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  /*   ************************************************************************* diff --git a/arch/arm/cpu/s3c44b0/u-boot.lds b/arch/arm/cpu/s3c44b0/u-boot.lds index bbc8c3aa5..ac2944018 100644 --- a/arch/arm/cpu/s3c44b0/u-boot.lds +++ b/arch/arm/cpu/s3c44b0/u-boot.lds @@ -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*) }  } diff --git a/arch/arm/cpu/sa1100/start.S b/arch/arm/cpu/sa1100/start.S index ace0c074d..36d44da1f 100644 --- a/arch/arm/cpu/sa1100/start.S +++ b/arch/arm/cpu/sa1100/start.S @@ -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  /*   ************************************************************************* diff --git a/arch/arm/cpu/sa1100/u-boot.lds b/arch/arm/cpu/sa1100/u-boot.lds index 2e2929190..fa6d05cdf 100644 --- a/arch/arm/cpu/sa1100/u-boot.lds +++ b/arch/arm/cpu/sa1100/u-boot.lds @@ -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 index 000000000..bfcc6d939 --- /dev/null +++ b/board/Seagate/dockstar/Makefile @@ -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 index 000000000..cab3a8394 --- /dev/null +++ b/board/Seagate/dockstar/dockstar.c @@ -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 |= (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 index 000000000..a2efe87e6 --- /dev/null +++ b/board/Seagate/dockstar/dockstar.h @@ -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 index 000000000..98b514ddf --- /dev/null +++ b/board/Seagate/dockstar/kwbimage.cfg @@ -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 diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c index c8c5e1b30..c3267cbf5 100644 --- a/board/davinci/da8xxevm/da850evm.c +++ b/board/davinci/da8xxevm/da850evm.c @@ -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 index 0fab80c92..000000000 --- a/board/pandora/config.mk +++ /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 diff --git a/boards.cfg b/boards.cfg index a37ccc525..87003bd3a 100644 --- a/boards.cfg +++ b/boards.cfg @@ -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 diff --git a/doc/README.davinci b/doc/README.davinci index 506f0d432..0204372a2 100644 --- a/doc/README.davinci +++ b/doc/README.davinci @@ -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 diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c index c7f76209f..6f2280abf 100644 --- a/drivers/mmc/omap_hsmmc.c +++ b/drivers/mmc/omap_hsmmc.c @@ -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);  } diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 982f96e8b..6eb38a413 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -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); diff --git a/drivers/usb/host/ehci-ppc4xx.c b/drivers/usb/host/ehci-ppc4xx.c index 946a0a07e..117991998 100644 --- a/drivers/usb/host/ehci-ppc4xx.c +++ b/drivers/usb/host/ehci-ppc4xx.c @@ -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;  } diff --git a/include/configs/da830evm.h b/include/configs/da830evm.h index 1feada926..bcf8ee04d 100644 --- a/include/configs/da830evm.h +++ b/include/configs/da830evm.h @@ -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 */ @@ -115,7 +114,6 @@  #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 @@ -280,4 +278,11 @@  	"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 */ diff --git a/include/configs/da850evm.h b/include/configs/da850evm.h index 7b04be05b..4224258a9 100644 --- a/include/configs/da850evm.h +++ b/include/configs/da850evm.h @@ -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  /* @@ -140,6 +139,7 @@   */  #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" diff --git a/include/configs/davinci_dvevm.h b/include/configs/davinci_dvevm.h index 186726d3a..e1b1db16e 100644 --- a/include/configs/davinci_dvevm.h +++ b/include/configs/davinci_dvevm.h @@ -138,7 +138,6 @@  #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/davinci_sonata.h b/include/configs/davinci_sonata.h index 0dc89ef41..f0eeb90e9 100644 --- a/include/configs/davinci_sonata.h +++ b/include/configs/davinci_sonata.h @@ -126,7 +126,6 @@  #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 index 000000000..249f93bf1 --- /dev/null +++ b/include/configs/dockstar.h @@ -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 */ diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h index 076dd5a8a..56363f762 100644 --- a/include/configs/omap3_beagle.h +++ b/include/configs/omap3_beagle.h @@ -304,9 +304,6 @@  #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 @@ -323,21 +320,6 @@  #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; diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h index aeb45c6b6..84b29866b 100644 --- a/include/configs/omap3_evm.h +++ b/include/configs/omap3_evm.h @@ -296,9 +296,6 @@  #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 @@ -321,21 +318,6 @@  #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; diff --git a/include/configs/omap3_overo.h b/include/configs/omap3_overo.h index 79a5b855d..1b3d43979 100644 --- a/include/configs/omap3_overo.h +++ b/include/configs/omap3_overo.h @@ -269,9 +269,6 @@  #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 @@ -288,21 +285,6 @@  #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; diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h index b78aacfa0..72b0cc223 100644 --- a/include/configs/omap3_pandora.h +++ b/include/configs/omap3_pandora.h @@ -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.   * @@ -59,14 +59,24 @@   * 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   */ @@ -101,11 +111,11 @@  #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	*/ @@ -141,52 +151,41 @@  #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  /* @@ -243,6 +242,14 @@  /* 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   */ @@ -253,40 +260,20 @@  #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; diff --git a/include/configs/omap3_sdp3430.h b/include/configs/omap3_sdp3430.h index fab263d6c..a5eb6483b 100644 --- a/include/configs/omap3_sdp3430.h +++ b/include/configs/omap3_sdp3430.h @@ -159,10 +159,6 @@  #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 @@ -338,9 +334,6 @@  #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 diff --git a/include/configs/omap3_zoom1.h b/include/configs/omap3_zoom1.h index 10b248ad8..d9e8ea010 100644 --- a/include/configs/omap3_zoom1.h +++ b/include/configs/omap3_zoom1.h @@ -277,9 +277,6 @@  #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 @@ -296,21 +293,6 @@  #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; diff --git a/include/configs/omap3_zoom2.h b/include/configs/omap3_zoom2.h index b7c301f8e..41abe044e 100644 --- a/include/configs/omap3_zoom2.h +++ b/include/configs/omap3_zoom2.h @@ -246,9 +246,6 @@  #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 @@ -263,13 +260,6 @@  #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; diff --git a/include/configs/omap4_panda.h b/include/configs/omap4_panda.h index eeab11c85..2b03b0f2b 100644 --- a/include/configs/omap4_panda.h +++ b/include/configs/omap4_panda.h @@ -134,6 +134,7 @@  /* 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        */ diff --git a/include/configs/tnetv107x_evm.h b/include/configs/tnetv107x_evm.h index 68290efca..3627ce7d3 100644 --- a/include/configs/tnetv107x_evm.h +++ b/include/configs/tnetv107x_evm.h @@ -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 |