rockbox/firmware/target/arm/imx31/rolo_restart.S
Daniel Stenberg 2acc0ac542 Updated our source code header to explicitly mention that we are GPL v2 or
later. We still need to hunt down snippets used that are not. 1324 modified
files...
http://www.rockbox.org/mail/archive/rockbox-dev-archive-2008-06/0060.shtml


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17847 a1c6a512-1295-4272-9138-f99709370657
2008-06-28 18:10:04 +00:00

68 lines
2.1 KiB
ArmAsm

/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2008 by Michael Sevakis
*
* RoLo restart code for IMX31
*
* 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"
#include "cpu.h"
/****************************************************************************
* void rolo_restart(const unsigned char* source, unsigned char* dest,
* int length) __attribute__((noreturn));
*/
.section .text, "ax", %progbits
.align 2
.global rolo_restart
rolo_restart:
adr r4, restart_copy_start
adr r5, restart_copy_end
ldr r6, =IRAM_BASE_ADDR
mov r7, r6
@ Copy stub to IRAM
1:
ldr r8, [r4], #4
str r8, [r7], #4
cmp r5, r4
bhi 1b
@ Branch to stub
bx r6
restart_copy_start:
@ Trivial copy of firmware to final location
mov r4, r1
1:
subs r2, r2, #1
ldrb r7, [r0], #1
strb r7, [r4], #1
bge 1b
@ Clean and invalidate all caches
mov r0, #0
mcr p15, 0, r0, c7, c14, 0
mcr p15, 0, r0, c7, c5, 0
mcr p15, 0, r0, c7, c10, 4
mcr p15, 0, r0, c7, c5, 4
@ Branch to destination (should be address 0x00000000)
bx r1
restart_copy_end:
.size rolo_restart,.-rolo_restart