From 70c8695eeeaae70b75ea3acc8174519980bed8ad Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Fri, 18 Jul 2014 18:41:14 +0800 Subject: [PATCH] fernvale: Relocate to PSRAM Move execution from SPI to PSRAM, to fix 0xa0140000 problem. --- fernvale.ld | 2 +- start.S | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 3 deletions(-) diff --git a/fernvale.ld b/fernvale.ld index 49ab75c..9cbe0c5 100644 --- a/fernvale.ld +++ b/fernvale.ld @@ -39,7 +39,7 @@ SECTIONS { /* The OS entry point is here */ - . = 0x10003460; + . = 0x20000; /* bootloader will copy data to this address */ .text : { _stext = ABSOLUTE(.); KEEP(*(vectors)) diff --git a/start.S b/start.S index 1b2d31f..ad34384 100644 --- a/start.S +++ b/start.S @@ -1,4 +1,58 @@ .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 rv_start: b do_reset @@ -69,13 +123,17 @@ __udiv64: .global ram_memcpy ram_memcpy: - ldr pc, =ram_memcpy_addr + ldr r0, =ram_memcpy_addr + ldr r0, [r0] + mov pc, r0 ram_memcpy_addr: .long 0x70007388 .global ram_bzero ram_bzero: - ldr pc, =ram_bzero_addr + ldr r0, =ram_bzero_addr + ldr r0, [r0] + mov pc, r0 ram_bzero_addr: .long 0x700073bc