Skip to content

Commit

Permalink
riscv_debug: Fixed an issue in riscv_hart_discover_triggers which i…
Browse files Browse the repository at this point in the history
…s triggered on WCH devices

This re-implements the fix from fubbed PR #1576 with thanks to mean00

Co-Authored-By: Rafael Graça Silva <rg-silva@criticalsoftware.com>
Co-Authored-By: dragonmux <git@dragonmux.network>
  • Loading branch information
dragonmux and rg-silva committed Nov 29, 2023
1 parent 2effd5f commit 5528118
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion src/target/riscv_debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,12 @@ static void riscv_hart_discover_triggers(riscv_hart_s *const hart)
riscv_csr_write(hart, RV_TRIG_SELECT | RV_CSR_FORCE_32_BIT, &trigger);
/* Try reading the trigger info */
uint32_t info = 0;
if (!riscv_csr_read(hart, RV_TRIG_INFO | RV_CSR_FORCE_32_BIT, &info)) {
/*
* If the read succeeds but info is still 0, assume we're talking to something like a WCH device
* which'll do this despite not actually implementing the tinfo register. Handle it the same as
* the read explicitly failing.
*/
if (!riscv_csr_read(hart, RV_TRIG_INFO | RV_CSR_FORCE_32_BIT, &info) || !info) {
/*
* If that fails, it's probably because the tinfo register isn't implemented, so read
* the tdata1 register instead and extract the type from the MSb and build the info bitset from that
Expand Down

0 comments on commit 5528118

Please sign in to comment.