diff options
-rw-r--r-- | bootloader/gigabeat-s.c | 50 | ||||
-rw-r--r-- | firmware/app.lds | 2 | ||||
-rw-r--r-- | firmware/common/disk.c | 7 | ||||
-rw-r--r-- | firmware/export/config-gigabeat-s.h | 2 | ||||
-rw-r--r-- | firmware/target/arm/imx31/gigabeat-s/system-target.h | 2 |
5 files changed, 51 insertions, 12 deletions
diff --git a/bootloader/gigabeat-s.c b/bootloader/gigabeat-s.c index 25b9ab5f35..d692dcba09 100644 --- a/bootloader/gigabeat-s.c +++ b/bootloader/gigabeat-s.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "kernel.h" | 28 | #include "kernel.h" |
29 | #include "thread.h" | 29 | #include "thread.h" |
30 | #include "ata.h" | 30 | #include "ata.h" |
31 | #include "dir.h" | ||
31 | #include "fat.h" | 32 | #include "fat.h" |
32 | #include "disk.h" | 33 | #include "disk.h" |
33 | #include "font.h" | 34 | #include "font.h" |
@@ -47,13 +48,18 @@ | |||
47 | #include <stdarg.h> | 48 | #include <stdarg.h> |
48 | 49 | ||
49 | char version[] = APPSVERSION; | 50 | char version[] = APPSVERSION; |
51 | char buf[MAX_PATH]; | ||
52 | char basedir[] = "/Content/0b00/00/"; /* Where files sent via MTP are stored */ | ||
53 | char model[5]; | ||
54 | int (*kernel_entry)(void); | ||
50 | 55 | ||
51 | void main(void) | 56 | void main(void) |
52 | { | 57 | { |
53 | lcd_clear_display(); | 58 | lcd_clear_display(); |
54 | printf("Hello world!"); | 59 | printf("Hello world!"); |
55 | printf("Gigabeat S Rockbox Bootloader v.00000001"); | 60 | printf("Gigabeat S Rockbox Bootloader v.00000001"); |
56 | kernel_init(); | 61 | kernel_init(); |
62 | printf("kernel init done"); | ||
57 | int rc; | 63 | int rc; |
58 | 64 | ||
59 | rc = ata_init(); | 65 | rc = ata_init(); |
@@ -62,8 +68,10 @@ void main(void) | |||
62 | reset_screen(); | 68 | reset_screen(); |
63 | error(EATA, rc); | 69 | error(EATA, rc); |
64 | } | 70 | } |
71 | printf("ata init done"); | ||
65 | 72 | ||
66 | disk_init(); | 73 | disk_init(); |
74 | printf("disk init done"); | ||
67 | 75 | ||
68 | rc = disk_mount_all(); | 76 | rc = disk_mount_all(); |
69 | if (rc<=0) | 77 | if (rc<=0) |
@@ -71,24 +79,48 @@ void main(void) | |||
71 | error(EDISK,rc); | 79 | error(EDISK,rc); |
72 | } | 80 | } |
73 | 81 | ||
74 | printf("Congratulations!"); | 82 | /* Look for the first valid firmware file */ |
75 | while(1); | 83 | struct dirent_uncached* entry; |
84 | DIR_UNCACHED* dir; | ||
85 | int fd; | ||
86 | dir = opendir_uncached(basedir); | ||
87 | while ((entry = readdir_uncached(dir))) | ||
88 | { | ||
89 | if (*entry->d_name != '.') | ||
90 | { | ||
91 | snprintf(buf, sizeof(buf), "%s%s", basedir, entry->d_name); | ||
92 | fd = open(buf, O_RDONLY); | ||
93 | if (fd >= 0) | ||
94 | { | ||
95 | lseek(fd, 4, SEEK_SET); | ||
96 | rc = read(fd, model, 4); | ||
97 | close(fd); | ||
98 | if (rc == 4) | ||
99 | { | ||
100 | model[4] = 0; | ||
101 | if (strcmp(model, "gigs") == 0) | ||
102 | break; | ||
103 | } | ||
104 | } | ||
105 | } | ||
106 | } | ||
76 | 107 | ||
77 | #if 0 | 108 | printf("Firmware file: %s", buf); |
78 | printf("Loading firmware"); | 109 | printf("Loading firmware"); |
79 | 110 | ||
80 | loadbuffer = (unsigned char*) 0x100; | 111 | unsigned char *loadbuffer = (unsigned char *)0x88000000; |
81 | buffer_size = (unsigned char*)0x400000 - loadbuffer; | 112 | int buffer_size = 1024*1024; |
82 | 113 | ||
83 | rc = load_firmware(loadbuffer, BOOTFILE, buffer_size); | 114 | rc = load_firmware(loadbuffer, buf, buffer_size); |
84 | if(rc < 0) | 115 | if(rc < 0) |
85 | error(EBOOTFILE, rc); | 116 | error(buf, rc); |
86 | 117 | ||
87 | if (rc == EOK) | 118 | if (rc == EOK) |
88 | { | 119 | { |
89 | kernel_entry = (void*) loadbuffer; | 120 | kernel_entry = (void*) loadbuffer; |
90 | rc = kernel_entry(); | 121 | rc = kernel_entry(); |
91 | } | 122 | } |
92 | #endif | 123 | |
124 | while (1); | ||
93 | } | 125 | } |
94 | 126 | ||
diff --git a/firmware/app.lds b/firmware/app.lds index d88ce9fd60..87f3d2ae23 100644 --- a/firmware/app.lds +++ b/firmware/app.lds | |||
@@ -70,7 +70,7 @@ INPUT(target/sh/crt0.o) | |||
70 | #define IRAMORIG 0x00000000 | 70 | #define IRAMORIG 0x00000000 |
71 | #define IRAMSIZE 0x4000 | 71 | #define IRAMSIZE 0x4000 |
72 | #elif CONFIG_CPU==IMX31L | 72 | #elif CONFIG_CPU==IMX31L |
73 | #define DRAMORIG (0x80000000 + STUBOFFSET) | 73 | #define DRAMORIG (0x88000000 + STUBOFFSET) |
74 | #define IRAMORIG 0x1FFFC000 | 74 | #define IRAMORIG 0x1FFFC000 |
75 | #define IRAMSIZE 0x4000 | 75 | #define IRAMSIZE 0x4000 |
76 | #else | 76 | #else |
diff --git a/firmware/common/disk.c b/firmware/common/disk.c index 563bb05ec1..e3cf8391ed 100644 --- a/firmware/common/disk.c +++ b/firmware/common/disk.c | |||
@@ -150,7 +150,12 @@ int disk_mount(int drive) | |||
150 | /* The Elio's hard drive has no partition table and probing for partitions causes | 150 | /* The Elio's hard drive has no partition table and probing for partitions causes |
151 | Rockbox to crash - so we temporarily disable the probing until we fix the | 151 | Rockbox to crash - so we temporarily disable the probing until we fix the |
152 | real problem. */ | 152 | real problem. */ |
153 | for (i=0; volume != -1 && i<4; i++) | 153 | #ifdef TOSHIBA_GIGABEAT_S |
154 | i = 1; /* For the Gigabeat S, we mount the second partition */ | ||
155 | #else | ||
156 | i = 0; | ||
157 | #endif | ||
158 | for (i; volume != -1 && i<4; i++) | ||
154 | { | 159 | { |
155 | #ifdef MAX_LOG_SECTOR_SIZE | 160 | #ifdef MAX_LOG_SECTOR_SIZE |
156 | int j; | 161 | int j; |
diff --git a/firmware/export/config-gigabeat-s.h b/firmware/export/config-gigabeat-s.h index 285b381480..c6de206d8c 100644 --- a/firmware/export/config-gigabeat-s.h +++ b/firmware/export/config-gigabeat-s.h | |||
@@ -6,7 +6,7 @@ | |||
6 | #define TOSHIBA_GIGABEAT_S 1 | 6 | #define TOSHIBA_GIGABEAT_S 1 |
7 | 7 | ||
8 | /* For Rolo and boot loader */ | 8 | /* For Rolo and boot loader */ |
9 | #define MODEL_NUMBER 19 | 9 | #define MODEL_NUMBER 21 |
10 | 10 | ||
11 | /* define this if you have a bitmap LCD display */ | 11 | /* define this if you have a bitmap LCD display */ |
12 | #define HAVE_LCD_BITMAP | 12 | #define HAVE_LCD_BITMAP |
diff --git a/firmware/target/arm/imx31/gigabeat-s/system-target.h b/firmware/target/arm/imx31/gigabeat-s/system-target.h index b1803d01cb..e87b93b13a 100644 --- a/firmware/target/arm/imx31/gigabeat-s/system-target.h +++ b/firmware/target/arm/imx31/gigabeat-s/system-target.h | |||
@@ -30,6 +30,8 @@ static inline void udelay(unsigned int usecs) | |||
30 | while (EPITCNT1 > stop); | 30 | while (EPITCNT1 > stop); |
31 | } | 31 | } |
32 | 32 | ||
33 | #define __dbg_hw_info(...) 0 | ||
34 | #define __dbg_ports(...) 0 | ||
33 | 35 | ||
34 | #define HAVE_INVALIDATE_ICACHE | 36 | #define HAVE_INVALIDATE_ICACHE |
35 | static inline void invalidate_icache(void) | 37 | static inline void invalidate_icache(void) |