diff options
author | Palmer Dabbelt <palmer@dabbelt.com> | 2017-03-30 19:08:35 -0700 |
---|---|---|
committer | Palmer Dabbelt <palmer@dabbelt.com> | 2017-03-30 19:08:35 -0700 |
commit | 647e1b784d87ba0e3fd1591c189660695c2020b9 (patch) | |
tree | df906af0ea61be794aceef0a1a8066a38a08e8bd | |
parent | 91518871f19165f47cbffbef3de6a8af97f0f3b4 (diff) | |
download | riscv-openocd-647e1b784d87ba0e3fd1591c189660695c2020b9.zip riscv-openocd-647e1b784d87ba0e3fd1591c189660695c2020b9.tar.gz riscv-openocd-647e1b784d87ba0e3fd1591c189660695c2020b9.tar.bz2 |
Revert "riscv: Use write-1-to-clear for CMDERR, not write 0 to clear."
This reverts commit eb90a5e05e9c15d3832bc7109a6f80aa69d8e5ef.
-rw-r--r-- | src/target/riscv/riscv-013.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/target/riscv/riscv-013.c b/src/target/riscv/riscv-013.c index e82cb3d..1ca2f02 100644 --- a/src/target/riscv/riscv-013.c +++ b/src/target/riscv/riscv-013.c @@ -571,7 +571,7 @@ static int execute_abstract_command(struct target *target, uint32_t command) command, errors[get_field(abstractcs, DMI_ABSTRACTCS_CMDERR)], abstractcs); // Clear the error. - dmi_write(target, DMI_ABSTRACTCS, DMI_ABSTRACTCS_CMDERR); + dmi_write(target, DMI_ABSTRACTCS, 0); return ERROR_FAIL; } @@ -1886,6 +1886,7 @@ static int read_memory(struct target *target, uint32_t address, abstract_register_size(xlen(target)) | reg_number_to_no(S1)) != ERROR_OK) { return ERROR_FAIL; } + dmi_write(target, DMI_ABSTRACTCS, DMI_ABSTRACTCS_CMDERR); uint32_t abstractcs; for (uint32_t i = 0; i < count; i++) { @@ -1918,11 +1919,11 @@ static int read_memory(struct target *target, uint32_t address, } } dmi_write(target, DMI_ABSTRACTAUTO, 0); - abstractcs = dmi_read(target, DMI_ABSTRACTCS); + dmi_write(target, DMI_ABSTRACTCS, DMI_ABSTRACTCS_CMDERR); + abstractcs = dmi_read(target, DMI_ABSTRACTCS); unsigned cmderr = get_field(abstractcs, DMI_ABSTRACTCS_CMDERR); if (cmderr == CMDERR_BUSY) { - // Clear the error and wait longer. - dmi_write(target, DMI_ABSTRACTCS, DMI_ABSTRACTCS_CMDERR); + dmi_write(target, DMI_ABSTRACTCS, 0); increase_ac_busy_delay(target); } else if (cmderr) { LOG_ERROR("read_memory(): cmderr=%d", get_field(abstractcs, DMI_ABSTRACTCS_CMDERR)); @@ -2008,6 +2009,9 @@ static int write_memory(struct target *target, uint32_t address, AC_ACCESS_REGISTER_WRITE | AC_ACCESS_REGISTER_POSTEXEC | abstract_register_size(xlen(target)) | reg_number_to_no(S1), true); + scans_add_dmi_write(scans, DMI_ABSTRACTCS, + DMI_ABSTRACTCS_CMDERR, + false); scans_add_dmi_write(scans, DMI_ABSTRACTAUTO, 0x1 << DMI_ABSTRACTAUTO_AUTOEXECDATA_OFFSET, false); @@ -2026,7 +2030,7 @@ static int write_memory(struct target *target, uint32_t address, uint32_t abstractcs = dmi_read(target, DMI_ABSTRACTCS); unsigned cmderr = get_field(abstractcs, DMI_ABSTRACTCS_CMDERR); if (cmderr == CMDERR_BUSY) { - dmi_write(target, DMI_ABSTRACTCS, DMI_ABSTRACTCS_CMDERR); + dmi_write(target, DMI_ABSTRACTCS, 0); increase_ac_busy_delay(target); } else if (cmderr) { LOG_ERROR("write_memory: cmderr=%d", get_field(abstractcs, DMI_ABSTRACTCS_CMDERR)); |