Manufacturing Firmware

Implementation Guidelines

  1. Implement test cases as stand-alone libraries in the lib folder.
  2. Each manufacturing test should have a stand-alone functional test to enable test execution accross various targets (FPGA, DV, Silicon). All functional tests use the *_functest.c suffix.
  3. Consider using baseline OTP images that reflect the status of the device before running the manufacturing test, aiming for reproduceability in silicon targets. See the provisioning_functest Bazel target as an example.
  4. Avoid all use of assertions in manufacturing test cases. The test must be able to serialize the test result to the host. This enables the host to aggregate metrics across devices.

Manufacturing Stages

The following section describes the EarlGrey manufacturing stages with respect to the state of OTP. See //hw/ip/otp_ctrl/data/earlgrey_a0_skus/sival_bringup/BUILD for more details.

MANUF_EMPTY

The MANUF_EMPTY represents the initial state of OTP excluding the life cycle partition.

MANUF_INITIALIZED

In the MANUF_INITIALIZED state the SECRET0 partition is configured to enable device transitions between test_unlock and test_locked states, as well as to transition out of test_unlock into either dev, prod, or prod_end state.

MANUF_INDIVIDUALIZED

In the MANUF_INDIVIDUALIZED state the HW_CFG0, CREATOR_SW and OWNER_SW OTP partitions are configured. This state also includes the OTP configuration performed in the MANUF_INITIALIZED state.

MANUF_PERSONALIZED

The MANUF_PERSONALIZED OTP profile configures the SECRET1 and SECRET2 partitions. This state also includes the OTP configuration performed in the MANUF_INDIVIDUALIZED state.

OTP Partition versus Life Cycle Stages

Partition / ManufEMPTYINITIALIZEDINDIVIDUALIZEDPERSONALIZED
HW_CFG0YY
CREATOR_SW_CFGYY
OWNER_SW_CFGYY
SECRET0YYY
SECRET1Y
SECRET2Y

Life Cycle versus Manufacturing Stages

Life Cycle / ManufEMPTYINITIALIZEDINDIVIDUALIZEDPERSONALIZED
RAWY
TEST_UNLOCKED0YY
TEST_UNLOCKED{1-7}YY
TEST_LOCKED{0-7}Y
DEVYY
PRODYY
PROD_ENDYY
RMAYY