summaryrefslogtreecommitdiff
path: root/firmware/target/arm/s3c2440/gigabeat-fx
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/s3c2440/gigabeat-fx')
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/ata-meg-fx.c4
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/lcd-meg-fx.c17
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.c17
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/mmu-meg-fx.h2
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/system-meg-fx.c2
-rw-r--r--firmware/target/arm/s3c2440/gigabeat-fx/usb-meg-fx.c2
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
59bool ata_is_coldstart(void) 59bool 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 */
54void lcd_init_device(void) 54void 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
6void map_memory(void);
7static void enable_mmu(void); 6static void enable_mmu(void);
8static void set_ttb(void); 7static void set_ttb(void);
9static void set_page_tables(void); 8static 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
18void map_memory(void) { 17void 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
71static void enable_mmu(void) { 70static 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 */
33void clean_dcache(void); 33void clean_dcache(void);
34 34
35 35void 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);
11const int DMA1_MASK = (1 << 18); 12const int DMA1_MASK = (1 << 18);
12const int DMA2_MASK = (1 << 19); 13const int DMA2_MASK = (1 << 19);
13const int DMA3_MASK = (1 << 20); 14const int DMA3_MASK = (1 << 20);
15const int ALARM_MASK = (1 << 30);
14 16
15int system_memory_guard(int newmode) 17int 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)
44void usb_init_device(void) 44void 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);