changeset 314:48c08499cede

compalstage binaries built
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Wed, 02 Apr 2014 08:02:14 +0000
parents 9df7f9c72e17
children 1b4beffc8055
files target-utils/compalstage/Makefile target-utils/compalstage/README target-utils/compalstage/compalstage.S
diffstat 3 files changed, 83 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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:
--- /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.
--- /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