blob: b60e3eabea6e4249c49c666e8ea1ef4db5bced2a [file] [log] [blame] [view]
# Test Boot ROM
The Boot ROM is a **testing-only** device image.
The [ROM](https://docs.opentitan.org/sw/device/silicon_creator/rom/docs/) is the reference implementation of the OpenTitan Secure Boot specification.
The boot ROM is always the first piece of code run in the system.
At the moment, it serves 2 functions:
* Bootstrap additional code if requested.
* Jump to embedded flash and begin execution.
## Bootstrap Overview
The boot ROM bootstrap function differs between Verilator, DV and FPGA.
In DV and in Verilator, embedded flash code can be backdoor loaded.
So, for most of the tests, the run times can be sped up by bypassing the code load.
However, both do support the bootstrap function and can be used similarly to the FPGA in loading code.
In DV, a subset of tests will indeed exercise the the bootstrap code paths since it is a system level usecase.
In FPGA, bootstrap is required and requested by an external host via GPIO.
Bootstrap can be requested by driving TAP\_STRAP0 (USB\_A18) and TAP\_STRAP1 (USB\_A19) to 0 and 1, respectively, and presenting strong pull-ups on all SW\_STRAP* pins (USB\_A15, USB\_A16, and USB\_A17).
If bootstrap is requested, the boot ROM initializes the SPI interface and flash controller.
OpenTitan uses a SPI Flash based bootstrap protocol and can be programmed using the `opentitantool`.
## Puppeteer Boot Rom
`Puppeteer` is a debug-only bootrom used to remotely control the Shodan hardware over a UART or similar byte-oriented port.