mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 08:59:33 +00:00
Timer: Fix misuse of ARM *timer_masked() functions outside arch/arm
Signed-off-by: Graeme Russ <graeme.russ@gmail.com>
This commit is contained in:
parent
4e0499ebb0
commit
a60d1e5b8e
32 changed files with 187 additions and 174 deletions
|
@ -162,6 +162,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
int rc = ERR_OK;
|
||||
unsigned long base;
|
||||
unsigned long addr;
|
||||
ulong start;
|
||||
|
||||
if ((info->flash_id & FLASH_VENDMASK) !=
|
||||
(FUJ_MANUFACT & FLASH_VENDMASK)) {
|
||||
|
@ -192,7 +193,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
/* Start erase on unprotected sectors */
|
||||
for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
|
||||
/* ARM simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
|
||||
|
@ -232,6 +233,7 @@ static int write_word (flash_info_t * info, ulong dest, ushort data)
|
|||
{
|
||||
int flag;
|
||||
unsigned long base;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased
|
||||
*/
|
||||
|
@ -250,7 +252,7 @@ static int write_word (flash_info_t * info, ulong dest, ushort data)
|
|||
flag = disable_interrupts ();
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
base = dest & 0xF0000000;
|
||||
FL_WORD (base + (0x555 << 1)) = 0xAA;
|
||||
|
|
|
@ -285,6 +285,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
int iflag, cflag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
int chip1;
|
||||
ulong start;
|
||||
|
||||
/* first look for protection bits */
|
||||
|
||||
|
@ -325,7 +326,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
volatile u16 *addr = (volatile u16 *) (info->start[sect]);
|
||||
|
@ -345,7 +346,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
result = *addr;
|
||||
|
||||
/* check timeout */
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
|
||||
chip1 = TMO;
|
||||
break;
|
||||
|
@ -400,6 +401,7 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
|
|||
int rc = ERR_OK;
|
||||
int cflag, iflag;
|
||||
int chip1;
|
||||
ulong start;
|
||||
|
||||
/*
|
||||
* Check if Flash is (sufficiently) erased
|
||||
|
@ -425,7 +427,7 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait until flash is ready */
|
||||
chip1 = 0;
|
||||
|
@ -433,7 +435,7 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
|
|||
result = *addr;
|
||||
|
||||
/* check timeout */
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
chip1 = ERR | TMO;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -221,7 +221,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 flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -254,9 +254,6 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf ("\n");
|
||||
}
|
||||
|
||||
start = get_timer (0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts ();
|
||||
|
||||
|
@ -269,14 +266,14 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW) 0x00500050; /* clear status register */
|
||||
*addr = (FPW) 0x00200020; /* erase setup */
|
||||
*addr = (FPW) 0x00D000D0; /* erase confirm */
|
||||
|
||||
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");
|
||||
*addr = (FPW) 0x00B000B0; /* suspend erase */
|
||||
*addr = (FPW) 0x00FF00FF; /* reset to read mode */
|
||||
|
@ -393,6 +390,7 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
FPWV *addr = (FPWV *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -406,11 +404,11 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
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 */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -209,6 +209,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
int flag, prot, sect;
|
||||
ulong type;
|
||||
int rcode = 0;
|
||||
ulong start;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
if (info->flash_id == FLASH_UNKNOWN) {
|
||||
|
@ -250,7 +251,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
addr = (volatile unsigned char *) (info->start[sect]);
|
||||
*addr = 0x50; /* clear status register */
|
||||
|
@ -258,7 +259,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
*addr = 0xD0; /* erase confirm */
|
||||
|
||||
while (((status = *addr) & 0x80) != 0x80) {
|
||||
if (get_timer_masked () >
|
||||
if (get_timer(start) >
|
||||
CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
printf ("Timeout\n");
|
||||
*addr = 0xB0; /* suspend erase */
|
||||
|
@ -370,6 +371,7 @@ static int write_data (flash_info_t * info, ulong dest, unsigned char data)
|
|||
volatile unsigned char *addr = (volatile unsigned char *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -384,11 +386,11 @@ static int write_data (flash_info_t * info, ulong dest, unsigned char data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
while (((status = *addr) & 0x80) != 0x80) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
*addr = 0xFF; /* restore read mode */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -209,6 +209,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
int flag, prot, sect;
|
||||
ulong type;
|
||||
int rcode = 0;
|
||||
ulong start;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
if (info->flash_id == FLASH_UNKNOWN) {
|
||||
|
@ -250,7 +251,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
addr = (volatile unsigned char *) (info->start[sect]);
|
||||
*addr = 0x50; /* clear status register */
|
||||
|
@ -258,7 +259,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
*addr = 0xD0; /* erase confirm */
|
||||
|
||||
while (((status = *addr) & 0x80) != 0x80) {
|
||||
if (get_timer_masked () >
|
||||
if (get_timer(start) >
|
||||
CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
printf ("Timeout\n");
|
||||
*addr = 0xB0; /* suspend erase */
|
||||
|
@ -370,6 +371,7 @@ static int write_data (flash_info_t * info, ulong dest, unsigned char data)
|
|||
volatile unsigned char *addr = (volatile unsigned char *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -384,11 +386,11 @@ static int write_data (flash_info_t * info, ulong dest, unsigned char data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
while (((status = *addr) & 0x80) != 0x80) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
*addr = 0xFF; /* restore read mode */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -264,7 +264,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
{
|
||||
vu_short *addr = (vu_short *)(info->start[0]);
|
||||
int flag, prot, sect, ssect, l_sect;
|
||||
ulong now, last;
|
||||
ulong now, last, start;
|
||||
|
||||
debug ("flash_erase: first: %d last: %d\n", s_first, s_last);
|
||||
|
||||
|
@ -335,11 +335,11 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
if (l_sect < 0)
|
||||
goto DONE;
|
||||
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
last = 0;
|
||||
addr = (vu_short *)(info->start[l_sect]);
|
||||
while ((addr[0] & 0x0080) != 0x0080) {
|
||||
if ((now = get_timer_masked ()) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if ((now = get_timer(start)) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
printf ("Timeout\n");
|
||||
return 1;
|
||||
}
|
||||
|
@ -434,6 +434,7 @@ static int write_word_amd (flash_info_t *info, vu_short *dest, ushort data)
|
|||
{
|
||||
int flag;
|
||||
vu_short *base; /* first address in flash bank */
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*dest & data) != data) {
|
||||
|
@ -455,11 +456,11 @@ static int write_word_amd (flash_info_t *info, vu_short *dest, ushort data)
|
|||
if (flag)
|
||||
enable_interrupts();
|
||||
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* data polling for D7 */
|
||||
while ((*dest & 0x0080) != (data & 0x0080)) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
*dest = 0x00F0; /* reset bank */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -136,6 +136,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
{
|
||||
int flag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
ulong start;
|
||||
|
||||
if (info->flash_id == FLASH_UNKNOWN)
|
||||
return ERR_UNKNOWN_FLASH_TYPE;
|
||||
|
@ -173,7 +174,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
vu_short *addr = (vu_short *) (info->start[sect]);
|
||||
|
@ -182,7 +183,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
*addr = 0xD0; /* erase confirm */
|
||||
|
||||
while ((*addr & 0x80) != 0x80) {
|
||||
if (get_timer_masked () >
|
||||
if (get_timer(start) >
|
||||
CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
*addr = 0xB0; /* suspend erase */
|
||||
*addr = 0xFF; /* reset to read mode */
|
||||
|
@ -221,6 +222,7 @@ static int write_word (flash_info_t * info, ulong dest, ushort data)
|
|||
vu_short *addr = (vu_short *) dest, val;
|
||||
int rc = ERR_OK;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased
|
||||
*/
|
||||
|
@ -246,11 +248,11 @@ static int write_word (flash_info_t * info, ulong dest, ushort data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
while (((val = *addr) & 0x80) != 0x80) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
rc = ERR_TIMOUT;
|
||||
/* suspend program command */
|
||||
*addr = 0xB0;
|
||||
|
|
|
@ -141,6 +141,7 @@ int flash_erase(flash_info_t *info, int s_first, int s_last)
|
|||
{
|
||||
int flag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
ulong start;
|
||||
|
||||
if (info->flash_id == FLASH_UNKNOWN)
|
||||
return ERR_UNKNOWN_FLASH_TYPE;
|
||||
|
@ -175,7 +176,7 @@ int flash_erase(flash_info_t *info, int s_first, int s_last)
|
|||
printf("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
u32 * volatile addr = (u32 * volatile)(info->start[sect]);
|
||||
|
@ -189,7 +190,7 @@ int flash_erase(flash_info_t *info, int s_first, int s_last)
|
|||
*addr = 0x00D000D0; /* erase confirm */
|
||||
|
||||
while ((*addr & 0x00800080) != 0x00800080) {
|
||||
if (get_timer_masked() > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
*addr = 0x00B000B0; /* suspend erase*/
|
||||
*addr = 0x00FF00FF; /* read mode */
|
||||
rc = ERR_TIMOUT;
|
||||
|
@ -221,6 +222,7 @@ static int write_long (flash_info_t *info, ulong dest, ulong data)
|
|||
u32 * volatile addr = (u32 * volatile)dest, val;
|
||||
int rc = ERR_OK;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* read array command - just for the case... */
|
||||
*addr = 0x00FF00FF;
|
||||
|
@ -247,11 +249,11 @@ static int write_long (flash_info_t *info, ulong dest, ulong data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
while(((val = *addr) & 0x00800080) != 0x00800080) {
|
||||
if (get_timer_masked() > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
rc = ERR_TIMOUT;
|
||||
/* suspend program command */
|
||||
*addr = 0x00B000B0;
|
||||
|
|
|
@ -212,7 +212,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 flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -245,9 +245,6 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf ("\n");
|
||||
}
|
||||
|
||||
start = get_timer (0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts();
|
||||
|
||||
|
@ -260,14 +257,14 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW)0x00500050; /* clear status register */
|
||||
*addr = (FPW)0x00200020; /* erase setup */
|
||||
*addr = (FPW)0x00D000D0; /* erase confirm */
|
||||
|
||||
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");
|
||||
*addr = (FPW)0x00B000B0; /* suspend erase */
|
||||
*addr = (FPW)0x00FF00FF; /* reset to read mode */
|
||||
|
@ -385,6 +382,7 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
FPWV *addr = (FPWV *)dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -398,11 +396,11 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
while (((status = *addr) & (FPW)0x00800080) != (FPW)0x00800080) {
|
||||
if (get_timer_masked() > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (start = get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
*addr = (FPW)0x00FF00FF; /* restore read mode */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -119,6 +119,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
{
|
||||
int flag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
ulong start;
|
||||
|
||||
if (info->flash_id == FLASH_UNKNOWN)
|
||||
return ERR_UNKNOWN_FLASH_TYPE;
|
||||
|
@ -156,7 +157,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
vu_short *addr = (vu_short *) (info->start[sect]);
|
||||
|
@ -165,7 +166,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
*addr = 0xD0; /* erase confirm */
|
||||
|
||||
while ((*addr & 0x80) != 0x80) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
*addr = 0xB0; /* suspend erase */
|
||||
*addr = 0xFF; /* reset to read mode */
|
||||
rc = ERR_TIMOUT;
|
||||
|
@ -203,6 +204,7 @@ static int write_word (flash_info_t * info, ulong dest, ushort data)
|
|||
vu_short *addr = (vu_short *) dest, val;
|
||||
int rc = ERR_OK;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased
|
||||
*/
|
||||
|
@ -228,11 +230,11 @@ static int write_word (flash_info_t * info, ulong dest, ushort data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
while (((val = *addr) & 0x80) != 0x80) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
rc = ERR_TIMOUT;
|
||||
/* suspend program command */
|
||||
*addr = 0xB0;
|
||||
|
|
|
@ -225,7 +225,7 @@ int
|
|||
flash_erase(flash_info_t * info, int s_first, int s_last)
|
||||
{
|
||||
int flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -258,9 +258,6 @@ flash_erase(flash_info_t * info, int s_first, int s_last)
|
|||
printf("\n");
|
||||
}
|
||||
|
||||
start = get_timer(0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts();
|
||||
|
||||
|
@ -273,7 +270,7 @@ flash_erase(flash_info_t * info, int s_first, int s_last)
|
|||
printf("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW) 0x00500050; /* clear status register */
|
||||
*addr = (FPW) 0x00200020; /* erase setup */
|
||||
|
@ -282,7 +279,7 @@ flash_erase(flash_info_t * info, int s_first, int s_last)
|
|||
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");
|
||||
*addr = (FPW) 0x00B000B0; /* suspend erase */
|
||||
*addr = (FPW) 0x00FF00FF; /* reset to read mode */
|
||||
|
@ -401,6 +398,7 @@ write_data(flash_info_t * info, ulong dest, FPW data)
|
|||
FPWV *addr = (FPWV *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -414,11 +412,11 @@ write_data(flash_info_t * info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
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 */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -128,6 +128,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
{
|
||||
int flag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
ulong start;
|
||||
|
||||
if (info->flash_id == FLASH_UNKNOWN)
|
||||
return ERR_UNKNOWN_FLASH_TYPE;
|
||||
|
@ -165,7 +166,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
vu_long *addr = (vu_long *) (info->start[sect]);
|
||||
|
@ -174,7 +175,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
*addr = 0x00D000D0; /* erase confirm */
|
||||
|
||||
while ((*addr & 0x00800080) != 0x00800080) {
|
||||
if (get_timer_masked () >
|
||||
if (get_timer(start) >
|
||||
CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
*addr = 0x00B000B0; /* suspend erase */
|
||||
*addr = 0x00FF00FF; /* reset to read mode */
|
||||
|
@ -211,6 +212,7 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
|
|||
ulong barf;
|
||||
int rc = ERR_OK;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased
|
||||
*/
|
||||
|
@ -236,14 +238,14 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* read status register command */
|
||||
*addr = 0x00700070;
|
||||
|
||||
/* wait while polling the status register */
|
||||
while ((*addr & 0x00800080) != 0x00800080) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
rc = ERR_TIMOUT;
|
||||
/* suspend program command */
|
||||
*addr = 0x00B000B0;
|
||||
|
|
|
@ -182,6 +182,7 @@ int flash_erase(flash_info_t *info, int s_first, int s_last)
|
|||
{
|
||||
int flag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
ulong start;
|
||||
|
||||
if (info->flash_id == FLASH_UNKNOWN)
|
||||
return ERR_UNKNOWN_FLASH_TYPE;
|
||||
|
@ -218,7 +219,7 @@ int flash_erase(flash_info_t *info, int s_first, int s_last)
|
|||
PRINTK("\n");
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
u16 * volatile addr = (u16 * volatile)(info->start[sect]);
|
||||
|
@ -235,7 +236,7 @@ int flash_erase(flash_info_t *info, int s_first, int s_last)
|
|||
|
||||
while ((*addr & 0x0080) != 0x0080) {
|
||||
PRINTK(".");
|
||||
if (get_timer_masked() > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
*addr = 0x00B0; /* suspend erase*/
|
||||
*addr = 0x00FF; /* read mode */
|
||||
rc = ERR_TIMOUT;
|
||||
|
@ -279,6 +280,7 @@ static int write_word (flash_info_t *info, ulong dest, ushort data)
|
|||
volatile u16 *addr = (u16 *)dest, val;
|
||||
int rc = ERR_OK;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) return ERR_NOT_ERASED;
|
||||
|
@ -302,11 +304,11 @@ static int write_word (flash_info_t *info, ulong dest, ushort data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
while(((val = *addr) & 0x80) != 0x80) {
|
||||
if (get_timer_masked() > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
rc = ERR_TIMOUT;
|
||||
*addr = 0xB0; /* suspend program command */
|
||||
goto outahere;
|
||||
|
|
|
@ -250,6 +250,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
ulong result;
|
||||
int iflag, cflag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
ulong start;
|
||||
|
||||
/* first look for protection bits */
|
||||
|
||||
|
@ -291,7 +292,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0)
|
||||
{ /* not protected */
|
||||
|
@ -305,7 +306,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
do
|
||||
{
|
||||
/* check timeout */
|
||||
if (get_timer_masked() > CONFIG_SYS_FLASH_ERASE_TOUT)
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT)
|
||||
{
|
||||
*addr = PUZZLE_TO_FLASH(CMD_SUSPEND);
|
||||
result = BIT_TIMEOUT;
|
||||
|
@ -354,6 +355,7 @@ static int write_word (flash_info_t *info, ulong dest, ulong data)
|
|||
ulong result;
|
||||
int rc = ERR_OK;
|
||||
int cflag, iflag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased
|
||||
*/
|
||||
|
@ -377,13 +379,13 @@ static int write_word (flash_info_t *info, ulong dest, ulong data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait until flash is ready */
|
||||
do
|
||||
{
|
||||
/* check timeout */
|
||||
if (get_timer_masked() > CONFIG_SYS_FLASH_ERASE_TOUT)
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT)
|
||||
{
|
||||
*addr = PUZZLE_TO_FLASH(CMD_SUSPEND);
|
||||
result = BIT_TIMEOUT;
|
||||
|
|
|
@ -229,6 +229,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
ulong result, result1;
|
||||
int iflag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
ulong start;
|
||||
|
||||
#ifdef USE_920T_MMU
|
||||
int cflag;
|
||||
|
@ -284,7 +285,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
sect, info->start[sect]);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
vu_long *addr = (vu_long *) (info->start[sect]);
|
||||
|
@ -297,7 +298,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
/* wait until flash is ready */
|
||||
do {
|
||||
/* check timeout */
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
*addr = CMD_STATUS_RESET;
|
||||
result = BIT_TIMEOUT;
|
||||
break;
|
||||
|
@ -357,6 +358,7 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
|
|||
ulong result;
|
||||
int rc = ERR_OK;
|
||||
int iflag;
|
||||
ulong start;
|
||||
|
||||
#ifdef USE_920T_MMU
|
||||
int cflag;
|
||||
|
@ -387,12 +389,12 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait until flash is ready */
|
||||
do {
|
||||
/* check timeout */
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
*addr = CMD_SUSPEND;
|
||||
result = BIT_TIMEOUT;
|
||||
break;
|
||||
|
|
|
@ -221,7 +221,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 flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -254,9 +254,6 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf ("\n");
|
||||
}
|
||||
|
||||
start = get_timer (0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts ();
|
||||
|
||||
|
@ -269,14 +266,14 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW) 0x00500050; /* clear status register */
|
||||
*addr = (FPW) 0x00200020; /* erase setup */
|
||||
*addr = (FPW) 0x00D000D0; /* erase confirm */
|
||||
|
||||
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");
|
||||
*addr = (FPW) 0x00B000B0; /* suspend erase */
|
||||
*addr = (FPW) 0x00FF00FF; /* reset to read mode */
|
||||
|
@ -393,6 +390,7 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
FPWV *addr = (FPWV *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -406,11 +404,11 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
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 */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -291,6 +291,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
{
|
||||
int flag, sect, setup_offset = 0;
|
||||
int rc = ERR_OK;
|
||||
ulong start;
|
||||
|
||||
if (info->flash_id == FLASH_UNKNOWN) {
|
||||
printf ("- missing\n");
|
||||
|
@ -338,14 +339,14 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
(__u16) SECERASE_CMD;
|
||||
|
||||
/* wait some time */
|
||||
reset_timer_masked ();
|
||||
while (get_timer_masked () < 1000) {
|
||||
start = get_timer(0);
|
||||
while (get_timer(start) < 1000) {
|
||||
}
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
while (flash_check_erase_amd (info->start[sect])) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
printf ("timeout!\n");
|
||||
/* OOPS: reach timeout,
|
||||
* try to reset chip
|
||||
|
@ -411,6 +412,7 @@ static int write_word (flash_info_t * info, ulong dest, ushort data)
|
|||
{
|
||||
int rc = ERR_OK;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*(__u16 *) (dest) & data) != data)
|
||||
|
@ -446,10 +448,10 @@ static int write_word (flash_info_t * info, ulong dest, ushort data)
|
|||
}
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
while (flash_check_write_amd (dest)) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
printf ("timeout! @ %08lX\n", dest);
|
||||
/* OOPS: reach timeout,
|
||||
* try to reset chip */
|
||||
|
|
|
@ -276,7 +276,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last) {
|
|||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
|
||||
reset_timer_masked();
|
||||
get_timer(0);
|
||||
|
||||
SF_NvmodeErase();
|
||||
SF_NvmodeWrite();
|
||||
|
|
|
@ -261,7 +261,7 @@ void flash_unprotect_sectors (FPWV * addr)
|
|||
int flash_erase (flash_info_t * info, int s_first, int s_last)
|
||||
{
|
||||
int flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -294,10 +294,6 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("\n");
|
||||
}
|
||||
|
||||
|
||||
start = get_timer (0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts ();
|
||||
|
||||
|
@ -312,7 +308,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
flash_unprotect_sectors (addr);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW) 0x00500050;/* clear status register */
|
||||
*addr = (FPW) 0x00200020;/* erase setup */
|
||||
|
@ -321,7 +317,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
while (((status =
|
||||
*addr) & (FPW) 0x00800080) !=
|
||||
(FPW) 0x00800080) {
|
||||
if (get_timer_masked () >
|
||||
if (get_timer(start) >
|
||||
CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
printf ("Timeout\n");
|
||||
/* suspend erase */
|
||||
|
@ -441,6 +437,7 @@ static int write_data (flash_info_t * info, ulong dest, FPW data)
|
|||
FPWV *addr = (FPWV *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -454,11 +451,11 @@ static int write_data (flash_info_t * info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
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 */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -472,7 +472,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
FPWV *addr;
|
||||
int flag, prot, sect;
|
||||
int intel = (info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL;
|
||||
ulong now, last;
|
||||
ulong start, now, last;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -516,8 +516,6 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("\n");
|
||||
}
|
||||
|
||||
reset_timer_masked ();
|
||||
|
||||
/* Start erase on unprotected sectors */
|
||||
for (sect = s_first; sect <= s_last && rcode == 0; sect++) {
|
||||
|
||||
|
@ -527,7 +525,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts ();
|
||||
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
last = 0;
|
||||
|
||||
addr = (FPWV *) (info->start[sect]);
|
||||
|
@ -559,7 +557,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
|
||||
while ((*addr & (FPW) 0x00800080) != (FPW) 0x00800080) {
|
||||
if ((now =
|
||||
get_timer_masked ()) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
get_timer(start)) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
printf ("Timeout\n");
|
||||
|
||||
if (intel) {
|
||||
|
@ -661,6 +659,7 @@ static int write_word_amd (flash_info_t * info, FPWV * dest, FPW data)
|
|||
int flag;
|
||||
int res = 0; /* result, assume success */
|
||||
FPWV *base; /* first address in flash bank */
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*dest & data) != data) {
|
||||
|
@ -683,12 +682,12 @@ static int write_word_amd (flash_info_t * info, FPWV * dest, FPW data)
|
|||
if (flag)
|
||||
enable_interrupts ();
|
||||
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* data polling for D7 */
|
||||
while (res == 0
|
||||
&& (*dest & (FPW) 0x00800080) != (data & (FPW) 0x00800080)) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
*dest = (FPW) 0x00F000F0; /* reset bank */
|
||||
res = 1;
|
||||
}
|
||||
|
@ -711,6 +710,7 @@ static int write_word_intel (flash_info_t * info, FPWV * dest, FPW data)
|
|||
{
|
||||
int flag;
|
||||
int res = 0; /* result, assume success */
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*dest & data) != data) {
|
||||
|
@ -730,10 +730,10 @@ static int write_word_intel (flash_info_t * info, FPWV * dest, FPW data)
|
|||
if (flag)
|
||||
enable_interrupts ();
|
||||
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
while (res == 0 && (*dest & (FPW) 0x00800080) != (FPW) 0x00800080) {
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
|
||||
*dest = (FPW) 0x00B000B0; /* Suspend program */
|
||||
res = 1;
|
||||
}
|
||||
|
|
|
@ -231,6 +231,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
ulong result, result1;
|
||||
int iflag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
ulong start;
|
||||
|
||||
#ifdef USE_920T_MMU
|
||||
int cflag;
|
||||
|
@ -286,7 +287,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
sect, info->start[sect]);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
vu_long *addr = (vu_long *) (info->start[sect]);
|
||||
|
@ -299,7 +300,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
/* wait until flash is ready */
|
||||
do {
|
||||
/* check timeout */
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
*addr = CMD_STATUS_RESET;
|
||||
result = BIT_TIMEOUT;
|
||||
break;
|
||||
|
@ -359,6 +360,7 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
|
|||
ulong result;
|
||||
int rc = ERR_OK;
|
||||
int iflag;
|
||||
ulong start;
|
||||
|
||||
#ifdef USE_920T_MMU
|
||||
int cflag;
|
||||
|
@ -389,12 +391,12 @@ static int write_word (flash_info_t * info, ulong dest, ulong data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait until flash is ready */
|
||||
do {
|
||||
/* check timeout */
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
*addr = CMD_SUSPEND;
|
||||
result = BIT_TIMEOUT;
|
||||
break;
|
||||
|
|
|
@ -173,6 +173,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
int iflag, cflag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
int chip;
|
||||
ulong start;
|
||||
|
||||
/* first look for protection bits */
|
||||
|
||||
|
@ -213,7 +214,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0) { /* not protected */
|
||||
vu_short *addr = (vu_short *) (info->start[sect]);
|
||||
|
@ -233,7 +234,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
result = *addr;
|
||||
|
||||
/* check timeout */
|
||||
if (get_timer_masked () >
|
||||
if (get_timer(start) >
|
||||
CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
|
||||
chip = TMO;
|
||||
|
@ -295,6 +296,7 @@ static int write_hword (flash_info_t * info, ulong dest, ushort data)
|
|||
int rc = ERR_OK;
|
||||
int cflag, iflag;
|
||||
int chip;
|
||||
ulong start;
|
||||
|
||||
/*
|
||||
* Check if Flash is (sufficiently) erased
|
||||
|
@ -322,7 +324,7 @@ static int write_hword (flash_info_t * info, ulong dest, ushort data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
get_timer(start);
|
||||
|
||||
/* wait until flash is ready */
|
||||
chip = 0;
|
||||
|
@ -330,7 +332,7 @@ static int write_hword (flash_info_t * info, ulong dest, ushort data)
|
|||
result = *addr;
|
||||
|
||||
/* check timeout */
|
||||
if (get_timer_masked () > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
chip = ERR | TMO;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -97,11 +97,12 @@ static FLASH_BUS_RET flash_status_reg (void)
|
|||
static int flash_ready (ulong timeout)
|
||||
{
|
||||
int ok = 1;
|
||||
ulong start;
|
||||
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
while ((flash_status_reg () & FLASH_CMD (CFI_INTEL_SR_READY)) !=
|
||||
FLASH_CMD (CFI_INTEL_SR_READY)) {
|
||||
if (get_timer_masked () > timeout && timeout != 0) {
|
||||
if (get_timer(start) > timeout && timeout != 0) {
|
||||
ok = 0;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -190,6 +190,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
int iflag, cflag, prot, sect;
|
||||
int rc = ERR_OK;
|
||||
int chip1, chip2;
|
||||
ulong start;
|
||||
|
||||
/* first look for protection bits */
|
||||
|
||||
|
@ -231,7 +232,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
if (info->protect[sect] == 0)
|
||||
{ /* not protected */
|
||||
|
@ -253,7 +254,7 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
result = *addr;
|
||||
|
||||
/* check timeout */
|
||||
if (get_timer_masked() > CONFIG_SYS_FLASH_ERASE_TOUT)
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT)
|
||||
{
|
||||
MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
|
||||
chip1 = TMO;
|
||||
|
@ -322,6 +323,7 @@ static int write_word (flash_info_t *info, ulong dest, ulong data)
|
|||
int rc = ERR_OK;
|
||||
int cflag, iflag;
|
||||
int chip1, chip2;
|
||||
ulong start;
|
||||
|
||||
/*
|
||||
* Check if Flash is (sufficiently) erased
|
||||
|
@ -349,7 +351,7 @@ static int write_word (flash_info_t *info, ulong dest, ulong data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait until flash is ready */
|
||||
chip1 = chip2 = 0;
|
||||
|
@ -358,7 +360,7 @@ static int write_word (flash_info_t *info, ulong dest, ulong data)
|
|||
result = *addr;
|
||||
|
||||
/* check timeout */
|
||||
if (get_timer_masked() > CONFIG_SYS_FLASH_ERASE_TOUT)
|
||||
if (get_timer(start) > CONFIG_SYS_FLASH_ERASE_TOUT)
|
||||
{
|
||||
chip1 = ERR | TMO;
|
||||
break;
|
||||
|
|
|
@ -278,7 +278,7 @@ void flash_unprotect_sectors (FPWV * addr)
|
|||
int flash_erase (flash_info_t * info, int s_first, int s_last)
|
||||
{
|
||||
int flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -311,10 +311,6 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("\n");
|
||||
}
|
||||
|
||||
|
||||
start = get_timer (0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts ();
|
||||
|
||||
|
@ -329,7 +325,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
flash_unprotect_sectors (addr);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW) 0x00500050;/* clear status register */
|
||||
*addr = (FPW) 0x00200020;/* erase setup */
|
||||
|
@ -338,7 +334,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
while (((status =
|
||||
*addr) & (FPW) 0x00800080) !=
|
||||
(FPW) 0x00800080) {
|
||||
if (get_timer_masked () >
|
||||
if (get_timer(start) >
|
||||
CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
printf ("Timeout\n");
|
||||
/* suspend erase */
|
||||
|
@ -458,6 +454,7 @@ static int write_data (flash_info_t * info, ulong dest, FPW data)
|
|||
FPWV *addr = (FPWV *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -470,11 +467,11 @@ static int write_data (flash_info_t * info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
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 */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -261,7 +261,7 @@ void flash_unprotect_sectors (FPWV * addr)
|
|||
int flash_erase (flash_info_t * info, int s_first, int s_last)
|
||||
{
|
||||
int flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -294,10 +294,6 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
printf ("\n");
|
||||
}
|
||||
|
||||
|
||||
start = get_timer (0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts ();
|
||||
|
||||
|
@ -312,7 +308,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
flash_unprotect_sectors (addr);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW) 0x00500050;/* clear status register */
|
||||
*addr = (FPW) 0x00200020;/* erase setup */
|
||||
|
@ -321,7 +317,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)
|
|||
while (((status =
|
||||
*addr) & (FPW) 0x00800080) !=
|
||||
(FPW) 0x00800080) {
|
||||
if (get_timer_masked () >
|
||||
if (get_timer(start) >
|
||||
CONFIG_SYS_FLASH_ERASE_TOUT) {
|
||||
printf ("Timeout\n");
|
||||
/* suspend erase */
|
||||
|
@ -441,6 +437,7 @@ static int write_data (flash_info_t * info, ulong dest, FPW data)
|
|||
FPWV *addr = (FPWV *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -454,11 +451,11 @@ static int write_data (flash_info_t * info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
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 */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -221,7 +221,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 flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -254,9 +254,6 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf ("\n");
|
||||
}
|
||||
|
||||
start = get_timer (0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts ();
|
||||
|
||||
|
@ -269,14 +266,14 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW) 0x00500050; /* clear status register */
|
||||
*addr = (FPW) 0x00200020; /* erase setup */
|
||||
*addr = (FPW) 0x00D000D0; /* erase confirm */
|
||||
|
||||
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");
|
||||
*addr = (FPW) 0x00B000B0; /* suspend erase */
|
||||
*addr = (FPW) 0x00FF00FF; /* reset to read mode */
|
||||
|
@ -393,6 +390,7 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
FPWV *addr = (FPWV *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -406,11 +404,11 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
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 */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -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 flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
start = get_timer (0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
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);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW) 0x00500050; /* clear status register */
|
||||
*addr = (FPW) 0x00200020; /* erase setup */
|
||||
*addr = (FPW) 0x00D000D0; /* erase confirm */
|
||||
|
||||
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");
|
||||
*addr = (FPW) 0x00B000B0; /* suspend erase */
|
||||
*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;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -435,11 +433,11 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
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 */
|
||||
return (1);
|
||||
}
|
||||
|
@ -470,6 +468,7 @@ int flash_real_protect(flash_info_t *info, long sector, int prot)
|
|||
int rc = 0;
|
||||
vu_long *addr = (vu_long *)(info->start[sector]);
|
||||
int flag = disable_interrupts();
|
||||
ulong start;
|
||||
|
||||
*addr = INTEL_CLEAR; /* Clear status register */
|
||||
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 */
|
||||
}
|
||||
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
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");
|
||||
rc = 1;
|
||||
break;
|
||||
|
@ -510,13 +509,13 @@ int flash_real_protect(flash_info_t *info, long sector, int prot)
|
|||
{
|
||||
if (info->protect[i])
|
||||
{
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
addr = (vu_long *)(info->start[i]);
|
||||
*addr = INTEL_LOCKBIT; /* Sector lock bit */
|
||||
*addr = INTEL_PROTECT; /* set */
|
||||
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");
|
||||
rc = 1;
|
||||
|
|
|
@ -224,7 +224,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 flag, prot, sect;
|
||||
ulong type, start, last;
|
||||
ulong type, start;
|
||||
int rcode = 0;
|
||||
|
||||
if ((s_first < 0) || (s_first > s_last)) {
|
||||
|
@ -257,9 +257,6 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf ("\n");
|
||||
}
|
||||
|
||||
start = get_timer (0);
|
||||
last = start;
|
||||
|
||||
/* Disable interrupts which might cause a timeout here */
|
||||
flag = disable_interrupts ();
|
||||
|
||||
|
@ -272,14 +269,14 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
|
|||
printf ("Erasing sector %2d ... ", sect);
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
*addr = (FPW) 0x00500050; /* clear status register */
|
||||
*addr = (FPW) 0x00200020; /* erase setup */
|
||||
*addr = (FPW) 0x00D000D0; /* erase confirm */
|
||||
|
||||
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");
|
||||
*addr = (FPW) 0x00B000B0; /* suspend erase */
|
||||
*addr = (FPW) 0x00FF00FF; /* reset to read mode */
|
||||
|
@ -396,6 +393,7 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
FPWV *addr = (FPWV *) dest;
|
||||
ulong status;
|
||||
int flag;
|
||||
ulong start;
|
||||
|
||||
/* Check if Flash is (sufficiently) erased */
|
||||
if ((*addr & data) != data) {
|
||||
|
@ -409,11 +407,11 @@ static int write_data (flash_info_t *info, ulong dest, FPW data)
|
|||
*addr = data;
|
||||
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
start = get_timer(0);
|
||||
|
||||
/* wait while polling the status register */
|
||||
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 */
|
||||
return (1);
|
||||
}
|
||||
|
|
|
@ -75,6 +75,7 @@ ssize_t spi_write (uchar *addr, int alen, uchar *buffer, int len)
|
|||
{
|
||||
struct spi_slave *slave;
|
||||
char buf[3];
|
||||
ulong start;
|
||||
|
||||
slave = spi_setup_slave(CONFIG_DEFAULT_SPI_BUS, 1, 1000000,
|
||||
CONFIG_DEFAULT_SPI_MODE);
|
||||
|
@ -102,7 +103,7 @@ ssize_t spi_write (uchar *addr, int alen, uchar *buffer, int len)
|
|||
if(spi_xfer(slave, len * 8, buffer, NULL, SPI_XFER_END))
|
||||
return -1;
|
||||
|
||||
reset_timer_masked();
|
||||
start = get_timer(0);
|
||||
do {
|
||||
buf[0] = SPI_EEPROM_RDSR;
|
||||
buf[1] = 0;
|
||||
|
@ -111,7 +112,7 @@ ssize_t spi_write (uchar *addr, int alen, uchar *buffer, int len)
|
|||
if (!(buf[1] & 1))
|
||||
break;
|
||||
|
||||
} while (get_timer_masked() < CONFIG_SYS_SPI_WRITE_TOUT);
|
||||
} while (get_timer(start) < CONFIG_SYS_SPI_WRITE_TOUT);
|
||||
|
||||
if (buf[1] & 1)
|
||||
printf ("*** spi_write: Time out while writing!\n");
|
||||
|
|
|
@ -86,7 +86,7 @@ static int fec_miiphy_read(const char *dev, uint8_t phyAddr, uint8_t regAddr,
|
|||
/*
|
||||
* wait for the related interrupt
|
||||
*/
|
||||
start = get_timer_masked();
|
||||
start = get_timer(0);
|
||||
while (!(readl(&fec->eth->ievent) & FEC_IEVENT_MII)) {
|
||||
if (get_timer(start) > (CONFIG_SYS_HZ / 1000)) {
|
||||
printf("Read MDIO failed...\n");
|
||||
|
@ -138,7 +138,7 @@ static int fec_miiphy_write(const char *dev, uint8_t phyAddr, uint8_t regAddr,
|
|||
/*
|
||||
* wait for the MII interrupt
|
||||
*/
|
||||
start = get_timer_masked();
|
||||
start = get_timer(0);
|
||||
while (!(readl(&fec->eth->ievent) & FEC_IEVENT_MII)) {
|
||||
if (get_timer(start) > (CONFIG_SYS_HZ / 1000)) {
|
||||
printf("Write MDIO failed...\n");
|
||||
|
@ -189,7 +189,7 @@ static int miiphy_wait_aneg(struct eth_device *dev)
|
|||
/*
|
||||
* Wait for AN completion
|
||||
*/
|
||||
start = get_timer_masked();
|
||||
start = get_timer(0);
|
||||
do {
|
||||
if (get_timer(start) > (CONFIG_SYS_HZ * 5)) {
|
||||
printf("%s: Autonegotiation timeout\n", dev->name);
|
||||
|
|
|
@ -81,9 +81,10 @@ static unsigned int na_mii_read (int reg)
|
|||
|
||||
static int na_mii_poll_busy (void)
|
||||
{
|
||||
ulong start;
|
||||
/* arm simple, non interrupt dependent timer */
|
||||
reset_timer_masked ();
|
||||
while (get_timer_masked () < NA_MII_POLL_BUSY_DELAY) {
|
||||
start = get_timer(0));
|
||||
while (get_timer(start) < NA_MII_POLL_BUSY_DELAY) {
|
||||
if (!(GET_EADDR (NETARM_ETH_MII_IND) & NETARM_ETH_MIII_BUSY)) {
|
||||
return 1;
|
||||
}
|
||||
|
@ -164,19 +165,20 @@ static unsigned int na_mii_check_speed (void)
|
|||
static int reset_eth (void)
|
||||
{
|
||||
int pt;
|
||||
ulong start;
|
||||
|
||||
na_get_mac_addr ();
|
||||
pt = na_mii_identify_phy ();
|
||||
|
||||
/* reset the phy */
|
||||
na_mii_write (MII_PHY_CONTROL, 0x8000);
|
||||
reset_timer_masked ();
|
||||
while (get_timer_masked () < NA_MII_NEGOTIATE_DELAY) {
|
||||
start = get_timer(0);
|
||||
while (get_timer(start) < NA_MII_NEGOTIATE_DELAY) {
|
||||
if ((na_mii_read (MII_PHY_STATUS) & 0x8000) == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (get_timer_masked () >= NA_MII_NEGOTIATE_DELAY)
|
||||
if (get_timer(start) >= NA_MII_NEGOTIATE_DELAY)
|
||||
printf ("phy reset timeout\n");
|
||||
|
||||
/* set the PCS reg */
|
||||
|
|
Loading…
Reference in a new issue