diff options
author | Amaury Pouly <pamaury@rockbox.org> | 2011-05-01 13:02:46 +0000 |
---|---|---|
committer | Amaury Pouly <pamaury@rockbox.org> | 2011-05-01 13:02:46 +0000 |
commit | 08fb3f65745a237e2c1eae55d856ff27702246e5 (patch) | |
tree | a56ce11ac20e4df0e36de9195306c10b71752538 /bootloader | |
parent | c0838cbfd8e45621fe3450aee1bf9458ff420d16 (diff) |
Sansa Fuze+: initial commit (bootloader only, LCD basically working)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29808 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'bootloader')
-rw-r--r-- | bootloader/SOURCES | 3 | ||||
-rw-r--r-- | bootloader/imx233.c | 91 |
2 files changed, 94 insertions, 0 deletions
diff --git a/bootloader/SOURCES b/bootloader/SOURCES index c56acb25ba..3e173386e7 100644 --- a/bootloader/SOURCES +++ b/bootloader/SOURCES @@ -55,6 +55,9 @@ creativezvm.c #elif CONFIG_CPU==AS3525 || CONFIG_CPU==AS3525v2 sansa_as3525.c show_logo.c +#elif CONFIG_CPU==IMX233 +imx233.c +show_logo.c #elif defined(LYRE_PROTO1) lyre_proto1.c show_logo.c diff --git a/bootloader/imx233.c b/bootloader/imx233.c new file mode 100644 index 0000000000..cded5a119a --- /dev/null +++ b/bootloader/imx233.c @@ -0,0 +1,91 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2011 by amaury Pouly + * + * Based on Rockbox iriver bootloader by Linus Nielsen Feltzing + * and the ipodlinux bootloader by Daniel Palffy and Bernard Leach + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include <stdio.h> +#include <system.h> +#include <inttypes.h> +#include "config.h" +#include "gcc_extensions.h" +#include "lcd.h" +#include "backlight.h" +#include "button-target.h" +#include "common.h" +#include "storage.h" +#include "disk.h" +#include "panic.h" +#include "power.h" + +int show_logo(void); + +void main(void) NORETURN_ATTR; +void main(void) +{ + unsigned char* loadbuffer; + int buffer_size; + void(*kernel_entry)(void); + int ret; + + system_init(); + kernel_init(); + + enable_irq(); + + lcd_init(); + show_logo(); + + backlight_init(); + + button_init_device(); + + ret = storage_init(); + if(ret < 0) + error(EATA, ret, true); + + while(!disk_init(IF_MV(0))) + panicf("disk_init failed!"); + + while((ret = disk_mount_all()) <= 0) + { + error(EDISK, ret, true); + } + + printf("Loading firmware"); + + loadbuffer = (unsigned char*)DRAM_ORIG; /* DRAM */ + buffer_size = (int)(loadbuffer + DRAM_SIZE - TTB_SIZE); + + while((ret = load_firmware(loadbuffer, BOOTFILE, buffer_size)) < 0) + { + error(EBOOTFILE, ret, true); + } + + kernel_entry = (void*) loadbuffer; + //cpucache_invalidate(); + printf("Executing"); + kernel_entry(); + printf("ERR: Failed to boot"); + + /* never returns */ + while(1) ; +} |