Skip to content

Commit

Permalink
[ipgen,otp_ctrl] Change otp_ctrl to ipgen
Browse files Browse the repository at this point in the history
This commit is similar to other ipgen conversions, but changes a few
extra things because it needs to change the generation of otp memory
images. It merges the following 32 individual commits:

- Fix OtpMemMap exception message
- Improve handling template parameters by ipgen
  - Add doc and avoid redundant declaration.
- Move otp_ctrl images and mmap hjson out of hw/ip
  - The files that are top-specific moved to hw/top_earlgrey/data/otp
  - Adjust lots of paths to match this change
  - Move otp_ctrl_img.c.tpl to util/design/data since it is generic
  - Move the documentation of otp image generation to util/design/README.md
- Add otp_ctrl ipgen tpldesc hjson file
- Copy all hw/ip/otp_ctrl files to ip_templates
  - This is a straight copy with no changes to the files.
- Remove generated files
  - There is no use for files in ip_templates that will end up being
    generated.
- Move template files to their specific directories
- Turn a few more files into templates and fix paths
  - The template files are almost identical to the previous ones, except
    - they use ${topname} instead of a specific name
    - consecutive '#' are escaped so they are not considered hugo comments;
      for example, ### is replaced by ${"###"}
    - text bracketed by CMDGEN is removed
  - Adjust some relative paths to account for the change in the file locations.
  - Use {self_dir} to simplify some paths: it points to the location of the hjson
    file used to process the contents of a given file.
  - Fix some incorrect links to docs.
- Move top-specific items out of otp_ctrl_pkg
  - Move top-specific and implementation items to otp_ctrl_top_specific_pkg.
  - Create separate core files for both packages.
  - Adjust multiple sv files to use the right package.
  - Remove unused lc_otp_token_{req,rsp}_t.
- Fix core files
  - Change most core file into templates, use instance_vlnv, and declare
    a virtual target.
  - Change otp_ctrl_sim_cfg.hjson into a template since it uses a template
    fusesoc core.
- Change templates to use plain dictionaries
  - In practice this just removes redundant config token.
- Block building template targets
  - Add otp_ctrl in hw/ip_templates/BUILD all_files.
  - Template files are only intended for code generation, so it makes
    no sense to use them to build targets.
- Remove gen_comment from templates
  - The comment regarding generation for ipgen artifacts will be dealt
    with uniformly in the PR that fixes #25444.
  - Remove gen_comment from the tpldesc file.
- Add code in OtpMemMap to support ipgen
  - Create packages for design.lib and design.mubi.
  - gen-flash-img depends on modules that import topgen modules so it
    needs to have topgen in sys.path. This was not needed for some reason,
    perhaps the introduction of packages ends up requiring it.
- Place darjeeling mmap and img files under hw/top_darjeeling
  - This is similar to the new placement of the corresponding earlgrey files.
  - Fix the copyright banner.
- Block generation of dif artifacts
  - These artifacts need to be placed under top-specific directories.
  - When the sw side is ready for that, change the flow to create the
    per top generated files in the right place.
- Create otp_ctrl with ipgen
  - Create both earlgrey and darjeeling otp_ctrl with topgen.py via ipgen.
  - As a side effect some random constants are changed, since there
    are more requests for random numbers in topgen.
- Make util/design/gen-otp-mmap.py compatible with otp_ctrl ipgen
  - This tool may become obsolete, but it is best to upgrade it per
    the ipgen flow.
  - Comment out dif generation, and add a TODO with an explicit issue.
- Add mmap_def argument in bazel's otp_image_consts
- Remove unnecessary otp link in md file
  - This avoids the confusion about which top to refer to.
- Generate otp_ctrl difs via ipgen
- Fix top level core files
- Fix BUILD files
  - Use ip_autogen path for otp_ctrl_c_regs.
  - Use ip_autogen path for rust artifacts.
  - Change a few hw BUILD files for ipgen changes.
  - Fix reference to data/otp_ctrl.hjson in BUILD.tpl.
- Fix image handling in dvsim sim.mk
- Fix hjson files
- Fix md files
  - Describe references to top-specific otp_ctrl as examples.
- Fix BLOCKFILE
- Fix documentation collateral
- Fix englishbreakfast build
  - Remove otp_ctrl from top_englishbreakfast because it is not instantiated,
    but keep otp_ctrl_pkg since it shows in types of unconnected ports.
- Remove obsolete otp-mmap check from ci
- Remove legacy files
- Update hw/ip/README.md file

Fixes #25019

Signed-off-by: Guillermo Maturana <[email protected]>
  • Loading branch information
matutem committed Jan 10, 2025
1 parent 05929ea commit 80495aa
Show file tree
Hide file tree
Showing 489 changed files with 65,718 additions and 1,566 deletions.
29 changes: 14 additions & 15 deletions BLOCKFILE
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# If a PR changes a file that matches a pattern in this file it will be blocked
# from merged by CI. The patterns as glob-like patterns matched using python
# fnmatch. In particular note there is no special handling for '/' so '*' can
# match multiple directory levels e.g. 'this/is/*/a/path' matches both
# match multiple directory levels e.g. 'this/is/a/*/path' matches both
# 'this/is/a/foo/path' and 'this/is/a/foo/bar/path'.
#
# Anyone on the COMMITTERS list can authorize a change by adding a comment
Expand Down Expand Up @@ -49,7 +49,6 @@ hw/ip/keymgr/rtl/*
hw/ip/kmac/rtl/*
hw/ip/lc_ctrl/rtl/*
hw/ip/otbn/rtl/*
hw/ip/otp_ctrl/rtl/*
hw/ip/pattgen/rtl/*
hw/ip/prim/rtl/*
hw/ip/prim_generic/rtl/*
Expand Down Expand Up @@ -92,19 +91,19 @@ hw/ip/otbn/data/otbn.hjson
hw/ip/entropy_src/data/entropy_src.hjson
hw/ip/aes/data/aes.hjson
hw/ip/i2c/data/i2c.hjson
hw/ip/otp_ctrl/data/otp_ctrl.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_rma.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_dev.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_test_locked0.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_test_locked1.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_test_unlocked0.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_creator_sw_cfg.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_hw_cfg.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_raw.hjson
hw/ip/otp_ctrl/data/otp_ctrl_mmap.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_test_unlocked1.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_prod.hjson
hw/ip/otp_ctrl/data/otp_ctrl_img_test_unlocked2.hjson
hw/top_earlgrey/data/otp/otp_ctrl.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_rma.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_dev.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_test_locked0.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_test_locked1.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_test_unlocked0.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_creator_sw_cfg.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_hw_cfg.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_raw.hjson
hw/top_earlgrey/data/otp/otp_ctrl_mmap.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_test_unlocked1.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_prod.hjson
hw/top_earlgrey/data/otp/otp_ctrl_img_test_unlocked2.hjson
hw/ip/rv_core_ibex/data/rv_core_ibex.hjson
hw/ip/pwm/data/pwm.hjson
hw/ip/aon_timer/data/aon_timer.hjson
Expand Down
29 changes: 19 additions & 10 deletions SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@
- [Interface and Registers](./hw/top_earlgrey/ip_autogen/rv_plic/data/rv_plic.hjson)
- [Device Interface Functions](./sw/device/lib/dif/dif_rv_plic.h)
- [Checklist](./hw/top_earlgrey/ip_autogen/rv_plic/doc/checklist.md)
- [OTP Controller](./hw/top_earlgrey/ip_autogen/otp_ctrl/README.md)
- [Theory of Operation](./hw/top_earlgrey/ip_autogen/otp_ctrl/doc/theory_of_operation.md)
- [Design Verification](./hw/top_earlgrey/ip_autogen/otp_ctrl/dv/README.md)
- [Testplan](./hw/top_earlgrey/ip_autogen/otp_ctrl/data/otp_ctrl_testplan.hjson)
- [Programmer's Guide](./hw/top_earlgrey/ip_autogen/otp_ctrl/doc/programmers_guide.md)
- [Hardware Interfaces](./hw/top_earlgrey/ip_autogen/otp_ctrl/doc/interfaces.md)
- [Registers](./hw/top_earlgrey/ip_autogen/otp_ctrl/doc/registers.md)
- [Device Interface Functions](./sw/device/lib/dif/dif_otp_ctrl.h)
- [Checklist](./hw/top_earlgrey/ip_autogen/otp_ctrl/doc/checklist.md)
- [Sensor Control](./hw/top_earlgrey/ip/sensor_ctrl/README.md)
- [Theory of Operation](./hw/top_earlgrey/ip/sensor_ctrl/doc/theory_of_operation.md)
- [Programmer's Guide](./hw/top_earlgrey/ip/sensor_ctrl/doc/programmers_guide.md)
Expand All @@ -63,6 +72,15 @@

- [Top Darjeeling](./hw/top_darjeeling/README.md)
- [Datasheet](./hw/top_darjeeling/doc/datasheet.md)
- [OTP Controller](./hw/top_darjeeling/ip_autogen/otp_ctrl/README.md)
- [Theory of Operation](./hw/top_darjeeling/ip_autogen/otp_ctrl/doc/theory_of_operation.md)
- [Design Verification](./hw/top_darjeeling/ip_autogen/otp_ctrl/dv/README.md)
- [Testplan](./hw/top_darjeeling/ip_autogen/otp_ctrl/data/otp_ctrl_testplan.hjson)
- [Programmer's Guide](./hw/top_darjeeling/ip_autogen/otp_ctrl/doc/programmers_guide.md)
- [Hardware Interfaces](./hw/top_darjeeling/ip_autogen/otp_ctrl/doc/interfaces.md)
- [Registers](./hw/top_darjeeling/ip_autogen/otp_ctrl/doc/registers.md)
- [Device Interface Functions](./sw/device/lib/dif/dif_otp_ctrl.h)
- [Checklist](./hw/top_darjeeling/ip_autogen/otp_ctrl/doc/checklist.md)

- [Cores](./hw/doc/cores.md)
- [Ibex RISC-V Core Wrapper](./hw/ip/rv_core_ibex/README.md)
Expand Down Expand Up @@ -229,15 +247,6 @@
- [Registers](./hw/ip/lc_ctrl/doc/registers.md)
- [Device Interface Functions](./sw/device/lib/dif/dif_lc_ctrl.h)
- [Checklist](./hw/ip/lc_ctrl/doc/checklist.md)
- [OTP Controller](./hw/ip/otp_ctrl/README.md)
- [Theory of Operation](./hw/ip/otp_ctrl/doc/theory_of_operation.md)
- [Design Verification](./hw/ip/otp_ctrl/dv/README.md)
- [Testplan](./hw/ip/otp_ctrl/data/otp_ctrl_testplan.hjson)
- [Programmer's Guide](./hw/ip/otp_ctrl/doc/programmers_guide.md)
- [Hardware Interfaces](./hw/ip/otp_ctrl/doc/interfaces.md)
- [Registers](./hw/ip/otp_ctrl/doc/registers.md)
- [Device Interface Functions](./sw/device/lib/dif/dif_otp_ctrl.h)
- [Checklist](./hw/ip/otp_ctrl/doc/checklist.md)
- [Pattern Generator](./hw/ip/pattgen/README.md)
- [Theory of Operation](./hw/ip/pattgen/doc/theory_of_operation.md)
- [Design Verification](./hw/ip/pattgen/dv/README.md)
Expand Down Expand Up @@ -419,7 +428,7 @@
- [Device Software](./sw/device/README.md)
- [Build & Test Rules](./rules/opentitan/README.md)
- [FPGA Bitstreams](./hw/bitstream/README.md)
- [OTP Build and Test Infrastructure](./hw/ip/otp_ctrl/data/README.md)
- [OTP Preload Image Generator](./util/design/README.md#otp_preload_image_generator)
- [Device Libraries](./sw/device/lib/README.md)
- [DIF Library](./sw/device/lib/dif/README.md)
- [ADC Checklist](sw/device/lib/dif/dif_adc_ctrl.md)
Expand Down
1 change: 0 additions & 1 deletion ci/scripts/check-generated.sh
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ fi
destructive_cleanup

gen_hw_and_check_clean "Register headers" regs || bad=1
gen_hw_and_check_clean "OTP memory map" otp-mmap || bad=1
gen_hw_and_check_clean "LC state" lc-state-enc || bad=1

# This runs both top and cmdgen targets together since for ipgen
Expand Down
2 changes: 1 addition & 1 deletion ci/scripts/run-english-breakfast-verilator-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ set -e
./bazelisk.sh build \
--copt=-DOT_IS_ENGLISH_BREAKFAST_REDUCED_SUPPORT_FOR_INTERNAL_USE_ONLY_ \
--features=-rv32_bitmanip \
//sw/host/opentitantool //hw/ip/otp_ctrl/data:img_rma
//sw/host/opentitantool //hw/top_earlgrey/data/otp:img_rma

# Run the one test.
# This needs to be run outside the bazel sandbox, so we do not use `bazel run`
Expand Down
2 changes: 1 addition & 1 deletion doc/getting_started/setup_fpga.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ Specifically, you can build the [`//hw/bitstream/universal:splice`](https://gith
For example, to splice a CW310 bitstream with the mask ROM image and a specific OTP image, you can run
```sh
bazel build \
--//hw/bitstream/universal:otp=//hw/ip/otp_ctrl/data:img_dev \
--//hw/bitstream/universal:otp=//hw/top_earlgrey/data/otp:img_dev \
--//hw/bitstream/universal:env=//hw/top_earlgrey:fpga_cw310_rom_with_fake_keys \
//hw/bitstream/universal:splice
```
Expand Down
4 changes: 2 additions & 2 deletions doc/getting_started/setup_verilator.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ bazel test --test_tag_filters=verilator --test_output=streamed //sw/device/tests

You should expect to see something like:
```console
Invoking: sw/host/opentitantool/opentitantool --rcfile= --logging=info --interface=verilator --verilator-bin=hw/build.verilator_real/sim-verilator/Vchip_sim_tb --verilator-rom=sw/device/lib/testing/test_rom/test_rom_sim_verilator.scr.39.vmem --verilator-flash=sw/device/tests/uart_smoketest_prog_sim_verilator.64.scr.vmem --verilator-otp=hw/ip/otp_ctrl/data/img_rma.vmem console --exit-failure=(FAIL|FAULT).*\n --exit-success=PASS.*\n --timeout=3600s
[2022-06-09T08:08:16Z INFO opentitanlib::transport::verilator::subprocess] Spawning verilator: "hw/build.verilator_real/sim-verilator/Vchip_sim_tb" ["--meminit=rom,sw/device/lib/testing/test_rom/test_rom_sim_verilator.scr.39.vmem", "--meminit=flash,sw/device/tests/uart_smoketest_prog_sim_verilator.64.scr.vmem", "--meminit=otp,hw/ip/otp_ctrl/data/img_rma.vmem"]
Invoking: sw/host/opentitantool/opentitantool --rcfile= --logging=info --interface=verilator --verilator-bin=hw/build.verilator_real/sim-verilator/Vchip_sim_tb --verilator-rom=sw/device/lib/testing/test_rom/test_rom_sim_verilator.scr.39.vmem --verilator-flash=sw/device/tests/uart_smoketest_prog_sim_verilator.64.scr.vmem --verilator-otp=hw/top_earlgrey/data/otp/img_rma.vmem console --exit-failure=(FAIL|FAULT).*\n --exit-success=PASS.*\n --timeout=3600s
[2022-06-09T08:08:16Z INFO opentitanlib::transport::verilator::subprocess] Spawning verilator: "hw/build.verilator_real/sim-verilator/Vchip_sim_tb" ["--meminit=rom,sw/device/lib/testing/test_rom/test_rom_sim_verilator.scr.39.vmem", "--meminit=flash,sw/device/tests/uart_smoketest_prog_sim_verilator.64.scr.vmem", "--meminit=otp,hw/top_earlgrey/data/otp/img_rma.vmem"]
[2022-06-09T08:08:16Z INFO opentitanlib::transport::verilator::stdout] Simulation of OpenTitan Earl Grey
[2022-06-09T08:08:16Z INFO opentitanlib::transport::verilator::stdout] =================================
[2022-06-09T08:08:16Z INFO opentitanlib::transport::verilator::stdout]
Expand Down
1 change: 0 additions & 1 deletion doc/security/specs/secure_boot/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,6 @@ However, these are the requirements that the manifest format is required to supp
[key-manager]: ../../../../hw/ip/keymgr/README.md
[manifest-format]: ../../../../sw/device/silicon_creator/rom_ext/doc/manifest.md
[rom-epmp]: ../../../../sw/device/silicon_creator/rom/doc/memory_protection.md
[otp-mmap]: ../../../../hw/ip/otp_ctrl/README.md#direct-access-memory-map
[ot-flash]: #
[ot-unlock-flow]: #
[ownership-transfer]: ../ownership_transfer/README.md
Expand Down
4 changes: 2 additions & 2 deletions hw/bitstream/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ opentitan_test(
name = "individualize_sw_cfg_functest",
srcs = ["individualize_sw_cfg_functest.c"],
fpga = fpga_params(
otp = "//hw/ip/otp_ctrl/data/earlgrey_skus/sival:otp_img_test_unlocked0_manuf_initialized",
otp = "//hw/top_earlgrey/data/otp/sival_skus:otp_img_test_unlocked0_manuf_initialized",
tags = ["manuf"],
),
exec_env = {
Expand Down Expand Up @@ -98,4 +98,4 @@ opentitan_test(

## Read More

* [OTP Build and Test Infrastructure](../ip/otp_ctrl/data/README.md)
* [OTP Preload Image Generator](../../util/design/README.md#otp_preload_image_generator)
2 changes: 1 addition & 1 deletion hw/bitstream/vivado/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ _CW310_TESTROM = "//sw/device/lib/testing/test_rom:test_rom_fpga_cw310_scr_vmem"

_CW340_TESTROM = _CW310_TESTROM

_OTP_RMA = "//hw/ip/otp_ctrl/data:img_rma"
_OTP_RMA = "//hw/top_earlgrey/data/otp:img_rma"

_CW310_TESTROM_PATH = "{}/$(location {})".format(_PREFIX, _CW310_TESTROM)

Expand Down
1 change: 1 addition & 0 deletions hw/dv/sv/mem_bkdr_util/mem_bkdr_util.core
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ filesets:
- lowrisc:prim:cipher_pkg:0.1
- lowrisc:prim:secded:0.1
- lowrisc:ip:otp_ctrl_pkg:1.0
- lowrisc:ip_interfaces:otp_ctrl_top_specific_pkg
- lowrisc:ip_interfaces:flash_ctrl_pkg
- lowrisc:dv:digestpp_dpi
- lowrisc:ip:kmac_pkg
Expand Down
1 change: 0 additions & 1 deletion hw/dv/sv/mem_bkdr_util/otp_scrambler_pkg.sv
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
package otp_scrambler_pkg;

import uvm_pkg::*;
import otp_ctrl_reg_pkg::*;
import otp_ctrl_part_pkg::*;
import bus_params_pkg::*;

Expand Down
10 changes: 5 additions & 5 deletions hw/dv/tools/dvsim/sim.mk
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,13 @@ ifneq (${sw_images},)
echo "Building SW image \"$${bazel_label}\"."; \
bazel_airgapped_opts=""; \
bazel_opts="${sw_build_opts} --define DISABLE_VERILATOR_BUILD=true"; \
bazel_opts+=" --//hw/ip/otp_ctrl/data:img_seed=${seed}"; \
bazel_opts+=" --//util/design/data:img_seed=${seed}"; \
if [[ "${build_seed}" != "None" ]]; then \
bazel_opts+=" --//hw/ip/otp_ctrl/data:lc_seed=${build_seed}"; \
bazel_opts+=" --//hw/ip/otp_ctrl/data:otp_seed=${build_seed}"; \
bazel_opts+=" --//util/design/data:lc_seed=${build_seed}"; \
bazel_opts+=" --//util/design/data:otp_seed=${build_seed}"; \
fi; \
if [[ -n $${BAZEL_OTP_DATA_PERM_FLAG} ]]; then \
bazel_opts+=" --//hw/ip/otp_ctrl/data:data_perm=$${BAZEL_OTP_DATA_PERM_FLAG}"; \
bazel_opts+=" --//util/design/data:data_perm=$${BAZEL_OTP_DATA_PERM_FLAG}"; \
fi; \
if [[ $${OT_AIRGAPPED} != true ]]; then \
echo "Building \"$${bazel_label}\" on network connected machine."; \
Expand Down Expand Up @@ -165,7 +165,7 @@ ifneq (${sw_images},)
`# Bazel 6 cquery outputs repository targets in canonical format (@//blabla) whereas bazel 5 does not, ` \
`# so we use a custom starlark printer to remove in leading @ when needed.` \
--starlark:expr='str(target.label)[1:] if str(target.label).startswith("@//") else target.label'); do \
if [[ $$dep == //hw/ip/otp_ctrl/data* ]] || \
if [[ $$dep == //hw/top_*/ip_autogen/otp_ctrl/data* ]] || \
([[ $$dep != //hw* ]] && [[ $$dep != //util* ]] && [[ $$dep != //sw/host* ]]); then \
for artifact in $$($${bazel_cmd} cquery $${bazel_airgapped_opts} $${dep} \
--ui_event_filters=-info \
Expand Down
1 change: 0 additions & 1 deletion hw/ip/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ filegroup(
"//hw/ip/kmac:all_files",
"//hw/ip/lc_ctrl:all_files",
"//hw/ip/otbn:all_files",
"//hw/ip/otp_ctrl:all_files",
"//hw/ip/pattgen:all_files",
"//hw/ip/prim:all_files",
"//hw/ip/prim_generic:all_files",
Expand Down
2 changes: 0 additions & 2 deletions hw/ip/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
| [`lc_ctrl`] | Manages device life cycle states and transitions, and controls key manager, flash, OTP, and debug access |
| [`mbx`] | DOE mailbox for use as an integrated OpenTitan communication channel. |
| [`otbn`] | Programmable coprocessor for asymmetric cryptography with SCA and FI countermeasures |
| [`otp_ctrl`] | Interfaces integrated one-time programmable memory, supports scrambling, integrity and secure wipe |
| [`pattgen`] | Transmission of short time-dependent data patterns on two clock-parallel output channels |
| [`pwm`] | Transmission of pulse-width modulated output signals with adjustable duty cycle |
| [`rom_ctrl`] | Interfaces scrambled boot ROM with system bus and KMAC for initial health check after reset |
Expand Down Expand Up @@ -56,7 +55,6 @@
[`lc_ctrl`]: ./lc_ctrl/README.md
[`mbx`]: ./mbx/README.md
[`otbn`]: ./otbn/README.md
[`otp_ctrl`]: ./otp_ctrl/README.md
[`pattgen`]: ./pattgen/README.md
[`pwm`]: ./pwm/README.md
[`rom_ctrl`]: ./rom_ctrl/README.md
Expand Down
2 changes: 1 addition & 1 deletion hw/ip/lc_ctrl/doc/interfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ See also [power manager documentation](../../../top_earlgrey/ip_autogen/pwrmgr/R

#### OTP Interfaces

All interfaces to and from OTP are explained in detail in the [OTP Specification Document](../../otp_ctrl/README.md#life-cycle-interfaces).
All interfaces to and from OTP are explained in detail in the OTP Specification Document (for example, see [earlgrey's OTP specification](../../../top_earlgrey/ip_autogen/otp_ctrl/README.md#life-cycle-interfaces)).

#### KMAC Interface

Expand Down
Loading

0 comments on commit 80495aa

Please sign in to comment.