diff options
| author | Marcoen Hirschberg <marcoen@gmail.com> | 2006-08-12 08:27:48 +0000 |
|---|---|---|
| committer | Marcoen Hirschberg <marcoen@gmail.com> | 2006-08-12 08:27:48 +0000 |
| commit | 0a0682474e6326f63994a6cd62f23efd9818a7ec (patch) | |
| tree | 9ddd8fbfe72fa4ca001b21de93b951ab24dc951f /firmware | |
| parent | dd754886f5fd4004b521c954e263772d35fb6a46 (diff) | |
| download | rockbox-0a0682474e6326f63994a6cd62f23efd9818a7ec.zip rockbox-0a0682474e6326f63994a6cd62f23efd9818a7ec.tar.gz rockbox-0a0682474e6326f63994a6cd62f23efd9818a7ec.tar.bz2 rockbox-0a0682474e6326f63994a6cd62f23efd9818a7ec.tar.xz | |
initial gigabeat bootloader (only test code)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10536 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
| -rw-r--r-- | firmware/boot.lds | 32 | ||||
| -rw-r--r-- | firmware/crt0.S | 5 | ||||
| -rw-r--r-- | firmware/kernel.c | 19 |
3 files changed, 55 insertions, 1 deletions
diff --git a/firmware/boot.lds b/firmware/boot.lds index 78dd40b..56383d7 100644 --- a/firmware/boot.lds +++ b/firmware/boot.lds @@ -69,7 +69,7 @@ INPUT(crt0.o) #define FLASHSIZE 256K - ROM_START #endif -#ifndef CPU_PP +#if !defined(CPU_PP) && (CONFIG_CPU!=S3C2440) MEMORY { DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE @@ -117,6 +117,36 @@ SECTIONS _end = .; } } +#elif (CONFIG_CPU==S3C2440) +{ + . = DRAMORIG + 0x8000; + .text : { + *(.init.text) + *(.text) + } + .data : { + *(.icode) + *(.irodata) + *(.idata) + *(.data) + _dataend = . ; + } + .stack : + { + *(.stack) + _stackbegin = .; + stackbegin = .; + . += 0x2000; + _stackend = .; + stackend = .; + } + .bss : { + _edata = .; + *(.bss); + *(.ibss); + _end = .; + } +} #else { .vectors : diff --git a/firmware/crt0.S b/firmware/crt0.S index 1c52658..96e08be 100644 --- a/firmware/crt0.S +++ b/firmware/crt0.S @@ -303,6 +303,11 @@ boot_table: .space 400 #endif /* PP specific */ /* Code for ARM bootloader targets other than iPod go here */ + +#if CONFIG_CPU == S3C2440 + bl main +#endif + #else /* BOOTLOADER */ /* Set up stack for IRQ mode */ diff --git a/firmware/kernel.c b/firmware/kernel.c index 7c5c74c..1c8bf9d 100644 --- a/firmware/kernel.c +++ b/firmware/kernel.c @@ -56,6 +56,21 @@ void kernel_init(void) void sleep(int ticks) { +#if CONFIG_CPU == S3C2440 && defined(BOOTLOADER) + int counter; + TCON &= ~(1 << 20); // stop timer 4 + // TODO: this constant depends on dividers settings inherited from + // firmware. Set them explicitly somwhere. + TCNTB4 = 12193 * ticks / HZ; + TCON |= 1 << 21; // set manual bit + TCON &= ~(1 << 21); // reset manual bit + TCON &= ~(1 << 22); //autoreload Off + TCON |= (1 << 20); // start timer 4 + do { + counter = TCNTO4; + } while(counter > 0); + +#else /* Always sleep at least 1 tick */ int timeout = current_tick + ticks + 1; @@ -63,12 +78,16 @@ void sleep(int ticks) sleep_thread(); } wake_up_thread(); +#endif } void yield(void) { +#if CONFIG_CPU == S3C2440 && defined(BOOTLOADER) +#else switch_thread(); wake_up_thread(); +#endif } /**************************************************************************** |