FreeCalypso > hg > freecalypso-citrine
diff sysglue/flashboot.S @ 0:75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 09 Jun 2016 00:02:41 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysglue/flashboot.S Thu Jun 09 00:02:41 2016 +0000 @@ -0,0 +1,124 @@ +/* + * This assembly module contains those bits which are specific to flashable + * image builds only. It puts bits of code into several different sections. + */ + +#include "../include/config.h" + +#if FLASH_BOOT_VIA_BOOTROM +/* + * Put something sensible in the boot ROM overlay area, just for the + * heck of it, or for extra robustness. + */ + .section bootrom.overlay,"ax",%progbits + .code 32 + .org 0 + b BootROM_disabled_entry +#include "vectors.S" +BootROM_disabled_entry: +/* copy the boot ROM switch code to IRAM and jump to it */ + ldr r4, =__romswitch_flash_addr + ldr r5, =__romswitch_ram_addr + ldr r2, =__romswitch_size +1: ldr r0, [r4], #4 + str r0, [r5], #4 + subs r2, r2, #4 + bhi 1b + ldr pc, =__romswitch_ram_addr + + .section bootrom.switch,"ax",%progbits + .code 32 + .org 0 +@ enable the Calypso boot ROM + ldr r1, =0xFFFFFB10 + mov r2, #0x0100 + strh r2, [r1] +@ jump to it! + mov pc, #0 +#endif + + .section flashboot.text,"ax",%progbits + .code 32 + .org 0 +#if FLASH_BOOT_VIA_BOOTROM +/* sane targets with Calypso boot ROM enabled by the PCB wiring */ +/* provide the necessary magic words for the boot ROM */ + .word 0 + .word _Flash_boot_entry +#elif CONFIG_TARGET_C139 || CONFIG_TARGET_C11X +/* + * On this target we'll put a patched version of Compal's boot code in + * flash sector 0 (the brickable one); the main fw images will then be + * flashed starting at 0x10000, which is where our modified boot code + * expects them to be. The interface between our hacked boot code and + * the main fw has been made to mimic TI's TCS211 reference fw. + */ +#include "vectors.S" + .org 0x58 /* put _Flash_boot_entry at 0x10058 */ +#elif CONFIG_TARGET_C155 +/* + * On this target the hand-off point between the bootloader and the main + * fw image coincides with a flash erase block boundary, thus we can reuse + * the original bootloader without having to reflash the brickable sector + * at all. The following bits will appear at 0x20000. + */ + .asciz "FreeCalypso firmware for C155/156 target" + .org 0xE0 +/* C155/156 bootloader jumps here */ + b _Flash_boot_entry +#include "vectors.S" +#else +#error "Unsupported flash boot configuration" +#endif + + .globl _Flash_boot_entry +_Flash_boot_entry: +/* first order of business: configure flash and XRAM access */ + ldr r2, =0xFFFFFB00 +#if CONFIG_TARGET_PIRELLI + mov r0, #0x00A4 + strh r0, [r2, #0] + strh r0, [r2, #2] + strh r0, [r2, #6] +#elif CONFIG_TARGET_FCFAM + mov r0, #0x00A4 + strh r0, [r2, #0] + strh r0, [r2, #2] + strh r0, [r2, #4] +#else + mov r0, #0x00A3 + strh r0, [r2, #0] + strh r0, [r2, #2] +#endif +/* + * On targets with 8 MiB flash (or XRAM) banks we need to switch the + * CS4/ADD22 pin to the ADD22 function. We could do it for all targets + * (not aware of any that need the pin to be CS4), but we strongly + * prefer to have a consistent execution environment between flashImage + * and ramImage, so let's only do this setting on those targets + * on which we do it in ../../loadtools/scripts/*.init (for fc-xram). + */ +#if CONFIG_TARGET_PIRELLI || CONFIG_TARGET_C155 || CONFIG_TARGET_FCFAM + ldr r1, =0xFFFEF006 + mov r2, #0x0008 + strh r2, [r1] +#endif +/* we now have full access to all flash and RAM on the device */ +/* copy iram.text to where it's supposed to be */ + ldr r8, =__iramtext_flash_addr + ldr r9, =__iramtext_ram_addr + ldr r10, =__iramtext_size +1: ldmia r8!, {r0-r7} + stmia r9!, {r0-r7} + subs r10, r10, #0x20 + bhi 1b +/* likewise copy .data from flash to XRAM */ + ldr r8, =__initdata_flash_addr + ldr r9, =__initdata_ram_addr + ldr r10, =__initdata_size +1: ldmia r8!, {r0-r7} + stmia r9!, {r0-r7} + subs r10, r10, #0x20 + bhi 1b +/* boot path joins with fc-xram loadable builds */ + b _FlashorXram_entry