void stellaris_set_flash_mode(flash_bank_t *bank,int mode);
u32 stellaris_wait_status_busy(flash_bank_t *bank, u32 waitbits, int timeout);
+int stellaris_read_part_info(struct flash_bank_s *bank);
+
flash_driver_t stellaris_flash =
{
.name = "stellaris",
* openocd command interface *
***************************************************************************/
+/* flash_bank stellaris <base> <size> 0 0 <target#>
+ */
int stellaris_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank)
{
stellaris_flash_bank_t *stellaris_info;
bank->base = 0x0;
bank->driver_priv = stellaris_info;
- stellaris_info->target_name ="Unknown target";
- stellaris_info->target = get_target_by_num(strtoul(args[5], NULL, 0));
- if (!stellaris_info->target)
- {
- ERROR("no target '%s' configured", args[5]);
- exit(-1);
- }
+ stellaris_info->target_name = "Unknown target";
/* part wasn't probed for info yet */
stellaris_info->did1 = 0;
u32 stellaris_get_flash_status(flash_bank_t *bank)
{
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
u32 fmc;
target_read_u32(target, FLASH_CONTROL_BASE|FLASH_FMC, &fmc);
void stellaris_read_clock_info(flash_bank_t *bank)
{
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
u32 rcc, pllcfg, sysdiv, usesysdiv, bypass, oscsrc;
unsigned long tmp, mainfreq;
void stellaris_set_flash_mode(flash_bank_t *bank,int mode)
{
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
u32 usecrl = (stellaris_info->mck_freq/1000000ul-1);
DEBUG("usecrl = %i",usecrl);
{
u32 fmc;
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
fmc = FMC_WRKEY | cmd;
target_write_u32(target, FLASH_CONTROL_BASE|FLASH_FMC, fmc);
int stellaris_read_part_info(struct flash_bank_s *bank)
{
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
u32 did0,did1, ver, fam, status;
int i;
int stellaris_erase_check(struct flash_bank_s *bank)
{
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
int i;
/* */
u32 status;
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
if (stellaris_info->did1 == 0)
{
int banknr;
u32 flash_fmc, flash_cris;
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
- if (stellaris_info->target->state != TARGET_HALTED)
+ if (bank->target->state != TARGET_HALTED)
{
return ERROR_TARGET_NOT_HALTED;
}
int lockregion;
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
- if (stellaris_info->target->state != TARGET_HALTED)
+ if (bank->target->state != TARGET_HALTED)
{
return ERROR_TARGET_NOT_HALTED;
}
int stellaris_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 wcount)
{
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
u32 buffer_size = 8192;
working_area_t *source;
working_area_t *write_algorithm;
int stellaris_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count)
{
stellaris_flash_bank_t *stellaris_info = bank->driver_priv;
- target_t *target = stellaris_info->target;
+ target_t *target = bank->target;
u32 dst_min_alignment, wcount, bytes_remaining = count;
u32 address = offset;
u32 fcr,flash_cris,flash_fmc;
DEBUG("(bank=%08X buffer=%08X offset=%08X count=%08X)",
bank, buffer, offset, count);
- if (stellaris_info->target->state != TARGET_HALTED)
+ if (bank->target->state != TARGET_HALTED)
{
return ERROR_TARGET_NOT_HALTED;
}