Study continues but I have now managed to handle all flash operations by commenting out code in xscale.c - xscale_resume ( a few debug messages added to orig code svn 721).
Could it be xscale_update_vectors(…) is not correctly handled by the debug_handler code - this causes an rx timeout if I leave it in.
int xscale_resume(struct target_s *target, int current, u32 address, int handle_breakpoints, int debug_execution)
{
armv4_5_common_t *armv4_5 = target->arch_info;
xscale_common_t *xscale= armv4_5->arch_info;
breakpoint_t *breakpoint = target->breakpoints;
u32 current_pc;
int retval;
int i;
LOG_DEBUG("-");
if (target->state != TARGET_HALTED)
{
LOG_WARNING("target not halted");
return ERROR_TARGET_NOT_HALTED;
}
if (!debug_execution)
{
LOG_WARNING("freeing work areas");
target_free_all_working_areas(target);
}
/* update vector tables */
//LOG_WARNING("about to check set vectors");
//if ((retval=xscale_update_vectors(target))!=ERROR_OK)
//{
// LOG_WARNING("xscale_update_vectors fault");
// return retval;
//}
/* current = 1: continue on current pc, otherwise continue at <address> */
if (!current)
buf_set_u32(armv4_5->core_cache->reg_list[15].value, 0, 32, address);
This probably clobbers the handling of (gdb) code debug but at least I can restore my RedBoot code. I can debug code from linux with redboot running but that doesn’t help OpenOCD.
Meanwhile I will continue to investigate in the hope someone can put me out of my misery before I spend much more time on this.