summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/plugin.lds19
-rw-r--r--bootloader/sansa_as3525.c4
-rw-r--r--firmware/export/as3525.h18
-rw-r--r--firmware/target/arm/as3525/app.lds40
-rw-r--r--firmware/target/arm/as3525/boot.lds10
5 files changed, 54 insertions, 37 deletions
diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds
index 9a65fd5e4a..456e6b4e01 100644
--- a/apps/plugins/plugin.lds
+++ b/apps/plugins/plugin.lds
@@ -1,4 +1,5 @@
#include "config.h"
+#include "cpu.h"
/* These output formats should be in the config-files */
@@ -47,10 +48,11 @@ OUTPUT_FORMAT(elf32-littlemips)
#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_BUFFER_SIZE - TTB_SIZE
#elif CONFIG_CPU==AS3525
-#if MEMORYSIZE <= 2
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET
+#define DRAMORIG DRAM_ORIG
+#ifdef AMS_LOWMEM
+#define DRAMSIZE (DRAM_SIZE - PLUGIN_BUFFER_SIZE - STUBOFFSET - TTB_SIZE)
#else
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE
+#define DRAMSIZE (DRAM_SIZE - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE - TTB_SIZE)
#endif
#endif
@@ -110,15 +112,14 @@ OUTPUT_FORMAT(elf32-littlemips)
#define IRAMSIZE 0
#elif CONFIG_CPU==AS3525
-#if MEMORYSIZE <= 2
+#ifdef AMS_LOWMEM
#define IRAMSIZE 0 /* simulates no IRAM since codec is already entirely in IRAM */
-#define CODEC_ORIGIN (0x50000 - CODEC_SIZE)
-#define PLUGIN_ORIGIN (DRAMORIG + DRAMSIZE)
+#define CODEC_ORIGIN (IRAM_ORIG + IRAM_SIZE - CODEC_SIZE)
+#define PLUGIN_ORIGIN (DRAM_ORIG + DRAMSIZE)
#else
-#define IRAMORIG 0x20000
-#define IRAMSIZE 0x30000
+#define IRAMORIG (IRAM_ORIG + 0x20000)
+#define IRAMSIZE (IRAM_ORIG + IRAM_SIZE - IRAMORIG)
#endif
-#define DRAMORIG 0x30000000
#elif CONFIG_CPU == JZ4732
#define DRAMORIG 0x80004000 + STUBOFFSET
diff --git a/bootloader/sansa_as3525.c b/bootloader/sansa_as3525.c
index 4705e2b915..dbe6218d48 100644
--- a/bootloader/sansa_as3525.c
+++ b/bootloader/sansa_as3525.c
@@ -93,8 +93,8 @@ void main(void)
printf("Loading firmware");
- loadbuffer = (unsigned char*)0x30000000; /* DRAM */
- buffer_size = (int)(loadbuffer + (MEM * 0x100000));
+ loadbuffer = (unsigned char*)DRAM_ORIG; /* DRAM */
+ buffer_size = (int)(loadbuffer + (DRAM_SIZE) - TTB_SIZE);
ret = load_firmware(loadbuffer, BOOTFILE, buffer_size);
if(ret < 0)
diff --git a/firmware/export/as3525.h b/firmware/export/as3525.h
index 388df2a925..326a7610bb 100644
--- a/firmware/export/as3525.h
+++ b/firmware/export/as3525.h
@@ -22,10 +22,28 @@
#define UART_CHANNELS 1
+
+#if MEMORYSIZE <= 2
+/* we put the codec buffer in IRAM */
+#define AMS_LOWMEM
+#endif
+/* these addresses are valid after mapping through the MMU */
+#define DRAM_ORIG 0x30000000
+#define IRAM_ORIG 0x0
+
+#define DRAM_SIZE (MEMORYSIZE * 0x100000)
+#define IRAM_SIZE 0x50000
+
+
/* AS352X only supports 512 Byte HW ECC */
#define ECCSIZE 512
#define ECCBYTES 3
+/* AS352X MMU Page Table Entries */
+/* to be implemented */
+#define TTB_SIZE 0x0 /* Mimics OF */
+#define TTB_BASE_ADDR (DRAM_ORIG + DRAM_SIZE - TTB_SIZE)
+
/* AS352X device base addresses */
diff --git a/firmware/target/arm/as3525/app.lds b/firmware/target/arm/as3525/app.lds
index 7f37cc5d7c..45ae30f9f3 100644
--- a/firmware/target/arm/as3525/app.lds
+++ b/firmware/target/arm/as3525/app.lds
@@ -1,4 +1,5 @@
#include "config.h"
+#include "cpu.h"
ENTRY(start)
@@ -6,11 +7,6 @@ OUTPUT_FORMAT(elf32-littlearm)
OUTPUT_ARCH(arm)
STARTUP(target/arm/crt0.o)
-#if MEMORYSIZE <= 2
-/* we put the codec buffer in IRAM */
-#define LOWMEM
-#endif
-
#define PLUGINSIZE PLUGIN_BUFFER_SIZE
#define CODECSIZE CODEC_SIZE
@@ -20,26 +16,27 @@ STARTUP(target/arm/crt0.o)
#define STUBOFFSET 0
#endif
-#include "cpu.h"
-#ifdef LOWMEM
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGINSIZE
-#define CODECORIG (IRAMORIG + 0x50000 - CODEC_SIZE)
-#define IRAMSIZE (0x50000 - CODEC_SIZE)
+#define IRAMORIG IRAM_ORIG
+#define DRAMORIG (DRAM_ORIG + STUBOFFSET)
+
+/* End of the audio buffer, where the codec buffer starts */
+#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE)
+
+
+#ifdef AMS_LOWMEM
+#define DRAMSIZE (DRAM_SIZE - STUBOFFSET - PLUGINSIZE - TTB_SIZE)
+#define CODECORIG (IRAMORIG + (IRAM_SIZE - CODEC_SIZE))
+#define IRAMSIZE (IRAM_SIZE - CODEC_SIZE)
#else
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGINSIZE - CODECSIZE
+#define DRAMSIZE (DRAM_SIZE - STUBOFFSET - PLUGINSIZE - CODECSIZE - TTB_SIZE)
#define CODECORIG (ENDAUDIOADDR)
#define IRAMSIZE (0x20000)
#endif
-#define IRAMORIG 0x0
-#define DRAMORIG 0x30000000 + STUBOFFSET
-
-/* End of the audio buffer, where the codec buffer starts */
-#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE)
/* Where the codec buffer ends, and the plugin buffer starts */
-#ifdef LOWMEM
+#ifdef AMS_LOWMEM
#define ENDADDR (ENDAUDIOADDR)
#else
#define ENDADDR (ENDAUDIOADDR + CODECSIZE)
@@ -47,7 +44,7 @@ STARTUP(target/arm/crt0.o)
MEMORY
{
-#ifdef LOWMEM
+#ifdef AMS_LOWMEM
CODEC_IRAM : ORIGIN = CODECORIG, LENGTH = CODEC_SIZE
#endif
IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
@@ -56,7 +53,7 @@ MEMORY
SECTIONS
{
- loadaddress = 0x30000000;
+ loadaddress = DRAM_ORIG;
.text :
{
@@ -71,10 +68,7 @@ SECTIONS
.rodata :
{
- *(.rodata) /* problems without this, dunno why */
*(.rodata*)
- *(.rodata.str1.1)
- *(.rodata.str1.4)
. = ALIGN(0x4);
} > DRAM
@@ -152,7 +146,7 @@ SECTIONS
{
codecbuf = .;
_codecbuf = .;
-#ifdef LOWMEM
+#ifdef AMS_LOWMEM
} > CODEC_IRAM
#else
} > DRAM
diff --git a/firmware/target/arm/as3525/boot.lds b/firmware/target/arm/as3525/boot.lds
index 7a13d67a43..a98763e8f6 100644
--- a/firmware/target/arm/as3525/boot.lds
+++ b/firmware/target/arm/as3525/boot.lds
@@ -1,18 +1,22 @@
#include "config.h"
+#include "cpu.h"
ENTRY(start)
OUTPUT_FORMAT(elf32-littlearm)
OUTPUT_ARCH(arm)
STARTUP(target/arm/crt0.o)
-#define DRAMSIZE (MEMORYSIZE * 0x100000)
+/*
+No need for DRAM in our bootloader
+#define DRAMSIZE (MEMORYSIZE * 0x100000) - TTB_SIZE
#define DRAMORIG 0x30000000
-#define IRAMORIG 0
+*/
+#define IRAMORIG 0x81000000
#define IRAMSIZE 0x50000
MEMORY
{
- DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
+ /*DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE*/
IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
}