| Index: umsboot/src/app/umsboot/console.h | 
| — | — | @@ -1,5 +1,5 @@ | 
| 2 |  | -#ifndef __TARGET_UMSBOOT_IPODNANO2G_H__ | 
| 3 |  | -#define __TARGET_UMSBOOT_IPODNANO2G_H__ | 
|  | 2 | +#ifndef __APP_UMSBOOT_CONSOLE_H__ | 
|  | 3 | +#define __APP_UMSBOOT_CONSOLE_H__ | 
| 4 | 4 |  | 
| 5 | 5 | #include "global.h" | 
| 6 | 6 | #include "interface/console/console.h" | 
| Index: umsboot/src/app/umsboot/DEPS | 
| — | — | @@ -1,3 +1,4 @@ | 
| 2 | 2 | ../../interface/lcd | 
| 3 | 3 | ../../lib/simpletextrenderer | 
| 4 | 4 | ../../lib/fbconsole | 
|  | 5 | + | 
| Index: umsboot/src/app/umsboot/SOURCES | 
| — | — | @@ -3,3 +3,4 @@ | 
| 4 | 4 | main.c | 
| 5 | 5 | usbglue.c | 
| 6 | 6 | ums.c | 
|  | 7 | + | 
| Index: umsboot/src/soc/s5l87xx/startup.S | 
| — | — | @@ -26,22 +26,21 @@ | 
| 27 | 27 | .extern _fiq_handler | 
| 28 | 28 |  | 
| 29 | 29 |  | 
| 30 |  | -.global _vectors | 
| 31 | 30 | .section .vectors,"ax",%progbits | 
| 32 |  | -_vectors: | 
| 33 |  | -    b _reset_handler | 
| 34 |  | -    b _undef_instr_handler | 
| 35 |  | -    b _syscall_handler | 
| 36 |  | -    b _prefetch_abort_handler | 
| 37 |  | -    b _data_abort_handler | 
| 38 |  | -    b _reserved_handler | 
| 39 |  | -    b _irq_handler | 
| 40 |  | -    b _fiq_handler | 
|  | 31 | +    ldr pc, =_reserved_handler | 
|  | 32 | +    ldr pc, =_undef_instr_handler | 
|  | 33 | +    ldr pc, =_syscall_handler | 
|  | 34 | +    ldr pc, =_prefetch_abort_handler | 
|  | 35 | +    ldr pc, =_data_abort_handler | 
|  | 36 | +    ldr pc, =_reserved_handler | 
|  | 37 | +    ldr pc, =_irq_handler | 
|  | 38 | +    ldr pc, =_fiq_handler | 
| 41 | 39 |  | 
| 42 |  | -_reset_handler: | 
|  | 40 | + | 
|  | 41 | +.section .init,"ax",%progbits | 
| 43 | 42 | @ Check if we need to relocate ourselves | 
| 44 |  | -    adr r0, _vectors | 
| 45 |  | -    ldr r1, =_vectors | 
|  | 43 | +    adr r0, _init_end | 
|  | 44 | +    ldr r1, =_text | 
| 46 | 45 | cmp r0, r1 | 
| 47 | 46 | beq _relocated | 
| 48 | 47 | @ Move around as necessary | 
| — | — | @@ -53,6 +52,19 @@ | 
| 54 | 53 | subs r2, r2, #1 | 
| 55 | 54 | bne _copy | 
| 56 | 55 | _relocated: | 
|  | 56 | +    @ Check if the vectors need to be copied | 
|  | 57 | +    ldr r2, =_vectors_src | 
|  | 58 | +    sub r0, r0, r1 | 
|  | 59 | +    add r0, r0, r2 | 
|  | 60 | +    ldr r2, =(_vectors_size + 31) | 
|  | 61 | +    ldr r1, =_vectors | 
|  | 62 | +    mov r2, r2,lsr#5 | 
|  | 63 | +    @ Copy vectors | 
|  | 64 | +_vectors_copy: | 
|  | 65 | +    ldmia r0!, {r4-r11} | 
|  | 66 | +    stmia r1!, {r4-r11} | 
|  | 67 | +    subs r2, r2, #1 | 
|  | 68 | +    bne _vectors_copy | 
| 57 | 69 | #ifdef SOC_S5L8701 | 
| 58 | 70 | @ Detect execution base address and remap memory at 0x0 accordingly (for IRQ vectors) | 
| 59 | 71 | tst r1, #0x20000000 | 
| — | — | @@ -136,7 +148,10 @@ | 
| 137 | 149 |  | 
| 138 | 150 | @ Jump to final execution address (after relocation) | 
| 139 | 151 | ldr pc, =_enable_irqs | 
|  | 152 | +.ltorg | 
|  | 153 | +_init_end: | 
| 140 | 154 |  | 
|  | 155 | +.section .text,"ax",%progbits | 
| 141 | 156 | _enable_irqs: | 
| 142 | 157 | @ Mask and clear all IRQs | 
| 143 | 158 | #ifdef SOC_S5L8701 | 
| — | — | @@ -228,3 +243,4 @@ | 
| 229 | 244 | b hang | 
| 230 | 245 | .size reset, .-reset | 
| 231 | 246 | .size hang, .-hang | 
|  | 247 | + | 
| Index: umsboot/src/soc/s5l87xx/target.h | 
| — | — | @@ -4,3 +4,4 @@ | 
| 5 | 5 |  | 
| 6 | 6 |  | 
| 7 | 7 | #endif | 
|  | 8 | + | 
| Index: umsboot/src/soc/s5l87xx/link.lds | 
| — | — | @@ -13,18 +13,36 @@ | 
| 14 | 14 | #define SDRAM_SIZE DEFAULT_SDRAM_SIZE | 
| 15 | 15 | #endif | 
| 16 | 16 |  | 
|  | 17 | +#ifndef VECTORS_REGION | 
|  | 18 | +#define VECTORS_REGION SRAM | 
|  | 19 | +#endif | 
|  | 20 | +#ifndef VECTORS_BASE | 
|  | 21 | +#define VECTORS_BASE SRAM_BASE | 
|  | 22 | +#endif | 
| 17 | 23 | #ifndef CODE_REGION | 
| 18 | 24 | #define CODE_REGION SDRAM | 
| 19 | 25 | #endif | 
|  | 26 | +#ifndef CODE_BASE | 
|  | 27 | +#define CODE_BASE | 
|  | 28 | +#endif | 
| 20 | 29 | #ifndef BSS_REGION | 
| 21 | 30 | #define BSS_REGION SDRAM | 
| 22 | 31 | #endif | 
|  | 32 | +#ifndef BSS_BASE | 
|  | 33 | +#define BSS_BASE | 
|  | 34 | +#endif | 
| 23 | 35 | #ifndef DMABSS_REGION | 
| 24 | 36 | #define DMABSS_REGION SRAM | 
| 25 | 37 | #endif | 
|  | 38 | +#ifndef DMABSS_BASE | 
|  | 39 | +#define DMABSS_BASE | 
|  | 40 | +#endif | 
| 26 | 41 | #ifndef STACK_REGION | 
| 27 | 42 | #define STACK_REGION SRAM | 
| 28 | 43 | #endif | 
|  | 44 | +#ifndef STACK_BASE | 
|  | 45 | +#define STACK_BASE | 
|  | 46 | +#endif | 
| 29 | 47 |  | 
| 30 | 48 | #ifndef STACK_SIZE | 
| 31 | 49 | #define STACK_SIZE 0x1000 | 
| — | — | @@ -44,16 +62,18 @@ | 
| 45 | 63 | SDRAM : ORIGIN = SDRAM_BASE, LENGTH = SDRAM_SIZE | 
| 46 | 64 | } | 
| 47 | 65 |  | 
| 48 |  | -_entry = _vectors; | 
|  | 66 | +_entry = _init; | 
| 49 | 67 | ENTRY(_entry) | 
| 50 | 68 |  | 
| 51 | 69 | SECTIONS | 
| 52 | 70 | { | 
| 53 | 71 |  | 
| 54 |  | -    .text : | 
|  | 72 | +    .text CODE_BASE : | 
| 55 | 73 | { | 
|  | 74 | +        _init = .; | 
|  | 75 | +        KEEP(*(.init)) | 
|  | 76 | +        _init_end = .; | 
| 56 | 77 | _text = .; | 
| 57 |  | -        KEEP(*(.vectors)) | 
| 58 | 78 | *(.text) | 
| 59 | 79 | *(.text.*) | 
| 60 | 80 | *(.rodata) | 
| — | — | @@ -70,9 +90,25 @@ | 
| 71 | 91 |  | 
| 72 | 92 | _text_size = _text_end - _text; | 
| 73 | 93 |  | 
| 74 |  | -    .bss (NOLOAD) : | 
|  | 94 | +    .vectors VECTORS_BASE : | 
| 75 | 95 | { | 
|  | 96 | +        _vectors = .; | 
|  | 97 | +        KEEP(*(.vectors)) | 
|  | 98 | +        _vectors_end = .; | 
|  | 99 | +    } >VECTORS_REGION AT>CODE_REGION | 
|  | 100 | + | 
|  | 101 | +    _vectors_src = LOADADDR(.vectors); | 
|  | 102 | +    _vectors_size = _vectors_end - _vectors; | 
|  | 103 | + | 
|  | 104 | +    .dummy _text_end - 4 : | 
|  | 105 | +    { | 
|  | 106 | +        . += 4; | 
| 76 | 107 | . = ALIGN(1 << CACHEALIGN_BITS); | 
|  | 108 | +    } >CODE_REGION | 
|  | 109 | + | 
|  | 110 | +    .bss BSS_BASE (NOLOAD) : | 
|  | 111 | +    { | 
|  | 112 | +        . = ALIGN(1 << CACHEALIGN_BITS); | 
| 77 | 113 | _bss = .; | 
| 78 | 114 | *(.bss) | 
| 79 | 115 | *(.bss.*) | 
| — | — | @@ -83,7 +119,7 @@ | 
| 84 | 120 |  | 
| 85 | 121 | _bss_size = _bss_end - _bss; | 
| 86 | 122 |  | 
| 87 |  | -    .dmabss (NOLOAD) : | 
|  | 123 | +    .dmabss DMABSS_BASE (NOLOAD) : | 
| 88 | 124 | { | 
| 89 | 125 | . = ALIGN(1 << CACHEALIGN_BITS); | 
| 90 | 126 | _dmabss = .; | 
| — | — | @@ -95,7 +131,7 @@ | 
| 96 | 132 |  | 
| 97 | 133 | _dmabss_size = _dmabss_end - _dmabss; | 
| 98 | 134 |  | 
| 99 |  | -    .stack (NOLOAD) : | 
|  | 135 | +    .stack STACK_BASE (NOLOAD) : | 
| 100 | 136 | { | 
| 101 | 137 | . = ALIGN(1 << CACHEALIGN_BITS); | 
| 102 | 138 | _stack = .; | 
| Index: umsboot/src/soc/s5l87xx/init.c | 
| — | — | @@ -7,3 +7,4 @@ | 
| 8 | 8 | { | 
| 9 | 9 | main(); | 
| 10 | 10 | } | 
|  | 11 | + | 
| Index: umsboot/src/sys/util.h | 
| — | — | @@ -111,7 +111,7 @@ | 
| 112 | 112 | #ifndef ASM_FILE | 
| 113 | 113 | extern __attribute__((noreturn)) void powerdown(); | 
| 114 | 114 | extern __attribute__((noreturn)) void hang(); | 
| 115 |  | -extern __attribute__((pure)) void idle(); | 
|  | 115 | +extern void idle(); | 
| 116 | 116 | extern __attribute__((noreturn)) void execfirmware(void* address); | 
| 117 | 117 | extern void enter_critical_section(); | 
| 118 | 118 | extern void leave_critical_section(); | 
| Index: umsboot/Makefile | 
| — | — | @@ -99,7 +99,7 @@ | 
| 100 | 100 | SRC := $(foreach file,$(SRC),$(call relpath,$(file))) | 
| 101 | 101 | OBJ := $(SRC:src/%.c=build/$(TARGET)/$(TYPE)/%.o) | 
| 102 | 102 | OBJ := $(OBJ:src/%.S=build/$(TARGET)/$(TYPE)/%.o) | 
| 103 |  | -_LDSCRIPT = $(LDSCRIPT:src/%.lds=build/$(TARGET)/$(TYPE)/%.lds) | 
|  | 103 | +_LDSCRIPT := $(LDSCRIPT:src/%.lds=build/$(TARGET)/$(TYPE)/%.lds) | 
| 104 | 104 |  | 
| 105 | 105 | _ASMFLAGS := $(CFLAGS_GENERAL) $(CFLAGS_ASM) $(CFLAGS_$(TYPE)) $(_CFLAGS) $(_PPFLAGS) $(CFLAGS) $(ASMFLAGS) | 
| 106 | 106 | _CFLAGS := $(CFLAGS_GENERAL) $(CFLAGS_$(TYPE)) $(_CFLAGS) $(_PPFLAGS) $(CFLAGS) |