PERFORCE change 100383 for review
Warner Losh
imp at FreeBSD.org
Sat Jul 1 06:37:28 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=100383
Change 100383 by imp at imp_lighthouse on 2006/07/01 06:36:29
Revert the passing of an address. There are differences in
accessing the two different kinds of EEPROMs that the 4370
and Kwikbyte use. The AT24C164 (4370) will need different code
than the AT24C02 (Kwikbyte).
Affected files ...
.. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/env_vars.c#12 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.c#14 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.h#7 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/eeprom.c#6 edit
.. //depot/projects/arm/src/sys/boot/arm/at91/libat91/lib.h#12 edit
Differences ...
==== //depot/projects/arm/src/sys/boot/arm/at91/bootiic/env_vars.c#12 (text+ko) ====
@@ -98,8 +98,9 @@
*cPtr++ = 0;
}
- WriteEEPROM(0, (unsigned)&BootCommandSection, env_table,
- sizeof(env_table));
+ /* We're executing in low RAM so addr in ram == offset in eeprom */
+ WriteEEPROM((unsigned)&BootCommandSection, env_table,
+ sizeof(env_table));
}
==== //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.c#14 (text+ko) ====
@@ -62,6 +62,7 @@
{COMMAND_REPLACE_KERNEL_VIA_XMODEM, "K"},
{COMMAND_REPLACE_FLASH_VIA_XMODEM, "I"},
{COMMAND_REPLACE_FPGA_VIA_XMODEM, "F"},
+ {COMMAND_REPLACE_ID_EEPROM, "E"},
{COMMAND_FINAL_FLAG, 0}
};
@@ -173,6 +174,18 @@
static void
+UpdateEEProm(int eeaddr)
+{
+ char *addr = (char *)SDRAM_BASE + (1 << 20); /* Load to base + 1MB */
+ int len;
+
+ while ((len = xmodem_rx(addr)) == -1)
+ continue;
+ printf("\r\nDownloaded %u bytes.\r\n", len);
+ WriteEEPROM(eeaddr, 0, addr, len);
+}
+
+static void
UpdateFlash(int offset)
{
char *addr = (char *)SDRAM_BASE + (1 << 20); /* Load to base + 1MB */
@@ -309,6 +322,11 @@
printf("Updating FLASH image\r\n");
UpdateFlash(FLASH_OFFSET);
break;
+
+ case COMMAND_REPLACE_ID_EEPROM:
+ printf("Updating ID EEPROM image\r\n");
+ UpdateEEProm(2);
+ break;
default:
break;
}
==== //depot/projects/arm/src/sys/boot/arm/at91/bootspi/loader_prompt.h#7 (text+ko) ====
@@ -45,6 +45,7 @@
COMMAND_REPLACE_KERNEL_VIA_XMODEM,
COMMAND_REPLACE_FLASH_VIA_XMODEM,
COMMAND_REPLACE_FPGA_VIA_XMODEM,
+ COMMAND_REPLACE_ID_EEPROM,
COMMAND_FINAL_FLAG
} e_cmd_t;
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/eeprom.c#6 (text+ko) ====
@@ -83,7 +83,7 @@
* .KB_C_FN_DEFINITION_END
*/
void
-ReadEEPROM(unsigned addr, unsigned ee_off, char *data_addr, unsigned size)
+ReadEEPROM(unsigned ee_off, char *data_addr, unsigned size)
{
const AT91PS_TWI twiPtr = AT91C_BASE_TWI;
unsigned int status;
@@ -92,7 +92,7 @@
status = twiPtr->TWI_RHR;
// Set the TWI Master Mode Register
- twiPtr->TWI_MMR = ((TWSI_EEPROM_ADDRESS | addr) << 16) |
+ twiPtr->TWI_MMR = (TWSI_EEPROM_ADDRESS << 16) |
AT91C_TWI_IADRSZ_2_BYTE | AT91C_TWI_MREAD;
// Set TWI Internal Address Register
@@ -137,7 +137,7 @@
* .KB_C_FN_DEFINITION_END
*/
void
-WriteEEPROM(unsigned addr, unsigned ee_off, char *data_addr, unsigned size)
+WriteEEPROM(unsigned ee_off, char *data_addr, unsigned size)
{
const AT91PS_TWI twiPtr = AT91C_BASE_TWI;
unsigned status;
@@ -148,7 +148,7 @@
putchar('.');
// Set the TWI Master Mode Register
- twiPtr->TWI_MMR = (((TWSI_EEPROM_ADDRESS | addr) << 16) |
+ twiPtr->TWI_MMR = ((TWSI_EEPROM_ADDRESS << 16) |
AT91C_TWI_IADRSZ_2_BYTE) & ~AT91C_TWI_MREAD;
// Set TWI Internal Address Register
@@ -173,7 +173,7 @@
continue;
// wait for write operation to complete
- ReadEEPROM(addr, ee_off, &test_data, 1);
+ ReadEEPROM(ee_off, &test_data, 1);
}
putchar('\r');
==== //depot/projects/arm/src/sys/boot/arm/at91/libat91/lib.h#12 (text) ====
@@ -33,9 +33,8 @@
/* The following function write eeprom at ee_addr using data */
/* from data_add for size bytes. */
-void ReadEEPROM(unsigned addr, unsigned eeoff, char *data_addr, unsigned size);
-void WriteEEPROM(unsigned addr, unsigned eeoff, char *data_addr,
- unsigned size);
+void ReadEEPROM(unsigned eeoff, char *data_addr, unsigned size);
+void WriteEEPROM(unsigned eeoff, char *data_addr, unsigned size);
void InitEEPROM(void);
/* XMODEM protocol */
More information about the p4-projects
mailing list