nds32: Use DMA to access memory as no DCache

As GDB uses file-I/O protocol to access memory, use DMA to access
if no DCache.  This commit improves the performance of Andes
Virtual Hosting.

Change-Id: I36bb2154b9f497fc4237625836cf8c7115330a60
Signed-off-by: Hsiangkai Wang <hsiangkai@gmail.com>
Reviewed-on: http://openocd.zylin.com/1580
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
This commit is contained in:
Hsiangkai Wang 2013-07-11 10:08:15 +08:00 committed by Spencer Oliver
parent 586575c9dc
commit 18c40eb9e5
1 changed files with 13 additions and 7 deletions

View File

@ -555,19 +555,25 @@ int nds32_v3_write_buffer(struct target *target, uint32_t address,
return ERROR_FAIL; return ERROR_FAIL;
if (nds32->hit_syscall) { if (nds32->hit_syscall) {
/* Use bus mode to access memory during virtual hosting */
struct aice_port_s *aice = target_to_aice(target); struct aice_port_s *aice = target_to_aice(target);
enum nds_memory_access origin_access_channel; enum nds_memory_access origin_access_channel;
int result;
origin_access_channel = memory->access_channel; origin_access_channel = memory->access_channel;
/* If target has no cache, use BUS mode to access memory. */
if ((memory->dcache.line_size == 0)
|| (memory->dcache.enable == false)) {
/* There is no Dcache or Dcache is disabled. */
memory->access_channel = NDS_MEMORY_ACC_BUS; memory->access_channel = NDS_MEMORY_ACC_BUS;
aice_memory_access(aice, NDS_MEMORY_ACC_BUS); aice_memory_access(aice, NDS_MEMORY_ACC_BUS);
}
int result;
result = nds32_gdb_fileio_write_memory(nds32, address, size, buffer); result = nds32_gdb_fileio_write_memory(nds32, address, size, buffer);
memory->access_channel = origin_access_channel; if (NDS_MEMORY_ACC_CPU == origin_access_channel) {
aice_memory_access(aice, origin_access_channel); memory->access_channel = NDS_MEMORY_ACC_CPU;
aice_memory_access(aice, NDS_MEMORY_ACC_CPU);
}
return result; return result;
} }