# HG changeset patch # User Michael Spacefalcon # Date 1396425734 0 # Node ID 48c08499cede2c76541cb9593fa8a7a8b5ff3de2 # Parent 9df7f9c72e1798bd82c4a7a9177651b4849b9d58 compalstage binaries built diff -r 9df7f9c72e17 -r 48c08499cede target-utils/compalstage/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/target-utils/compalstage/Makefile Wed Apr 02 08:02:14 2014 +0000 @@ -0,0 +1,23 @@ +CC= arm-elf-gcc +OBJCOPY=arm-elf-objcopy + +all: compalstage-plain.bin compalstage-thumb.bin compalstage-1003.bin + +.SUFFIXES: .o .bin + +.o.bin: + ${OBJCOPY} -O binary $< $@ + +compalstage-1003.o: compalstage.S + ${CC} -DPAD_TO_1003 -c -o $@ $< + +compalstage-plain.o: compalstage.S + ${CC} -c -o $@ $< + +compalstage-thumb.o: compalstage.S + ${CC} -DTHUMB_ENTRY -c -o $@ $< + +clean: + rm -f *.o *errs *core *.bin + +FRC: diff -r 9df7f9c72e17 -r 48c08499cede target-utils/compalstage/README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/target-utils/compalstage/README Wed Apr 02 08:02:14 2014 +0000 @@ -0,0 +1,33 @@ +FreeCalypso loadtools have been designed from the beginning to work through +the Calypso chip's own boot ROM. This approach works great for Openmoko and +Pirelli targets, but Compal phones unfortunately have this Calypso boot ROM +disabled at the board level. To run our own code in these phones instead of +booting the regular firmware, we need to go through Compal's own boot code. +The latter allows loading code into IRAM and jumping to it, but not in the +same way as how we do it through the Calypso boot ROM. + +One could argue that the "proper" way to support these Compal phones would be +to build a different version of our loadagent that is designed to be loaded +through Compal's boot code instead of the Calypso boot ROM, and then redesign +our fc-loadtool and fc-xram utilities to work with different loadagents loaded +in different ways on different target devices. But I don't feel like doing +that - too invasive to the once-clean design of loadtools. + +Hence I am adopting a different solution that works in the same way as +OsmocomBB's "chain loading": the IRAM image that is fed to Compal's boot code +is not our real loadagent, but a tiny piece of code that enables the Calypso +boot ROM and jumps to it. All loadtools host programs will include this +optional "Compal stage" at the beginning, enabled for targets that need it, +but will then always fall into the Calypso boot ROM IRAM download path. + +The approach I'm adopting is doubly inefficient for Mot C139/140 phones whose +bootloader effectively requires that the downloaded image be ~15 KiB long +even when we only need to download 32 bytes. But hey, our ultimate goal is to +produce our own Calypso phones, rather than hack those made by diabolical +manufacturers who do not Respect Your Freedom; running our own gsm-fw on the +Mot C139 is only a transitional step, so making fc-loadtool/fc-xram entry +slower by a second or two is probably an acceptable price for keeping the +code clean for the boot-ROM-enabled free world. + +In this directory we build the several different versions of compalstage +needed for different C1xx models. diff -r 9df7f9c72e17 -r 48c08499cede target-utils/compalstage/compalstage.S --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/target-utils/compalstage/compalstage.S Wed Apr 02 08:02:14 2014 +0000 @@ -0,0 +1,27 @@ + .text + .org 0 + +#if THUMB_ENTRY + .code 16 + bx pc + nop +#endif + .code 32 + +/* delay loop like OsmocomBB does */ + mov r1, #0xa0000 +1: subs r1, r1, #1 + bne 1b +/* enable the Calypso boot ROM */ + ldr r1, reg_addr + mov r2, #0x0100 + strh r2, [r1] +/* jump to it! */ + mov pc, #0 +reg_addr: + .word 0xFFFFFB10 + +#if PAD_TO_1003 + .org 0x3be0 + .ascii "1003" +#endif