diff options
Diffstat (limited to 'firmware/target/arm/s3c2440/gigabeat-fx')
6 files changed, 38 insertions, 6 deletions
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c index bc2b53d776..34fbc2b2ac 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c | |||
@@ -52,8 +52,8 @@ void ata_enable(bool on) | |||
52 | else | 52 | else |
53 | USB_ATA_ENABLE; | 53 | USB_ATA_ENABLE; |
54 | 54 | ||
55 | GPBCON=( GPGCON&~(1<<11) ) | (1<<10); /* Make the pin an output */ | 55 | GPBCON=( GPBCON&~(1<<11) ) | (1<<10); /* Make the pin an output */ |
56 | // GPBUP|=1<<5; /* Disable pullup in SOC as we are now driving */ | 56 | GPBUP|=1<<5; /* Disable pullup in SOC as we are now driving */ |
57 | } | 57 | } |
58 | 58 | ||
59 | bool ata_is_coldstart(void) | 59 | bool ata_is_coldstart(void) |
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c index 1bb68f9686..11edcfecb1 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c | |||
@@ -53,6 +53,23 @@ unsigned int LCDBASEL(unsigned int address) | |||
53 | /* LCD init */ | 53 | /* LCD init */ |
54 | void lcd_init_device(void) | 54 | void lcd_init_device(void) |
55 | { | 55 | { |
56 | #ifdef BOOTLOADER | ||
57 | /* When the Rockbox bootloader starts, we are changing framebuffer address, | ||
58 | but we don't want what's shown on the LCD to change until we do an | ||
59 | lcd_update(), so copy the data from the old framebuffer to the new one */ | ||
60 | int i; | ||
61 | unsigned short *buf = (unsigned short*)FRAME; | ||
62 | |||
63 | memcpy(FRAME, (short *)((LCDSADDR1)<<1), 320*240*2); | ||
64 | |||
65 | /* The Rockbox bootloader is transitioning from RGB555I to RGB565 mode | ||
66 | so convert the frambuffer data accordingly */ | ||
67 | for(i=0; i< 320*240; i++){ | ||
68 | *buf = ((*buf>>1) & 0x1F) | (*buf & 0xffc0); | ||
69 | buf++; | ||
70 | } | ||
71 | #endif | ||
72 | |||
56 | LCDSADDR1 = (LCDBANK((unsigned)FRAME) << 21) | (LCDBASEU((unsigned)FRAME)); | 73 | LCDSADDR1 = (LCDBANK((unsigned)FRAME) << 21) | (LCDBASEU((unsigned)FRAME)); |
57 | LCDSADDR2 = LCDBASEL((unsigned)FRAME); | 74 | LCDSADDR2 = LCDBASEL((unsigned)FRAME); |
58 | LCDSADDR3 = 0x000000F0; | 75 | LCDSADDR3 = 0x000000F0; |
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.c index 6142213f0c..c47c1330bc 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.c | |||
@@ -3,7 +3,6 @@ | |||
3 | #include "mmu-meg-fx.h" | 3 | #include "mmu-meg-fx.h" |
4 | #include "panic.h" | 4 | #include "panic.h" |
5 | 5 | ||
6 | void map_memory(void); | ||
7 | static void enable_mmu(void); | 6 | static void enable_mmu(void); |
8 | static void set_ttb(void); | 7 | static void set_ttb(void); |
9 | static void set_page_tables(void); | 8 | static void set_page_tables(void); |
@@ -15,7 +14,7 @@ static void map_section(unsigned int pa, unsigned int va, int mb, int cache_flag | |||
15 | #define BUFFERED (1 << 2) | 14 | #define BUFFERED (1 << 2) |
16 | #define MB (1 << 20) | 15 | #define MB (1 << 20) |
17 | 16 | ||
18 | void map_memory(void) { | 17 | void memory_init(void) { |
19 | set_ttb(); | 18 | set_ttb(); |
20 | set_page_tables(); | 19 | set_page_tables(); |
21 | enable_mmu(); | 20 | enable_mmu(); |
@@ -69,6 +68,20 @@ void map_section(unsigned int pa, unsigned int va, int mb, int cache_flags) { | |||
69 | } | 68 | } |
70 | 69 | ||
71 | static void enable_mmu(void) { | 70 | static void enable_mmu(void) { |
71 | int regread; | ||
72 | |||
73 | asm volatile( | ||
74 | "MRC p15, 0, %r0, c1, c0, 0\n" /* Read reg1, control register */ | ||
75 | : /* outputs */ | ||
76 | "=r"(regread) | ||
77 | : /* inputs */ | ||
78 | : /* clobbers */ | ||
79 | "r0" | ||
80 | ); | ||
81 | |||
82 | if ( !(regread & 0x04) || !(regread & 0x00001000) ) /* Was the ICache or DCache Enabled? */ | ||
83 | clean_dcache(); /* If so we need to clean the DCache before invalidating below */ | ||
84 | |||
72 | asm volatile("mov r0, #0\n" | 85 | asm volatile("mov r0, #0\n" |
73 | "mcr p15, 0, r0, c8, c7, 0\n" /* invalidate TLB */ | 86 | "mcr p15, 0, r0, c8, c7, 0\n" /* invalidate TLB */ |
74 | 87 | ||
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.h b/firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.h index 71b1b83801..524978852d 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.h +++ b/firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.h | |||
@@ -32,4 +32,4 @@ void dump_dcache_range(const void *base, unsigned int size); | |||
32 | /* Cleans entire DCache */ | 32 | /* Cleans entire DCache */ |
33 | void clean_dcache(void); | 33 | void clean_dcache(void); |
34 | 34 | ||
35 | 35 | void memory_init(void); | |
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c index b7e59e66ea..6c5e35f0d5 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c | |||
@@ -1,6 +1,7 @@ | |||
1 | #include "kernel.h" | 1 | #include "kernel.h" |
2 | #include "system.h" | 2 | #include "system.h" |
3 | #include "panic.h" | 3 | #include "panic.h" |
4 | #include "mmu-meg-fx.h" | ||
4 | 5 | ||
5 | #include "lcd.h" | 6 | #include "lcd.h" |
6 | #include <stdio.h> | 7 | #include <stdio.h> |
@@ -11,6 +12,7 @@ const int DMA0_MASK = (1 << 17); | |||
11 | const int DMA1_MASK = (1 << 18); | 12 | const int DMA1_MASK = (1 << 18); |
12 | const int DMA2_MASK = (1 << 19); | 13 | const int DMA2_MASK = (1 << 19); |
13 | const int DMA3_MASK = (1 << 20); | 14 | const int DMA3_MASK = (1 << 20); |
15 | const int ALARM_MASK = (1 << 30); | ||
14 | 16 | ||
15 | int system_memory_guard(int newmode) | 17 | int system_memory_guard(int newmode) |
16 | { | 18 | { |
diff --git a/firmware/target/arm/s3c2440/gigabeat-fx/usb-meg-fx.c b/firmware/target/arm/s3c2440/gigabeat-fx/usb-meg-fx.c index 3aed8c3256..af66e2a60c 100644 --- a/firmware/target/arm/s3c2440/gigabeat-fx/usb-meg-fx.c +++ b/firmware/target/arm/s3c2440/gigabeat-fx/usb-meg-fx.c | |||
@@ -44,7 +44,7 @@ inline bool usb_detect(void) | |||
44 | void usb_init_device(void) | 44 | void usb_init_device(void) |
45 | { | 45 | { |
46 | /* Input is the default configuration, only pullups need to be disabled */ | 46 | /* Input is the default configuration, only pullups need to be disabled */ |
47 | GPFUP|=0x02; | 47 | /* GPFUP|=0x02; */ |
48 | 48 | ||
49 | USB_VPLUS_PWR_ASSERT; | 49 | USB_VPLUS_PWR_ASSERT; |
50 | GPBCON=( GPBCON&~(1<<13) ) | (1 << 12); | 50 | GPBCON=( GPBCON&~(1<<13) ) | (1 << 12); |