fernvale: Relocate to PSRAM

Move execution from SPI to PSRAM, to fix 0xa0140000 problem.
This commit is contained in:
Sean Cross 2014-07-18 18:41:14 +08:00
parent e858d5eeae
commit 70c8695eee
2 changed files with 61 additions and 3 deletions

View file

@ -39,7 +39,7 @@ SECTIONS
{ {
/* The OS entry point is here */ /* The OS entry point is here */
. = 0x10003460; . = 0x20000; /* bootloader will copy data to this address */
.text : { .text : {
_stext = ABSOLUTE(.); _stext = ABSOLUTE(.);
KEEP(*(vectors)) KEEP(*(vectors))

62
start.S
View file

@ -1,4 +1,58 @@
.section vectors .section vectors
.global reset
reset:
mov r0, #48
bl uart_putc
mov r0, #49
bl uart_putc
ldr r0, =0x7000cffc // stack_start
mov sp, r0
mov r2, #0xffffffff
ldr r1, =0x7000c000 // stack_end
clear_stack:
cmp r1, r0
str r2, [r0]
sub r0, r0, #4
bcc clear_stack
mov r0, #66
bl uart_putc
# Copy 0x10000 bytes from =spi_offset to psram at 0x20000
copy_code_to_ram:
mov r0, #0x20000
ldr r1, =0x10003460 // spi_offset
mov r2, r1
mov r3, #0x10000
add r2, r2, r3
copy_code_to_ram_loop:
cmp r1, r2
ldrcc r3, [r1], #4
strcc r3, [r0], #4
bcc copy_code_to_ram_loop
# Jump to main, which ought to be in psram now
jump_to_main:
mov r0, #69
bl uart_putc
ldr r0, =reset_handler
mov pc, r0
uart_putc:
ldr r2, =0xa0080014 // uart offset
uart_putc_ready_wait:
ldr r1, [r2]
tst r1, #0x20
beq uart_putc_ready_wait
sub r2, r2, #0x14
str r0, [r2]
bx lr
.global rv_start .global rv_start
rv_start: rv_start:
b do_reset b do_reset
@ -69,13 +123,17 @@ __udiv64:
.global ram_memcpy .global ram_memcpy
ram_memcpy: ram_memcpy:
ldr pc, =ram_memcpy_addr ldr r0, =ram_memcpy_addr
ldr r0, [r0]
mov pc, r0
ram_memcpy_addr: ram_memcpy_addr:
.long 0x70007388 .long 0x70007388
.global ram_bzero .global ram_bzero
ram_bzero: ram_bzero:
ldr pc, =ram_bzero_addr ldr r0, =ram_bzero_addr
ldr r0, [r0]
mov pc, r0
ram_bzero_addr: ram_bzero_addr:
.long 0x700073bc .long 0x700073bc