opentitan icon indicating copy to clipboard operation
opentitan copied to clipboard

[rom] Reading resistor straps should differentiate weak versus strong pulls

Open jettr opened this issue 2 years ago • 0 comments

If the ROM only performs a single read operation on the resistor strapping pins, then it will not be able to tell the difference between weak (e.g. 1M) and strong (e.g. 5.1k) pull resistors. This effectively eliminates the possibility of using the weak pulls values for the owner firmware if that aliases to a known ROM bootstrap combination.

https://github.com/lowRISC/opentitan/blob/2714197f3235f1737937ad20421a3f32ff4a7030/sw/device/silicon_creator/rom/bootstrap.c#L46

Right now there are 2 resistor straps combinations on IOC0, ICOC1, and ICO2:

SW_STRAP_BOOTSTRAP: Strong PUp, Strong PUp, Strong PUp

and

SW_STRAP_RMA_ENTRY: Strong PDown, Strong PUp, Strong PUp

However if Owner Firmware wants to use Weak PUp, Weak PUp, Weak PUp, then the ROM will incorrectly think that the SW_STRAP_BOOTSTRAP combination is getting triggered.

With 3 pins that should be able to detect 4 states, we should have a total of 4 ^ 3 = 64 available strapping combinations. If the ROM doesn't differentiate between strong and weak pulls, then the 2 out of 64 values it tries to reserve actually turn into to 16 out of the 64 that are unusable by the owner firmware.

It is entirely possible that I misread the code and this isn't a problem, but I definitely wanted to double check there won't be any conflicts between ROM strap values and our Owner Firmware strap values.

jettr avatar Feb 22 '24 17:02 jettr