lowRISC / lowRISC/opentitan

[sw,dv] Backdoor write from DV (`sw_symbol_backdoor_overwrite`) does not work for main SRAM

Open
#23,926 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Component:DV Component:Software
Dominant language
SystemVerilog
Stars
3.6k
Forks
1.1k
Avg merge
2d 22h
Merged PRs (30d)
141

Description

When DV code calls `sw_symbol_backdoor_overwrite` on a symbol that is located in main SRAM (such as a non-`const` global variable declared in C code), the updated value of the variable might not be visible to SW running on Ibex.

One instance of this problem caused this spinwait in the `rv_dm_access_after_wakeup` test to not exit
https://github.com/lowRISC/opentitan/blob/33e462e0c0daa8ec60fabc6392f12ae6e5f403b8/sw/device/tests/rv_dm_access_after_wakeup.c#L95

When the variable is instead located in flash, which can be achieved by qualifying a global variable as `const` in C code, the value written by DV code is visible to SW code running on Ibex as expected. FPGA tests, on the other hand, need a variable that can be modified by SW and thus cannot be located in flash (which is write-protected by PMP), so a separate variable is needed (see [comment below](https://github.com/lowRISC/opentitan/issues/23926#issuecomment-2210351157)).

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with sw/device/tests/rv_dm_access_after_wakeup.c around the spinwait and trace how sw_symbol_backdoor_overwrite handles symbols in main SRAM versus flash. Reproduce the failure in the DV test, then verify that a main-SRAM backdoor write is visible to Ibex and that the FPGA case still has a SW-modifiable variable.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
embedded-iot, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.