LPC2900: Avoid false positive reprobing if first probing fails

This commit is contained in:
Rolf Meeser 2010-11-27 23:09:59 +01:00 committed by Øyvind Harboe
parent 6356604382
commit 1bd87f5dba

View File

@ -131,6 +131,11 @@
*/ */
struct lpc2900_flash_bank struct lpc2900_flash_bank
{ {
/**
* This flag is set when the device has been successfully probed.
*/
bool is_probed;
/** /**
* Holds the value read from CHIPID register. * Holds the value read from CHIPID register.
* The driver will not load if the chipid doesn't match the expected * The driver will not load if the chipid doesn't match the expected
@ -255,7 +260,7 @@ static uint32_t lpc2900_is_ready( struct flash_bank *bank )
{ {
struct lpc2900_flash_bank *lpc2900_info = bank->driver_priv; struct lpc2900_flash_bank *lpc2900_info = bank->driver_priv;
if( lpc2900_info->chipid != EXPECTED_CHIPID ) if( !lpc2900_info->is_probed )
{ {
return ERROR_FLASH_BANK_NOT_PROBED; return ERROR_FLASH_BANK_NOT_PROBED;
} }
@ -512,8 +517,6 @@ static uint32_t lpc2900_calc_tr( uint32_t clock_var, uint32_t time_var )
/* ((time[µs]/1e6) * f[Hz]) + 511 /* ((time[µs]/1e6) * f[Hz]) + 511
* FPTR.TR = ------------------------------- * FPTR.TR = -------------------------------
* 512 * 512
*
* The result is the
*/ */
uint32_t tr_val = (uint32_t)((((time_var / 1e6) * clock_var) + 511.0) / 512.0); uint32_t tr_val = (uint32_t)((((time_var / 1e6) * clock_var) + 511.0) / 512.0);
@ -1050,6 +1053,7 @@ FLASH_BANK_COMMAND_HANDLER(lpc2900_flash_bank_command)
/* Chip ID will be obtained by probing the device later */ /* Chip ID will be obtained by probing the device later */
lpc2900_info->chipid = 0; lpc2900_info->chipid = 0;
lpc2900_info->is_probed = false;
return ERROR_OK; return ERROR_OK;
} }
@ -1554,10 +1558,8 @@ static int lpc2900_probe(struct flash_bank *bank)
return ERROR_TARGET_NOT_HALTED; return ERROR_TARGET_NOT_HALTED;
} }
/* We want to do this only once. Check if we already have a valid CHIPID, /* We want to do this only once. */
* because then we will have already successfully probed the device. if (lpc2900_info->is_probed)
*/
if (lpc2900_info->chipid == EXPECTED_CHIPID)
{ {
return ERROR_OK; return ERROR_OK;
} }
@ -1723,6 +1725,8 @@ static int lpc2900_probe(struct flash_bank *bank)
offset += bank->sectors[i].size; offset += bank->sectors[i].size;
} }
lpc2900_info->is_probed = true;
/* Read sector security status */ /* Read sector security status */
if ( lpc2900_read_security_status(bank) != ERROR_OK ) if ( lpc2900_read_security_status(bank) != ERROR_OK )
{ {