forked from len0rd/rockbox
initial gigabeat bootloader (only test code)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10536 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
dd754886f5
commit
0a0682474e
6 changed files with 173 additions and 2 deletions
|
@ -1,5 +1,7 @@
|
||||||
#if defined(IPOD_ARCH)
|
#if defined(IPOD_ARCH)
|
||||||
ipod.c
|
ipod.c
|
||||||
|
#elif defined(GIGABEAT_F)
|
||||||
|
gigabeat.c
|
||||||
#elif defined(SANSA_E200)
|
#elif defined(SANSA_E200)
|
||||||
e200.c
|
e200.c
|
||||||
#elif defined(IRIVER_H10)
|
#elif defined(IRIVER_H10)
|
||||||
|
|
115
bootloader/gigabeat.c
Normal file
115
bootloader/gigabeat.c
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "cpu.h"
|
||||||
|
#include "system.h"
|
||||||
|
#include "lcd.h"
|
||||||
|
#include "kernel.h"
|
||||||
|
#include "thread.h"
|
||||||
|
#include "ata.h"
|
||||||
|
#include "fat.h"
|
||||||
|
#include "disk.h"
|
||||||
|
#include "font.h"
|
||||||
|
#include "adc.h"
|
||||||
|
#include "backlight.h"
|
||||||
|
#include "panic.h"
|
||||||
|
#include "power.h"
|
||||||
|
#include "file.h"
|
||||||
|
|
||||||
|
char version[] = APPSVERSION;
|
||||||
|
|
||||||
|
void go_usb_mode() {
|
||||||
|
/* Drop into USB mode. This does not check for disconnection. */
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
GPBDAT &= 0x7EF;
|
||||||
|
GPBCON |= 1<<8;
|
||||||
|
|
||||||
|
GPGDAT &= 0xE7FF;
|
||||||
|
GPGDAT |= 1<<11;
|
||||||
|
|
||||||
|
for (i = 0; i < 10000000; i++) {continue;}
|
||||||
|
|
||||||
|
GPBCON &= 0x2FFCFF;
|
||||||
|
GPBDAT |= 1<<5;
|
||||||
|
GPBDAT |= 1<<6;
|
||||||
|
}
|
||||||
|
|
||||||
|
void * main(void)
|
||||||
|
{
|
||||||
|
int line = 0, i;
|
||||||
|
char buf[256];
|
||||||
|
struct partinfo* pinfo;
|
||||||
|
unsigned short* identify_info;
|
||||||
|
int testfile;
|
||||||
|
|
||||||
|
lcd_init();
|
||||||
|
lcd_setfont(FONT_SYSFIXED);
|
||||||
|
/*
|
||||||
|
lcd_puts(0, line++, "Rockbox boot loader");
|
||||||
|
snprintf(buf, sizeof(buf), "Version: 20%s", version);
|
||||||
|
lcd_puts(0, line++, buf);
|
||||||
|
snprintf(buf, sizeof(buf), "Gigabeat version: 0x%08x", 1);
|
||||||
|
lcd_puts(0, line++, buf);
|
||||||
|
*/
|
||||||
|
|
||||||
|
lcd_puts(0, line++, "Hold MENU when booting for rescue mode.");
|
||||||
|
lcd_update();
|
||||||
|
|
||||||
|
/* hold MENU to enter rescue mode */
|
||||||
|
if (GPGDAT & 2) {
|
||||||
|
lcd_puts(0, line++, "Entering rescue mode..");
|
||||||
|
lcd_update();
|
||||||
|
go_usb_mode();
|
||||||
|
while(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
i = ata_init();
|
||||||
|
i = disk_mount_all();
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "disk_mount_all: %d", i);
|
||||||
|
lcd_puts(0, line++, buf);
|
||||||
|
|
||||||
|
identify_info = ata_get_identify();
|
||||||
|
|
||||||
|
for (i=0; i < 20; i++)
|
||||||
|
((unsigned short*)buf)[i]=htobe16(identify_info[i+27]);
|
||||||
|
|
||||||
|
buf[40]=0;
|
||||||
|
|
||||||
|
/* kill trailing space */
|
||||||
|
for (i=39; i && buf[i]==' '; i--)
|
||||||
|
buf[i] = 0;
|
||||||
|
|
||||||
|
lcd_puts(0, line++, "Model");
|
||||||
|
lcd_puts(0, line++, buf);
|
||||||
|
|
||||||
|
for (i=0; i < 4; i++)
|
||||||
|
((unsigned short*)buf)[i]=htobe16(identify_info[i+23]);
|
||||||
|
|
||||||
|
buf[8]=0;
|
||||||
|
|
||||||
|
lcd_puts(0, line++, "Firmware");
|
||||||
|
lcd_puts(0, line++, buf);
|
||||||
|
|
||||||
|
pinfo = disk_partinfo(0);
|
||||||
|
snprintf(buf, sizeof(buf), "Partition 0: 0x%02x %ld MB",
|
||||||
|
pinfo->type, pinfo->size / 2048);
|
||||||
|
lcd_puts(0, line++, buf);
|
||||||
|
|
||||||
|
testfile = open("/boottest.txt", O_WRONLY|O_CREAT|O_TRUNC);
|
||||||
|
write(testfile, "It works!", 9);
|
||||||
|
close(testfile);
|
||||||
|
|
||||||
|
lcd_update();
|
||||||
|
|
||||||
|
/* now wait in USB mode so the bootloader can be updated */
|
||||||
|
go_usb_mode();
|
||||||
|
while(1);
|
||||||
|
|
||||||
|
return((void *)0);
|
||||||
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ INPUT(crt0.o)
|
||||||
#define FLASHSIZE 256K - ROM_START
|
#define FLASHSIZE 256K - ROM_START
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CPU_PP
|
#if !defined(CPU_PP) && (CONFIG_CPU!=S3C2440)
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
|
DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
|
||||||
|
@ -117,6 +117,36 @@ SECTIONS
|
||||||
_end = .;
|
_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
|
#else
|
||||||
{
|
{
|
||||||
.vectors :
|
.vectors :
|
||||||
|
|
|
@ -303,6 +303,11 @@ boot_table:
|
||||||
.space 400
|
.space 400
|
||||||
#endif /* PP specific */
|
#endif /* PP specific */
|
||||||
/* Code for ARM bootloader targets other than iPod go here */
|
/* Code for ARM bootloader targets other than iPod go here */
|
||||||
|
|
||||||
|
#if CONFIG_CPU == S3C2440
|
||||||
|
bl main
|
||||||
|
#endif
|
||||||
|
|
||||||
#else /* BOOTLOADER */
|
#else /* BOOTLOADER */
|
||||||
|
|
||||||
/* Set up stack for IRQ mode */
|
/* Set up stack for IRQ mode */
|
||||||
|
|
|
@ -56,6 +56,21 @@ void kernel_init(void)
|
||||||
|
|
||||||
void sleep(int ticks)
|
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 */
|
/* Always sleep at least 1 tick */
|
||||||
int timeout = current_tick + ticks + 1;
|
int timeout = current_tick + ticks + 1;
|
||||||
|
|
||||||
|
@ -63,12 +78,16 @@ void sleep(int ticks)
|
||||||
sleep_thread();
|
sleep_thread();
|
||||||
}
|
}
|
||||||
wake_up_thread();
|
wake_up_thread();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void yield(void)
|
void yield(void)
|
||||||
{
|
{
|
||||||
|
#if CONFIG_CPU == S3C2440 && defined(BOOTLOADER)
|
||||||
|
#else
|
||||||
switch_thread();
|
switch_thread();
|
||||||
wake_up_thread();
|
wake_up_thread();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
|
2
tools/configure
vendored
2
tools/configure
vendored
|
@ -997,7 +997,7 @@ fi
|
||||||
case $option in
|
case $option in
|
||||||
[Bb])
|
[Bb])
|
||||||
case $archos in
|
case $archos in
|
||||||
h100|h120|h300|x5|ipodcolor|ipodnano|ipodvideo|ipod3g|ipod4g|ipodmini|ipodmini2g|h10|e200)
|
h100|h120|h300|x5|ipodcolor|ipodnano|ipodvideo|ipod3g|ipod4g|ipodmini|ipodmini2g|gigabeatf|h10|e200)
|
||||||
extradefines="-DBOOTLOADER" # for target makefile symbol EXTRA_DEFINES
|
extradefines="-DBOOTLOADER" # for target makefile symbol EXTRA_DEFINES
|
||||||
appsdir='\$(ROOTDIR)/bootloader'
|
appsdir='\$(ROOTDIR)/bootloader'
|
||||||
apps="bootloader"
|
apps="bootloader"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue