summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
authorKarl Kurbjun <kkurbjun@gmail.com>2007-04-21 04:48:20 +0000
committerKarl Kurbjun <kkurbjun@gmail.com>2007-04-21 04:48:20 +0000
commit8a1fd8c686d2a4b8be36754e545338a476150e6a (patch)
treef69fd8be012099a8de228bd197346e4b11cf8e4a /firmware/target
parentdd0f1c7db1e73859805f9d9aa343bb6e04dd739e (diff)
downloadrockbox-8a1fd8c686d2a4b8be36754e545338a476150e6a.tar.gz
rockbox-8a1fd8c686d2a4b8be36754e545338a476150e6a.zip
Commit FS#6929 - Gigabeat bootloader improvements by Barry Wardell and myself. This build fixes the problems seen with the latest builds on the Gigabeat X. Added View IO Ports under the Debug menu for the Gigabeat. Make sure you grab the latest bootloader from the Wiki as the old bootloader will not work properly with new builds.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13225 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target')
-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);