[linux-yocto] [PATCH 12/87] arch/arm/boot/fmboot: adding support for Fast Models

Paul Butler butler.paul at gmail.com
Mon May 27 09:55:43 PDT 2013


Signed-off-by: Paul Butler <paul.butler at windriver.com>
---
 arch/arm/boot/fmboot/Makefile   | 25 +++++++++++++
 arch/arm/boot/fmboot/fmboot.S   | 80 +++++++++++++++++++++++++++++++++++++++++
 arch/arm/boot/fmboot/fmboot.lds | 30 ++++++++++++++++
 arch/arm/boot/fmboot/pack.py    | 10 ++++++
 4 files changed, 145 insertions(+)
 create mode 100644 arch/arm/boot/fmboot/Makefile
 create mode 100644 arch/arm/boot/fmboot/fmboot.S
 create mode 100644 arch/arm/boot/fmboot/fmboot.lds
 create mode 100644 arch/arm/boot/fmboot/pack.py

diff --git a/arch/arm/boot/fmboot/Makefile b/arch/arm/boot/fmboot/Makefile
new file mode 100644
index 0000000..9b2b42e
--- /dev/null
+++ b/arch/arm/boot/fmboot/Makefile
@@ -0,0 +1,25 @@
+# Build an image for Fast Models
+
+AS		= $(CROSS_COMPILE)gcc -c
+LD		= $(CROSS_COMPILE)ld
+
+DTC = ../../../../scripts/dtc/dtc
+DTS = ../dts/axm-sim.dts
+ZIMAGE = ../zImage
+
+all: clean linux.fm
+
+clean:
+	rm -f linux.fm fmboot.o zImage.fm axm-sim.dtb
+
+linux.fm: fmboot.o fmboot.lds zImage.fm
+	$(LD) -o $@ --script=fmboot.lds
+
+zImage.fm: $(ZIMAGE) axm-sim.dtb
+	python pack.py $(ZIMAGE) axm-sim.dtb > $@
+
+axm-sim.dtb: $(DTS)
+	$(DTC) -O dtb -o $@ $<
+
+fmboot.o: fmboot.S
+	$(AS) -o $@ $<
diff --git a/arch/arm/boot/fmboot/fmboot.S b/arch/arm/boot/fmboot/fmboot.S
new file mode 100644
index 0000000..cd52371
--- /dev/null
+++ b/arch/arm/boot/fmboot/fmboot.S
@@ -0,0 +1,80 @@
+/*
+ * boot.S - simple register setup code for stand-alone Linux booting
+ *
+ * Copyright (C) 2011 ARM Limited. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE.txt file.
+ */
+
+#define SPIN_TABLE_BASE 0x10000000
+
+	.syntax	unified
+	.text
+
+	.globl	_start
+_start:
+	@
+	@ Program architected timer frequency
+	@
+	mrc	p15, 0, r0, c0, c1, 1		@ CPUID_EXT_PFR1
+	lsr	r0, r0, #16
+	ands	r0, r0, #1			@ Check generic timer support
+	beq	1f
+	ldr	r0, =100000000			@ 100MHz timer frequency
+	mcr	p15, 0, r0, c14, c0, 0		@ CNTFRQ
+1:
+	@
+	@ CPU initialisation
+	@
+	mrc	p15, 0, r0, c0, c0, 5		@ MPIDR (ARMv7 only)
+	and	r0, r0, #15			@ CPU number
+	cmp	r0, #0				@ primary CPU?
+	beq	2f
+
+	@
+	@ Secondary CPUs
+	@
+	ldr	r1, =SPIN_TABLE_BASE
+	adr	r2, 1f
+	ldmia	r2, {r3 - r7}			@ move the code to a location
+	stmia	r1, {r3 - r7}			@ less likely to be overridden
+	add	r0, r1, #0x20			@ Entry point for secondary
+						@ CPUs @ SPIN_TABLE_BASE+0x20
+	mov	r2, #0
+	str	r2, [r0, #0]			@ ensure initially zero
+	mov	pc, r1				@ branch to the relocated code
+1:
+	wfe
+	ldr	r1, [r0]
+	cmp	r1, #0
+	beq	1b
+	mov	pc, r1				@ branch to the given address
+
+	@
+	@ Kernel parameters
+	@
+2:	mov	r0, #0				@ Must be zero
+	mov	r1, #0				@ Machine type (not needed)
+	adr	r2, atags			@ ATAGS pointer
+	mov	r3, #0
+	ldr	lr, =kernel
+	mov     pc, lr				@ jump to the kernel
+
+	.org	0x100
+atags:
+	@ ATAG_CORE
+	.long	2
+	.long	0x54410001
+
+	@ ATAG_CMDLINE
+	.long	(1f - .) >> 2
+	.long	0x54410009
+	.asciz	"root=/dev/mmcblk0 rootwait ip=none mem=1024M console=ttyAMA0"
+
+	.align	2
+1:
+
+	@ ATAG_NONE
+	.long	0
+	.long	0x00000000
diff --git a/arch/arm/boot/fmboot/fmboot.lds b/arch/arm/boot/fmboot/fmboot.lds
new file mode 100644
index 0000000..8cde9f8
--- /dev/null
+++ b/arch/arm/boot/fmboot/fmboot.lds
@@ -0,0 +1,30 @@
+/*
+ * fmboot.lds
+ *
+ * Copyright (C) 2011 ARM Limited. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE.txt file.
+ */
+
+OUTPUT_FORMAT("elf32-littlearm")
+OUTPUT_ARCH(arm)
+TARGET(binary)
+
+INPUT(./fmboot.o)
+INPUT(./zImage.fm)
+
+PHYS_OFFSET = 0x00000000;
+
+SECTIONS
+{
+	. = PHYS_OFFSET;
+	.text : { fmboot.o }
+	. = PHYS_OFFSET + 0x8000 - 0x0;
+	kernel = . + 0x0;
+	.kernel : { ./zImage.fm }
+	. = PHYS_OFFSET + 0x00800000;
+	filesystem = .;
+	.data : { *(.data) }
+	.bss : { *(.bss) }
+}
diff --git a/arch/arm/boot/fmboot/pack.py b/arch/arm/boot/fmboot/pack.py
new file mode 100644
index 0000000..fe2ce70
--- /dev/null
+++ b/arch/arm/boot/fmboot/pack.py
@@ -0,0 +1,10 @@
+import sys
+
+while len(sys.argv) > 1:
+	f = open(sys.argv.pop(1), "rb")
+	f.seek(0, 2)
+	sz = f.tell()
+	f.seek(0,0)
+	pad = ((sz + 3) & ~3) - sz
+	sys.stdout.write(f.read() + '\0'*pad)
+	f.close()
-- 
1.8.3




More information about the linux-yocto mailing list