Implement SAM3U Errata 46.2.1.4 about reading Unique Identifier

This commit is contained in:
Harald Welte 2012-01-08 15:08:14 +01:00
parent e236846cf9
commit 0d9de4db67
1 changed files with 8 additions and 0 deletions

View File

@ -472,6 +472,7 @@ __attribute__ ((section (".ramfunc")))
unsigned char FLASHD_ReadUniqueID (unsigned long * uniqueID)
{
unsigned char error;
AT91S_EFC *pEfc = AT91C_BASE_EFC0;
SANITY_CHECK(uniqueID != NULL);
@ -480,6 +481,9 @@ unsigned char FLASHD_ReadUniqueID (unsigned long * uniqueID)
uniqueID[2] = 0;
uniqueID[3] = 0;
/* SAM3U Errata 46.2.1.4 */
pEfc->EFC_FMR |= (1 << 16);
EFC_StartCommand(AT91C_BASE_EFC, AT91C_EFC_FCMD_STUI, 0);
uniqueID[0] = *(unsigned int *)AT91C_IFLASH;
@ -488,6 +492,10 @@ unsigned char FLASHD_ReadUniqueID (unsigned long * uniqueID)
uniqueID[3] = *(unsigned int *)(AT91C_IFLASH + 12);
error = EFC_PerformCommand(AT91C_BASE_EFC, AT91C_EFC_FCMD_SPUI, 0);
/* SAM3U Errata 46.2.1.4 */
pEfc->EFC_FMR &= ~(1 << 16);
if (error) return error;
return 0;