Skip to content

Releases: lowRISC/opentitan

Earlgrey-PROD.M6

17 Oct 17:48
Compare
Choose a tag to compare

The main goal of the Earlgrey-PROD.M6 milestone is to triage potential ECO candidates identified after Earlgrey-PROD-M5, and to implement any approved and final ECOs. With Earlgrey-PROD.M6, the physical design reached its final state for the production tapeout.

Since Earlgrey-PROD.M5, the following changes with direct silicon impact have been made:

  • The pull-down of the IOC8 pad used for sampling TAP strap 0 has been enabled at reset (#24604, #24624). This is to ensure the pad gets sampled as 0 unless driven to 1 from an external source.
  • To alleviate timing pressure, the scrambling of the main SRAM has been changed back to again use 2 PRINCE cipher half rounds (2 half rounds = 5 effective rounds) as in the engineering sample (#24447, #24378).
  • To enable timing closure, ECC related feedthrough paths in Ibex have been removed (#2206, #24403, #24383).
  • Readback errors inside the main and retention SRAM controllers are now always signaled as alerts (#24679, #24702)
  • The storage error output signals of the shadowed measurement control registers for the MAIN clock domain are now registered to avoid combinatorial glitches on those signals, thereby preventing potential CDC issues (#24622).
  • The sd_en_o output of both SPI_HOST instances got de-glitched to enable timing closure (#24501, #24500).
  • The ROM_EXT immutable section configuration in ROM has been fixed to work with address translation (#24415, #24417).

Earlgrey-PROD.M5

12 Aug 14:39
Compare
Choose a tag to compare

With the Earlgrey-PROD.M5 milestone, all hardware IP blocks and the Earlgrey top level have reached the final maturity state for the production tapeout. This includes a limited and final set of important RTL modifications. With Earlgrey-PROD.M5, the final ROM for the production tapeout has been released.

The main changes since Earlgrey-PROD.M4 are:

  • The version number of all hardware IP blocks got updated (#23969) to correctly reflect potential patches, minor and major version changes with respect to the engineering sample release (Earlgrey-M2.5.2-RC0). (This won’t be visible in silicon but in documentation.)
  • The error outputs for the prim_count (#24125) and the prim_esc_receiver (#24127) primitives are now registered to avoid combinatorial glitches on those signals, thereby preventing potential CDC issues.
  • The power-on reset pad is now configured with the pull-up setting enabled (#24124).
  • Ibex no longer incorrectly masks ECC checks from the register file after resolving load data hazards (#24021). This issue in the Ibex repository (lowRISC/Ibex#2188) has been raised and the corresponding RTL patch has been provided by Vincent Ulitzsch, Konrad Jansen, Niclas Kühnapfel (all TU Berlin - Security In Telecommunications), and Peter Deutsch (MIT).
  • RV_DM now correctly resets the TAP to the Test-Logic-Reset state (#24018).
  • ROM changes:
    • An additional, lightweight FI countermeasure has been added to the ECDSA-P256 sigverify routine of OTBN (#23921).
    • The HMAC driver no longer sends multiple Process commands to the hardware per message (#24030).

Earlgrey-PROD.M4

09 Aug 09:25
Compare
Choose a tag to compare

The Earlgrey-PROD.M4 milestone finalizes the RTL of the hardware IP blocks and the Earlgrey top level for the production tapeout. This includes the completion of area, timing, and power optimizations at RTL, inclusion of additional fault injection countermeasures that did not make it into M3, final I2C features additions, and several bug fixes. All hardware IP blocks as well as the top level are lint clean with the latest AscentLint version. With the Earlgrey-PROD.M4 milestone, the RTL got frozen.

The main changes since Earlgrey-PROD.M3 are:

  • The design got prepared for the adoption of technology-specific 2-flop synchronizer cells (#23512).
  • To support a smaller chip package for space-constrained applications, four additional I/O multiplexers have been added (#23201, #23356).
  • New control bits have been added to disable input drivers of pads for leakage control (#23042, #23107).
  • Related to AST, an unused pad got removed (#22995), test ports for the memory macros got added (#23531, #23547, #23718), and a DFT fix got implemented (#23588).
  • Upon reset, alerts inside SENSOR_CTRL are now enabled but configured as recoverable (#23152). During boot, firmware can change the configuration based on OTP bits.
  • The SPI_DEV_CLK is used as scan clock and scan clocks got removed from wakeup detector inputs inside PINMUX (#23791).
  • The fault-injection (FI) hardening of FLASH_CTRL got improved by 1) XOR-infecting the read data of host accesses with the address (#23557), 2) by using hardened FIFO-primitives inside the TL-UL interface (#23515), and 3) by closing a short gap in the integrity protection inside the read pipeline (#23514). In addition, a performance bug in the read buffer re-allocation of FLASH_CTRL got fixed (#23822).
  • The FI hardening of Ibex got improved by 1) switching to multi-bit encodings for the control signals of the instruction cache memory primitives (#23292), and 2) by only acting on data memory responses if they’re actually expected (lowRISC/Ibex#2166). The corresponding issue in the Ibex repository (lowRISC/Ibex#2144) has been reported by Katharina Ceesay-Seitz and Flavien Solt from the Computer Security (COMSEC) group at ETH Zürich. In addition, a bug in the address translation mechanism got fixed (#23178).
  • The FI hardening of SRAM_CTRL got improved by implementing a hardware readback mechanism that can be enabled and disabled at run time (#23212).
  • The local escalation behavior for entropy complex modules (ENTROPY_SRC, CSRNG, EDN) got aligned (#23560, #23561, #23657). In addition:
    • A bug affecting the single-channel mode of ENTROPY_SRC got fixed (#23775).
    • CSRNG now features a per-instance internal state read enable setting that is lockable until reset as well as always readable reseed counter registers (#23539). Also, CSRNG allows overwriting the FIPS/CC compliance flag (#23324) and the operation around command acknowledgement errors got improved (#22906, #23601).
    • A couple of bugs in the SW and HW command status interface of EDN got fixed (#23120, #23607).
  • HMAC received bug fixes related to the saving & restoring of contexts (#23018, #23224, #23236, #23432, #23538), the wiping of secrets and digests (#23108, #23220), and the reporting of its status (#23036, #23242, #23739, #23383), as well as some cleanups (#23384, #23674).
  • I2C now supports target responses to timeouts and read commands for SMBus (#22865) as well as bus arbitration, clock synchronization, and simultaneously active host and target modules for multi-controller environments (#22872).
  • KEYMGR now uses entropy more efficiently for reseeding the internal PRNG (#22951), no longer continuously reseeds the PRNG when disabled (#23071), and correctly separates input domains for KDF-KMAC calls by using distinct seed inputs for subsequent advance operations (#22878).
  • OTBN received some minor RTL changes to simplify DV such as to avoid X-propagation issues (#22115, #22116) and to avoid loop stack commits on simultaneous push/pop operations (#22171).
  • PATTGEN now allows defining the output signal levels while idle (#23198) and the outputs signals are now free of glitches (#23206).
  • PWRMGR now avoids race conditions related to Ibex receiving interrupts before having completed entry into low-power mode (#23500).
  • RV_DM now has a synchronous assertion timing for the JTAG combined resets in the core clock domain to fix an RDC and a DFT issue (#23621).
  • SPI_DEVICE now blocks Flash write commands when busy (#23546), releases the CSB reset in sync with SCK, and features a separate reset network for the outclk domain (#23244, #23589).
  • SPI_HOST received some timing improvements (#23067, #23579) and can no longer change sd_en_o in the middle of a cycle (#22139).
  • UART received a new status-type tx_empty interrupt. The existing event-type interrupt got renamed - it is indicating when the transmit FIFO is empty and the transmit is actually done (#23409).
  • USBDEV now correctly handles link resets (#23692, #23812) and also rejects OUT packets internally while returning STALL to the host (#23807).
  • ROM changes:
Read more

Earlgrey-PROD.M3

20 May 06:04
Compare
Choose a tag to compare

Overview

The Earlgrey-PROD.M3 milestone stabilizes the security countermeasures of Earlgrey and its IP blocks for the production tapeout, it adds further I2C features that did not make it into M2, and it fixes a few bugs. After this milestone, the focus shifts to design verification. All hardware IP blocks have been signed off at least at the D2S development stage.

Major changes since Earlgrey-PROD.M2 include:

  • Memory scrambling is now implemented with 3 instead of 2 PRINCE cipher half rounds (3 half rounds = 7 effective rounds). This change affects the main and retention SRAMs, the OTBN IMEM and DMEM, and rom_ctrl (#22425, #22948).
  • The critical path from TileLink hosts through sram_ctrl to SRAMs and back was shortened by decoupling the TL-UL a_ready from a_valid and other signals on the A channel (#22497, #22588).
  • ROM now
    • uses ECDSA P256 instead of RSA (for which OTBN support was removed entirely) for signature verification,
    • loads all (ECC and SPX+) secure boot keys from OTP (as a result we now only build two ROM targets: test ROM and mask ROM),
    • always sets the retention SRAM version field on every boot,
    • always uses 32-bits for SPX+ key pair addresses,
    • expects manifests of major version 2 (#22744).
  • Flash_ctrl now allows firmware to deal with multi-bit ECC and ICV errors during firmware selection and verification (#22431) and keeps the fill levels of the mask and data FIFOs in the read pipeline in sync (#22571).
  • I2C now includes ACK/NACK control features required for MCTP support (#22551) as well as a bus monitor required for multi-controller support (#22864). Also, race conditions with NACK and transaction boundary handling got fixed, including adding new signals to report errors that end transfers in the ACQ FIFO (#22459, #22460).
  • AES now updates its masking PRNG in every clock cycle during data processing to increase the noise floor, which is beneficial for SCA hardening (#22844).
  • CSRNG’s command status signaling has been reworked and aligned with EDN to properly signal successful command acknowledgements as well as error responses (#21981), and the supported error conditions have been reworked and extended (#22114, #22488, #22883).
  • Keymgr now uses non-deterministic decoy values for KMAC and the sideload ports (#22535).
  • Keymgr now aborts into the terminal Invalid state when the Creator Root Key from OTP is invalid during initialization, and it raises an error on any operation in the Invalid state (#22946).
  • KMAC now aborts an operation when an invalid sideload key is used, and it handles errors in a more robust way (#22794).
  • OTBN’s FI hardening now covers more of its secure wipe logic (#22924).

Earlgrey-PROD.M2

08 Apr 09:48
Compare
Choose a tag to compare

Overview

The Earlgrey-PROD.M2 milestone stabilizes the feature set and architecture of Earlgrey and its IP blocks for the production tapeout. After this milestone, the focus shifts to the completion of security hardening and design verification. All hardware IP blocks have been signed off at least at the D2 and V1 development stages. IP blocks that have not had major changes since Earlgrey-ES tapeout have been signed off at D2S (or even D3) and V2S.

Major changes since Earlgrey-ES tapeout include:

  • Architectural optimizations to reduce area (overview in #22025).
  • Removal of the S&P layer from data scrambling of ROM and SRAMs (overview in #20788).
  • Support for late debug enablement on DEV lifecycle devices (overview in #20829).
  • Replacement of LFSR-based PRNGs by Bivium stream cipher primitives for masking countermeasures in AES and KMAC (overview in #19091).
  • Interrupts from multiple HW IP blocks were changed from event type to status type to improve the programming model (overview in #15378).
  • HMAC: Enabling SW context switching via save & restore (#21307) and additional digest modes (SHA-2 256/384/512) and key lengths (256/384/512/1024-bit) (#21604).
  • I2C, SPI Device, and USBDEV: Multiple improvements and fixes to improve the programming model and increase standard compliance (details for each block below).
  • SPI Device: Removal of generic mode to permit optimizations of the other modes (#20856).

Detailed Changelog

Earlgrey Top-Level Design

  • The volatile raw unlock feature was disabled (#21372).
  • The CC pins were changed to 5V-tolerant pad cells (#21695).
  • The DFT strap pins were changed from IOC3 and IOC4 to IOR5 and IOR7, respectively (#21727).

FPGA Emulation

  • Earlgrey was brought up on the CW340 (#19295).
  • The base clock frequency on the CW310 was increased to 24 MHz (#19368).

ROM

  • The retention SRAM was rearranged (#21587).
  • The 64k ROM_EXT code size restriction was removed (#21831).
  • ECDSA P256 support was added to the manifest (#21833).
  • As part of moving root keys to OTP, the ROM key types were refactored (#21901), a module to load keys from OTP was added (#21902), and SPX+ keys were moved to OTP (#22066).
  • The number of RSA keys was reduced to three to save ROM space (#22058).
  • A naming bug in manifest extension getters was fixed (#22061).

adc_ctrl

  • An issue related to sampling during low-power states was fixed, so that adc_ctrl does not accidentally get stuck in normal-power sampling mode while the chip remains in deep sleep (#21829).
  • A FSM state observability CSR was added for debugging purposes (#21829)
  • An interrupt with wakeup capability was added so that transitions from low power to normal power can be detected. This is mainly intended for debugging purposes (#21829).
  • The single collated IRQ (which adc_ctrl generates from multiple internal sources) was converted from edge-based to level, so that SW doesn’t have to clear multiple IRQ status bits when handling an interrupt (#21872).

aes

  • The implementation of the PRNG was changed from multiple LFSRs to the Bivium stream cipher to prevent brute-forcing attacks on the PRNG state (#19091).

aon_timer

  • The size of the wakeup counter was increased to 64 bits (#21746).

clkmgr

  • Clock buffers on all root clocks feeding into clkmgr was inserted to facilitate the hookup of on-chip clock controllers (OCC) (#21100).

csrng

  • Microarchitectural optimizations to reduce area without functional impact (#22056, #22064).

edn

  • The SW_CMD_STS CSR was reworked to fix and improve edn’s SW API (#20873).
  • Microarchitectural optimizations to reduce area without functional impact (#21142).
  • Not all recoverable alerts were sent to alert_handler, which was fixed (#21187).
  • The handling of backpressure and status response from csrng was fixed, for which a new recoverable alert source (CSRNG_ACK_ERR status bit) and a new HW_CMD_STS CSR were added (#21142, #21280).

entropy_src

  • The FIPS bit exposed to HW and SW was changed to SW-configurable (#21369).
  • The 1-to-4 esbit packer was moved to after the health tests to streamline the hardware-based health testing in single-channel mode (#21626).The handling of backpressure in the internal pipeline and to the noise source was fixed (#21685 and #21799).
  • The CSRNG AES halt request interface was fixed to reduce power spikes (#21787).
  • Microarchitectural optimizations to reduce area without functional impact (#22041).

flash_ctrl

  • The DIS CSR was changed from RW0C to RW1S (#20042).
  • The microarchitecture was changed to share the scrambling module among flash banks (#22045, #22091, #22276).
  • Four interrupts (prog_empty, prog_lvl, rd_full, rv_lvl) were changed to status type (#21226).

hmac

  • Saving & restoring of the context (preliminary digest and message length), which allows SW to switch between different parallel message streams, was added (#21307).
  • SHA-2 384 and SHA-2 512 were added (previously only SHA-2 256 was supported), along with integrating the SHA-2 multi-mode primitive into the HMAC (#21107), and the key length was made configurable between 128 bit, 256 bit, 384 bit, 512 bit, and 1024 bit (#21604).
  • CSRs: The KEY CSR was extended to 32 32-bit registers, DIGEST CSR was extended to 16 32-bit registers, and the MSG_FIFO depth was extended to 1024 items (#21604). DIGEST_SIZE and KEY_LENGTH fields were added to the CFG CSR (#21604). HASH_STOP and HASH_CONTINUE fields were added to the CMD CSR (#21307).
  • The fifo_empty interrupt was changed to status type (#21809).

i2c

  • The READ field of the FDATA CSR was renamed to READB to prevent namespace collisions in DV code (#19721).
  • The fmt_threshold and rx_threshold interrupts were changed to status type (#21621).
  • Threshold interrupts were added for the target FIFOs (acq_threshold and tx_threshold) with status type (#21621).
  • The fmt_overflow and tx_overflow interrupts were removed because they were not useful (#21621).
  • The threshold configuration and level indicator CSR fields were extended to support up to 256-entry deep FIFOs (#21621).
  • The fall time of SCL and SDA, tf, had been counted twice in the calculation of the clock pulse time, which was fixed (#21765).
  • The depth of the ACQ FIFO was increased to 268 entries, so that the HW can absorb a max-length SMBus Block Write without SW intervention (#21789).
  • Prediction of target clock stretching was added to the host-mode FSM, in order to align throughput with the timing parameters (#21813).
  • A TXRST_ON_COND bit, through which SW can instruct the HW to automatically reset the TX FIFO if it observes a Stop or Repeated Start condition in target mode, was added to the TARGET_FIFO_CONFIG CSR (#21827).
  • A TARGET_TIMEOUT_CTRL CSR, through which SW can limit the time for which the HW stretches SCL in target mode, was added (#21857). When HW reaches this timeout, it will NACK the byte and return to the idle state.
  • The host FSM was changed to halt and stretch SCL upon receiving a NACK and only proceed once SW has acknowledged the resulting interrupt or a timeout expires, which SW can configure in the newly added HOST_NACK_HANDLER_TIMEOUT CSR and HOST_DISABLED_NACK_TIMEOUT bit in the STATUS CSR (#22049).
  • The controller FSM was changed to reject a Start or Stop condition if SCL changes too soon after an SDA transition, in order to fix possible misbehavior when the hold time for SDA is 0 (#22106).
  • The width of the TARGET_NACK_COUNT CSR was reduced from 32 to 8 bits because it had been overly wide (#22107).
  • The storage microarchitecture of the FIFOs was changed from flip-flops to a single single-port SRAM (#22216) with 464 entries (#22232) to reduce area.

keymgr

  • The valid signal for creator root key shares was split, so that each share now has its own valid signal (#20924).

kmac

  • Issues around EDN timeouts were fixed (#19248).
  • The masking of the Keccak core was improved and the PRNG was changed from an LFSR-based implementation to the Bivium stream cipher to prevent brute-forcing attacks on the PRNG state (#21624 and #22021).
  • The fifo_empty interrupt was changed to status type (#21657).

lc_ctrl

  • A CDC bug in lc_ctrl’s kmac interface was fixed (#19202).
  • Transitions to the SCRAP lifecycle state are now allowed even if the maximum number of lifecycle transitions is reached (#21213).
  • RMA acknowledge signals were changed from a daisy chain through multiple modules to one directly-connected signal per module (#21267).
  • Diversification values were uniquified so that each of the TEST_UNLOCKED, DEV, and RMA lifecycle states now has a unique random netlist constant (#21372).

otbn

  • Interpretation of the lc_rma_req and lc_escalate_en signals was fixed, to ensure that values other an On are interpreted as Off for non-escalation LC signals (#19628, #21272).
  • The S&P layer was removed from data scrambling of the instruction and the data memory (#20855).
  • Loop control was changed so that commit doesn’t factor into prefetch ...
Read more

Earlgrey-M2.5.2-RC0

29 Jun 10:44
Compare
Choose a tag to compare

Overview

This is the EarlGrey Engineering Sample release candidate. All blocks are at least at D2.5 design stage, and V2.5 verification stage (except for RV_DM, USBDEV, PWM and PATTGEN).

This release is associated with GitHub milestone: M2.5.2

D2.5 versus D3

D2.5 is strictly a subset of the D3 signoff criteria, including the following D3 checklist items:

  1. Meets D2(S) signoff criteria
  2. Meets D3 signoff criteria for the following items:
    1. TODO_COMPLETE
    2. LINT_COMPLETE
    3. REVIEW_RTL
    4. REVIEW_SW_CHANGE
    5. REVIEW_SW_ERRATA

D2.5 reviews were performed offline and are tracked in checklists available in OpenTitan.org internal documents.

V2.5 versus V3

V2.5 is strictly a subset of the V3 signoff criteria, including the following V3 checklist items:

  1. Meets V2 or V2S signoff criteria
  2. DESIGN_DELTAS_CAPTURED
  3. ALL_TODOS_RESOLVED
  4. TB_LINT_COMPLETE
  5. PRE_VERIFIED_SUBMODULES
  6. NO_ISSUES_PENDING

V2.5 coverage metrics are at V2S level, and thus not referenced in the list above. Signoff reviews were performed offline and are tracked in checklists available in OpenTitan.org internal documents.

Release Contents

Design

All IPs meet the D2.5 development stage requirements:

  1. D3 (14 of 35): lc_ctrl, uart, otp_ctrl, sysrst, adc_ctrl, alert_handler, aon_timer, gpio, pinmux, rom_ctrl, rv_plic, rv_timer, sensor_ctrl, sram_ctrl
  2. D2.5 (21 of 35): All other blocks

Design Verification

All IPs are at V2.5 level, except for the IPs which have a verification signoff waiver (USBDEV, RV_DM), or which are explicitly not required to fully work for the ES tapeout (PWM, PATTGEN).

The following section notes the progress that has been made towards the M2.5.2 goal.

  1. V2.5 (31 of 35): usbdev, i2c, rv_dm, entropy_src, spi_device, spi_host, csrng, flash_ctrl, kmac, lc_ctrl, sysrst_ctrl, keymgr, edn, otp_ctrl, uart, tlul, otbn, sram_ctrl, rv_core_ibex, clkmgr, pwrmgr, rstmgr, adc_ctrl, alert_handler, aes, aon_timer, hmac, rom_ctrl, rv_timer, rv_plic, gpio, sensor_ctrl, pinmux
  2. V1 (1 of 35): RV_DM
  3. V0 (1 of 35): USBDEV
  4. V2S (2 of 35): pwm and pattgen
    Note that PWM and PATTGEN are functionally not needed for ES, since the use cases under consideration do not make use of these blocks.

Block Level Issues

  1. All block level issues assigned to M2.5.2 have been resolved.

Top Level Test Cases

  1. All Chip-Level test cases assigned to M2.5.2 have been resolved.
  2. All Test-Triage issues identified for M2.5.2 have been resolved.

Manufacturing

  1. All Manufacturing test cases assigned to M2.5.2 have been resolved.

Integration Testing

The following integration tests have been implemented and are passing:

  1. USB. Block level smoketest #18063. FPGA targeted testing.
  2. SPI_HOST. FPGA targeted testing. #18640
  3. SPI Passthrough. FPGA targeted testing #18320.
  4. I2C host. FPGA targeted testing. #18639
  5. I2C device. FPGA targeted testing #18541.

Coverage Assessment

All blocks are at the required 90% coverage level or above, with the exception of the following blocks:

  1. RV_DM: (Pass rate) 71.67, (Coverage) 81.52
    1. Implications are known and mitigation strategies as documented in the M2 waiver document available in the opentitan.org partner domain.
    2. An updated waiver document will be available as part of the M2.5.2 milestone that focuses on DV closure.
  2. USB_DEV: (Pass rate) 48.79, (Coverage) 76.36
    3. Implications are known and mitigation strategies as documented in the M2 waiver document available in the opentitan.org partner domain.
    4. An updated waiver document will be available as part of the M2.5.2 milestone that focuses on DV closure.

CDC and RDC Assessment

Static RDC analysis and dynamic CDC enablement in simulation have been worked on on a best effort basis. The current status is: \

  • Static RDC at 30 setup errors, 870 analysis warnings and 29 analysis errors.
  • Dynamic CDC: 39 out of 43 DV environments are enabled.

Static CDC analysis was clean a few days before the release, but has now regressed to 7 setup warnings and 67 analysis errors due to last minute fixes to the spi_device RTL and updates to the spi_device synthesis constraints. The static analysis environment has not been cleaned up as part of M2.5.2 due to resourcing and tooling constraints. However, dynamic CDC has progressed well and 39 of 43 simulation environments now use CDC randomization.

Known Issues

The following known issues will not be addressed in the design and will require software workarounds.

  • [i2c] Unexpected data in ACQ FIFO after deep sleep wakeup #18510
    • This problem likely occurs due to the fact that sleep wakeup is very fast on the FPGA since power-up delays are not correctly modeled. Also, the I2C may actually latch data before it has been fully configured and enabled.
    • Workaround: as discussed on the issue, a FIFO reset after I2C configuration solves the problem.
  • [adc_ctrl] Limitations in wakeup detection #18511
    • There is a chance that the adc_ctrl FSM transitions from the low-power sampling mode into the normal power sampling mode without waking up the rest of the system. This can happen if the filter thresholds match during low power, but not after transitioning into normal power mode, since the FSM currently has no way to fall back into low-power sampling mode.The FSM may hence get stuck in the normal power mode that consumes significantly more power.
    • Workaround: while the problem cannot be completely avoided, this issue can be mitigated by taking only one sample after transitioning into normal power mode.
  • [spi_device] TPM interrupt for Write FIFO #15785
    • This is a feature request for adding interrupts based on FIFO fill-status. The feature could however not be implemented due to schedule constraints.
    • Workaround: software will have to work around this limitation and use a polling-based approach.
  • [i2c] Potential frequency output mismatch #18492
    • The I2C frequency does not always match the configured values. Investigations are still ongoing, but a suspected root cause is that there is an issue with how the programmed cycle counties are translated into actual cycles in the I2C bock.
    • Workaround: the I2C still works - just the frequency is not accurate. Potential workarounds are to either use the I2C as is, or compensate for the wrong translation logic by programming cycle counts that adjust for the measured frequency offset.
  • [usbdev] aon_wake maintains pull up assertion over VBUS disconnection #18562
    • Suggested RTL improvement to increase stability during disconnection/interruption to VBUS/SENSE while OT is in deep sleep.
    • Workaround: When software returns from Deep Sleep and discovers a Disconnection event, it should be aware that the host may or may not have spotted a disconnection, and thus introduce a deliberate disconnect period by ensuring that usbdev pull up is disabled before deactivating the aon_wake module. See Issue for more details.
  • [SPI_Host] SPI Top level test - FPGA #15074
    • As documented here on that issue, there are currently no plans to test the muxed spi_host1 at the FPGA level for M2.5.2.
  • [lc_ctrl] TAP required delay before JTAG commands after reset #18724
    • The life cycle TAP is not immediately available after reset, due to the boot sequence. I.e., the power manager first waits for OTP, LC to initialize first. If the device is in PROD* or DEV, the power manager also waits for the ROM_CTRL to complete its checks before sending the strap sampling request to the TAP selection logic in the pinmux. This means that connecting to the life cycle controller TAP may fail if attempted too early.
    • From a hardware perspective this behavior is as expected (hence this is not a bug). The agent intending to connect to the LC TAP should either
      • wait long enough for the chip to boot before attempting to connect via JTAG (delay for the ASIC is yet to be determined).
      • or alternatively, attempt to read out a known JTAG register such as the device ID in a polling loop. This method may require assertion TRSTN before any attempt.
  • [lc_ctrl/top] Clean up life cycle endpoints #19058
    • This is a cleanup task that has been identified while reviewing the design....
Read more

Earlgrey-M2.5.1-RC1

01 Jun 21:41
Earlgrey-M2.5.1-RC1
Compare
Choose a tag to compare

Overview

This is the EarlGrey Engineering Sample release candidate. All blocks are at least at D2 design stage, and V2S verification stage (except for RV_DM, I2C, RV_DM).

This is a follow up to Earlgrey-M2.5.1-RC0. All M2.5.1 releases are associated with GitHub milestone: M2.5.1.

Changes since M2.5.1-RC0

  • Several DV updates (targeting M2.5.2 release)
  • Several ROM release readiness changes (targeting M2.5.2 release)
  • Update SDC constraints for synthesis
    • [spi_device] SDC updates & Enhance pass-through rates for wider reads by pipelining the return path #11718
    • [syn] Async FIFO gray pointer timing constraints #13011
    • [top] Update interface timing constraints #18274
  • ECOs:
    • [M2.5, ECO, I2C] Restart condition violates I2C Specification #18721

Full Changelog: Earlgrey-M2.5.1-RC0...Earlgrey-M2.5.1-RC1

Earlgrey-M2.5.1-RC0

13 May 06:44
Earlgrey-M2.5.1-RC0
Compare
Choose a tag to compare

Overview

This is the EarlGrey Engineering Sample release candidate. All blocks are at least at D2 design stage, and V2S verification stage (except for RV_DM, I2C, RV_DM).

This release is associated with GitHub milestone: M2.5.1

Notes on Block Level Status

This release uses the definition of intermediate milestones D2.5 and V2.5 to describe block level status above D2S and V2S. These definitions are only used within the context of this document, and are not intended to be used as an official OpenTitan milestone definition.

D2.5 versus D3

D2.5 is strictly a subset of the D3 signoff criteria, including the following D3 checklist items:

  1. Meets D2(S) signoff criteria
  2. Meets D3 signoff criteria for the following items:
    1. TODO_COMPLETE
    2. LINT_COMPLETE
    3. REVIEW_RTL
    4. REVIEW_SW_CHANGE
    5. REVIEW_SW_ERRATA

D2.5 reviews were performed offline and are tracked in checklists available to OpenTitan partners.

V2.5 versus V3

V2.5 is strictly a subset of the V3 signoff criteria, including the following V3 checklist items:

  1. Meets V2 or V2S signoff criteria
  2. DESIGN_DELTAS_CAPTURED
  3. ALL_TODOS_RESOLVED
  4. TB_LINT_COMPLETE
  5. PRE_VERIFIED_SUBMODULES
  6. NO_ISSUES_PENDING

V2.5 coverage metrics are at V2S level, and thus not referenced in the list above. Signoff reviews were performed offline and are tracked in checklists available to OpenTitan partners.

Release Contents

Design

All IPs meet the D2.5 development stage requirements:

  1. D3 (14 of 35): lc_ctrl, uart, otp_ctrl, sysrst, adc_ctrl, alert_handler, aon_timer, gpio, pinmux, rom_ctrl, rv_plic, rv_timer, sensor_ctrl, sram_ctrl
  2. D2.5 (21 of 35): All other blocks

Design Verification

All IPs are at V2(S) level or above, except for the IPs which had a verification signoff waiver at M2 (I2C, USBDEV, RV_DM).

Note that block-level verification tasks for V2.5 are not part of the M2.5.1 exit criteria, since the verification signoff will be done at M2.5.2. Nevertheless, the following section notes the progress that has been made towards the M2.5.2 goal.

  1. V2.5 (13 of 35): flash_ctrl, kmac, keymgr, otp_ctrl, tlul, clkmgr, rstmgr, adc_ctrl, alert_handler, hmac, sensor_ctrl, pwrmgr, lc_ctrl
  2. V1 (2 of 35): i2c, rv_dm
  3. V0 (1 of 35): usbdev
  4. V2S (19 of 35): All other blocks

Details for i2c

I2C was not at V2 for this release but it was very close to achieving it. Overall regression pass rates were over 90% however coverage wasn't up to V2 standards, in particular FSM coverage was low (~50%) and there were some unimplemented coverage points (The i2c_rd_wr_cg, i2c_scl_stretch_cg, i2c_timing_parameters_cg, i2c_cmd_complete_cg).

There was high confidence that the missing coverage points were being stimulated by existing tests and the functionality had been observed working during other DV work.

A detailed waiver and mitigation test strategy document for i2c is available to OpenTitan partners.

Details for rv_dm

A detailed waiver and mitigation test strategy document for rv_dm is available to OpenTitan partners. This released focused on improving top level test coverage for this block.

Details for usbdev

A detailed waiver and mitigation test strategy document for rv_dm is available to OpenTitan partners. This released focused on improving top level test coverage for this block.

Block Level Issues

  1. All block level issues assigned to M2.5.1 have been resolved.

Top Level Test Cases

  1. All Chip-Level test cases assigned to M2.5.1 have been resolved.
  2. All Test-Triage issues identified for M2.5.1 have been resolved.

Manufacturing Readiness

  1. All Manufacturing test cases assigned to M2.5.1 have been resolved.

Integration Testing

The following integration tests have been implemented and are passing:

  1. USB. Block level smoketest #18063. FPGA targeted testing.
  2. SPI_HOST. FPGA targeted testing. #18640
  3. SPI Passthrough. FPGA targeted testing #18320
  4. I2C host. FPGA targeted testing. #18639
  5. I2C device. FPGA targeted testing #18541

CDC and RDC Assessment

Static RDC analysis and dynamic CDC enablement in simulation have been worked on on a best effort basis. The current status is:

  • Static RDC at 30 setup errors, 870 analysis warnings and 29 analysis errors.
  • Dynamic CDC: 24 out of 43 DV environments are enabled.

Static CDC analysis was clean a few days before the release, but has now regressed to 7 setup warnings and 67 analysis errors due to last minute fixes to the spi_device RTL and updates to the spi_device synthesis constraints. These regressions (mostly waiver cleanups) will be fixed as part of M2.5.2.

The following known issues will not be addressed in the design and will require software workarounds.

Known Issues

  • [i2c] Unexpected data in ACQ FIFO after deep sleep wakeup #18510
    • This problem likely occurs due to the fact that sleep wakeup is very fast on the FPGA since power-up delays are not correctly modeled. Also, the I2C may actually latch data before it has been fully configured and enabled.
    • Workaround: as discussed on the issue, a FIFO reset after I2C configuration solves the problem.
  • [adc_ctrl] Limitations in wakeup detection #18511
    • There is a chance that the adc_ctrl FSM transitions from the low-power sampling mode into the normal power sampling mode without waking up the rest of the system. This can happen if the filter thresholds match during low power, but not after transitioning into normal power mode, since the FSM currently has no way to fall back into low-power sampling mode.The FSM may hence get stuck in the normal power mode that consumes significantly more power.
    • Workaround: while the problem cannot be completely avoided, this issue can be mitigated by taking only one sample after transitioning into normal power mode.
  • [spi_device] TPM interrupt for Write FIFO #15785
    • This is a feature request for adding interrupts based on FIFO fill-status. The feature could however not be implemented due to schedule constraints.
    • Workaround: software will have to work around this limitation and use a polling-based approach.
  • [i2c] Potential frequency output mismatch #18492
    • The I2C frequency does not always match the configured values. Investigations are still ongoing, but a suspected root cause is that there is an issue with how the programmed cycle counties are translated into actual cycles in the I2C bock.
    • Workaround: the I2C still works - just the frequency is not accurate. Potential workarounds are to either use the I2C as is, or compensate for the wrong translation logic by programming cycle counts that adjust for the measured frequency offset.
  • [usbdev] aon_wake maintains pull up assertion over VBUS disconnection #18562
    • Suggested RTL improvement to increase stability during disconnection/interruption to VBUS/SENSE while OT is in deep sleep.
    • Workaround: When software returns from Deep Sleep and discovers a Disconnection event, it should be aware that the host may or may not have spotted a disconnection, and thus introduce a deliberate disconnect period by ensuring that usbdev pull up is disabled before deactivating the aon_wake module. See Issue for more details.
  • [spi_host] SPI Top level test - FPGA #15074
    • As documented here on that issue, there are currently no plans to test the muxed spi_host1 at the FPGA level for M2.5.2.
  • [lc_ctrl] TAP required delay before JTAG commands after reset #18724
    • The life cycle TAP is not immediately available after reset, due to the boot sequence. I.e., the power manager first waits for OTP, LC to initialize first. If the device is in PROD* or DEV, the power manager also waits for the ROM_CTRL to complete its checks before sending the strap sampling request to the TAP selection logic in the pinmux. This means that connecting to the life cycle controller TAP may fail if attempted too early.
    • From a hardware perspective this behavior is as expected (hence this is not a bug). The agent intending to connect to the LC TAP should either
      • wait long enough for the chip to boot before attempting to connect via JTAG (delay for the ASIC is yet to be determined).
      • or alternatively, attempt to read out a known JTAG register such as the device ID in a polling loop. This method may require assertion TRSTN before any attempt.

Design Verification Coverage Assessment

All blocks are at the required 90% coverage level ...

Read more

snapshot-20191101-2

04 Nov 21:24
Compare
Choose a tag to compare
Release version snapshot-20191101-2

snapshot-20191101-1

01 Nov 16:10
Compare
Choose a tag to compare
Release version snapshot-20191101-1