projects
/
fw
/
openocd
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Compilation Warnings on OS X 10.5
[fw/openocd]
/
src
/
flash
/
nor
/
lpc2900.c
diff --git
a/src/flash/nor/lpc2900.c
b/src/flash/nor/lpc2900.c
index 0b42d48c2fd02ca3bcbbd62d147d81d2b66bd061..7bb9f141b28a9310b327b180ae13ca5b0a72753a 100644
(file)
--- a/
src/flash/nor/lpc2900.c
+++ b/
src/flash/nor/lpc2900.c
@@
-26,7
+26,7
@@
#include "imp.h"
#include <helper/binarybuffer.h>
#include <target/algorithm.h>
#include "imp.h"
#include <helper/binarybuffer.h>
#include <target/algorithm.h>
-#include <target/arm
v4_5
.h>
+#include <target/arm.h>
#include <target/image.h>
#include <target/image.h>
@@
-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.
* The driver will not load if the chipid doesn't match the expected
/**
* Holds the value read from CHIPID register.
* The driver will not load if the chipid doesn't match the expected
@@
-179,7
+184,7
@@
static uint32_t lpc2900_run_bist128(struct flash_bank *bank,
uint32_t addr_from, uint32_t addr_to,
uint32_t (*signature)[4] );
static uint32_t lpc2900_address2sector(struct flash_bank *bank, uint32_t offset);
uint32_t addr_from, uint32_t addr_to,
uint32_t (*signature)[4] );
static uint32_t lpc2900_address2sector(struct flash_bank *bank, uint32_t offset);
-static uint32_t lpc2900_calc_tr(
uint32_t clock, uint32_t time
);
+static uint32_t lpc2900_calc_tr(
uint32_t clock_var, uint32_t time_var
);
/*********************** Helper functions **************************/
/*********************** Helper functions **************************/
@@
-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;
}
@@
-306,39
+311,39
@@
static uint32_t lpc2900_read_security_status( struct flash_bank *bank )
* a protected sector!
*/
int sector;
* a protected sector!
*/
int sector;
- int index;
+ int index
_t
;
for( sector = 0; sector < bank->num_sectors; sector++ )
{
/* Convert logical sector number to physical sector number */
if( sector <= 4 )
{
for( sector = 0; sector < bank->num_sectors; sector++ )
{
/* Convert logical sector number to physical sector number */
if( sector <= 4 )
{
- index = sector + 11;
+ index
_t
= sector + 11;
}
else if( sector <= 7 )
{
}
else if( sector <= 7 )
{
- index = sector + 27;
+ index
_t
= sector + 27;
}
else
{
}
else
{
- index = sector - 8;
+ index
_t
= sector - 8;
}
bank->sectors[sector].is_protected = -1;
if (
}
bank->sectors[sector].is_protected = -1;
if (
- (iss_secured_field[index][0] == 0x00000000) &&
- (iss_secured_field[index][1] == 0x00000000) &&
- (iss_secured_field[index][2] == 0x00000000) &&
- (iss_secured_field[index][3] == 0x00000000) )
+ (iss_secured_field[index
_t
][0] == 0x00000000) &&
+ (iss_secured_field[index
_t
][1] == 0x00000000) &&
+ (iss_secured_field[index
_t
][2] == 0x00000000) &&
+ (iss_secured_field[index
_t
][3] == 0x00000000) )
{
bank->sectors[sector].is_protected = 1;
}
if (
{
bank->sectors[sector].is_protected = 1;
}
if (
- (iss_secured_field[index][0] == 0xFFFFFFFF) &&
- (iss_secured_field[index][1] == 0xFFFFFFFF) &&
- (iss_secured_field[index][2] == 0xFFFFFFFF) &&
- (iss_secured_field[index][3] == 0xFFFFFFFF) )
+ (iss_secured_field[index
_t
][0] == 0xFFFFFFFF) &&
+ (iss_secured_field[index
_t
][1] == 0xFFFFFFFF) &&
+ (iss_secured_field[index
_t
][2] == 0xFFFFFFFF) &&
+ (iss_secured_field[index
_t
][3] == 0xFFFFFFFF) )
{
bank->sectors[sector].is_protected = 0;
}
{
bank->sectors[sector].is_protected = 0;
}
@@
-507,16
+512,14
@@
static int lpc2900_write_index_page( struct flash_bank *bank,
* @param clock System clock in Hz
* @param time Program/erase time in µs
*/
* @param clock System clock in Hz
* @param time Program/erase time in µs
*/
-static uint32_t lpc2900_calc_tr( uint32_t clock
, uint32_t time
)
+static uint32_t lpc2900_calc_tr( uint32_t clock
_var, uint32_t time_var
)
{
/* ((time[µs]/1e6) * f[Hz]) + 511
* FPTR.TR = -------------------------------
* 512
{
/* ((time[µs]/1e6) * f[Hz]) + 511
* FPTR.TR = -------------------------------
* 512
- *
- * The result is the
*/
*/
- uint32_t tr_val = (uint32_t)((((time
/ 1e6) * clock
) + 511.0) / 512.0);
+ uint32_t tr_val = (uint32_t)((((time
_var / 1e6) * clock_var
) + 511.0) / 512.0);
return tr_val;
}
return tr_val;
}
@@
-951,45
+954,49
@@
COMMAND_HANDLER(lpc2900_handle_secure_jtag_command)
static const struct command_registration lpc2900_exec_command_handlers[] = {
{
.name = "signature",
static const struct command_registration lpc2900_exec_command_handlers[] = {
{
.name = "signature",
- .handler =
&
lpc2900_handle_signature_command,
+ .handler = lpc2900_handle_signature_command,
.mode = COMMAND_EXEC,
.mode = COMMAND_EXEC,
- .usage = "
<bank>
",
- .help = "
print device signature of flash bank
",
+ .usage = "
bank_id
",
+ .help = "
Calculate and display signature of flash bank.
",
},
{
.name = "read_custom",
},
{
.name = "read_custom",
- .handler =
&
lpc2900_handle_read_custom_command,
+ .handler = lpc2900_handle_read_custom_command,
.mode = COMMAND_EXEC,
.mode = COMMAND_EXEC,
- .usage = "<bank> <filename>",
- .help = "read customer information from index sector to file",
+ .usage = "bank_id filename",
+ .help = "Copies 912 bytes of customer information "
+ "from index sector into file.",
},
{
.name = "password",
},
{
.name = "password",
- .handler =
&
lpc2900_handle_password_command,
+ .handler = lpc2900_handle_password_command,
.mode = COMMAND_EXEC,
.mode = COMMAND_EXEC,
- .usage = "
<bank> <password>
",
- .help = "
enter password to enable 'dangerous' options
",
+ .usage = "
bank_id password
",
+ .help = "
Enter fixed password to enable 'dangerous' options.
",
},
{
.name = "write_custom",
},
{
.name = "write_custom",
- .handler =
&
lpc2900_handle_write_custom_command,
+ .handler = lpc2900_handle_write_custom_command,
.mode = COMMAND_EXEC,
.mode = COMMAND_EXEC,
- .usage = "<bank> <filename> [<type>]",
- .help = "write customer info from file to index sector",
+ .usage = "bank_id filename ('bin'|'ihex'|'elf'|'s19')",
+ .help = "Copies 912 bytes of customer info from file "
+ "to index sector.",
},
{
.name = "secure_sector",
},
{
.name = "secure_sector",
- .handler =
&
lpc2900_handle_secure_sector_command,
+ .handler = lpc2900_handle_secure_sector_command,
.mode = COMMAND_EXEC,
.mode = COMMAND_EXEC,
- .usage = "<bank> <first> <last>",
- .help = "activate sector security for a range of sectors",
+ .usage = "bank_id first_sector last_sector",
+ .help = "Activate sector security for a range of sectors. "
+ "It will be effective after a power cycle.",
},
{
.name = "secure_jtag",
},
{
.name = "secure_jtag",
- .handler =
&
lpc2900_handle_secure_jtag_command,
+ .handler = lpc2900_handle_secure_jtag_command,
.mode = COMMAND_EXEC,
.mode = COMMAND_EXEC,
- .usage = "<bank> <level>",
- .help = "activate JTAG security",
+ .usage = "bank_id",
+ .help = "Disable the JTAG port. "
+ "It will be effective after a power cycle.",
},
COMMAND_REGISTRATION_DONE
};
},
COMMAND_REGISTRATION_DONE
};
@@
-1046,6
+1053,7
@@
FLASH_BANK_COMMAND_HANDLER(lpc2900_flash_bank_command)
/* Chip ID will be obtained by probing the device later */
lpc2900_info->chipid = 0;
/* Chip ID will be obtained by probing the device later */
lpc2900_info->chipid = 0;
+ lpc2900_info->is_probed = false;
return ERROR_OK;
}
return ERROR_OK;
}
@@
-1284,7
+1292,7
@@
static int lpc2900_write(struct flash_bank *bank, uint8_t *buffer,
reduced size if that fails. */
struct working_area *warea;
uint32_t buffer_size = lpc2900_info->max_ram_block - 1 * KiB;
reduced size if that fails. */
struct working_area *warea;
uint32_t buffer_size = lpc2900_info->max_ram_block - 1 * KiB;
- while( (retval = target_alloc_working_area(target,
+ while( (retval = target_alloc_working_area
_try
(target,
buffer_size + target_code_size,
&warea)) != ERROR_OK )
{
buffer_size + target_code_size,
&warea)) != ERROR_OK )
{
@@
-1302,7
+1310,7
@@
static int lpc2900_write(struct flash_bank *bank, uint8_t *buffer,
if( warea )
{
struct reg_param reg_params[5];
if( warea )
{
struct reg_param reg_params[5];
- struct arm
v4_5
_algorithm armv4_5_info;
+ struct arm_algorithm armv4_5_info;
/* We can use target mode. Download the algorithm. */
retval = target_write_buffer( target,
/* We can use target mode. Download the algorithm. */
retval = target_write_buffer( target,
@@
-1361,7
+1369,7
@@
static int lpc2900_write(struct flash_bank *bank, uint8_t *buffer,
this_buffer = buffer;
/* Make sure we stop at the next secured sector */
this_buffer = buffer;
/* Make sure we stop at the next secured sector */
-
int
sector = start_sector + 1;
+ sector = start_sector + 1;
while( sector < bank->num_sectors )
{
/* Secured? */
while( sector < bank->num_sectors )
{
/* Secured? */
@@
-1423,9
+1431,9
@@
static int lpc2900_write(struct flash_bank *bank, uint8_t *buffer,
buf_set_u32(reg_params[4].value, 0, 32, FPTR_EN_T | prog_time);
/* Execute algorithm, assume breakpoint for last instruction */
buf_set_u32(reg_params[4].value, 0, 32, FPTR_EN_T | prog_time);
/* Execute algorithm, assume breakpoint for last instruction */
- armv4_5_info.common_magic = ARM
V4_5
_COMMON_MAGIC;
- armv4_5_info.core_mode = ARM
V4_5
_MODE_SVC;
- armv4_5_info.core_state = ARM
V4_5
_STATE_ARM;
+ armv4_5_info.common_magic = ARM_COMMON_MAGIC;
+ armv4_5_info.core_mode = ARM_MODE_SVC;
+ armv4_5_info.core_state = ARM_STATE_ARM;
retval = target_run_algorithm(target, 0, NULL, 5, reg_params,
(warea->address) + buffer_size,
retval = target_run_algorithm(target, 0, NULL, 5, reg_params,
(warea->address) + buffer_size,
@@
-1550,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,
- * because then we will have already successfully probed the device.
- */
- if (lpc2900_info->chipid == EXPECTED_CHIPID)
+ /* We want to do this only once. */
+ if (lpc2900_info->is_probed)
{
return ERROR_OK;
}
{
return ERROR_OK;
}
@@
-1632,7
+1638,11
@@
static int lpc2900_probe(struct flash_bank *bank)
else if ( package_code == 4 )
{
/* 144-pin package */
else if ( package_code == 4 )
{
/* 144-pin package */
- if ( (bank->size == 512*KiB) && (feat3 == 0xFFFFFCF0) )
+ if ( (bank->size == 256*KiB) && (feat3 == 0xFFFFFFE9) )
+ {
+ lpc2900_info->target_name = "LPC2926";
+ }
+ else if ( (bank->size == 512*KiB) && (feat3 == 0xFFFFFCF0) )
{
lpc2900_info->target_name = "LPC2917/01";
}
{
lpc2900_info->target_name = "LPC2917/01";
}
@@
-1666,7
+1676,11
@@
static int lpc2900_probe(struct flash_bank *bank)
if ( !found )
{
if ( !found )
{
- LOG_WARNING("Unknown LPC29xx derivative");
+ LOG_WARNING("Unknown LPC29xx derivative"
+ " (FEATx="
+ "%08" PRIx32 ":%08" PRIx32 ":%08" PRIx32 ":%08" PRIx32 ")",
+ feat0, feat1, feat2, feat3
+ );
return ERROR_FLASH_OPERATION_FAILED;
}
return ERROR_FLASH_OPERATION_FAILED;
}
@@
-1719,6
+1733,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 */
if ( lpc2900_read_security_status(bank) != ERROR_OK )
{
/* Read sector security status */
if ( lpc2900_read_security_status(bank) != ERROR_OK )
{
@@
-1826,6
+1842,7
@@
struct flash_driver lpc2900_flash =
.erase = lpc2900_erase,
.protect = lpc2900_protect,
.write = lpc2900_write,
.erase = lpc2900_erase,
.protect = lpc2900_protect,
.write = lpc2900_write,
+ .read = default_flash_read,
.probe = lpc2900_probe,
.auto_probe = lpc2900_probe,
.erase_check = lpc2900_erase_check,
.probe = lpc2900_probe,
.auto_probe = lpc2900_probe,
.erase_check = lpc2900_erase_check,