LPC2900: Avoid false positive reprobing if first probing fails
parent
6356604382
commit
1bd87f5dba
|
@ -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 )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue