#include "arch.h" #include "mcfuart.h" char ident[] = "Moreton Bay NETtel"; char copyright[] = "(C) 1999, Moreton Bay Ventures"; #define IMAGE_ADDR 0xf0010000 #define IMAGE_SIZE 0x000e0000 #define XFER_ADDR 0x400 #define DEFAULT_PORT 0 extern unsigned int consoleBase; void configureConsole() { consoleBase = MCFUART_BASE1; configureSerial(consoleBase, 19200, MCF_CLK); } void configureAuxSerial() { configureSerial(MCFUART_BASE2, 115200, MCF_CLK); } /* State to LED mapping */ void setLED(int state) { unsigned char bits; switch(state) { case 0: bits = 0x00; break; case 1: bits = 0x01; break; case 2: bits = 0x02; break; case 3: bits = 0x04; break; case 4: bits = 0x08; break; case 5: bits = 0x10; break; case 6: bits = 0x20; break; case 7: bits = 0x40; break; case 8: bits = 0x80; break; case 10: bits = 0x10; break; case 11: bits = 0x11; break; case 12: bits = 0x12; break; case 13: bits = 0x13; break; case 14: bits = 0x14; break; case 15: bits = 0x15; break; default: return; } *((volatile unsigned char *)0x30400000) = (unsigned char)(~bits); } extern unsigned int downloadPort; extern unsigned int image_size; extern unsigned char *xfer_addr; extern unsigned char *down_addr; extern unsigned char *dest_addr; extern unsigned char *source_addr; void setImageParams() { downloadPort = DEFAULT_PORT; image_size = IMAGE_SIZE; xfer_addr = (unsigned char *)XFER_ADDR; down_addr = (unsigned char *)IMAGE_ADDR; dest_addr = (unsigned char *)0xf1000000; source_addr = (unsigned char *)IMAGE_ADDR; } void setupBoard() { volatile unsigned char *mbar; mbar = (volatile unsigned char *) MCF_MBAR; /* * Firstly set up the POWER and DIAG LEDs. They are on * parallel I/O pins of the 5307. */ *((volatile unsigned short *) (mbar + MCFSIM_PAR)) = 0x0000; *((volatile unsigned short *) (mbar + MCFSIM_PADDR)) = 0x00ec; /* Set POWER and DIAG LEDs on */ *((volatile unsigned short *) (mbar + MCFSIM_PADAT)) = 0x0000; /* * Setup chip selects... */ /* CS0 -- FLASH ROM */ *((volatile unsigned short *) (mbar + MCFSIM_CSAR0)) = 0xf000; *((volatile unsigned long *) (mbar + MCFSIM_CSMR0)) = 0x000f0001; *((volatile unsigned short *) (mbar + MCFSIM_CSCR0)) = 0x1980; /* CS1 -- PCI host bridge */ *((volatile unsigned short *) (mbar + MCFSIM_CSAR1)) = 0x5000; *((volatile unsigned long *) (mbar + MCFSIM_CSMR1)) = 0x000f0001; *((volatile unsigned short *) (mbar + MCFSIM_CSCR1)) = 0x3d80; /* CS2-7 */ *((volatile unsigned short *) (mbar + MCFSIM_CSBAR)) = 0x3000; *((volatile unsigned short *) (mbar + MCFSIM_CSBAMR)) = 0x0000; /* CS2 -- LED bank, address 0x30400000 */ *((volatile unsigned short *) (mbar + MCFSIM_CSMR2)) = 0x0001; *((volatile unsigned short *) (mbar + MCFSIM_CSCR2)) = 0x0140; setLED(0); /* CS3 -- ethernet, address 0x30600000 */ *((volatile unsigned short *) (mbar + MCFSIM_CSMR3)) = 0x0001; *((volatile unsigned short *) (mbar + MCFSIM_CSCR3)) = 0x0d80; } static int delay(int size) { int i; for (i = 0; (i < size); i++) nop(); } void setupDRAM() { volatile unsigned char *mbar = (unsigned char *)MCF_MBAR; unsigned long junk; *((volatile unsigned short *) (mbar + MCFSIM_DCR)) = 0x8130; *((volatile unsigned long *) (mbar + MCFSIM_DACR0)) = 0x00000300; *((volatile unsigned long *) (mbar + MCFSIM_DMR0)) = 0x003c0001; *((volatile unsigned long *) (mbar + MCFSIM_DACR0)) = 0x00000308; junk = *((volatile unsigned long *) 0x200); nop(); *((volatile unsigned long *) (mbar + MCFSIM_DACR0)) = 0x00008300; delay(0x1000); *((volatile unsigned long *) (mbar + MCFSIM_DACR0)) = 0x00008340; *((volatile unsigned long *) 0x200) = 0x00000000; delay(0x10); }