mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-24 00:07:11 +02:00
Cleanups on romboot and u-boot.
Conditionally apply ldd and ldconfig support on at91 platform git-svn-id: svn://svn.openwrt.org/openwrt/trunk@6862 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
7b54053908
commit
c3831d0284
@ -19,6 +19,8 @@ PKG_SOURCE_URL:=http://www.teest.com/at91
|
||||
PKG_MD5SUM:=
|
||||
PKG_CAT:=zcat
|
||||
|
||||
CRLF_WORKAROUND=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Build/InstallDev
|
||||
|
@ -2,56 +2,56 @@ diff -uNr romboot/main.cpp romboot.new/main.cpp
|
||||
--- romboot/main.cpp 2004-07-16 17:10:04.000000000 +0200
|
||||
+++ romboot.new/main.cpp 2006-03-03 02:27:37.000000000 +0100
|
||||
@@ -23,12 +23,12 @@
|
||||
#define AT91C_UBOOT_DATAFLASH_ADDR 0xC0008000
|
||||
|
||||
// crystal= 18.432MHz
|
||||
-//#define AT91C_PLLA_VALUE 0x2026BE04 // -> 179.712MHz
|
||||
-//#define AT91C_PLLA_MCK 0x0000202
|
||||
+#define AT91C_PLLA_VALUE 0x2026BE04 // -> 179.712MHz
|
||||
+#define AT91C_PLLA_MCK 0x0000202
|
||||
|
||||
// crystal= 20.000MHz
|
||||
-#define AT91C_PLLA_VALUE 0x2023BE04 // -> 180MHz
|
||||
-#define AT91C_PLLA_MCK 0x0000202
|
||||
+//#define AT91C_PLLA_VALUE 0x2023BE04 // -> 180MHz
|
||||
+//#define AT91C_PLLA_MCK 0x0000202
|
||||
|
||||
#define DELAY_MAIN_FREQ 1000
|
||||
#define DISP_LINE_LEN 16
|
||||
#define AT91C_UBOOT_DATAFLASH_ADDR 0xC0008000
|
||||
|
||||
// crystal= 18.432MHz
|
||||
-//#define AT91C_PLLA_VALUE 0x2026BE04 // -> 179.712MHz
|
||||
-//#define AT91C_PLLA_MCK 0x0000202
|
||||
+#define AT91C_PLLA_VALUE 0x2026BE04 // -> 179.712MHz
|
||||
+#define AT91C_PLLA_MCK 0x0000202
|
||||
|
||||
// crystal= 20.000MHz
|
||||
-#define AT91C_PLLA_VALUE 0x2023BE04 // -> 180MHz
|
||||
-#define AT91C_PLLA_MCK 0x0000202
|
||||
+//#define AT91C_PLLA_VALUE 0x2023BE04 // -> 180MHz
|
||||
+//#define AT91C_PLLA_MCK 0x0000202
|
||||
|
||||
#define DELAY_MAIN_FREQ 1000
|
||||
#define DISP_LINE_LEN 16
|
||||
@@ -151,7 +151,7 @@
|
||||
//*-----------------------------------------------------------------------------
|
||||
void AT91F_DisplayMenu(void)
|
||||
{
|
||||
- printf("\n\rATMEL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
+ printf("\n\rFDL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
printf(menu_separ);
|
||||
AT91F_DataflashPrintInfo();
|
||||
printf(menu_separ);
|
||||
//*-----------------------------------------------------------------------------
|
||||
void AT91F_DisplayMenu(void)
|
||||
{
|
||||
- printf("\n\rATMEL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
+ printf("\n\rFDL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
printf(menu_separ);
|
||||
AT91F_DataflashPrintInfo();
|
||||
printf(menu_separ);
|
||||
@@ -306,6 +306,19 @@
|
||||
AT91F_SetPLL();
|
||||
}
|
||||
|
||||
+void LedCode(void)
|
||||
+{
|
||||
+ int *pRegister;
|
||||
+ pRegister = (int *)0xFFFFF800; // Enable port C peripheral reg
|
||||
+ *pRegister = 0x3c00;
|
||||
+ pRegister = (int *)0xFFFFF810; // Output Enable reg
|
||||
+ *pRegister = 0x3c00;
|
||||
+ pRegister = (int *)0xFFFFF830; // Set data
|
||||
+ *pRegister = 0x1400;
|
||||
+ pRegister = (int *)0xFFFFF834; // Clear bits
|
||||
+ *pRegister = 0x2800;
|
||||
+}
|
||||
+
|
||||
void AT91F_StartUboot(unsigned int dummy, void *pvoid)
|
||||
{
|
||||
printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
||||
AT91F_SetPLL();
|
||||
}
|
||||
|
||||
+void LedCode(void)
|
||||
+{
|
||||
+ int *pRegister;
|
||||
+ pRegister = (int *)0xFFFFF800; // Enable port C peripheral reg
|
||||
+ *pRegister = 0x3c00;
|
||||
+ pRegister = (int *)0xFFFFF810; // Output Enable reg
|
||||
+ *pRegister = 0x3c00;
|
||||
+ pRegister = (int *)0xFFFFF830; // Set data
|
||||
+ *pRegister = 0x1400;
|
||||
+ pRegister = (int *)0xFFFFF834; // Clear bits
|
||||
+ *pRegister = 0x2800;
|
||||
+}
|
||||
+
|
||||
void AT91F_StartUboot(unsigned int dummy, void *pvoid)
|
||||
{
|
||||
printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
||||
@@ -313,6 +326,7 @@
|
||||
printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
||||
//* Reset registers
|
||||
AT91F_ResetRegisters();
|
||||
+ LedCode();
|
||||
Jump(AT91C_UBOOT_ADDR);
|
||||
while(1);
|
||||
}
|
||||
printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
||||
//* Reset registers
|
||||
AT91F_ResetRegisters();
|
||||
+ LedCode();
|
||||
Jump(AT91C_UBOOT_ADDR);
|
||||
while(1);
|
||||
}
|
||||
|
@ -503,387 +503,387 @@ diff -urN romboot.old/init.cpp romboot/init.cpp
|
||||
--- romboot.old/init.cpp 2004-07-06 13:01:55.000000000 +0200
|
||||
+++ romboot/init.cpp 2007-03-21 12:43:39.000000000 +0100
|
||||
@@ -35,7 +35,7 @@
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_SpuriousHandler()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Spurious Interrupt detected\n\r");
|
||||
+ AT91F_DBGU_Printk("ISI");
|
||||
while (1);
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_SpuriousHandler()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Spurious Interrupt detected\n\r");
|
||||
+ AT91F_DBGU_Printk("ISI");
|
||||
while (1);
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_DataAbort()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Data Abort detected\n\r");
|
||||
+ AT91F_DBGU_Printk("IDA");
|
||||
while (1);
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_DataAbort()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Data Abort detected\n\r");
|
||||
+ AT91F_DBGU_Printk("IDA");
|
||||
while (1);
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_FetchAbort()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Prefetch Abort detected\n\r");
|
||||
+ AT91F_DBGU_Printk("IPA");
|
||||
while (1);
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_FetchAbort()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Prefetch Abort detected\n\r");
|
||||
+ AT91F_DBGU_Printk("IPA");
|
||||
while (1);
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_Undef()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Undef detected\n\r");
|
||||
+ AT91F_DBGU_Printk("IUD");
|
||||
while (1);
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_Undef()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Undef detected\n\r");
|
||||
+ AT91F_DBGU_Printk("IUD");
|
||||
while (1);
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_UndefHandler()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Undef detected\n\r");
|
||||
+ AT91F_DBGU_Printk("IUD");
|
||||
while (1);
|
||||
}
|
||||
|
||||
//*----------------------------------------------------------------------------
|
||||
void AT91F_UndefHandler()
|
||||
{
|
||||
- AT91F_DBGU_Printk("-F- Undef detected\n\r");
|
||||
+ AT91F_DBGU_Printk("IUD");
|
||||
while (1);
|
||||
}
|
||||
|
||||
diff -urN romboot.old/main.cpp romboot/main.cpp
|
||||
--- romboot.old/main.cpp 2007-03-19 12:44:03.000000000 +0100
|
||||
+++ romboot/main.cpp 2007-03-21 19:23:41.000000000 +0100
|
||||
@@ -33,18 +33,22 @@
|
||||
#define DELAY_MAIN_FREQ 1000
|
||||
#define DISP_LINE_LEN 16
|
||||
|
||||
+#define COMPACT 1
|
||||
+
|
||||
//* prototypes
|
||||
extern void AT91F_DBGU_Printk(char *);
|
||||
extern "C" void AT91F_ST_ASM_Handler(void);
|
||||
extern "C" void Jump(unsigned int addr);
|
||||
+extern int mci_main(void);
|
||||
|
||||
-const char *menu_separ = "*----------------------------------------*\n\r";
|
||||
+//const char *menu_separ = "*----------------------------------------*\n\r";
|
||||
|
||||
const char *menu_dataflash = {
|
||||
- "1: Download Dataflash [addr]\n\r"
|
||||
- "2: Read Dataflash [addr]\n\r"
|
||||
- "3: Start U-BOOT\n\r"
|
||||
- "4: Clear bootloader section in Dataflash\n\r"
|
||||
+ "1: DL DF [ad]\n\r"
|
||||
+ "2: RD DF [ad]\n\r"
|
||||
+ "3: CP SD\n\r"
|
||||
+ "4: U-BOOT\n\r"
|
||||
+ "5: RM BL in DF\n\r"
|
||||
};
|
||||
|
||||
//* Globales variables
|
||||
#define DELAY_MAIN_FREQ 1000
|
||||
#define DISP_LINE_LEN 16
|
||||
|
||||
+#define COMPACT 1
|
||||
+
|
||||
//* prototypes
|
||||
extern void AT91F_DBGU_Printk(char *);
|
||||
extern "C" void AT91F_ST_ASM_Handler(void);
|
||||
extern "C" void Jump(unsigned int addr);
|
||||
+extern int mci_main(void);
|
||||
|
||||
-const char *menu_separ = "*----------------------------------------*\n\r";
|
||||
+//const char *menu_separ = "*----------------------------------------*\n\r";
|
||||
|
||||
const char *menu_dataflash = {
|
||||
- "1: Download Dataflash [addr]\n\r"
|
||||
- "2: Read Dataflash [addr]\n\r"
|
||||
- "3: Start U-BOOT\n\r"
|
||||
- "4: Clear bootloader section in Dataflash\n\r"
|
||||
+ "1: DL DF [ad]\n\r"
|
||||
+ "2: RD DF [ad]\n\r"
|
||||
+ "3: CP SD\n\r"
|
||||
+ "4: U-BOOT\n\r"
|
||||
+ "5: RM BL in DF\n\r"
|
||||
};
|
||||
|
||||
//* Globales variables
|
||||
@@ -151,12 +155,12 @@
|
||||
//*-----------------------------------------------------------------------------
|
||||
void AT91F_DisplayMenu(void)
|
||||
{
|
||||
- printf("\n\rFDL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
- printf(menu_separ);
|
||||
+ printf("\n\rFDL SD-Card LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
+// printf(menu_separ);
|
||||
AT91F_DataflashPrintInfo();
|
||||
- printf(menu_separ);
|
||||
+// printf(menu_separ);
|
||||
printf(menu_dataflash);
|
||||
- printf(menu_separ);
|
||||
+// printf(menu_separ);
|
||||
}
|
||||
|
||||
//*-----------------------------------------------------------------------------
|
||||
//*-----------------------------------------------------------------------------
|
||||
void AT91F_DisplayMenu(void)
|
||||
{
|
||||
- printf("\n\rFDL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
- printf(menu_separ);
|
||||
+ printf("\n\rFDL SD-Card LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
+// printf(menu_separ);
|
||||
AT91F_DataflashPrintInfo();
|
||||
- printf(menu_separ);
|
||||
+// printf(menu_separ);
|
||||
printf(menu_dataflash);
|
||||
- printf(menu_separ);
|
||||
+// printf(menu_separ);
|
||||
}
|
||||
|
||||
//*-----------------------------------------------------------------------------
|
||||
@@ -194,6 +198,7 @@
|
||||
}
|
||||
|
||||
|
||||
+#ifndef COMPACT
|
||||
//*-----------------------------------------------------------------------------
|
||||
//* Function Name : AT91F_MemoryDisplay()
|
||||
//* Object : Display the content of the dataflash
|
||||
}
|
||||
|
||||
|
||||
+#ifndef COMPACT
|
||||
//*-----------------------------------------------------------------------------
|
||||
//* Function Name : AT91F_MemoryDisplay()
|
||||
//* Object : Display the content of the dataflash
|
||||
@@ -244,7 +249,7 @@
|
||||
} while (nbytes > 0);
|
||||
return 0;
|
||||
}
|
||||
-
|
||||
+#endif
|
||||
|
||||
//*--------------------------------------------------------------------------------------
|
||||
//* Function Name : AT91F_SetPLL
|
||||
} while (nbytes > 0);
|
||||
return 0;
|
||||
}
|
||||
-
|
||||
+#endif
|
||||
|
||||
//*--------------------------------------------------------------------------------------
|
||||
//* Function Name : AT91F_SetPLL
|
||||
@@ -306,7 +311,7 @@
|
||||
AT91F_SetPLL();
|
||||
}
|
||||
|
||||
-void LedCode(void)
|
||||
+/*void LedCode(void)
|
||||
{
|
||||
int *pRegister;
|
||||
pRegister = (int *)0xFFFFF800; // Enable port C peripheral reg
|
||||
AT91F_SetPLL();
|
||||
}
|
||||
|
||||
-void LedCode(void)
|
||||
+/*void LedCode(void)
|
||||
{
|
||||
int *pRegister;
|
||||
pRegister = (int *)0xFFFFF800; // Enable port C peripheral reg
|
||||
@@ -318,15 +323,16 @@
|
||||
pRegister = (int *)0xFFFFF834; // Clear bits
|
||||
*pRegister = 0x2800;
|
||||
}
|
||||
+*/
|
||||
|
||||
void AT91F_StartUboot(unsigned int dummy, void *pvoid)
|
||||
{
|
||||
- printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
||||
+ //printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
||||
read_dataflash(AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_SIZE, (char *)(AT91C_UBOOT_ADDR));
|
||||
- printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
||||
+ //printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
||||
//* Reset registers
|
||||
AT91F_ResetRegisters();
|
||||
- LedCode();
|
||||
+// LedCode();
|
||||
Jump(AT91C_UBOOT_ADDR);
|
||||
while(1);
|
||||
}
|
||||
pRegister = (int *)0xFFFFF834; // Clear bits
|
||||
*pRegister = 0x2800;
|
||||
}
|
||||
+*/
|
||||
|
||||
void AT91F_StartUboot(unsigned int dummy, void *pvoid)
|
||||
{
|
||||
- printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
||||
+ //printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
||||
read_dataflash(AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_SIZE, (char *)(AT91C_UBOOT_ADDR));
|
||||
- printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
||||
+ //printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
||||
//* Reset registers
|
||||
AT91F_ResetRegisters();
|
||||
- LedCode();
|
||||
+// LedCode();
|
||||
Jump(AT91C_UBOOT_ADDR);
|
||||
while(1);
|
||||
}
|
||||
@@ -385,120 +391,124 @@
|
||||
// start tempo to start Uboot in a delay of 1 sec if no key pressed
|
||||
svcUbootTempo.Start(&svcUbootTempo, 1000, 0, AT91F_StartUboot, (void *)0);
|
||||
|
||||
- printf("press any key to enter bootloader\n\r");
|
||||
+ printf("press key\n\r");
|
||||
getc();
|
||||
|
||||
// stop tempo
|
||||
svcUbootTempo.Stop(&svcUbootTempo);
|
||||
|
||||
- while(1)
|
||||
- {
|
||||
- while(command == 0)
|
||||
- {
|
||||
- AddressToDownload = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
- SizeToDownload = AT91C_DOWNLOAD_MAX_SIZE;
|
||||
- DeviceAddress = 0;
|
||||
+ while(1) {
|
||||
+ while(command == 0) {
|
||||
+ AddressToDownload = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
+ SizeToDownload = AT91C_DOWNLOAD_MAX_SIZE;
|
||||
+ DeviceAddress = 0;
|
||||
|
||||
- AT91F_DisplayMenu();
|
||||
- message[0] = 0;
|
||||
- message[2] = 0;
|
||||
- AT91F_ReadLine("Enter: ", message);
|
||||
+ AT91F_DisplayMenu();
|
||||
+ message[0] = 0;
|
||||
+ message[2] = 0;
|
||||
+ AT91F_ReadLine("Enter: ", message);
|
||||
|
||||
- command = message[0];
|
||||
- if(command == '1' || command == '2')
|
||||
- if(AsciiToHex(&message[2], &DeviceAddress) == 0)
|
||||
- command = 0;
|
||||
-
|
||||
- switch(command)
|
||||
- {
|
||||
- case '1':
|
||||
- printf("Download Dataflash [0x%x]\n\r", DeviceAddress);
|
||||
-
|
||||
- switch(DeviceAddress & 0xFF000000)
|
||||
- {
|
||||
- case CFG_DATAFLASH_LOGIC_ADDR_CS0:
|
||||
- device = 0;
|
||||
- break;
|
||||
+ command = message[0];
|
||||
+ if(command == '1' || command == '2')
|
||||
+ if(AsciiToHex(&message[2], &DeviceAddress) == 0)
|
||||
+ command = 0;
|
||||
+
|
||||
+ switch(command) {
|
||||
+ case '1':
|
||||
+ printf("DL DF [0x%x]\n\r", DeviceAddress);
|
||||
+
|
||||
+ switch(DeviceAddress & 0xFF000000) {
|
||||
+ case CFG_DATAFLASH_LOGIC_ADDR_CS0:
|
||||
+ device = 0;
|
||||
+ break;
|
||||
|
||||
- case CFG_DATAFLASH_LOGIC_ADDR_CS3:
|
||||
- device = 1;
|
||||
- break;
|
||||
+ case CFG_DATAFLASH_LOGIC_ADDR_CS3:
|
||||
+ device = 1;
|
||||
+ break;
|
||||
|
||||
- default:
|
||||
- command = 0;
|
||||
- break;
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
- case '2':
|
||||
- do
|
||||
- {
|
||||
- AT91F_MemoryDisplay(DeviceAddress, 4, 64);
|
||||
- AT91F_ReadLine ((char *)0, message);
|
||||
- DeviceAddress += 0x100;
|
||||
+ default:
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+#ifndef COMPACT
|
||||
+ case '2':
|
||||
+ do {
|
||||
+ AT91F_MemoryDisplay(DeviceAddress, 4, 64);
|
||||
+ AT91F_ReadLine ((char *)0, message);
|
||||
+ DeviceAddress += 0x100;
|
||||
+ } while(message[0] == '\0');
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+#endif
|
||||
+
|
||||
+ case '3':
|
||||
+ mci_main();
|
||||
+ command=0;
|
||||
+ break;
|
||||
+
|
||||
+ case '4':
|
||||
+ AT91F_StartUboot(0, (void *)0);
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+
|
||||
+ case '5':
|
||||
+ {
|
||||
+ int *i;
|
||||
+
|
||||
+ for(i = (int *)0x20000000; i < (int *)0x20004000; i++)
|
||||
+ *i = 0;
|
||||
+ }
|
||||
+ write_dataflash(0xc0000000, 0x20000000, 0x4000);
|
||||
+ printf("BL CLR\r\n");
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+ } // switch(command)
|
||||
+ } // while(command == 0)
|
||||
+
|
||||
+ xmodemPipe.Read(&xmodemPipe, (char *)AddressToDownload, SizeToDownload, XmodemProtocol, 0);
|
||||
+ while(XmodemComplete !=1);
|
||||
+ SizeToDownload = (unsigned int)(svcXmodem.pData) - (unsigned int)AddressToDownload;
|
||||
+
|
||||
+ // Modification of vector 6
|
||||
+ NbPage = 0;
|
||||
+ i = dataflash_info[device].Device.pages_number;
|
||||
+ while(i >>= 1)
|
||||
+ NbPage++;
|
||||
+ i = (SizeToDownload / 512) + 1 + (NbPage << 13) + (dataflash_info[device].Device.pages_size << 17);
|
||||
+ *(int *)(AddressToDownload + AT91C_OFFSET_VECT6) = i;
|
||||
+
|
||||
+// printf("\n\rModification of Arm Vector 6 :%x\n\r", i);
|
||||
+
|
||||
+ printf("\n\rWR %d in DF [0x%x]\n\r",SizeToDownload, DeviceAddress);
|
||||
+ crc1 = 0;
|
||||
+ pAT91->CRC32((const unsigned char *)AddressToDownload, SizeToDownload , &crc1);
|
||||
+
|
||||
+ // write the dataflash
|
||||
+ write_dataflash (DeviceAddress, AddressToDownload, SizeToDownload);
|
||||
+ // clear the buffer before read
|
||||
+ for(i=0; i < SizeToDownload; i++)
|
||||
+ *(unsigned char *)(AddressToDownload + i) = 0;
|
||||
+
|
||||
+ //* Read dataflash page in TestBuffer
|
||||
+ read_dataflash (DeviceAddress, SizeToDownload, (char *)(AddressToDownload));
|
||||
+
|
||||
+ printf("Vfy DF: ");
|
||||
+ crc2 = 0;
|
||||
+
|
||||
+ pAT91->CRC32((const unsigned char *)AddressToDownload, SizeToDownload , &crc2);
|
||||
+ if (crc1 != crc2)
|
||||
+ printf("Fail\r\n");
|
||||
+ else
|
||||
+ printf("OK\r\n");
|
||||
+
|
||||
+ command = 0;
|
||||
+ XmodemComplete = 0;
|
||||
+ AT91F_WaitKeyPressed();
|
||||
}
|
||||
- while(message[0] == '\0');
|
||||
- command = 0;
|
||||
- break;
|
||||
-
|
||||
- case '3':
|
||||
- AT91F_StartUboot(0, (void *)0);
|
||||
- command = 0;
|
||||
- break;
|
||||
- case '4':
|
||||
- {
|
||||
- int *i;
|
||||
- for(i = (int *)0x20000000; i < (int *)0x20004000; i++)
|
||||
- *i = 0;
|
||||
- }
|
||||
- write_dataflash(0xc0000000, 0x20000000, 0x4000);
|
||||
- printf("Bootsection cleared\r\n");
|
||||
- command = 0;
|
||||
- break;
|
||||
- default:
|
||||
- command = 0;
|
||||
- break;
|
||||
- }
|
||||
}
|
||||
-
|
||||
- xmodemPipe.Read(&xmodemPipe, (char *)AddressToDownload, SizeToDownload, XmodemProtocol, 0);
|
||||
- while(XmodemComplete !=1);
|
||||
- SizeToDownload = (unsigned int)(svcXmodem.pData) - (unsigned int)AddressToDownload;
|
||||
-
|
||||
- // Modification of vector 6
|
||||
- NbPage = 0;
|
||||
- i = dataflash_info[device].Device.pages_number;
|
||||
- while(i >>= 1)
|
||||
- NbPage++;
|
||||
- i = (SizeToDownload / 512) + 1 + (NbPage << 13) + (dataflash_info[device].Device.pages_size << 17);
|
||||
- *(int *)(AddressToDownload + AT91C_OFFSET_VECT6) = i;
|
||||
-
|
||||
- printf("\n\rModification of Arm Vector 6 :%x\n\r", i);
|
||||
-
|
||||
- printf("\n\rWrite %d bytes in DataFlash [0x%x]\n\r",SizeToDownload, DeviceAddress);
|
||||
- crc1 = 0;
|
||||
- pAT91->CRC32((const unsigned char *)AddressToDownload, SizeToDownload , &crc1);
|
||||
-
|
||||
- // write the dataflash
|
||||
- write_dataflash (DeviceAddress, AddressToDownload, SizeToDownload);
|
||||
- // clear the buffer before read
|
||||
- for(i=0; i < SizeToDownload; i++)
|
||||
- *(unsigned char *)(AddressToDownload + i) = 0;
|
||||
-
|
||||
- //* Read dataflash page in TestBuffer
|
||||
- read_dataflash (DeviceAddress, SizeToDownload, (char *)(AddressToDownload));
|
||||
-
|
||||
- printf("Verify Dataflash: ");
|
||||
- crc2 = 0;
|
||||
-
|
||||
- pAT91->CRC32((const unsigned char *)AddressToDownload, SizeToDownload , &crc2);
|
||||
- if (crc1 != crc2)
|
||||
- printf("Failed\r\n");
|
||||
- else
|
||||
- printf("OK\r\n");
|
||||
-
|
||||
- command = 0;
|
||||
- XmodemComplete = 0;
|
||||
- AT91F_WaitKeyPressed();
|
||||
- }
|
||||
-}
|
||||
// start tempo to start Uboot in a delay of 1 sec if no key pressed
|
||||
svcUbootTempo.Start(&svcUbootTempo, 1000, 0, AT91F_StartUboot, (void *)0);
|
||||
|
||||
- printf("press any key to enter bootloader\n\r");
|
||||
+ printf("press key\n\r");
|
||||
getc();
|
||||
|
||||
// stop tempo
|
||||
svcUbootTempo.Stop(&svcUbootTempo);
|
||||
|
||||
- while(1)
|
||||
- {
|
||||
- while(command == 0)
|
||||
- {
|
||||
- AddressToDownload = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
- SizeToDownload = AT91C_DOWNLOAD_MAX_SIZE;
|
||||
- DeviceAddress = 0;
|
||||
+ while(1) {
|
||||
+ while(command == 0) {
|
||||
+ AddressToDownload = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
+ SizeToDownload = AT91C_DOWNLOAD_MAX_SIZE;
|
||||
+ DeviceAddress = 0;
|
||||
|
||||
- AT91F_DisplayMenu();
|
||||
- message[0] = 0;
|
||||
- message[2] = 0;
|
||||
- AT91F_ReadLine("Enter: ", message);
|
||||
+ AT91F_DisplayMenu();
|
||||
+ message[0] = 0;
|
||||
+ message[2] = 0;
|
||||
+ AT91F_ReadLine("Enter: ", message);
|
||||
|
||||
- command = message[0];
|
||||
- if(command == '1' || command == '2')
|
||||
- if(AsciiToHex(&message[2], &DeviceAddress) == 0)
|
||||
- command = 0;
|
||||
-
|
||||
- switch(command)
|
||||
- {
|
||||
- case '1':
|
||||
- printf("Download Dataflash [0x%x]\n\r", DeviceAddress);
|
||||
-
|
||||
- switch(DeviceAddress & 0xFF000000)
|
||||
- {
|
||||
- case CFG_DATAFLASH_LOGIC_ADDR_CS0:
|
||||
- device = 0;
|
||||
- break;
|
||||
+ command = message[0];
|
||||
+ if(command == '1' || command == '2')
|
||||
+ if(AsciiToHex(&message[2], &DeviceAddress) == 0)
|
||||
+ command = 0;
|
||||
+
|
||||
+ switch(command) {
|
||||
+ case '1':
|
||||
+ printf("DL DF [0x%x]\n\r", DeviceAddress);
|
||||
+
|
||||
+ switch(DeviceAddress & 0xFF000000) {
|
||||
+ case CFG_DATAFLASH_LOGIC_ADDR_CS0:
|
||||
+ device = 0;
|
||||
+ break;
|
||||
|
||||
- case CFG_DATAFLASH_LOGIC_ADDR_CS3:
|
||||
- device = 1;
|
||||
- break;
|
||||
+ case CFG_DATAFLASH_LOGIC_ADDR_CS3:
|
||||
+ device = 1;
|
||||
+ break;
|
||||
|
||||
- default:
|
||||
- command = 0;
|
||||
- break;
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
- case '2':
|
||||
- do
|
||||
- {
|
||||
- AT91F_MemoryDisplay(DeviceAddress, 4, 64);
|
||||
- AT91F_ReadLine ((char *)0, message);
|
||||
- DeviceAddress += 0x100;
|
||||
+ default:
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+#ifndef COMPACT
|
||||
+ case '2':
|
||||
+ do {
|
||||
+ AT91F_MemoryDisplay(DeviceAddress, 4, 64);
|
||||
+ AT91F_ReadLine ((char *)0, message);
|
||||
+ DeviceAddress += 0x100;
|
||||
+ } while(message[0] == '\0');
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+#endif
|
||||
+
|
||||
+ case '3':
|
||||
+ mci_main();
|
||||
+ command=0;
|
||||
+ break;
|
||||
+
|
||||
+ case '4':
|
||||
+ AT91F_StartUboot(0, (void *)0);
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+
|
||||
+ case '5':
|
||||
+ {
|
||||
+ int *i;
|
||||
+
|
||||
+ for(i = (int *)0x20000000; i < (int *)0x20004000; i++)
|
||||
+ *i = 0;
|
||||
+ }
|
||||
+ write_dataflash(0xc0000000, 0x20000000, 0x4000);
|
||||
+ printf("BL CLR\r\n");
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ command = 0;
|
||||
+ break;
|
||||
+ } // switch(command)
|
||||
+ } // while(command == 0)
|
||||
+
|
||||
+ xmodemPipe.Read(&xmodemPipe, (char *)AddressToDownload, SizeToDownload, XmodemProtocol, 0);
|
||||
+ while(XmodemComplete !=1);
|
||||
+ SizeToDownload = (unsigned int)(svcXmodem.pData) - (unsigned int)AddressToDownload;
|
||||
+
|
||||
+ // Modification of vector 6
|
||||
+ NbPage = 0;
|
||||
+ i = dataflash_info[device].Device.pages_number;
|
||||
+ while(i >>= 1)
|
||||
+ NbPage++;
|
||||
+ i = (SizeToDownload / 512) + 1 + (NbPage << 13) + (dataflash_info[device].Device.pages_size << 17);
|
||||
+ *(int *)(AddressToDownload + AT91C_OFFSET_VECT6) = i;
|
||||
+
|
||||
+// printf("\n\rModification of Arm Vector 6 :%x\n\r", i);
|
||||
+
|
||||
+ printf("\n\rWR %d in DF [0x%x]\n\r",SizeToDownload, DeviceAddress);
|
||||
+ crc1 = 0;
|
||||
+ pAT91->CRC32((const unsigned char *)AddressToDownload, SizeToDownload , &crc1);
|
||||
+
|
||||
+ // write the dataflash
|
||||
+ write_dataflash (DeviceAddress, AddressToDownload, SizeToDownload);
|
||||
+ // clear the buffer before read
|
||||
+ for(i=0; i < SizeToDownload; i++)
|
||||
+ *(unsigned char *)(AddressToDownload + i) = 0;
|
||||
+
|
||||
+ //* Read dataflash page in TestBuffer
|
||||
+ read_dataflash (DeviceAddress, SizeToDownload, (char *)(AddressToDownload));
|
||||
+
|
||||
+ printf("Vfy DF: ");
|
||||
+ crc2 = 0;
|
||||
+
|
||||
+ pAT91->CRC32((const unsigned char *)AddressToDownload, SizeToDownload , &crc2);
|
||||
+ if (crc1 != crc2)
|
||||
+ printf("Fail\r\n");
|
||||
+ else
|
||||
+ printf("OK\r\n");
|
||||
+
|
||||
+ command = 0;
|
||||
+ XmodemComplete = 0;
|
||||
+ AT91F_WaitKeyPressed();
|
||||
}
|
||||
- while(message[0] == '\0');
|
||||
- command = 0;
|
||||
- break;
|
||||
-
|
||||
- case '3':
|
||||
- AT91F_StartUboot(0, (void *)0);
|
||||
- command = 0;
|
||||
- break;
|
||||
- case '4':
|
||||
- {
|
||||
- int *i;
|
||||
- for(i = (int *)0x20000000; i < (int *)0x20004000; i++)
|
||||
- *i = 0;
|
||||
- }
|
||||
- write_dataflash(0xc0000000, 0x20000000, 0x4000);
|
||||
- printf("Bootsection cleared\r\n");
|
||||
- command = 0;
|
||||
- break;
|
||||
- default:
|
||||
- command = 0;
|
||||
- break;
|
||||
- }
|
||||
}
|
||||
-
|
||||
- xmodemPipe.Read(&xmodemPipe, (char *)AddressToDownload, SizeToDownload, XmodemProtocol, 0);
|
||||
- while(XmodemComplete !=1);
|
||||
- SizeToDownload = (unsigned int)(svcXmodem.pData) - (unsigned int)AddressToDownload;
|
||||
-
|
||||
- // Modification of vector 6
|
||||
- NbPage = 0;
|
||||
- i = dataflash_info[device].Device.pages_number;
|
||||
- while(i >>= 1)
|
||||
- NbPage++;
|
||||
- i = (SizeToDownload / 512) + 1 + (NbPage << 13) + (dataflash_info[device].Device.pages_size << 17);
|
||||
- *(int *)(AddressToDownload + AT91C_OFFSET_VECT6) = i;
|
||||
-
|
||||
- printf("\n\rModification of Arm Vector 6 :%x\n\r", i);
|
||||
-
|
||||
- printf("\n\rWrite %d bytes in DataFlash [0x%x]\n\r",SizeToDownload, DeviceAddress);
|
||||
- crc1 = 0;
|
||||
- pAT91->CRC32((const unsigned char *)AddressToDownload, SizeToDownload , &crc1);
|
||||
-
|
||||
- // write the dataflash
|
||||
- write_dataflash (DeviceAddress, AddressToDownload, SizeToDownload);
|
||||
- // clear the buffer before read
|
||||
- for(i=0; i < SizeToDownload; i++)
|
||||
- *(unsigned char *)(AddressToDownload + i) = 0;
|
||||
-
|
||||
- //* Read dataflash page in TestBuffer
|
||||
- read_dataflash (DeviceAddress, SizeToDownload, (char *)(AddressToDownload));
|
||||
-
|
||||
- printf("Verify Dataflash: ");
|
||||
- crc2 = 0;
|
||||
-
|
||||
- pAT91->CRC32((const unsigned char *)AddressToDownload, SizeToDownload , &crc2);
|
||||
- if (crc1 != crc2)
|
||||
- printf("Failed\r\n");
|
||||
- else
|
||||
- printf("OK\r\n");
|
||||
-
|
||||
- command = 0;
|
||||
- XmodemComplete = 0;
|
||||
- AT91F_WaitKeyPressed();
|
||||
- }
|
||||
-}
|
||||
diff -urN romboot.old/main.h romboot/main.h
|
||||
--- romboot.old/main.h 2004-07-03 17:41:14.000000000 +0200
|
||||
+++ romboot/main.h 2007-03-21 21:48:52.000000000 +0100
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
#define AT91C_OFFSET_VECT6 0x14 //* Offset for ARM vector 6
|
||||
|
||||
-#define AT91C_VERSION "VER 1.01"
|
||||
+#define AT91C_VERSION "VER 1.02"
|
||||
// Global variables and functions definition
|
||||
extern unsigned int GetTickCount(void);
|
||||
#endif
|
||||
|
||||
#define AT91C_OFFSET_VECT6 0x14 //* Offset for ARM vector 6
|
||||
|
||||
-#define AT91C_VERSION "VER 1.01"
|
||||
+#define AT91C_VERSION "VER 1.02"
|
||||
// Global variables and functions definition
|
||||
extern unsigned int GetTickCount(void);
|
||||
#endif
|
||||
diff -urN romboot.old/Makefile romboot/Makefile
|
||||
--- romboot.old/Makefile 2007-03-19 12:44:03.000000000 +0100
|
||||
+++ romboot/Makefile 2007-03-21 12:29:11.000000000 +0100
|
||||
|
@ -2,251 +2,251 @@ diff -urN romboot.old/init.cpp romboot/init.cpp
|
||||
--- romboot.old/init.cpp 2007-03-24 13:34:19.000000000 +0100
|
||||
+++ romboot/init.cpp 2007-03-24 12:23:19.000000000 +0100
|
||||
@@ -207,9 +207,10 @@
|
||||
AT91F_US_EnableRx((AT91PS_USART)AT91C_BASE_DBGU);
|
||||
|
||||
/* Enable PIO to access the LEDs */
|
||||
- AT91C_BASE_PIOB->PIO_PER = AT91C_PIO_PB2;
|
||||
- AT91C_BASE_PIOB->PIO_OER = AT91C_PIO_PB2;
|
||||
- AT91C_BASE_PIOB->PIO_CODR = AT91C_PIO_PB2;
|
||||
+ AT91C_BASE_PIOC->PIO_PER = AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_OER = AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
|
||||
// AT91F_DBGU_Printk("\n\rAT91F_LowLevelInit(): Debug channel initialized\n\r");
|
||||
}
|
||||
AT91F_US_EnableRx((AT91PS_USART)AT91C_BASE_DBGU);
|
||||
|
||||
/* Enable PIO to access the LEDs */
|
||||
- AT91C_BASE_PIOB->PIO_PER = AT91C_PIO_PB2;
|
||||
- AT91C_BASE_PIOB->PIO_OER = AT91C_PIO_PB2;
|
||||
- AT91C_BASE_PIOB->PIO_CODR = AT91C_PIO_PB2;
|
||||
+ AT91C_BASE_PIOC->PIO_PER = AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_OER = AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
|
||||
// AT91F_DBGU_Printk("\n\rAT91F_LowLevelInit(): Debug channel initialized\n\r");
|
||||
}
|
||||
diff -urN romboot.old/main.cpp romboot/main.cpp
|
||||
--- romboot.old/main.cpp 2007-03-24 13:34:19.000000000 +0100
|
||||
+++ romboot/main.cpp 2007-03-24 12:28:55.000000000 +0100
|
||||
@@ -13,6 +13,7 @@
|
||||
//*----------------------------------------------------------------------------
|
||||
#include <AT91RM9200.h>
|
||||
#include <lib_AT91RM9200.h>
|
||||
+#include <AT91C_MCI_Device.h>
|
||||
|
||||
#include "com.h"
|
||||
#include "main.h"
|
||||
//*----------------------------------------------------------------------------
|
||||
#include <AT91RM9200.h>
|
||||
#include <lib_AT91RM9200.h>
|
||||
+#include <AT91C_MCI_Device.h>
|
||||
|
||||
#include "com.h"
|
||||
#include "main.h"
|
||||
@@ -39,16 +40,31 @@
|
||||
extern void AT91F_DBGU_Printk(char *);
|
||||
extern "C" void AT91F_ST_ASM_Handler(void);
|
||||
extern "C" void Jump(unsigned int addr);
|
||||
-extern int mci_main(void);
|
||||
+extern int AT91F_MCI_Init(void);
|
||||
+#define TRUE 1
|
||||
+#define FALSE 0
|
||||
+
|
||||
+/* from trxhdr.h */
|
||||
+
|
||||
+#define TRX_MAGIC 0x30524448 /* "HDR0" */
|
||||
+#define TRX_VERSION 1
|
||||
+
|
||||
+struct trx_header {
|
||||
+ unsigned int magic;
|
||||
+ unsigned int len;
|
||||
+ unsigned int crc32;
|
||||
+ unsigned int flag_version;
|
||||
+ unsigned int offsets[3];
|
||||
+};
|
||||
|
||||
//const char *menu_separ = "*----------------------------------------*\n\r";
|
||||
|
||||
const char *menu_dataflash = {
|
||||
- "1: DL DF [ad]\n\r"
|
||||
- "2: RD DF [ad]\n\r"
|
||||
- "3: CP SD\n\r"
|
||||
- "4: U-BOOT\n\r"
|
||||
- "5: RM BL in DF\n\r"
|
||||
+ "1: Download DF [addr]\n\r"
|
||||
+ "2: Read DF [addr]\n\r"
|
||||
+ "3: Copy SD-Card\n\r"
|
||||
+ "4: Start U-BOOT\n\r"
|
||||
+ "5: Clear bootloder\n\r"
|
||||
};
|
||||
|
||||
//* Globales variables
|
||||
extern void AT91F_DBGU_Printk(char *);
|
||||
extern "C" void AT91F_ST_ASM_Handler(void);
|
||||
extern "C" void Jump(unsigned int addr);
|
||||
-extern int mci_main(void);
|
||||
+extern int AT91F_MCI_Init(void);
|
||||
+#define TRUE 1
|
||||
+#define FALSE 0
|
||||
+
|
||||
+/* from trxhdr.h */
|
||||
+
|
||||
+#define TRX_MAGIC 0x30524448 /* "HDR0" */
|
||||
+#define TRX_VERSION 1
|
||||
+
|
||||
+struct trx_header {
|
||||
+ unsigned int magic;
|
||||
+ unsigned int len;
|
||||
+ unsigned int crc32;
|
||||
+ unsigned int flag_version;
|
||||
+ unsigned int offsets[3];
|
||||
+};
|
||||
|
||||
//const char *menu_separ = "*----------------------------------------*\n\r";
|
||||
|
||||
const char *menu_dataflash = {
|
||||
- "1: DL DF [ad]\n\r"
|
||||
- "2: RD DF [ad]\n\r"
|
||||
- "3: CP SD\n\r"
|
||||
- "4: U-BOOT\n\r"
|
||||
- "5: RM BL in DF\n\r"
|
||||
+ "1: Download DF [addr]\n\r"
|
||||
+ "2: Read DF [addr]\n\r"
|
||||
+ "3: Copy SD-Card\n\r"
|
||||
+ "4: Start U-BOOT\n\r"
|
||||
+ "5: Clear bootloder\n\r"
|
||||
};
|
||||
|
||||
//* Globales variables
|
||||
@@ -155,14 +171,15 @@
|
||||
//*-----------------------------------------------------------------------------
|
||||
void AT91F_DisplayMenu(void)
|
||||
{
|
||||
- printf("\n\rFDL SD-Card LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
-// printf(menu_separ);
|
||||
- AT91F_DataflashPrintInfo();
|
||||
-// printf(menu_separ);
|
||||
printf(menu_dataflash);
|
||||
-// printf(menu_separ);
|
||||
}
|
||||
|
||||
+void AT91F_DisplayIntro(void)
|
||||
+{
|
||||
+ printf("\n\rFDL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
+ AT91F_DataflashPrintInfo();
|
||||
+}
|
||||
+
|
||||
//*-----------------------------------------------------------------------------
|
||||
//* Function Name : AsciiToHex()
|
||||
//* Object : ascii to hexa conversion
|
||||
//*-----------------------------------------------------------------------------
|
||||
void AT91F_DisplayMenu(void)
|
||||
{
|
||||
- printf("\n\rFDL SD-Card LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
-// printf(menu_separ);
|
||||
- AT91F_DataflashPrintInfo();
|
||||
-// printf(menu_separ);
|
||||
printf(menu_dataflash);
|
||||
-// printf(menu_separ);
|
||||
}
|
||||
|
||||
+void AT91F_DisplayIntro(void)
|
||||
+{
|
||||
+ printf("\n\rFDL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
||||
+ AT91F_DataflashPrintInfo();
|
||||
+}
|
||||
+
|
||||
//*-----------------------------------------------------------------------------
|
||||
//* Function Name : AsciiToHex()
|
||||
//* Object : ascii to hexa conversion
|
||||
@@ -311,23 +328,24 @@
|
||||
AT91F_SetPLL();
|
||||
}
|
||||
|
||||
-/*void LedCode(void)
|
||||
+/*
|
||||
+void LedCode(void)
|
||||
{
|
||||
int *pRegister;
|
||||
pRegister = (int *)0xFFFFF800; // Enable port C peripheral reg
|
||||
- *pRegister = 0x3c00;
|
||||
+ *pRegister = (AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15);
|
||||
pRegister = (int *)0xFFFFF810; // Output Enable reg
|
||||
- *pRegister = 0x3c00;
|
||||
+ *pRegister = (AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15);
|
||||
pRegister = (int *)0xFFFFF830; // Set data
|
||||
- *pRegister = 0x1400;
|
||||
+ *pRegister = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
||||
pRegister = (int *)0xFFFFF834; // Clear bits
|
||||
- *pRegister = 0x2800;
|
||||
+ *pRegister = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
}
|
||||
*/
|
||||
|
||||
+
|
||||
void AT91F_StartUboot(unsigned int dummy, void *pvoid)
|
||||
{
|
||||
- //printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
||||
read_dataflash(AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_SIZE, (char *)(AT91C_UBOOT_ADDR));
|
||||
//printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
||||
//* Reset registers
|
||||
AT91F_SetPLL();
|
||||
}
|
||||
|
||||
-/*void LedCode(void)
|
||||
+/*
|
||||
+void LedCode(void)
|
||||
{
|
||||
int *pRegister;
|
||||
pRegister = (int *)0xFFFFF800; // Enable port C peripheral reg
|
||||
- *pRegister = 0x3c00;
|
||||
+ *pRegister = (AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15);
|
||||
pRegister = (int *)0xFFFFF810; // Output Enable reg
|
||||
- *pRegister = 0x3c00;
|
||||
+ *pRegister = (AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15);
|
||||
pRegister = (int *)0xFFFFF830; // Set data
|
||||
- *pRegister = 0x1400;
|
||||
+ *pRegister = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
||||
pRegister = (int *)0xFFFFF834; // Clear bits
|
||||
- *pRegister = 0x2800;
|
||||
+ *pRegister = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
}
|
||||
*/
|
||||
|
||||
+
|
||||
void AT91F_StartUboot(unsigned int dummy, void *pvoid)
|
||||
{
|
||||
- //printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
||||
read_dataflash(AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_SIZE, (char *)(AT91C_UBOOT_ADDR));
|
||||
//printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
||||
//* Reset registers
|
||||
@@ -337,6 +355,67 @@
|
||||
while(1);
|
||||
}
|
||||
|
||||
+#define AT91C_MCI_TIMEOUT 1000000
|
||||
+
|
||||
+extern AT91S_MciDevice MCI_Device;
|
||||
+
|
||||
+extern void AT91F_MCIDeviceWaitReady(unsigned int);
|
||||
+extern int AT91F_MCI_ReadBlockSwab(AT91PS_MciDevice, int, unsigned int *, int);
|
||||
+
|
||||
+
|
||||
+int Program_From_MCI(void)
|
||||
+{
|
||||
+ int i;
|
||||
+ unsigned int Max_Read_DataBlock_Length;
|
||||
+ int block = 0;
|
||||
+ int buffer = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
+ int bufpos = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
+ int NbPage = 0;
|
||||
+ struct trx_header *p;
|
||||
+ unsigned int data;
|
||||
+
|
||||
+ p = (struct trx_header *)bufpos;
|
||||
+
|
||||
+ Max_Read_DataBlock_Length = MCI_Device.pMCI_DeviceFeatures->Max_Read_DataBlock_Length;
|
||||
+
|
||||
+ AT91F_MCIDeviceWaitReady(AT91C_MCI_TIMEOUT);
|
||||
+
|
||||
+ AT91F_MCI_ReadBlockSwab(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
||||
+
|
||||
+ if (p->magic != TRX_MAGIC)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ printf("Read SD-Card\n\r");
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15 | AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
+ for (i=0; i<(p->len/512); i++) {
|
||||
+ AT91F_MCI_ReadBlockSwab(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
||||
+ block++;
|
||||
+ bufpos += Max_Read_DataBlock_Length;
|
||||
+ }
|
||||
+
|
||||
+ NbPage = 0;
|
||||
+ i = dataflash_info[0].Device.pages_number;
|
||||
+ while(i >>= 1)
|
||||
+ NbPage++;
|
||||
+ i = ((p->offsets[1] - p->offsets[0])/ 512) + 1 + (NbPage << 13) + (dataflash_info[0].Device.pages_size << 17);
|
||||
+ *(int *)(buffer + p->offsets[0] + AT91C_OFFSET_VECT6) = i;
|
||||
+
|
||||
+ printf("Write romboot\n\r");
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15 | AT91C_PIO_PC14;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC8;
|
||||
+ write_dataflash(0xc0000000, buffer + p->offsets[0], p->offsets[1] - p->offsets[0]);
|
||||
+ printf("Write u-boot\n\r");
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
+ write_dataflash(0xc0008000, buffer + p->offsets[1], p->offsets[2] - p->offsets[1]);
|
||||
+ printf("Write knl/root\n\r");
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC8 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC7 | AT91C_PIO_PC14;
|
||||
+ write_dataflash(0xc0042000, buffer + p->offsets[2], p->len - p->offsets[2]);
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
||||
+ return TRUE;
|
||||
+ }
|
||||
|
||||
//*----------------------------------------------------------------------------
|
||||
//* Function Name : main
|
||||
while(1);
|
||||
}
|
||||
|
||||
+#define AT91C_MCI_TIMEOUT 1000000
|
||||
+
|
||||
+extern AT91S_MciDevice MCI_Device;
|
||||
+
|
||||
+extern void AT91F_MCIDeviceWaitReady(unsigned int);
|
||||
+extern int AT91F_MCI_ReadBlockSwab(AT91PS_MciDevice, int, unsigned int *, int);
|
||||
+
|
||||
+
|
||||
+int Program_From_MCI(void)
|
||||
+{
|
||||
+ int i;
|
||||
+ unsigned int Max_Read_DataBlock_Length;
|
||||
+ int block = 0;
|
||||
+ int buffer = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
+ int bufpos = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
+ int NbPage = 0;
|
||||
+ struct trx_header *p;
|
||||
+ unsigned int data;
|
||||
+
|
||||
+ p = (struct trx_header *)bufpos;
|
||||
+
|
||||
+ Max_Read_DataBlock_Length = MCI_Device.pMCI_DeviceFeatures->Max_Read_DataBlock_Length;
|
||||
+
|
||||
+ AT91F_MCIDeviceWaitReady(AT91C_MCI_TIMEOUT);
|
||||
+
|
||||
+ AT91F_MCI_ReadBlockSwab(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
||||
+
|
||||
+ if (p->magic != TRX_MAGIC)
|
||||
+ return FALSE;
|
||||
+
|
||||
+ printf("Read SD-Card\n\r");
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15 | AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
+ for (i=0; i<(p->len/512); i++) {
|
||||
+ AT91F_MCI_ReadBlockSwab(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
||||
+ block++;
|
||||
+ bufpos += Max_Read_DataBlock_Length;
|
||||
+ }
|
||||
+
|
||||
+ NbPage = 0;
|
||||
+ i = dataflash_info[0].Device.pages_number;
|
||||
+ while(i >>= 1)
|
||||
+ NbPage++;
|
||||
+ i = ((p->offsets[1] - p->offsets[0])/ 512) + 1 + (NbPage << 13) + (dataflash_info[0].Device.pages_size << 17);
|
||||
+ *(int *)(buffer + p->offsets[0] + AT91C_OFFSET_VECT6) = i;
|
||||
+
|
||||
+ printf("Write romboot\n\r");
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15 | AT91C_PIO_PC14;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC8;
|
||||
+ write_dataflash(0xc0000000, buffer + p->offsets[0], p->offsets[1] - p->offsets[0]);
|
||||
+ printf("Write u-boot\n\r");
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
+ write_dataflash(0xc0008000, buffer + p->offsets[1], p->offsets[2] - p->offsets[1]);
|
||||
+ printf("Write knl/root\n\r");
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC8 | AT91C_PIO_PC15;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC7 | AT91C_PIO_PC14;
|
||||
+ write_dataflash(0xc0042000, buffer + p->offsets[2], p->len - p->offsets[2]);
|
||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
||||
+ return TRUE;
|
||||
+ }
|
||||
|
||||
//*----------------------------------------------------------------------------
|
||||
//* Function Name : main
|
||||
@@ -357,6 +436,7 @@
|
||||
unsigned int crc1 = 0, crc2 = 0;
|
||||
volatile int device;
|
||||
int NbPage;
|
||||
+ int mci_present;
|
||||
|
||||
stdin = fopen(0, at91_dbgu_getc);
|
||||
stdout = fopen(at91_dbgu_putc, 0);
|
||||
unsigned int crc1 = 0, crc2 = 0;
|
||||
volatile int device;
|
||||
int NbPage;
|
||||
+ int mci_present;
|
||||
|
||||
stdin = fopen(0, at91_dbgu_getc);
|
||||
stdout = fopen(at91_dbgu_putc, 0);
|
||||
@@ -387,6 +467,15 @@
|
||||
|
||||
// DataFlash on SPI Configuration
|
||||
AT91F_DataflashInit ();
|
||||
+ AT91F_DisplayIntro();
|
||||
+ mci_present = AT91F_MCI_Init();
|
||||
+
|
||||
+#ifdef PRODTEST
|
||||
+ if (mci_present) {
|
||||
+ Program_From_MCI();
|
||||
+ AT91F_StartUboot(0, (void *)0);
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
// start tempo to start Uboot in a delay of 1 sec if no key pressed
|
||||
svcUbootTempo.Start(&svcUbootTempo, 1000, 0, AT91F_StartUboot, (void *)0);
|
||||
|
||||
// DataFlash on SPI Configuration
|
||||
AT91F_DataflashInit ();
|
||||
+ AT91F_DisplayIntro();
|
||||
+ mci_present = AT91F_MCI_Init();
|
||||
+
|
||||
+#ifdef PRODTEST
|
||||
+ if (mci_present) {
|
||||
+ Program_From_MCI();
|
||||
+ AT91F_StartUboot(0, (void *)0);
|
||||
+ }
|
||||
+#endif
|
||||
|
||||
// start tempo to start Uboot in a delay of 1 sec if no key pressed
|
||||
svcUbootTempo.Start(&svcUbootTempo, 1000, 0, AT91F_StartUboot, (void *)0);
|
||||
@@ -396,7 +485,7 @@
|
||||
|
||||
// stop tempo
|
||||
svcUbootTempo.Stop(&svcUbootTempo);
|
||||
-
|
||||
+
|
||||
while(1) {
|
||||
while(command == 0) {
|
||||
AddressToDownload = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
|
||||
// stop tempo
|
||||
svcUbootTempo.Stop(&svcUbootTempo);
|
||||
-
|
||||
+
|
||||
while(1) {
|
||||
while(command == 0) {
|
||||
AddressToDownload = AT91C_DOWNLOAD_BASE_ADDRESS;
|
||||
@@ -444,7 +533,8 @@
|
||||
#endif
|
||||
|
||||
case '3':
|
||||
- mci_main();
|
||||
+ if (mci_present)
|
||||
+ Program_From_MCI();
|
||||
command=0;
|
||||
break;
|
||||
|
||||
#endif
|
||||
|
||||
case '3':
|
||||
- mci_main();
|
||||
+ if (mci_present)
|
||||
+ Program_From_MCI();
|
||||
command=0;
|
||||
break;
|
||||
|
||||
@@ -461,7 +551,6 @@
|
||||
*i = 0;
|
||||
}
|
||||
write_dataflash(0xc0000000, 0x20000000, 0x4000);
|
||||
- printf("BL CLR\r\n");
|
||||
command = 0;
|
||||
break;
|
||||
|
||||
*i = 0;
|
||||
}
|
||||
write_dataflash(0xc0000000, 0x20000000, 0x4000);
|
||||
- printf("BL CLR\r\n");
|
||||
command = 0;
|
||||
break;
|
||||
|
||||
diff -urN romboot.old/main.h romboot/main.h
|
||||
--- romboot.old/main.h 2007-03-24 13:34:19.000000000 +0100
|
||||
+++ romboot/main.h 2007-03-23 19:06:52.000000000 +0100
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
#define AT91C_OFFSET_VECT6 0x14 //* Offset for ARM vector 6
|
||||
|
||||
-#define AT91C_VERSION "VER 1.02"
|
||||
+#define AT91C_VERSION "VER 1.03"
|
||||
// Global variables and functions definition
|
||||
extern unsigned int GetTickCount(void);
|
||||
#endif
|
||||
|
||||
#define AT91C_OFFSET_VECT6 0x14 //* Offset for ARM vector 6
|
||||
|
||||
-#define AT91C_VERSION "VER 1.02"
|
||||
+#define AT91C_VERSION "VER 1.03"
|
||||
// Global variables and functions definition
|
||||
extern unsigned int GetTickCount(void);
|
||||
#endif
|
||||
diff -urN romboot.old/Makefile romboot/Makefile
|
||||
--- romboot.old/Makefile 2007-03-24 13:34:19.000000000 +0100
|
||||
+++ romboot/Makefile 2007-03-24 10:45:38.000000000 +0100
|
||||
|
@ -0,0 +1,423 @@
|
||||
diff -urN romboot.old/com.cpp romboot/com.cpp
|
||||
--- romboot.old/com.cpp 2004-07-04 21:37:05.000000000 +0200
|
||||
+++ romboot/com.cpp 2007-04-04 04:30:12.000000000 +0200
|
||||
@@ -27,7 +27,7 @@
|
||||
//*-----------------------------------------------------------------------------
|
||||
void AT91F_ClrScr(void)
|
||||
{
|
||||
- puts(CLRSCREEN);
|
||||
+ putstr(CLRSCREEN);
|
||||
}
|
||||
|
||||
|
||||
@@ -47,12 +47,12 @@
|
||||
|
||||
if (*(--p) == '\t') { /* will retype the whole line */
|
||||
while (*colp > plen) {
|
||||
- puts(erase_seq);
|
||||
+ putstr(erase_seq);
|
||||
(*colp)--;
|
||||
}
|
||||
for (s=buffer; s<p; ++s) {
|
||||
if (*s == '\t') {
|
||||
- puts(tab_seq+((*colp) & 07));
|
||||
+ putstr(tab_seq+((*colp) & 07));
|
||||
*colp += 8 - ((*colp) & 07);
|
||||
} else {
|
||||
++(*colp);
|
||||
@@ -60,7 +60,7 @@
|
||||
}
|
||||
}
|
||||
} else {
|
||||
- puts(erase_seq);
|
||||
+ putstr(erase_seq);
|
||||
(*colp)--;
|
||||
}
|
||||
(*np)--;
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
/* print prompt */
|
||||
if(prompt)
|
||||
- puts(prompt);
|
||||
+ putstr(prompt);
|
||||
col = plen;
|
||||
|
||||
for (;;)
|
||||
@@ -97,7 +97,7 @@
|
||||
case '\r': /* Enter */
|
||||
case '\n':
|
||||
*p = '\0';
|
||||
- puts ("\r\n");
|
||||
+ putstr ("\r\n");
|
||||
return (p - console_buffer);
|
||||
|
||||
case 0x03: /* ^C - break */
|
||||
@@ -107,7 +107,7 @@
|
||||
case 0x15: /* ^U - erase line */
|
||||
while (col > plen)
|
||||
{
|
||||
- puts(erase_seq);
|
||||
+ putstr(erase_seq);
|
||||
--col;
|
||||
}
|
||||
p = console_buffer;
|
||||
@@ -152,7 +152,7 @@
|
||||
void AT91F_WaitKeyPressed(void)
|
||||
{
|
||||
int c;
|
||||
- puts("Hit a Key!");
|
||||
+ putstr("Hit a Key!");
|
||||
c = getc();
|
||||
}
|
||||
|
||||
diff -urN romboot.old/main.cpp romboot/main.cpp
|
||||
--- romboot.old/main.cpp 2007-04-03 12:12:33.000000000 +0200
|
||||
+++ romboot/main.cpp 2007-04-04 05:56:39.000000000 +0200
|
||||
@@ -382,8 +382,10 @@
|
||||
|
||||
AT91F_MCI_ReadBlockSwab(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
||||
|
||||
- if (p->magic != TRX_MAGIC)
|
||||
+ if (p->magic != TRX_MAGIC) {
|
||||
+ printf("Invalid Image 0x%08x\n\r");
|
||||
return FALSE;
|
||||
+ }
|
||||
|
||||
printf("Read SD-Card\n\r");
|
||||
AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15 | AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
||||
@@ -438,9 +440,6 @@
|
||||
int NbPage;
|
||||
int mci_present;
|
||||
|
||||
- stdin = fopen(0, at91_dbgu_getc);
|
||||
- stdout = fopen(at91_dbgu_putc, 0);
|
||||
-
|
||||
pAT91 = AT91C_ROM_BOOT_ADDRESS;
|
||||
|
||||
// Tempo Initialisation
|
||||
@@ -472,16 +471,18 @@
|
||||
|
||||
#ifdef PRODTEST
|
||||
if (mci_present) {
|
||||
- Program_From_MCI();
|
||||
- AT91F_StartUboot(0, (void *)0);
|
||||
+ if (Program_From_MCI())
|
||||
+ AT91F_StartUboot(0, (void *)0);
|
||||
}
|
||||
#endif
|
||||
|
||||
// start tempo to start Uboot in a delay of 1 sec if no key pressed
|
||||
svcUbootTempo.Start(&svcUbootTempo, 1000, 0, AT91F_StartUboot, (void *)0);
|
||||
|
||||
+#ifndef PRODTEST
|
||||
printf("press key\n\r");
|
||||
getc();
|
||||
+#endif
|
||||
|
||||
// stop tempo
|
||||
svcUbootTempo.Stop(&svcUbootTempo);
|
||||
@@ -601,3 +602,10 @@
|
||||
AT91F_WaitKeyPressed();
|
||||
}
|
||||
}
|
||||
+
|
||||
+
|
||||
+int puts(const char *str)
|
||||
+{
|
||||
+ putstr(str);
|
||||
+ return 0;
|
||||
+}
|
||||
diff -urN romboot.old/stdio.cpp romboot/stdio.cpp
|
||||
--- romboot.old/stdio.cpp 2004-07-04 22:36:10.000000000 +0200
|
||||
+++ romboot/stdio.cpp 2007-04-04 04:29:25.000000000 +0200
|
||||
@@ -1,117 +1,32 @@
|
||||
#include "stdio.h"
|
||||
|
||||
extern int at91_dbgu_putc(int ch);
|
||||
+extern int at91_dbgu_getc();
|
||||
|
||||
-FILE *stdout = (FILE *)0;
|
||||
-FILE *stdin = (FILE *)0;
|
||||
-
|
||||
-FILE __filedesc[FILEDESCS];
|
||||
-
|
||||
-FILE *fopen(int (*put)(int), int (*get)())
|
||||
-{
|
||||
- static int init = 1;
|
||||
-
|
||||
- if(init != 0)
|
||||
- {
|
||||
- for(int i = 0; i < FILEDESCS; i++)
|
||||
- {
|
||||
- __filedesc[i].active = false;
|
||||
- __filedesc[i].put = 0;
|
||||
- __filedesc[i].get = 0;
|
||||
- }
|
||||
-
|
||||
- init = 0;
|
||||
- }
|
||||
-
|
||||
- for(int i = 0; i < FILEDESCS; i++)
|
||||
- {
|
||||
- if(!__filedesc[i].active)
|
||||
- {
|
||||
- __filedesc[i].put = put;
|
||||
- __filedesc[i].get = get;
|
||||
-
|
||||
- __filedesc[i].active = true;
|
||||
-
|
||||
- return &__filedesc[i];
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return (FILE *)0;
|
||||
-}
|
||||
-
|
||||
-int fclose(FILE *fp)
|
||||
+int putstr(const char *str)
|
||||
{
|
||||
- for(int i = 0; i < FILEDESCS; i++)
|
||||
- if(&__filedesc[i] == fp || fp->active)
|
||||
- {
|
||||
- fp->active = false;
|
||||
-
|
||||
- fp->put = 0;
|
||||
- fp->get = 0;
|
||||
-
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- return -1;
|
||||
-}
|
||||
-
|
||||
-int fputs(const char *str, FILE *fp)
|
||||
-{
|
||||
- if(fp == (FILE *)0)
|
||||
- return -1;
|
||||
-
|
||||
- if(fp->put == (void *)0)
|
||||
- return -1;
|
||||
-
|
||||
- while(*str != 0)
|
||||
- {
|
||||
- fp->put(*str);
|
||||
- str++;
|
||||
- }
|
||||
+ while (*str != 0)
|
||||
+ {
|
||||
+ putc(*str);
|
||||
+ str++;
|
||||
+ }
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int fputc(int c, FILE *fp)
|
||||
-{
|
||||
- if(fp == (FILE *)0)
|
||||
- return -1;
|
||||
-
|
||||
- if(fp->put == (void *)0)
|
||||
- return -1;
|
||||
-
|
||||
- return fp->put(c);
|
||||
-}
|
||||
-
|
||||
-int fgetc(FILE *fp)
|
||||
-{
|
||||
- if(fp == (FILE *)0)
|
||||
- return -1;
|
||||
-
|
||||
- if(fp->get == (void *)0)
|
||||
- return -1;
|
||||
-
|
||||
- return fp->get();
|
||||
-}
|
||||
-
|
||||
-
|
||||
-int puts(const char *str)
|
||||
+int putchar(int c)
|
||||
{
|
||||
- return fputs(str, stdout);
|
||||
+ return putc(c);
|
||||
}
|
||||
|
||||
int putc(int c)
|
||||
{
|
||||
- return fputc(c, stdout);
|
||||
-}
|
||||
-
|
||||
-int putchar(int c)
|
||||
-{
|
||||
- return fputc(c, stdout);
|
||||
+ at91_dbgu_putc(c);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
int getc()
|
||||
{
|
||||
- return fgetc(stdin);
|
||||
+ return at91_dbgu_getc();
|
||||
}
|
||||
|
||||
int strlen(const char *str)
|
||||
@@ -139,7 +54,7 @@
|
||||
__res; \
|
||||
})
|
||||
|
||||
-int number(FILE *fp, int num, int base, int size, int precision, int type)
|
||||
+int number(int num, int base, int size, int precision, int type)
|
||||
{
|
||||
char c, sign, tmp[66];
|
||||
const char *digits="0123456789abcdef";
|
||||
@@ -173,28 +88,28 @@
|
||||
|
||||
if(!(type&(ZEROPAD+LEFT)))
|
||||
while(size-->0)
|
||||
- fputc(' ', fp);
|
||||
+ putc(' ');
|
||||
|
||||
if(sign)
|
||||
- fputc(sign, fp);
|
||||
+ putc(sign);
|
||||
|
||||
if (!(type & LEFT))
|
||||
while (size-- > 0)
|
||||
- fputc(c, fp);
|
||||
+ putc(c);
|
||||
|
||||
while (i < precision--)
|
||||
- fputc('0', fp);
|
||||
+ putc('0');
|
||||
|
||||
while (i-- > 0)
|
||||
- fputc(tmp[i], fp);
|
||||
+ putc(tmp[i]);
|
||||
|
||||
while (size-- > 0)
|
||||
- fputc(' ', fp);;
|
||||
+ putc(' ');;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
-int vfprintf(FILE *fp, const char *fmt, va_list va)
|
||||
+int vprintf(const char *fmt, va_list va)
|
||||
{
|
||||
char *s;
|
||||
|
||||
@@ -231,33 +146,33 @@
|
||||
case 's' :
|
||||
s = va_arg(va, char *);
|
||||
if(!s)
|
||||
- fputs("<NULL>", fp);
|
||||
+ putstr("<NULL>");
|
||||
else
|
||||
- fputs(s, fp);
|
||||
+ putstr(s);
|
||||
done = true;
|
||||
break;
|
||||
case 'c' :
|
||||
- fputc(va_arg(va, int), fp);
|
||||
+ putc(va_arg(va, int));
|
||||
done = true;
|
||||
break;
|
||||
case 'd' :
|
||||
- number(fp, va_arg(va, int), 10, 0, precision, type);
|
||||
+ number(va_arg(va, int), 10, 0, precision, type);
|
||||
done = true;
|
||||
break;
|
||||
case 'x' :
|
||||
- number(fp, va_arg(va, int), 16, 0, precision, type);
|
||||
+ number(va_arg(va, int), 16, 0, precision, type);
|
||||
done = true;
|
||||
break;
|
||||
case 'X' :
|
||||
- number(fp, va_arg(va, int), 16, 0, precision, type | LARGE);
|
||||
+ number(va_arg(va, int), 16, 0, precision, type | LARGE);
|
||||
done = true;
|
||||
break;
|
||||
case '%' :
|
||||
- fputc(*fmt, fp);
|
||||
+ putc(*fmt);
|
||||
done = true;
|
||||
default:
|
||||
- fputc('%', fp);
|
||||
- fputc(*fmt, fp);
|
||||
+ putc('%');
|
||||
+ putc(*fmt);
|
||||
done = true;
|
||||
break;
|
||||
}
|
||||
@@ -265,7 +180,7 @@
|
||||
while(!done);
|
||||
}
|
||||
else
|
||||
- fputc(*fmt, fp);
|
||||
+ putc(*fmt);
|
||||
|
||||
fmt++;
|
||||
}
|
||||
@@ -274,25 +189,13 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int fprintf(FILE *fp, const char *fmt, ...)
|
||||
-{
|
||||
- va_list ap;
|
||||
- int i;
|
||||
-
|
||||
- va_start(ap, fmt);
|
||||
- i = fprintf(fp, fmt, ap);
|
||||
- va_end(ap);
|
||||
-
|
||||
- return i;
|
||||
-}
|
||||
-
|
||||
int printf(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int i;
|
||||
|
||||
va_start(ap, fmt);
|
||||
- i = vfprintf(stdout, fmt, ap);
|
||||
+ i = vprintf(fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
return i;
|
||||
diff -urN romboot.old/stdio.h romboot/stdio.h
|
||||
--- romboot.old/stdio.h 2004-07-04 22:04:27.000000000 +0200
|
||||
+++ romboot/stdio.h 2007-04-04 04:29:48.000000000 +0200
|
||||
@@ -1,31 +1,12 @@
|
||||
#include <stdarg.h>
|
||||
|
||||
-struct FILE
|
||||
-{
|
||||
- bool active;
|
||||
- int (*put)(int); /* function to write one char to device */
|
||||
- int (*get)(); /* function to read one char from device */
|
||||
-};
|
||||
-
|
||||
-#define FILEDESCS 8
|
||||
-
|
||||
-FILE *fopen(int (*put)(int), int (*get)());
|
||||
-int fclose(FILE *fp);
|
||||
-
|
||||
-int puts(const char *str);
|
||||
+int putstr(const char *str);
|
||||
int putc(int c);
|
||||
int putchar(int c);
|
||||
int getc();
|
||||
|
||||
-int fputs(const char *str, FILE *fp);
|
||||
-int fputc(int c, FILE *fp);
|
||||
-int fgetc(FILE *fp);
|
||||
int strlen(const char *str);
|
||||
|
||||
-int fprintf(FILE *fp, const char *fmt, ...);
|
||||
-int vfprintf(FILE *fp, const char *fmt, va_list ap);
|
||||
+int vprintf(const char *fmt, va_list ap);
|
||||
|
||||
int printf(const char *fmt, ...);
|
||||
-
|
||||
-extern FILE *stdout;
|
||||
-extern FILE *stdin;
|
@ -0,0 +1,13 @@
|
||||
--- u-boot-1.1.4.old/board/vlink/vlink.c 2007-04-03 11:42:39.000000000 +0200
|
||||
+++ u-boot-1.1.4/board/vlink/vlink.c 2007-04-03 11:48:33.000000000 +0200
|
||||
@@ -40,10 +40,6 @@
|
||||
/* Enable Ctrlc */
|
||||
console_init_f ();
|
||||
|
||||
- /* Correct IRDA resistor problem */
|
||||
- /* Set PA23_TXD in Output */
|
||||
- (AT91PS_PIO) AT91C_BASE_PIOA->PIO_OER = AT91C_PA23_TXD2;
|
||||
-
|
||||
/* memory and cpu-speed are setup before relocation */
|
||||
/* so we do _nothing_ here */
|
||||
|
@ -93,12 +93,14 @@ define Build/Install
|
||||
RUNTIME_PREFIX=/ \
|
||||
install_dev
|
||||
echo $(PKG_VERSION) > $(STAGING_DIR)/uclibc_version
|
||||
ifneq ($(CONFIG_LINUX_2_6_AT91),y)
|
||||
echo $(PKG_VERSION)$(PKG_EXTRAVERSION) > $(STAGING_DIR)/uclibc_extra_version
|
||||
$(MAKE) -C $(PKG_BUILD_DIR) \
|
||||
PREFIX=$(STAGING_DIR)/ \
|
||||
DEVEL_PREFIX=/ \
|
||||
RUNTIME_PREFIX=/ \
|
||||
utils
|
||||
endif
|
||||
endef
|
||||
|
||||
define Build/Clean
|
||||
|
Loading…
Reference in New Issue
Block a user