diff options
Diffstat (limited to 'target/linux')
6 files changed, 1079 insertions, 641 deletions
| diff --git a/target/linux/at91-2.6/image/romboot/Makefile b/target/linux/at91-2.6/image/romboot/Makefile index aa679aba7..586a4813b 100644 --- a/target/linux/at91-2.6/image/romboot/Makefile +++ b/target/linux/at91-2.6/image/romboot/Makefile @@ -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 diff --git a/target/linux/at91-2.6/image/romboot/patches/000-fixenv.patch b/target/linux/at91-2.6/image/romboot/patches/000-fixenv.patch index 5a08d57be..7c2857285 100644 --- a/target/linux/at91-2.6/image/romboot/patches/000-fixenv.patch +++ b/target/linux/at91-2.6/image/romboot/patches/000-fixenv.patch @@ -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); + } diff --git a/target/linux/at91-2.6/image/romboot/patches/002-Add-SD-Card.patch b/target/linux/at91-2.6/image/romboot/patches/002-Add-SD-Card.patch index e3e10545a..8ed0db914 100644 --- a/target/linux/at91-2.6/image/romboot/patches/002-Add-SD-Card.patch +++ b/target/linux/at91-2.6/image/romboot/patches/002-Add-SD-Card.patch @@ -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 diff --git a/target/linux/at91-2.6/image/romboot/patches/003-SD-reflash.patch b/target/linux/at91-2.6/image/romboot/patches/003-SD-reflash.patch index e0b5e0733..b0d5baf03 100644 --- a/target/linux/at91-2.6/image/romboot/patches/003-SD-reflash.patch +++ b/target/linux/at91-2.6/image/romboot/patches/003-SD-reflash.patch @@ -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 diff --git a/target/linux/at91-2.6/image/romboot/patches/004-code-cleanup.patch b/target/linux/at91-2.6/image/romboot/patches/004-code-cleanup.patch new file mode 100644 index 000000000..1a0f9c559 --- /dev/null +++ b/target/linux/at91-2.6/image/romboot/patches/004-code-cleanup.patch @@ -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; diff --git a/target/linux/at91-2.6/image/u-boot/patches/010-irda-patch-remove.patch b/target/linux/at91-2.6/image/u-boot/patches/010-irda-patch-remove.patch new file mode 100644 index 000000000..2f23f5b38 --- /dev/null +++ b/target/linux/at91-2.6/image/u-boot/patches/010-irda-patch-remove.patch @@ -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 */ +  | 
