In arm920t_write_memory, how about imitate arm926ejs_write_memory? if (arm920t->armv4_5_mmu.mmu_enabled && (count == 1) && ((size==2) || (size==4))) { /* special case the handling of single word writes to bypass MMU * to allow implementation of breakpoints in memory marked read only * by MMU */ if (arm920t->armv4_5_mmu.armv4_5_cache.d_u_cache_enabled) { LOG_DEBUG("D-Cache enabled, flush and invalidate cache line"); /* MCR p15,0,Rd,c7,c10,2 */ retval = arm920t_write_cp15_interpreted(target, 0xee070f5e, 0x0, address); if (retval != ERROR_OK) return retval; }
uint32_t pa, cb, ap; int type, domain; pa = armv4_5_mmu_translate_va(target, &arm920t->armv4_5_mmu, address, &type, &cb, &domain, &ap); if (type == -1) return ERROR_OK; /* cacheable & bufferable means write-back region */ if (cb == 3) armv4_5_mmu_write_physical(target, &arm920t->armv4_5_mmu, pa, size, count, buffer); } else { if ((retval = arm7_9_write_memory(target, address, size, count, buffer)) != ERROR_OK) return retval; } About I-cache, should arm920t follows arm926ejs ? if (arm926ejs->armv4_5_mmu.armv4_5_cache.i_cache_enabled) { if (count <= 1) { /* invalidate ICache single entry with MVA */ arm926ejs->write_cp15(target, 0, 1, 7, 5, address); } else { /* invalidate ICache */ arm926ejs->write_cp15(target, 0, 0, 7, 5, address); } } 2009/11/3 Øyvind Harboe <oyvind.har...@zylin.com> > On Tue, Nov 3, 2009 at 2:15 PM, Dennis.Cheng <m8939...@gmail.com> wrote: > > Thanks. It works well :-). > > I've pushed the fix. > > I'm a little bit worried about being able to test the case where > a write to a cache line for a breakpoint. > > Here the code has to flush that cache line + invalidate the cache line. > > > -- > Øyvind Harboe > http://www.zylin.com/zy1000.html > ARM7 ARM9 ARM11 XScale Cortex > JTAG debugger and flash programmer >
_______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development