From 8e633385912494ff5e871ec4c264d3a7db46fb98 Mon Sep 17 00:00:00 2001 From: Marcin Bukat Date: Thu, 18 Jul 2013 23:55:35 +0200 Subject: hwstub rk27xx port Change-Id: I85ac57117911544b65ccd56eb16303e30be67cab --- utils/hwstub/stub/stmp/crt0.S | 41 ++++++++++++++++++++++ utils/hwstub/stub/stmp/hwstub.lds | 73 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 utils/hwstub/stub/stmp/crt0.S create mode 100644 utils/hwstub/stub/stmp/hwstub.lds (limited to 'utils/hwstub/stub/stmp') diff --git a/utils/hwstub/stub/stmp/crt0.S b/utils/hwstub/stub/stmp/crt0.S new file mode 100644 index 0000000000..8b2197823e --- /dev/null +++ b/utils/hwstub/stub/stmp/crt0.S @@ -0,0 +1,41 @@ +.section .text,"ax",%progbits +.code 32 +.align 0x04 +.global start +start: + sub r7, pc, #8 /* Copy running address */ + msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ/FIQ */ +#ifdef CONFIG_STMP + /* Disable MMU, disable caching and buffering; + * use low exception range address */ + mrc p15, 0, r0, c1, c0, 0 + ldr r1, =0x3005 + bic r0, r1 + mcr p15, 0, r0, c1, c0, 0 +#endif + ldr sp, =oc_stackend + /* Relocate to right address */ + mov r2, r7 + ldr r3, =_copystart + ldr r4, =_copyend +1: + cmp r4, r3 + ldrhi r5, [r2], #4 + strhi r5, [r3], #4 + bhi 1b + + mov r2, #0 + mcr p15, 0, r2, c7, c5, 0 @ Invalidate ICache + /* Jump to real location */ + ldr pc, =remap +remap: + /* clear bss */ + ldr r2, =bss_start + ldr r3, =bss_end + mov r4, #0 +1: + cmp r3, r2 + strhi r4, [r2], #4 + bhi 1b + /* jump to C code */ + b main diff --git a/utils/hwstub/stub/stmp/hwstub.lds b/utils/hwstub/stub/stmp/hwstub.lds new file mode 100644 index 0000000000..8e3f4e68ba --- /dev/null +++ b/utils/hwstub/stub/stmp/hwstub.lds @@ -0,0 +1,73 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2012 by Amaury Pouly + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "config.h" + +ENTRY(start) +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +STARTUP(stmp/crt0.o) + +#define IRAM_END_ADDR (IRAM_ORIG + IRAM_SIZE) + +MEMORY +{ + OCRAM : ORIGIN = IRAM_ORIG, LENGTH = IRAM_SIZE +} + +SECTIONS +{ + .octext : + { + _copystart = .; + oc_codestart = .; + *(.text*) + *(.icode*) + *(.data*) + *(.rodata*) + _copyend = .; + } > OCRAM + + .bss (NOLOAD) : + { + bss_start = .; + *(.bss) + bss_end = .; + } > OCRAM + + .stack (NOLOAD) : + { + oc_codeend = .; + oc_stackstart = .; + . += STACK_SIZE; + oc_stackend = .; + oc_bufferstart = .; + } > OCRAM + + .ocend IRAM_END_ADDR (NOLOAD) : + { + oc_bufferend = .; + } > OCRAM + + /DISCARD/ : + { + *(.eh_frame) + } +} -- cgit v1.2.3