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)
|
||||
ipod.c
|
||||
#elif defined(GIGABEAT_F)
|
||||
gigabeat.c
|
||||
#elif defined(SANSA_E200)
|
||||
e200.c
|
||||
#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
|
||||
#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 :
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
|
|
2
tools/configure
vendored
2
tools/configure
vendored
|
@ -997,7 +997,7 @@ fi
|
|||
case $option in
|
||||
[Bb])
|
||||
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
|
||||
appsdir='\$(ROOTDIR)/bootloader'
|
||||
apps="bootloader"
|
||||
|
|
Loading…
Reference in a new issue