Commit 400ab719 authored by wdenk's avatar wdenk

Fix problems with CMC_PU2 flash driver.

parent 08f27278
...@@ -335,11 +335,11 @@ int flash_erase (flash_info_t *info, int s_first, int s_last) ...@@ -335,11 +335,11 @@ int flash_erase (flash_info_t *info, int s_first, int s_last)
if (l_sect < 0) if (l_sect < 0)
goto DONE; goto DONE;
start = get_timer (0); reset_timer_masked ();
last = start; last = start;
addr = (vu_short *)(info->start[l_sect]); addr = (vu_short *)(info->start[l_sect]);
while ((addr[0] & 0x0080) != 0x0080) { while ((addr[0] & 0x0080) != 0x0080) {
if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) { if ((now = get_timer_masked ()) > CFG_FLASH_ERASE_TOUT) {
printf ("Timeout\n"); printf ("Timeout\n");
return 1; return 1;
} }
...@@ -394,6 +394,7 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt) ...@@ -394,6 +394,7 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
while (cnt >= 2) { while (cnt >= 2) {
data = *((vu_short *)src); data = *((vu_short *)src);
if ((rc = write_word_amd(info, (vu_short *)wp, data)) != 0) { if ((rc = write_word_amd(info, (vu_short *)wp, data)) != 0) {
printf ("write_buff 1: write_word_amd() rc=%d\n", rc);
return (rc); return (rc);
} }
src += 2; src += 2;
...@@ -402,13 +403,13 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt) ...@@ -402,13 +403,13 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
} }
if (cnt == 0) { if (cnt == 0) {
return (0); return (ERR_OK);
} }
if (cnt == 1) { if (cnt == 1) {
data = (*((volatile u8 *) src)) | (*((volatile u8 *) (wp + 1)) data = (*((volatile u8 *) src)) | (*((volatile u8 *) (wp + 1)) << 8);
<< 8);
if ((rc = write_word_amd(info, (vu_short *)wp, data)) != 0) { if ((rc = write_word_amd(info, (vu_short *)wp, data)) != 0) {
printf ("write_buff 1: write_word_amd() rc=%d\n", rc);
return (rc); return (rc);
} }
src += 1; src += 1;
...@@ -455,11 +456,11 @@ static int write_word_amd (flash_info_t *info, vu_short *dest, ushort data) ...@@ -455,11 +456,11 @@ static int write_word_amd (flash_info_t *info, vu_short *dest, ushort data)
if (flag) if (flag)
enable_interrupts(); enable_interrupts();
start = get_timer (0); reset_timer_masked ();
/* data polling for D7 */ /* data polling for D7 */
while ((*dest & 0x0080) != (data & 0x0080)) { while ((*dest & 0x0080) != (data & 0x0080)) {
if (get_timer(start) > CFG_FLASH_WRITE_TOUT) { if (get_timer_masked () > CFG_FLASH_WRITE_TOUT) {
*dest = 0x00F0; /* reset bank */ *dest = 0x00F0; /* reset bank */
return (1); return (1);
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment