summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bootloader/ipodnano2g.c21
-rw-r--r--firmware/target/arm/s5l8700/boot.lds3
-rw-r--r--firmware/target/arm/s5l8700/crt0.S2
3 files changed, 15 insertions, 11 deletions
diff --git a/bootloader/ipodnano2g.c b/bootloader/ipodnano2g.c
index 9891ea8..020da20 100644
--- a/bootloader/ipodnano2g.c
+++ b/bootloader/ipodnano2g.c
@@ -51,8 +51,8 @@
*/
#define MAX_LOADSIZE (8*1024*1024)
-/* The buffer to load the firmware into */
-unsigned char *loadbuffer = (unsigned char *)0x08000000;
+/* The buffer to load the firmware into - use an uncached alias of 0x08000000 */
+unsigned char *loadbuffer = (unsigned char *)0x48000000;
/* Bootloader version */
char version[] = APPSVERSION;
@@ -229,11 +229,9 @@ void main(void)
if (button_was_held || (btn==BUTTON_MENU)) {
/* If either the hold switch was on, or the Menu button was held, then
try the Apple firmware */
-
- verbose = true;
printf("Loading original firmware...");
- if ((rc = readfw("DNANkbso", (void*)0x08000000, &size)) < 0) {
+ if ((rc = readfw("DNANkbso", loadbuffer, &size)) < 0) {
printf("readfw error %d",rc);
fatal_error();
}
@@ -241,7 +239,7 @@ void main(void)
/* Now we need to decrypt it */
printf("Decrypting %d bytes...",size);
- aes_decrypt((void*)0x08000000, size);
+ aes_decrypt(loadbuffer, size);
} else {
printf("Loading Rockbox...");
rc=load_firmware(loadbuffer, BOOTFILE, MAX_LOADSIZE);
@@ -265,8 +263,15 @@ void main(void)
/* Remap the bootrom back to zero - that's how the NOR bootloader leaves
it.
*/
- // This won't work, as we are running from IRAM mapped to 0x0...
- //MIUCON &= ~1;
+ MIUCON &= ~1;
+
+ /* Disable caches and protection unit */
+ asm volatile(
+ "mrc 15, 0, r0, c1, c0, 0 \n"
+ "bic r0, r0, #0x1000 \n"
+ "bic r0, r0, #0x5 \n"
+ "mcr 15, 0, r0, c1, c0, 0 \n"
+ );
/* Branch to start of DRAM */
asm volatile("ldr pc, =0x08000000");
diff --git a/firmware/target/arm/s5l8700/boot.lds b/firmware/target/arm/s5l8700/boot.lds
index 637a3a2..308a97d 100644
--- a/firmware/target/arm/s5l8700/boot.lds
+++ b/firmware/target/arm/s5l8700/boot.lds
@@ -12,11 +12,10 @@ STARTUP(target/arm/s5l8700/crt0.o)
#define DRAMORIG 0x08000000
#define DRAMSIZE (MEMORYSIZE * 0x100000)
+#define IRAMORIG 0x22000000
#if CONFIG_CPU==S5L8701
-#define IRAMORIG 0x0
#define IRAMSIZE 176K
#else
-#define IRAMORIG 0x22000000
#define IRAMSIZE 256K
#endif
diff --git a/firmware/target/arm/s5l8700/crt0.S b/firmware/target/arm/s5l8700/crt0.S
index 3cc3767..98f98a3 100644
--- a/firmware/target/arm/s5l8700/crt0.S
+++ b/firmware/target/arm/s5l8700/crt0.S
@@ -91,7 +91,7 @@ newstart2:
#ifdef BOOTLOADER
/* Relocate ourself to IRAM - we have been loaded to DRAM */
mov r0, #0x08000000 /* source (DRAM) */
- mov r1, #0x00000000 /* dest (IRAM) */
+ mov r1, #0x22000000 /* dest (IRAM) */
ldr r2, =_dataend
1:
cmp r2, r1