forked from len0rd/rockbox
imx233:fuze+: major memory and usb rework
- now identity map dram uncached and have a cached and buffered virtual alias - rework dma to handle virtual to physical pointers conversion - fix lcd frame pointer - implement usb detection properly - implement bootloader usb properly - allow the bootloader to disable MMC windowing (useful for recovery) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30432 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
11e1f71612
commit
7d4fed53cc
17 changed files with 353 additions and 104 deletions
|
@ -39,6 +39,69 @@
|
|||
#include "fmradio_i2c.h"
|
||||
|
||||
#include "usb.h"
|
||||
#include "usb-target.h"
|
||||
|
||||
#include "clkctrl-imx233.h"
|
||||
|
||||
#ifdef HAVE_BOOTLOADER_USB_MODE
|
||||
static void usb_mode(int connect_timeout)
|
||||
{
|
||||
int button;
|
||||
|
||||
usb_init();
|
||||
usb_start_monitoring();
|
||||
|
||||
/* Wait for threads to connect or cable is pulled */
|
||||
printf("USB: Connecting");
|
||||
|
||||
long end_tick = current_tick + connect_timeout;
|
||||
|
||||
while(1)
|
||||
{
|
||||
button = button_get_w_tmo(HZ/10);
|
||||
|
||||
if(button == SYS_USB_CONNECTED)
|
||||
break; /* Hit */
|
||||
|
||||
if(TIME_AFTER(current_tick, end_tick))
|
||||
{
|
||||
/* Timed out waiting for the connect - will happen when connected
|
||||
* to a charger through the USB port */
|
||||
printf("USB: Timed out");
|
||||
break;
|
||||
}
|
||||
|
||||
if(!usb_plugged())
|
||||
break; /* Cable pulled */
|
||||
}
|
||||
|
||||
if(button == SYS_USB_CONNECTED)
|
||||
{
|
||||
/* Got the message - wait for disconnect */
|
||||
printf("Bootloader USB mode");
|
||||
|
||||
usb_acknowledge(SYS_USB_CONNECTED_ACK);
|
||||
|
||||
while(1)
|
||||
{
|
||||
button = button_get_w_tmo(HZ/2);
|
||||
if(button == SYS_USB_DISCONNECTED)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Put drivers initialized for USB connection into a known state */
|
||||
usb_close();
|
||||
|
||||
system_exception_wait();
|
||||
power_off();
|
||||
}
|
||||
#else /* !HAVE_BOOTLOADER_USB_MODE */
|
||||
static void usb_mode(int connect_timeout)
|
||||
{
|
||||
(void) connect_timeout;
|
||||
}
|
||||
#endif /* HAVE_BOOTLOADER_USB_MODE */
|
||||
|
||||
void main(uint32_t arg) NORETURN_ATTR;
|
||||
void main(uint32_t arg)
|
||||
|
@ -51,6 +114,7 @@ void main(uint32_t arg)
|
|||
system_init();
|
||||
kernel_init();
|
||||
|
||||
power_init();
|
||||
enable_irq();
|
||||
|
||||
lcd_init();
|
||||
|
@ -59,32 +123,32 @@ void main(uint32_t arg)
|
|||
|
||||
backlight_init();
|
||||
|
||||
button_init_device();
|
||||
button_init();
|
||||
|
||||
//button_debug_screen();
|
||||
printf("arg=%c%c%c%c", arg >> 24,
|
||||
(arg >> 16) & 0xff, (arg >> 8) & 0xff, (arg & 0xff));
|
||||
printf("arg=%x", arg);
|
||||
|
||||
#ifdef SANSA_FUZEPLUS
|
||||
extern void imx233_mmc_disable_window(void);
|
||||
if(arg == 0xfee1dead)
|
||||
{
|
||||
printf("Disable MMC window.");
|
||||
imx233_mmc_disable_window();
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = storage_init();
|
||||
if(ret < 0)
|
||||
error(EATA, ret, true);
|
||||
|
||||
#ifdef HAVE_BOOTLOADER_USB_MODE
|
||||
usb_init();
|
||||
usb_core_enable_driver(USB_DRIVER_SERIAL, true);
|
||||
usb_attach();
|
||||
while(!(button_read_device() & BUTTON_POWER))
|
||||
yield();
|
||||
power_off();
|
||||
#endif /* HAVE_BOOTLOADER_USB_MODE */
|
||||
if(usb_plugged())
|
||||
usb_mode(HZ * 2);
|
||||
|
||||
while(!disk_init(IF_MV(0)))
|
||||
panicf("disk_init failed!");
|
||||
printf("disk_init failed!");
|
||||
|
||||
while((ret = disk_mount_all()) <= 0)
|
||||
{
|
||||
error(EDISK, ret, true);
|
||||
}
|
||||
if((ret = disk_mount_all()) <= 0)
|
||||
error(EDISK, ret, false);
|
||||
|
||||
if(button_read_device() & BUTTON_VOL_UP)
|
||||
printf("Booting from SD card required.");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue