.. _opentitan_earlgrey:

OpenTitan Earl Grey
###################

Overview
********

The OpenTitan Earl Grey chip is a low-power secure microcontroller that is
designed for several use cases requiring hardware security. The `OpenTitan
Github`_ page contains HDL code, utilities, and documentation relevant to the
chip.

Hardware
********

- RV32IMCB RISC-V "Ibex" core
- 128kB main SRAM
- Fixed-frequency and AON timers
- 32 x GPIO
- 4 x UART
- 3 x I2C
- 2 x SPI host
- 1 x SPI device
- Various security peripherals

Detailed specification is on the `OpenTitan Earl Grey Chip Datasheet`_.

Supported Features
==================

The ``opentitan_earlgrey`` board configuration is designed and tested to run on
the Earl Grey chip simulated in Verilator, a cycle-accurate HDL simulation tool.

+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component                    |
+===========+============+=====================================+
| NVIC      | on-chip    | nested vector interrupt controller  |
+-----------+------------+-------------------------------------+
| Timer     | on-chip    | RISC-V Machine Timer                |
+-----------+------------+-------------------------------------+
| UART      | on-chip    | serial port-polling                 |
+-----------+------------+-------------------------------------+
| SPI       | on-chip    | SPI host                            |
+-----------+------------+-------------------------------------+
| WDT       | on-chip    | Always-On Timer (Watchdog)          |
+-----------+------------+-------------------------------------+

Other hardware features are not yet supported on Zephyr porting.

Programming and Debugging
*************************

First, build and install Verilator as described in the `OpenTitan Verilator
Setup`_ guide .

Building and Flashing
=====================

Here is an example for building the :ref:`hello_world` application. The
following steps were tested on OpenTitan master branch @ 6a3c2e98.

.. zephyr-app-commands::
   :zephyr-app: samples/hello_world
   :board: opentitan_earlgrey
   :goals: build

The OpenTitan Vchip_sim_tb tool can take the Zephyr .elf as input and place it
in simulated flash. The OpenTitan test ROM will then run in simulation, read
the manifest header from simulated flash, and begin executing Zephyr from the
entry point.

.. code-block:: console

   $OT_HOME/bazel-bin/hw/build.verilator_real/sim-verilator/Vchip_sim_tb --verbose-mem-load \
   -r $OT_HOME/bazel-out/k8-fastbuild-ST-2cc462681f62/bin/sw/device/lib/testing/test_rom/test_rom_sim_verilator.39.scr.vmem \
   --meminit=otp,$OT_HOME/bazel-out/k8-fastbuild/bin/hw/ip/otp_ctrl/data/img_rma.24.vmem \
   --meminit=flash,$ZEPHYR_PATH/build/zephyr/zephyr.elf

UART output:

.. code-block:: console

   I00000 test_rom.c:135] Version: earlgrey_silver_release_v5-9599-g6a3c2e988, Build Date: 2023-01-17 16:02:09
   I00001 test_rom.c:237] Test ROM complete, jumping to flash (addr: 20000384)!
   *** Booting Zephyr OS build zephyr-v3.2.0-3494-gf0729b494b98 ***
   Hello World! opentitan_earlgrey

References
**********

.. target-notes::

.. _OpenTitan Earl Grey Chip Datasheet: https://opentitan.org/book/hw/top_earlgrey/doc/specification.html

.. _OpenTitan GitHub: https://github.com/lowRISC/opentitan

.. _OpenTitan Verilator Setup: https://opentitan.org/guides/getting_started/setup_verilator.html
