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

Bruce Ashfield bruce.ashfield at windriver.com
Mon May 27 11:07:00 PDT 2013


On 13-05-27 12:55 PM, Paul Butler wrote:

What's a fast model ? .. yes I'm playing dumb, but patch headers should
describe the common questions about code they introduce.

Bruce

> 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()
>




More information about the linux-yocto mailing list