From 11cca264ff57ad0b234bd1cd2c9a2366b967feb7 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Fri, 23 Apr 2010 15:32:50 +0000 Subject: i.MX31/Gigabeat S: Implement frequency and voltage scaling-- 1.6V for 528MHz, and 1.35V for 264MHz and 132MHz. Keep DPTC overdrive ( > 400MHz) voltage scaling off for now because of uncertainties. Simplify the (working) mess later. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25699 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/imx31/rolo_restart_firmware.S | 68 +++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 firmware/target/arm/imx31/rolo_restart_firmware.S (limited to 'firmware/target/arm/imx31/rolo_restart_firmware.S') diff --git a/firmware/target/arm/imx31/rolo_restart_firmware.S b/firmware/target/arm/imx31/rolo_restart_firmware.S new file mode 100644 index 0000000000..5f24f653e0 --- /dev/null +++ b/firmware/target/arm/imx31/rolo_restart_firmware.S @@ -0,0 +1,68 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Michael Sevakis + * + * RoLo firmware 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_firmware(const unsigned char* source, unsigned char* dest, + * int length) __attribute__((noreturn)); + */ + .section .text, "ax", %progbits + .align 2 + .global rolo_restart_firmware +rolo_restart_firmware: + 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 -- cgit v1.2.3