summaryrefslogtreecommitdiffstats
path: root/board/barco
diff options
context:
space:
mode:
authorWolfgang Denk <wd@pollux.denx.de>2005-10-13 01:45:54 +0200
committerWolfgang Denk <wd@pollux.denx.de>2005-10-13 01:45:54 +0200
commitf57f70aab9d5ed7964f2f791829a2d780b788a7e (patch)
treea618aa9c21d7e9ee9cb79161f0085edaa5f22672 /board/barco
parent3df5bea0b0bddc196bf952c51d1dd54d966b82ba (diff)
downloadu-boot-f57f70aab9d5ed7964f2f791829a2d780b788a7e.tar.gz
u-boot-f57f70aab9d5ed7964f2f791829a2d780b788a7e.tar.xz
u-boot-f57f70aab9d5ed7964f2f791829a2d780b788a7e.zip
Support passing of OF flat trees to the kernel.
Patch by Pantelis Antoniou, 04 Sep 2005
Diffstat (limited to 'board/barco')
-rw-r--r--board/barco/barco.c225
1 files changed, 124 insertions, 101 deletions
diff --git a/board/barco/barco.c b/board/barco/barco.c
index 2fb370098a..613e72274c 100644
--- a/board/barco/barco.c
+++ b/board/barco/barco.c
@@ -90,17 +90,17 @@ long int initdram (int board_type)
long mear1;
long emear1;
- size = get_ram_size(CFG_SDRAM_BASE, CFG_MAX_RAM_SIZE);
+ size = get_ram_size (CFG_SDRAM_BASE, CFG_MAX_RAM_SIZE);
new_bank0_end = size - 1;
- mear1 = mpc824x_mpc107_getreg(MEAR1);
- emear1 = mpc824x_mpc107_getreg(EMEAR1);
+ mear1 = mpc824x_mpc107_getreg (MEAR1);
+ emear1 = mpc824x_mpc107_getreg (EMEAR1);
mear1 = (mear1 & 0xFFFFFF00) |
((new_bank0_end & MICR_ADDR_MASK) >> MICR_ADDR_SHIFT);
emear1 = (emear1 & 0xFFFFFF00) |
((new_bank0_end & MICR_ADDR_MASK) >> MICR_EADDR_SHIFT);
- mpc824x_mpc107_setreg(MEAR1, mear1);
- mpc824x_mpc107_setreg(EMEAR1, emear1);
+ mpc824x_mpc107_setreg (MEAR1, mear1);
+ mpc824x_mpc107_setreg (EMEAR1, emear1);
return (size);
}
@@ -113,11 +113,11 @@ static struct pci_config_table pci_barcohydra_config_table[] = {
{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x0f, PCI_ANY_ID,
pci_cfgfunc_config_device, { PCI_ENET0_IOADDR,
PCI_ENET0_MEMADDR,
- PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER }},
+ PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER } },
{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 0x10, PCI_ANY_ID,
pci_cfgfunc_config_device, { PCI_ENET1_IOADDR,
PCI_ENET1_MEMADDR,
- PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER }},
+ PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER } },
{ }
};
#endif
@@ -128,68 +128,66 @@ struct pci_controller hose = {
#endif
};
-void pci_init_board(void)
+void pci_init_board (void)
{
- pci_mpc824x_init(&hose);
+ pci_mpc824x_init (&hose);
}
-int write_flash(char *addr, char value)
+int write_flash (char *addr, char value)
{
char *adr = (char *)0xFF800000;
int cnt = 0;
char status,oldstatus;
- *(adr+0x55) = 0xAA;
- udelay(1);
- *(adr+0xAA) = 0x55;
- udelay(1);
- *(adr+0x55) = 0xA0;
- udelay(1);
+ *(adr+0x55) = 0xAA; udelay (1);
+ *(adr+0xAA) = 0x55; udelay (1);
+ *(adr+0x55) = 0xA0; udelay (1);
*addr = value;
status = *addr;
- do{
-
+ do {
oldstatus = status;
status = *addr;
- if ((oldstatus & 0x40) == (status & 0x40)){
+ if ((oldstatus & 0x40) == (status & 0x40)) {
return 4;
}
cnt++;
- if (cnt > 10000){
+ if (cnt > 10000) {
return 2;
}
- }while( (status & 0x20) == 0 );
+ } while ( (status & 0x20) == 0 );
oldstatus = *addr;
status = *addr;
- if ((oldstatus & 0x40) == (status & 0x40)) return 0;
- else {
+ if ((oldstatus & 0x40) == (status & 0x40)) {
+ return 0;
+ } else {
*(adr+0x55) = 0xF0;
return 1;
}
}
-unsigned update_flash(unsigned char* buf){
- switch((*buf) & 0x3){
- case TRY_WORKING:
- printf("found 3 and converted it to 2\n");
- write_flash(buf, (*buf) & 0xFE);
- *((unsigned char *)0xFF800000) = 0xF0;
- udelay(100);
- printf("buf [%#010x] %#010x\n",buf,(*buf));
- case BOOT_WORKING :
- return BOOT_WORKING;
+unsigned update_flash (unsigned char *buf)
+{
+ switch ((*buf) & 0x3) {
+ case TRY_WORKING:
+ printf ("found 3 and converted it to 2\n");
+ write_flash (buf, (*buf) & 0xFE);
+ *((unsigned char *)0xFF800000) = 0xF0;
+ udelay (100);
+ printf ("buf [%#010x] %#010x\n", buf, (*buf));
+ /* XXX - fall through??? */
+ case BOOT_WORKING :
+ return BOOT_WORKING;
}
return BOOT_DEFAULT;
}
-unsigned scan_flash(void)
+unsigned scan_flash (void)
{
char section[] = "kernel";
- ulong sp;
int cfgFileLen = (CFG_FLASH_ERASE_SECTOR_LENGTH >> 1);
int sectionPtr = 0;
int foundItem = 0; /* 0: None, 1: section found, 2: "=" found */
@@ -198,57 +196,54 @@ unsigned scan_flash(void)
buf = (unsigned char*)(CFG_FLASH_RANGE_BASE + CFG_FLASH_RANGE_SIZE \
- CFG_FLASH_ERASE_SECTOR_LENGTH);
- for(bufPtr = 0; bufPtr < cfgFileLen; ++bufPtr){
+ for (bufPtr = 0; bufPtr < cfgFileLen; ++bufPtr) {
if ((buf[bufPtr]==0xFF) && (*(int*)(buf+bufPtr)==0xFFFFFFFF)) {
return BOOT_DEFAULT;
}
- switch(foundItem)
- {
- /* This is the scanning loop, we try to find a particular
- * quoted value
- */
- case 0:
- if((section[sectionPtr] == 0)){
- ++foundItem;
- }
- else if(buf[bufPtr] == section[sectionPtr]){
- ++sectionPtr;
- }
- else {
- sectionPtr = 0;
- }
- break;
- case 1:
+ /* This is the scanning loop, we try to find a particular
+ * quoted value
+ */
+ switch (foundItem) {
+ case 0:
+ if ((section[sectionPtr] == 0)) {
++foundItem;
- break;
- case 2:
- ++foundItem;
- break;
- case 3:
- default:
- return update_flash(buf[bufPtr - 1]);
+ } else if (buf[bufPtr] == section[sectionPtr]) {
+ ++sectionPtr;
+ } else {
+ sectionPtr = 0;
+ }
+ break;
+ case 1:
+ ++foundItem;
+ break;
+ case 2:
+ ++foundItem;
+ break;
+ case 3:
+ default:
+ return update_flash (&buf[bufPtr - 1]);
}
}
- printf("Failed to read %s\n",section);
+ printf ("Failed to read %s\n",section);
return BOOT_DEFAULT;
}
-TSBootInfo* find_boot_info(void)
+TSBootInfo* find_boot_info (void)
{
- unsigned bootimage = scan_flash();
- TSBootInfo* info = (TSBootInfo*)malloc(sizeof(TSBootInfo));
-
- switch(bootimage){
- case TRY_WORKING:
- info->address = CFG_WORKING_KERNEL_ADDRESS;
- break;
- case BOOT_WORKING :
- info->address = CFG_WORKING_KERNEL_ADDRESS;
- break;
- case BOOT_DEFAULT:
- default:
- info->address= CFG_DEFAULT_KERNEL_ADDRESS;
+ unsigned bootimage = scan_flash ();
+ TSBootInfo* info = (TSBootInfo*)malloc (sizeof(TSBootInfo));
+
+ switch (bootimage) {
+ case TRY_WORKING:
+ info->address = CFG_WORKING_KERNEL_ADDRESS;
+ break;
+ case BOOT_WORKING :
+ info->address = CFG_WORKING_KERNEL_ADDRESS;
+ break;
+ case BOOT_DEFAULT:
+ default:
+ info->address= CFG_DEFAULT_KERNEL_ADDRESS;
}
info->size = *((unsigned int *)(info->address ));
@@ -256,43 +251,44 @@ TSBootInfo* find_boot_info(void)
return info;
}
-void barcobcd_boot(void)
+void barcobcd_boot (void)
{
TSBootInfo* start;
char *bootm_args[2];
char *buf;
int cnt;
+ extern int do_bootm (cmd_tbl_t *, int, int, char *[]);
buf = (char *)(0x00800000);
/* make certain there are enough chars to print the command line here!
*/
- bootm_args[0]=(char *)malloc(16*sizeof(char));
- bootm_args[1]=(char *)malloc(16*sizeof(char));
+ bootm_args[0] = (char *)malloc (16*sizeof(char));
+ bootm_args[1] = (char *)malloc (16*sizeof(char));
- start = find_boot_info();
+ start = find_boot_info ();
- printf("Booting kernel at address %#10x with size %#10x\n",
+ printf ("Booting kernel at address %#10x with size %#10x\n",
start->address, start->size);
/* give length of the kernel image to bootm */
- sprintf(bootm_args[0],"%x",start->size);
+ sprintf (bootm_args[0],"%x",start->size);
/* give address of the kernel image to bootm */
- sprintf(bootm_args[1],"%x",buf);
+ sprintf (bootm_args[1],"%x",buf);
- printf("flash address: %#10x\n",start->address+8);
- printf("buf address: %#10x\n",buf);
+ printf ("flash address: %#10x\n",start->address+8);
+ printf ("buf address: %#10x\n",buf);
/* aha, we reserve 8 bytes here... */
- for (cnt = 0; cnt < start->size ; cnt++){
+ for (cnt = 0; cnt < start->size ; cnt++) {
buf[cnt] = ((char *)start->address)[cnt+8];
}
/* initialise RAM memory */
*((unsigned int *)0xFEC00000) = 0x00141A98;
- do_bootm(NULL,0,2,bootm_args);
+ do_bootm (NULL,0,2,bootm_args);
}
-int barcobcd_boot_image(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int barcobcd_boot_image (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
#if 0
if (argc > 1) {
@@ -300,7 +296,7 @@ int barcobcd_boot_image(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
return 1;
}
#endif
- barcobcd_boot();
+ barcobcd_boot ();
return 0;
}
@@ -308,19 +304,19 @@ int barcobcd_boot_image(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
/* Currently, boot_working and boot_default are the same command. This is
* left in here to see what we'll do in the future */
-U_BOOT_CMD(
+U_BOOT_CMD (
try_working, 1, 1, barcobcd_boot_image,
" try_working - check flash value and boot the appropriate image\n",
"\n"
);
-U_BOOT_CMD(
+U_BOOT_CMD (
boot_working, 1, 1, barcobcd_boot_image,
" boot_working - check flash value and boot the appropriate image\n",
"\n"
);
-U_BOOT_CMD(
+U_BOOT_CMD (
boot_default, 1, 1, barcobcd_boot_image,
" boot_default - check flash value and boot the appropriate image\n",
"\n"
@@ -328,13 +324,40 @@ U_BOOT_CMD(
/*
* We are not using serial communication, so just provide empty functions
*/
-int serial_init(void){return 0;}
-void serial_setbrg(void){}
-void serial_putc(const char c){}
-void serial_puts(const char *c){}
-void serial_addr(unsigned int i){}
-int serial_getc(void){return 0;}
-int serial_tstc(void){return 0;}
-
-unsigned long post_word_load(void){return 0l;};
-void post_word_store(unsigned long val){}
+int serial_init (void)
+{
+ return 0;
+}
+void serial_setbrg (void)
+{
+ return;
+}
+void serial_putc (const char c)
+{
+ return;
+}
+void serial_puts (const char *c)
+{
+ return;
+}
+void serial_addr (unsigned int i)
+{
+ return;
+}
+int serial_getc (void)
+{
+ return 0;
+}
+int serial_tstc (void)
+{
+ return 0;
+}
+
+unsigned long post_word_load (void)
+{
+ return 0l;
+}
+void post_word_store (unsigned long val)
+{
+ return;
+}