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) -#else -#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGINSIZE - CODECSIZE -#define CODECORIG (ENDAUDIOADDR) -#define IRAMSIZE (0x20000) -#endif - -#define IRAMORIG 0x0 -#define DRAMORIG 0x30000000 + STUBOFFSET +#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 (DRAM_SIZE - STUBOFFSET - PLUGINSIZE - CODECSIZE - TTB_SIZE) +#define CODECORIG (ENDAUDIOADDR) +#define IRAMSIZE (0x20000) +#endif + + /* 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 }