+ /* FIX!!!! this should be cleaned up and made much more general. The
+ * plan is to write up and test on arm926ejs specifically and
+ * then generalize and clean up afterwards. */
+ if ((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 (arm926ejs->armv4_5_mmu.armv4_5_cache.d_u_cache_enabled)
+ {
+ /* flush and invalidate data cache
+ *
+ * MCR p15,0,p,c7,c10,1 - clean cache line using virtual address
+ *
+ */
+ retval = arm926ejs->write_cp15(target, 0, 1, 7, 10, address&~0x3);
+ if (retval != ERROR_OK)
+ return retval;
+ }
+
+ uint32_t pa;
+ retval = target->type->virt2phys(target, address, &pa);
+ if (retval != ERROR_OK)
+ return retval;
+
+ /* write directly to physical memory bypassing any read only MMU bits, etc. */
+ retval = armv4_5_mmu_write_physical(target, &arm926ejs->armv4_5_mmu, pa, size, count, buffer);
+ if (retval != ERROR_OK)
+ return retval;
+ } else
+ {
+ if ((retval = arm7_9_write_memory(target, address, size, count, buffer)) != ERROR_OK)
+ return retval;
+ }