[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