|
@@ -250,7 +250,7 @@ static ulong flash_get_size (FPW *addr, flash_info_t *info)
|
|
int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|
int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|
{
|
|
{
|
|
int flag, prot, sect;
|
|
int flag, prot, sect;
|
|
- ulong type, start, last;
|
|
|
|
|
|
+ ulong type, start;
|
|
int rcode = 0;
|
|
int rcode = 0;
|
|
|
|
|
|
if ((s_first < 0) || (s_first > s_last)) {
|
|
if ((s_first < 0) || (s_first > s_last)) {
|
|
@@ -283,9 +283,6 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|
printf ("\n");
|
|
printf ("\n");
|
|
}
|
|
}
|
|
|
|
|
|
- start = get_timer (0);
|
|
|
|
- last = start;
|
|
|
|
-
|
|
|
|
/* Disable interrupts which might cause a timeout here */
|
|
/* Disable interrupts which might cause a timeout here */
|
|
flag = disable_interrupts ();
|
|
flag = disable_interrupts ();
|
|
|
|
|
|
@@ -298,14 +295,14 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|
printf ("Erasing sector %2d ... ", sect);
|
|
printf ("Erasing sector %2d ... ", sect);
|
|
|
|
|
|
/* arm simple, non interrupt dependent timer */
|
|
/* arm simple, non interrupt dependent timer */
|
|
- reset_timer_masked ();
|
|
|
|
|
|
+ start = get_timer(0);
|
|
|
|
|
|
*addr = (FPW) 0x00500050; /* clear status register */
|
|
*addr = (FPW) 0x00500050; /* clear status register */
|
|
*addr = (FPW) 0x00200020; /* erase setup */
|
|
*addr = (FPW) 0x00200020; /* erase setup */
|
|
*addr = (FPW) 0x00D000D0; /* erase confirm */
|
|
*addr = (FPW) 0x00D000D0; /* erase confirm */
|
|
|
|
|
|
while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
|
|
while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
|
|
- if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
|
|
|
|
|
+ if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
|
printf ("Timeout\n");
|
|
printf ("Timeout\n");
|
|
*addr = (FPW) 0x00B000B0; /* suspend erase */
|
|
*addr = (FPW) 0x00B000B0; /* suspend erase */
|
|
*addr = (FPW) 0x00FF00FF; /* reset to read mode */
|
|
*addr = (FPW) 0x00FF00FF; /* reset to read mode */
|
|
@@ -422,6 +419,7 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|
FPWV *addr = (FPWV *) dest;
|
|
FPWV *addr = (FPWV *) dest;
|
|
ulong status;
|
|
ulong status;
|
|
int flag;
|
|
int flag;
|
|
|
|
+ ulong start;
|
|
|
|
|
|
/* Check if Flash is (sufficiently) erased */
|
|
/* Check if Flash is (sufficiently) erased */
|
|
if ((*addr & data) != data) {
|
|
if ((*addr & data) != data) {
|
|
@@ -435,11 +433,11 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|
*addr = data;
|
|
*addr = data;
|
|
|
|
|
|
/* arm simple, non interrupt dependent timer */
|
|
/* arm simple, non interrupt dependent timer */
|
|
- reset_timer_masked ();
|
|
|
|
|
|
+ start = get_timer(0);
|
|
|
|
|
|
/* wait while polling the status register */
|
|
/* wait while polling the status register */
|
|
while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
|
|
while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
|
|
- if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
|
|
|
|
|
+ if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
|
*addr = (FPW) 0x00FF00FF; /* restore read mode */
|
|
*addr = (FPW) 0x00FF00FF; /* restore read mode */
|
|
return (1);
|
|
return (1);
|
|
}
|
|
}
|
|
@@ -470,6 +468,7 @@ int flash_real_protect(flash_info_t *info, long sector, int prot)
|
|
int rc = 0;
|
|
int rc = 0;
|
|
vu_long *addr = (vu_long *)(info->start[sector]);
|
|
vu_long *addr = (vu_long *)(info->start[sector]);
|
|
int flag = disable_interrupts();
|
|
int flag = disable_interrupts();
|
|
|
|
+ ulong start;
|
|
|
|
|
|
*addr = INTEL_CLEAR; /* Clear status register */
|
|
*addr = INTEL_CLEAR; /* Clear status register */
|
|
if (prot) { /* Set sector lock bit */
|
|
if (prot) { /* Set sector lock bit */
|
|
@@ -481,10 +480,10 @@ int flash_real_protect(flash_info_t *info, long sector, int prot)
|
|
*addr = INTEL_CONFIRM; /* clear */
|
|
*addr = INTEL_CONFIRM; /* clear */
|
|
}
|
|
}
|
|
|
|
|
|
- reset_timer_masked ();
|
|
|
|
|
|
+ start = get_timer(0);
|
|
|
|
|
|
while ((*addr & INTEL_FINISHED) != INTEL_FINISHED) {
|
|
while ((*addr & INTEL_FINISHED) != INTEL_FINISHED) {
|
|
- if (get_timer_masked () > CONFIG_SYS_FLASH_UNLOCK_TOUT) {
|
|
|
|
|
|
+ if (get_timer(start) > CONFIG_SYS_FLASH_UNLOCK_TOUT) {
|
|
printf("Flash lock bit operation timed out\n");
|
|
printf("Flash lock bit operation timed out\n");
|
|
rc = 1;
|
|
rc = 1;
|
|
break;
|
|
break;
|
|
@@ -510,13 +509,13 @@ int flash_real_protect(flash_info_t *info, long sector, int prot)
|
|
{
|
|
{
|
|
if (info->protect[i])
|
|
if (info->protect[i])
|
|
{
|
|
{
|
|
- reset_timer_masked ();
|
|
|
|
|
|
+ start = get_timer(0);
|
|
addr = (vu_long *)(info->start[i]);
|
|
addr = (vu_long *)(info->start[i]);
|
|
*addr = INTEL_LOCKBIT; /* Sector lock bit */
|
|
*addr = INTEL_LOCKBIT; /* Sector lock bit */
|
|
*addr = INTEL_PROTECT; /* set */
|
|
*addr = INTEL_PROTECT; /* set */
|
|
while ((*addr & INTEL_FINISHED) != INTEL_FINISHED)
|
|
while ((*addr & INTEL_FINISHED) != INTEL_FINISHED)
|
|
{
|
|
{
|
|
- if (get_timer_masked () > CONFIG_SYS_FLASH_UNLOCK_TOUT)
|
|
|
|
|
|
+ if (get_timer(start) > CONFIG_SYS_FLASH_UNLOCK_TOUT)
|
|
{
|
|
{
|
|
printf("Flash lock bit operation timed out\n");
|
|
printf("Flash lock bit operation timed out\n");
|
|
rc = 1;
|
|
rc = 1;
|