OpenTitan

Introduction to OpenTitan

OpenTitan is an open source silicon Root of Trust (RoT) project. OpenTitan will make the silicon RoT design and implementation more transparent, trustworthy, and secure for enterprises, platform providers, and chip manufacturers. OpenTitan is administered by lowRISC CIC as a collaborative project to produce high quality, open IP for instantiation as a full-featured product. This repository exists to enable collaboration across partners participating in the OpenTitan project.

Getting Started

To get started with OpenTitan, see the Getting Started page. For additional resources when working with OpenTitan, see the list of user guides. For details on coding styles or how to use our project-specific tooling, see the reference manuals. Lastly, the Hardware Dashboard page contains technical documentation on the SoC, the Ibex processor core, and the individual IP blocks. For questions about how the project is organized, see the project landing spot for more information.

Understanding OpenTitan

Datasheets

Documentation

Development

Repository Structure

The underlying repo is set up as a monolithic repository to contain RTL, helper scripts, technical documentation, and other software necessary to produce our hardware designs.

Unless otherwise noted, everything in the repository is covered by the Apache License, Version 2.0. See the LICENSE file and repository README for more information on licensing and see the user guides below for more information on development methodology.

Hardware

This page serves as the landing spot for all hardware development within the OpenTitan project.

We start off by providing links to the results of various tool-flows run on all of our Comportable IPs. This includes DV simulations, FPV and lint, all of which are run with the dvsim tool which serves as the common frontend.

The Comportable IPs following it provides links to their design specifications and DV documents, and tracks their current stage of development. See the Hardware Development Stages for description of the hardware stages and how they are determined.

Next, we focus on all available processor cores and provide links to their design specifications, DV documents and the DV simulation results.

Finally, we provide the same set of information for all available top level designs.

Results of tool-flows

Comportable IPs

Design Spec DV Document Spec Version Development Stage Notes
adc_ctrl DV 1.0 L1 D3 V2S S2
aes DV 1.0 L1 D2S V2S S2

 

aon_timer DV 1.0 L1 D3 V2 S2

 

csrng DV 1.0 L1 D2S V2S S2

 

edn DV 1.0 L1 D2S V2S S2

 

entropy_src DV 1.0 L1 D2S V2S S2

 

flash_ctrl DV 0.1 L1 D1 V1 -

 

1.0 L1 D2S V2S S2

 

gpio DV 1.0 L2 D3 V3 -

 

1.1 L1 D3 V2 S2

 

hmac DV 0.5 L2 D3 V3 -

 

1.0 L1 D3 V2 S2

 

i2c DV 1.0 L1 D2S V1 S2

 

keymgr DV 1.0 L1 D2S V2S S2

 

kmac DV 1.0 L1 D2S V2S S2

 

lc_ctrl DV 1.0 L1 D3 V2S S2

 

otbn DV 0.1 L1 D1 V1 S1

 

1.0 L1 D2S V2S S2

 

otp_ctrl DV 0.1 L1 D2 V2 S1

 

1.0 L1 D3 V2S S2

 

pattgen DV 1.0 L1 D2S V2S S2

 

pwm DV 1.0 L1 D2S V2S S2

 

rom_ctrl DV 1.0 L1 D3 V2S S2

 

rv_core_ibex DV 1.0 L1 D2S V2S S2

Ibex Verification is tracked in the Ibex documentation.

rv_dm DV 1.0 L1 D2S V1 -

 

rv_timer DV 0.5 L2 D3 V3 -

 

1.0 L1 D3 V2 S2

D3 Reviewed @ 2022-07-28

spi_device DV 0.5 L1 D1 V1 S0

 

1.0 L1 D2S V2S S2

 

spi_host DV 1.0 L1 D2S V2S S2

 

sram_ctrl DV 1.0 L1 D3 V2S S2

 

sysrst_ctrl DV 1.0 L1 D3 V2S S2

 

uart DV 1.0 L2 D3 V3 -

 

1.1 L1 D3 V2 S2

 

usbdev DV 1.0 L1 D2S V0 S2

 

Processor cores

Earl Grey chip-level results

Earl Grey-specific comportable IPs

Design Spec DV Document Spec Version Development Stage Notes
clkmgr DV 1.0 L1 D2S V2S S2

 

pinmux DV 1.0 L1 D3 V2 S2

Use FPV to perform block level verification.

pwrmgr DV 0.1 L1 D1 V0 S0

 

1.0 L1 D2S V2S S2

 

rstmgr DV 1.0 L1 D2S V2S S2

 

sensor_ctrl DV 1.0 L1 D3 N/A -

Verified at the top-level.

alert_handler DV 1.0 L1 D3 V2S S2

Use both FPV and DV to perform block level verification.

rv_plic DV 1.0 L1 D3 V2 S2

Use FPV to perform block level verification.

Hardware documentation overview

{{% sectionContent %}}

Top Earlgrey

Specification

The specification of Earlgrey is located here.

Tool: TopGen

Top Earlgrey is being generated by the integration tool, topgen (util/topgen.py). Please do not revise rtl/top_earlgrey.sv, the crossbar modules, and the interrupt controller directly. Those files are auto-generated and sit in the repository for browsing purpose.

How to create top module

Top module rtl/top_earlgrey.sv is created by topgen.py. Current top module is created with below command.

../../util/topgen.py -t data/top_earlgrey.hjson -o . -v

It generates files below:

  • rtl/top_earlgrey.sv: Top module generated from the template data/top_earlgrey.sv.tpl with the configuration file data/top_earlgrey.hjson
  • rtl/xbar_main.sv and rtl/tl_main_pkg.sv: Crossbar module. As of now, earlgrey has only one main crossbar. tlgen library is used to generate these files.
  • rtl/rv_plic*.sv and data/rv_plic.hjson: Interrupt controller module. hw/ip/rv_plic/util/reg_rv_plic.py tool is used to create RV_PLIC having the number of interrupts specified in the hjson.

Adding new blocks into top level

Modify data/top_earlgrey.hjson to include new module

  • If new block has interrupts, also add to the interrupt_module definition

Modify xbar_main.hjson for the host / device connectivity

Modify configurations

Main configuration for Top Earlgrey is in data/top_earlgrey.hjson. The users need to specify the list of peripherals, memories, crossbars, and the interrupts in the configuration file. The tool then reads relevant information from the each peripheral blocks’ configuration. For instance, if uart module is used, the tool reads hw/ip/uart/data/uart{_reg}.hjson and parses the information such as input/output, the size of its register space, and interrupts.

For the memories, the tool utilizes the type and instantiates relevant modules including the converter from TL-UL interface to the native interfaces (SRAM, ROM, eFlash). The user only needs to describe the base address and the memory size.

The crossbar should be defined in the separate file. Please take a look at data/xbar_main.hjson as an example. In the top configuration, it needs to define the xbar and the clock, then the tool calls tlgen library to create the crossbar design. Please remind that the instance name in the crossbar and that in the module field should be matched for topgen to create fields that tlgen uses.

Modify the template

Main top template file is data/top_earlgrey.sv.tpl. In most cases, it isn’t require to modify the template file. For instance, to add new IP into the top, the user just needs to add the IP to the module field and revise the crossbar connections in the crossbar configuration.

There might be some cases that needs to revise the template. As of now, a few modules are hard-coded such as RISC-V core and the debug module. If any of these modules need to be revised or some new modules not matching to the comportability spec, it needs to be manually instantiated in the template file.

OpenTitan Earl Grey Chip Datasheet

Overview

Top Level Block Diagram

The OpenTitan Earl Grey chip is a low-power secure microcontroller that is designed for several use cases requiring hardware security. The block diagram is shown above and shows the system configuration, including the Ibex processor and all of the memories and comportable IPs.

As can be seen in the block diagram, the system is split into a fast processor core domain that runs on a 100MHz jittery clock, and a peripheral domain that runs at 24MHz. Further, a portion of the peripheral domain, the analog sensor top and the padring can stay always-on. The rest of the system can be shut off as part of the sleep mode.

The OpenTitan Earl Grey chip provides the following features:

OpenTitan Earl Grey Features
  • RV32IMCB RISC-V "Ibex" core:
    • 3-stage pipeline, single-cycle multiplier
    • Selected subset of the bit-manipulation extension
    • 4kB instruction cache with 2 ways
    • RISC-V compliant JTAG DM (debug module)
    • PLIC (platform level interrupt controller)
    • U/M (user/machine) execution modes
    • Enhanced Physical Memory Protection (ePMP)
    • Security features:
      • Low-latency memory scrambling on the icache
      • Dual-core lockstep configuration
      • Data independent timing
      • Dummy instruction insertion
      • Bus and register file integrity
      • Hardened PC


  • Security peripherals:
    • AES-128/192/256 with ECB/CBC/CFB/OFB/CTR modes
    • HMAC / SHA2-256
    • KMAC / SHA3-224, 256, 384, 512, [c]SHAKE-128, 256
    • Programmable big number accelerator for RSA and ECC (OTBN)
    • NIST-compliant cryptographically secure random number generator (CSRNG)
    • Digital wrapper for analog entropy source with FIPS and CC-compliant health checks
    • Key manager with DICE support
    • Manufacturing life cycle manager
    • Alert handler for handling critical security events
    • OTP controller with access controls and memory scrambling
    • Flash controller with access controls and memory scrambling
    • ROM and SRAM controllers with low-latency memory scrambling
  • Memory:
    • 2x512kB banks eFlash
    • 128kB main SRAM
    • 4KB Always ON (AON) retention SRAM
    • 32kB ROM
    • 2kB OTP


  • IO peripherals:
    • 47x multiplexable IO pads with pad control
    • 32x GPIO (using multiplexable IO)
    • 4x UART (using multiplexable IO)
    • 3x I2C with host and device modes (using multiplexable IO)
    • SPI device (using fixed IO) with TPM, generic, flash and passthrough modes
    • 2x SPI host (using both fixed and multiplexable IO)
    • USB device at full speed


  • Other peripherals:
    • Clock, reset and power management
    • Fixed-frequency timer
    • Always ON (AON) timer
    • Pulse-width modulator (PWM)
    • Pattern Generator


  • Software:
    • Boot ROM code implementing secure boot and chip configuration
    • Bare metal applications and validation tests

Detailed Specification

For more detailed documentation including the pinout and system address map, see OpenTitan Earl Grey Chip Specification. The OpenTitan Earl Grey Chip DV Document describes the chip-level DV environment and contains the chip-level test plan.

OpenTitan Earl Grey Chip Specification

This document describes the OpenTitan Earl Grey chip functionality in detail. For an overview, refer to the OpenTitan Earl Grey Chip Datasheet.

Theory of Operations

The netlist chip_earlgrey_asic contains the features listed above and is intended for ASIC synthesis, whereas the netlist chip_earlgrey_cw310 provides an emulation environment for the cw310 FPGA board. The code for Ibex is developed in its own lowRISC repo, and is vendored in to this repository. Surrounding Ibex is a suite of Comportable peripherals that follow the Comportability Guidelines for lowRISC peripheral IP. Each of these IP has its own specification. See the table produced in the hardware documentation page for links to those specifications.

Design Details

This section provides some details for the processor and the peripherals. See their representative specifications for more information. This section also contains a brief overview of some of the features of the final product.

Clocking and Reset

Clocks and resets are supplied from the Analog Sensor Top, referred to as ast) from this point onwards in the document.

ast supplies a number of clocks into top_earlgrey.

  • sys: main jittery system clock used for higher performance blocks and security (processory, memory and crypto blocks).
  • io: a fixed clock used for peripheral blocks such as timers and I/O functionality, such as SPI or I2C.
  • usb: a fixed clock used specifically for usb operations.
  • aon: an always on, low frequency clock used for power management and low speed timers.

These clocks are then divided down and distributed to the rest of the system. See clock manager) for more details.

ast also supplies a number of power-okay signals to top_earlgrey, and these are used as asynchronous root resets.

  • vcaon_pok: The always on domain of the system is ready.
  • vcmain_pok: The main operating domain of the system is ready.

When one of these power-okay signals drop, the corresponding domain in top_earlgrey is reset. Please refer to reset manager) for more details. Resets throughout the design are asynchronous active low as per the Comportability specification.

Once reset, the reset vector begins in ROM, whose job is to validate code in the embedded flash before jumping to it. Valid code is assumed to have been instantiated into the flash, if not, the ROM shuts down the device unless prompted to bootstrap.

There are multiple avenues to load valid code into the flash:

  1. JTAG initiated flash programming.
  2. ROM bootstrap

AST Clocking and Reset Relationship

While the ast supplies clocks and resets to the top_earlgrey, it also contains additional functions that interact with the design. These include the RNG, ADC, jittery clock controls and an assortment of other sensors. The operating clocks and resets for these interfaces are supplied by the device in order to ensure correct synchronous operations. The clock mapping is shown below:

AST Porttop_earlgrey Clock
clk_ast_adc_iaon
clk_ast_alert_iio_div4
clk_ast_es_isys
clk_ast_rng_isys
clk_ast_tlul_iio_div4
clk_ast_usb_iusb

The reset clock domain is identical to the table above, and the power domain mapping is shown below

AST Porttop_earlgrey Power Domain
rst_ast_adc_ialways-on
rst_ast_alert_imain
rst_ast_es_imain
rst_ast_rng_imain
rst_ast_tlul_imain
rst_ast_usb_imain

System Reset Handling and Flash

Since top_earlgrey contains flash, it is important to examine the memory’s relationship with resets.

For flash, resets that occur during a stateful operation (program or erase) must be carefully handled to ensure the flash memory is not damaged. There are three reset scenarios:

  • Reset due to external supply lowering.
  • Reset due to internal peripheral request.
  • Reset due to lower power entry and exit.

Reset due to External Supply

Device resets due to supply dropping below a specific threshold are commonly known as “brown-out”. When this occurs, the flash memory must go through specialized sequencing to ensure the cells are not damaged. This process is handled exclusively between ast and the flash. Please see the relevant section for more details.

Reset due to Internal Request

When the device receives an internal request to reset (for example aon_timer), device power is kept on and the flash is directly reset. It is assumed that the flash device, when powered, will be able to correctly handle such a sequence and properly protect itself.

Reset due to Low Power Entry

When the device receives a low power entry request while flash activity is ongoing, the pwrmgr) is responsible for ensuring the entry request is aborted.

Main processor (core_ibex)

The main processor (core_ibex) is a small and efficient, 32-bit, in-order RISC-V core with a 2-stage pipeline that implements the RV32IMC instruction set architecture. It was initially developed as part of the PULP platform under the name “Zero-riscy” [1], and has been contributed to lowRISC who maintains it and develops it further. See the core_ibex specification for more details of the core. In addition to the standard RISC-V functionality, Ibex implements M (machine) and U (user) mode per the RISC-V standard. Attached to the Ibex core are a debug module (DM) and interrupt module (PLIC).

JTAG / Debug module

One feature available for Earl Grey processor core is debug access. By interfacing with JTAG pins, logic in the debug module allows the core to enter debug mode (per RISC-V 0.13 debug spec), and gives the design the ability to inject code either into the device - by emulating an instruction - or into memory. Full details can be found in the rv_dm specification.

Interrupt Controller

Adjacent to the Ibex core is an interrupt controller that implements the RISC-V PLIC standard. This accepts a vector of interrupt sources within the device, and assigns leveling and priority to them before sending to the core for handling. See the details in the rv_plic specification.

Performance

Ibex currently achieves a CoreMark per MHz of 2.36 on the earlgrey verilator system. Performance improvements are ongoing, including the following items being considered:

  1. Adding a new ALU to calculate branch targets to remove a cycle of latency on taken conditional branches (currently the single ALU is used to compute the branch condition then the branch target the cycle following if the branch is taken).
  2. A 3rd pipeline stage to perform register writeback, this will remove a cycle of latency from all loads and stores and prevent a pipeline stall where a response to a load or store is available the cycle after the request.
  3. Implement a single-cycle multiplier.
  4. Produce an imprecise exception on an error response to a store allowing Ibex to continue executing past a store without waiting for the response.

The method for including these features, e.g. whether they will be configurable options or not, is still being discussed.

The Ibex documentation has more details on the current pipeline operation, including stall behaviour for each instruction in the Pipeline Details section.

The CoreMark performance achieved relies in part on single-cycle access to instruction memory. An instruction cache is planned to help maintain this performance when using flash memory that will likely not have single-cycle access times.

CoreMark was compiled with GCC 9.2.0 with flags: -march=rv32imc -mabi=ilp32 -mcmodel=medany -mtune=sifive-3-series -O3 -falign-functions=16 -funroll-all-loops -finline-functions -falign-jumps=4 -mstrict-align

Memory

The device contains three memory address spaces for instruction and data.

Instruction ROM (32kB) is the target for the Ibex processor after release of external reset. The ROM contains hard-coded instructions whose purpose is to do a minimal subset of platform checking before checking the next stage of code. The next stage - a boot loader stored in embedded flash memory - is the first piece of code that is not hard-coded into the silicon of the device, and thus must be signature checked. The ROM executes this signature check by implementing a RSA-check algorithm on the full contents of the boot loader. The details of this check will come at a later date. For verification execute-time reasons, this RSA check will be overridable in the FPGA and verification platforms (details TBD). This is part of the Secure Boot Process that will be detailed in a security section in the future.

Earl Grey contains 1024kB of embedded-flash (e-flash) memory for code storage. This is intended to house the boot loader mentioned above, as well as the operating system and application that layers on top. At this time there is no operating system provided; applications are simple proof of concept code to show that the chip can do with a bare-metal framework.

Embedded-flash is the intended technology for a silicon design implementing the full OpenTitan device. It has interesting and challenging parameters that are unique to the technology that the silicon is implemented in. Earl Grey, as an FPGA proof of concept, will model these parameters in its emulation of the memory in order to prepare for the replacement with the silicon flash macros that will come. This includes the read-speeds, the page-sized erase and program interfaces, the two-bank update scheme, and the non-volatile nature of the memory. Since by definition these details can’t be finalized until a silicon technology node is chosen, these can only be emulated in the FPGA environment. We will choose parameters that are considered roughly equivalent of the state of the art embedded-flash macros on the market today.

Details on how e-flash memory is used by software will be detailed in future Secure Boot Process and Software sections over time.

The intent is for the contents of the embedded flash code to survive FPGA reset as it would as a NVM in silicon. Loading of the FPGA with initial content, or updating with new content, is described in other software specifications. The SPI device peripheral is provided as a method to bulk-load e-flash memory. The processor debug port (via JTAG) is also available for code loading. See those specifications for more details.

Also included is a 128kB of SRAM available for data storage (stack, heap, etc.) by the Ibex processor. It is also available for code storage, though that is not its intended purpose.

The base address of the ROM, Flash, and SRAM are given in the address map section later in this document.

Peripherals

Earl Grey contains a suite of “peripherals”, or subservient execution units connected to the Ibex processor by means of a bus interconnect. Each of these peripherals follows an interface scheme dictated in the Comportability Specification.. That specification details how the processor communicates with the peripheral (via TLUL interconnect); how the peripheral communicates with the chip IO (via fixed or multiplexable IO); how the peripheral communicates with the processor (interrupts); and how the peripheral communicates security events (via alerts). See that specification for generic details on this scheme.

Chip IO Peripherals

Pin Multiplexor Module (pinmux)

The pin multiplexor’s purpose is to route between peripherals and the available multiplexable IO of the chip. At this time, the pin multiplexor is provided, but it is not used to its full potential. In addition, the multiplexor device manages control or pad attributes like drive strength, technology (OD, OS, etc), pull up, pull down, etc., of the chip’s external IO. It is notable that there are many differences between an FPGA implementation of Earl Grey and an ASIC version when it comes to pins and pads. Some pad attributes with analog characteristics like drive strength, slew rate and Open Drain technology are not supported on all platforms.

The pin multiplexor is a peripheral on the TLUL bus, with collections of registers that provide software configurability. See the pinmux specification for how to connect peripheral IO to chip IO and for information on pad control features.

UART

The chip contains one UART peripheral that implement single-lane duplex UART functionality. The outputs and inputs can be configured to any chip IO via the pinmux.

See the UART specification for more details on this peripheral.

GPIO

The chip contains one GPIO peripheral that creates 32 bits of bidirectional communication with the outside world via the pinmux. Via pinmux any of the 32 pins of GPIO can be connected to any of the 32 MIO chip pins, in any direction. See the GPIO specification for more details on this peripheral. See the pinmux specification for how to connect peripheral IO to chip IO.

SPI device

The SPI device implements multiple modes:

  • Firmware mode
  • TPM mode
  • Flash mode
  • Passthrough mode

Firmware Mode is a generic data transfer mode. It can be used by software to construct a simple firmware upgrade mechanism for in-field devices.

TPM mode supports SPI transfers in compliance with the TPM PC Client Platform. The interface is single data lane and supports built-in data back pressuring.

Flash mode supports serial flash emulation. Typical commands such as read status, address mode, read data and program data are either natively supported or can be emulated.

Passthrough mode supports serial flash passthrough from an upstream SPI host to a downstream serial flash device.

See the SPI device specification for more details.

USB device

The chip contains a single module that supports USB device mode at full speed. In addition to normal functionality, USB suspend / resume is supported alongside the chip’s low power modes.

See the USB device specification for more details.

I2C host

In order to be able to command I2C devices on systems where Earl Grey will be included, I2C host functionality will be required. This will include standard, full, and fast mode, up to 1Mbaud. More details of the I2C host module will come in a later specification update. The pins of the I2C host will be available to connect to any of the multiplexable IO (MIO) of the Earl Grey device. More than one I2C host module might be instantiated in the top level.

Security Peripherals

AES

AES is the primary symmetric encryption and decryption mechanism used in OpenTitan protocols. AES runs with key sizes of 128b, 192b, or 256b. The module can select encryption or decryption of data that arrives in 16 byte quantities to be encrypted or decrypted using different block cipher modes of operation. It supports ECB mode, CBC mode, CFB mode, OFB mode and CTR mode.

The GCM mode is not implemented in hardware, but can be constructed using AES in counter mode. The integrity tag calculation can be implemented in Ibex and accelerated via bitmanip instructions.

Details on how to write key and data material into the peripheral, how to initiate encryption and decryption, and how to read out results, are available in the AES specification.

SHA-256/HMAC

SHA-256 is the primary hashing algorithm used in OpenTitan protocols. SHA-256 is a member of the SHA-2 family of hashing algorithms, where the digest (or hash output) is of 256b length, regardless of the data size of the input to be hashed. The data is sent into the SHA peripheral after declaring the beginning of a hash request (effectively zeroing out the internal state to initial conditions), 32b at a time. Once all data has been sent, the user can indicate the completion of the hash request (with optional partial-word final write). The peripheral produces the hash result available for register read by the user. All data transfer is processor-available, i.e. data is passed into the module via register writes.

HMAC is a message authentication protocol layered on top of a hashing function (in this case SHA-256), mixing in a secret key for cryptographic purposes. HMAC is a particular application of appending the secret key in a prescribed manner, twice, around the hashing (via SHA-256) of the message.

Details on how to write key and data material into the peripheral, how to initiate hashing / authentication, and how to read out results, are available in the SHA/HMAC specification.

Alert Handler

Alerts, as defined in the Comportability Specification, are defined as security-sensitive interrupts that need to be handled in a timely manner to respond to a security threat. Unlike standard interrupts, they are not solely handled by software. Alerts trigger a first-stage request to be handled by software in the standard mode as interrupts, but trigger a second-stage response by the alert handler if software is not able to respond. This ensures that the underlying concern is guaranteed to be addressed if the processor is busy, wedged, or itself under attack.

Each peripheral has an option to present a list of individual alerts, representing individual threats that require handling. These alerts are sent in a particular encoding method to the alert handler module, itself a peripheral on the system bus. See the details of the alert handler specification for more information.

TRNG entropy source

Randomness is a critical part of any security chip. It provides variations in execution that can keep attackers from predicting when the best time is to attack. It provides secret material used for identity and cryptographic purposes. It can be seeded into algorithmic computation to obscure sensitive data values. In short, it is a source of critical functionality that must be designed to be truly random, but also free from attack itself.

Most TRNGs (True Random Number Generators) are analog designs, taking advantage of some physical event or process that is non-deterministic. Example designs rely on metastability, electronic noise, timing variations, thermal noise, quantum variation, etc. These are then filtered and sent into a pool of entropy that the device can sample at any time, for whatever purposes are needed. The creation, filtering, storage, protection, and dissemination of the randomness are all deep topics of intense research in their own right.

The primary interface to the entropy pool is a read request of available random bits. The TRNG interface can indicate how many bits are available, and then software can read from this pool, if available. Reading of entropy that is not available should immediately trigger an interrupt or an alert.

Since silicon is required to contain an analog design tied to the final chosen silicon technology process, our FPGA implementation can only approximate the results. We however fully specify the software interface to the TRNG in a digital wrapper. In FPGA we emulate the randomness with something akin to a PRBS.

Other peripherals

Timer(s)

Timers are critical for operating systems to ensure guaranteed performance for users. To some level they are even required by the RISC-V specification. At this time, one timer is provided, a 64b free running timer with a guaranteed (within a certain percentage) frequency. A second one acting as a watchdog timer that can be used to backstop the processor in the case of it being unresponsive (usually due to development code that is wedged, rather than for instance due to security attack) will be provided in the future. The goal is for both of these to be satisfied with the same timer module.

The specification for the timer can be found here.

Flash Controller

The final peripheral discussed in this release of the netlist is an emulated flash controller. As mentioned in the memory section, up to 1024kB of emulated embedded flash is available for code and data storage. The primary read path for this data is in the standard memory address space. Writes to that address space are ignored, however, since one can not write to flash in a standard way. Instead, to write to flash, software must interact with the flash controller.

Flash functionality include three primary commands: read, erase, and program. Read, as mentioned above, is standard, and uses the chip memory address space. Erase is done at a page level, where the page size is parameterizable in the flash controller. Upon receiving an erase request, the flash controller wipes all contents of that page, rendering the data in all 1s state (0xFFFFFFFF per word). Afterwards, software can program individual words to any value. It is notable that software can continue to attempt to program words even before another erase, but it is not physically possible to return a flash bit back to a '1' state without another erase. So future content is in effect an AND of the current content and the written value.

next_value = AND(current_value, write_word)

Erase and program are slow. A typical erase time is measured in milliseconds, program times in microseconds. The flash controller peripheral in this release approximates those expected times.

Security is also a concern, since secret data can be stored in the flash. Some memory protection is provided by the flash controller. For more details see the flash controller module specification.

Interconnection

Interconnecting the processor and peripheral and memory units is a bus network built upon the TileLink-Uncached-Light protocol. See the OpenTitan bus specification for more details.

Topology

top_earlgrey has a two-level hierarchy for its bus network. Close to the CPU is the high-speed cluster, with low access latency. Farther from the CPU, through a low-speed bridge, is the low-speed cluster, with higher access latency.

Performance

The following table describes the typical number of CPU cycles from a transaction’s launch to its completion for a device in the specified cluster. Note that these values assume there is no bus contention.

ClusterCPU Access Latency
High speed2 CPU cycles
Low speed18-20 CPU cycles

Memory Map

The base addresses of the memory and peripherals are given in the table below.

The choice of memory, or lack thereof at location 0x0 confers two exclusive benefits:

  • If there are no memories at location 0x0, then null pointers will immediately error and be noticed by software (the xbar will fail to decode and route)
  • If SRAM is placed at 0, accesses to data located within 2KB of 0x0 can be accomplished with a single instruction and thus reduce code size.

For the purpose of top_earlgrey, the first option has been chosen to benefit software development and testing

NameTypeByte Address
uart0uart0x40000000 (regs)
uart1uart0x40010000 (regs)
uart2uart0x40020000 (regs)
uart3uart0x40030000 (regs)
gpiogpio0x40040000 (regs)
spi_devicespi_device0x40050000 (regs)
i2c0i2c0x40080000 (regs)
i2c1i2c0x40090000 (regs)
i2c2i2c0x400A0000 (regs)
pattgenpattgen0x400E0000 (regs)
rv_timerrv_timer0x40100000 (regs)
otp_ctrlotp_ctrl0x40130000 (core)
0x40132000 (prim)
lc_ctrllc_ctrl0x40140000 (regs)
alert_handleralert_handler0x40150000 (regs)
spi_host0spi_host0x40300000 (regs)
spi_host1spi_host0x40310000 (regs)
usbdevusbdev0x40320000 (regs)
pwrmgr_aonpwrmgr0x40400000 (regs)
rstmgr_aonrstmgr0x40410000 (regs)
clkmgr_aonclkmgr0x40420000 (regs)
sysrst_ctrl_aonsysrst_ctrl0x40430000 (regs)
adc_ctrl_aonadc_ctrl0x40440000 (regs)
pwm_aonpwm0x40450000 (regs)
pinmux_aonpinmux0x40460000 (regs)
aon_timer_aonaon_timer0x40470000 (regs)
astast0x40480000 (regs)
sensor_ctrlsensor_ctrl0x40490000 (regs)
sram_ctrl_ret_aonsram_ctrl0x40500000 (regs)
0x40600000 (ram)
flash_ctrlflash_ctrl0x41000000 (core)
0x41008000 (prim)
0x20000000 (mem)
rv_dmrv_dm0x00010000 (mem)
0x41200000 (regs)
rv_plicrv_plic0x48000000 (regs)
aesaes0x41100000 (regs)
hmachmac0x41110000 (regs)
kmackmac0x41120000 (regs)
otbnotbn0x41130000 (regs)
keymgrkeymgr0x41140000 (regs)
csrngcsrng0x41150000 (regs)
entropy_srcentropy_src0x41160000 (regs)
edn0edn0x41170000 (regs)
edn1edn0x41180000 (regs)
sram_ctrl_mainsram_ctrl0x411C0000 (regs)
0x10000000 (ram)
rom_ctrlrom_ctrl0x00008000 (rom)
0x411e0000 (regs)
rv_core_ibexrv_core_ibex0x411F0000 (cfg)

Hardware Interfaces

Pinout

IDNameBankTypeConnection TypeDescription
0POR_NVCCInputStdmanualSystem reset
1USB_PVCCDualBidirTolmanualUSB P signal
2USB_NVCCDualBidirTolmanualUSB N signal
3CC1AVCCInputStdmanualADC input 1
4CC2AVCCInputStdmanualADC input 2
5FLASH_TEST_VOLTVCCAnalogIn0manualFlash test voltage input
6FLASH_TEST_MODE0VCCInputStdmanualFlash test mode signal
7FLASH_TEST_MODE1VCCInputStdmanualFlash test mode signal
8OTP_EXT_VOLTVCCAnalogIn1manualOTP external voltage input
9SPI_HOST_D0VIOABidirStddirectSPI host data
10SPI_HOST_D1VIOABidirStddirectSPI host data
11SPI_HOST_D2VIOABidirStddirectSPI host data
12SPI_HOST_D3VIOABidirStddirectSPI host data
13SPI_HOST_CLKVIOABidirStddirectSPI host clock
14SPI_HOST_CS_LVIOABidirStddirectSPI host chip select
15SPI_DEV_D0VIOABidirStddirectSPI device data
16SPI_DEV_D1VIOABidirStddirectSPI device data
17SPI_DEV_D2VIOABidirStddirectSPI device data
18SPI_DEV_D3VIOABidirStddirectSPI device data
19SPI_DEV_CLKVIOAInputStddirectSPI device clock
20SPI_DEV_CS_LVIOAInputStddirectSPI device chip select
0IOA0VIOABidirStdmuxedMuxed IO pad
1IOA1VIOABidirStdmuxedMuxed IO pad
2IOA2VIOABidirStdmuxedMuxed IO pad
3IOA3VIOABidirStdmuxedMuxed IO pad
4IOA4VIOABidirStdmuxedMuxed IO pad
5IOA5VIOABidirStdmuxedMuxed IO pad
6IOA6VIOABidirOdmuxedMuxed IO pad
7IOA7VIOABidirOdmuxedMuxed IO pad
8IOA8VIOABidirOdmuxedMuxed IO pad
9IOB0VIOBBidirStdmuxedMuxed IO pad
10IOB1VIOBBidirStdmuxedMuxed IO pad
11IOB2VIOBBidirStdmuxedMuxed IO pad
12IOB3VIOBBidirStdmuxedMuxed IO pad
13IOB4VIOBBidirStdmuxedMuxed IO pad
14IOB5VIOBBidirStdmuxedMuxed IO pad
15IOB6VIOBBidirStdmuxedMuxed IO pad
16IOB7VIOBBidirStdmuxedMuxed IO pad
17IOB8VIOBBidirStdmuxedMuxed IO pad
18IOB9VIOBBidirOdmuxedMuxed IO pad
19IOB10VIOBBidirOdmuxedMuxed IO pad
20IOB11VIOBBidirOdmuxedMuxed IO pad
21IOB12VIOBBidirOdmuxedMuxed IO pad
22IOC0VCCBidirStdmuxedMuxed IO pad
23IOC1VCCBidirStdmuxedMuxed IO pad
24IOC2VCCBidirStdmuxedMuxed IO pad
25IOC3VCCBidirStdmuxedMuxed IO pad
26IOC4VCCBidirStdmuxedMuxed IO pad
27IOC5VCCBidirStdmuxedMuxed IO pad
28IOC6VCCBidirStdmuxedMuxed IO pad
29IOC7VCCBidirStdmuxedMuxed IO pad
30IOC8VCCBidirStdmuxedMuxed IO pad
31IOC9VCCBidirStdmuxedMuxed IO pad
32IOC10VCCBidirOdmuxedMuxed IO pad
33IOC11VCCBidirOdmuxedMuxed IO pad
34IOC12VCCBidirOdmuxedMuxed IO pad
35IOR0VCCBidirStdmuxedMuxed IO pad
36IOR1VCCBidirStdmuxedMuxed IO pad
37IOR2VCCBidirStdmuxedMuxed IO pad
38IOR3VCCBidirStdmuxedMuxed IO pad
39IOR4VCCBidirStdmuxedMuxed IO pad
40IOR5VCCBidirStdmuxedMuxed IO pad
41IOR6VCCBidirStdmuxedMuxed IO pad
42IOR7VCCBidirStdmuxedMuxed IO pad
21IOR8VCCBidirOddirectDedicated sysrst_ctrl output (ec_rst_l)
22IOR9VCCBidirOddirectDedicated sysrst_ctrl output (flash_wp_l))
43IOR10VCCBidirOdmuxedMuxed IO pad
44IOR11VCCBidirOdmuxedMuxed IO pad
45IOR12VCCBidirOdmuxedMuxed IO pad
46IOR13VCCBidirOdmuxedMuxed IO pad

RTL Implementation Notes

At this time, the top-level netlist for earlgrey is a combination of hand-written SystemVerilog RTL with auto-generated sections for wiring of comportability interfaces. There is a script for this auto-generation, centered around the top-level descriptor file top_earlgrey.hjson found in the repository. A full definition of this descriptor file, its features, and related scripting is forthcoming. This tooling generates the interconnecting crossbar (via TLUL) as well as the instantiations at the top level. It also feeds into this document generation to ensure that the chosen address locations are documented automatically using the data in the source files.

Top Level vs Chip Targets

It should first be NOTED that there is some subtlety on the notion of hierarchy within the top level. There is netlist automation to create the module top_earlgrey as indicated in sections of this specification that follow. On top of that module, hierarchically in the repo, are chip level instantiation targets directed towards a particular use case. This includes chip_earlgrey_cw310 for use in FPGA, and chip_earlgrey_asic for use (eventually) in a silicon implementation. These chip level targets will include the actual pads as needed by the target platform. At the time of this writing the two are not in perfect synchronization, but the intention will be for them to be as identical as possible. Where appropriate, including the block diagram below, notes will be provided where the hierarchy subtleties are explained.

FPGA Platform

TODO: This section needs to be updated once pin updates are complete.

In the FPGA platform, the logic for the JTAG and the SPI device are multiplexed within chip_earlgrey_cw310. This is done for ease of programming by the external host.

References

  1. Schiavone, Pasquale Davide, et al. “Slow and steady wins the race? A comparison of ultra-low-power RISC-V cores for Internet-of-Things applications.” 27th International Symposium on Power and Timing Modeling, Optimization and Simulation (PATMOS 2017)

OpenTitan Earl Grey Chip DV Document

Goals

  • DV
    • Verify top_earlgrey features by running dynamic simulations with a SV/UVM based testbench.
    • Verify the integration of all pre-verified IPs instantiated in the chip.
    • Verify the integration and the internal design of non-pre-verified IPs instantiated in the chip.
    • Verify system level scenarios for correctness of our design assumptions and behavior.
    • Verify the full chip configuration and memory address space by running the automated tests.
    • Stress test the XBAR structures in the chip.
  • FPV
    • Verify the connectivity of signals (that are excluded from functional DV above) from point A to point B.
    • Secure verification
      • Check for leakage of secure data into unsecure locations / paths and vice-versa using the Cadence SPV tool.

Current status

Design features

For detailed information on top_earlgrey design features, please see the Earl Grey Top Level Specification.

Testbench architecture

The top_earlgrey chip level testbench has been constructed based on the CIP testbench architecture.

Block diagram

TBD

Top level testbench

Top level testbench is located at hw/ip/top_earlgrey/dv/tb/tb.sv. It instantiates the top_earlgrey DUT module hw/top_earlgrey/rtl/autogen/chip_earlgrey_asic.sv. In addition, it instantiates the following interfaces, connects them to the DUT and sets their handle into uvm_config_db:

  • Clock and reset interface
    • Main clock as well as USB clock
  • TileLink host interface
    • This is connected to the CPU’s data port.
  • JTAG interface
  • SPI interface
  • UART interface
  • SW logger interface (for test boot ROM as well as the test SW)
  • SW test status monitor
  • Backdoor memory interfaces (for ROM, SRAM and the flask banks)
  • Individual control pins:
    • Bootstrap
    • JTAG/SPI switch
    • SRST_N

Common DV utility components

The following utilities provide generic helper tasks and functions to perform activities that are common across the project:

Global types & methods

All common types and methods defined at the package level can be found in the chip_env_pkg. Some of them in use are:

[list a few parameters, types & methods; no need to mention all]

TL_agent

The full chip testbench instantiates (already handled in CIP base env) the tl_agent which provides the ability to drive and independently monitor random traffic via TL host interface into CHIP device.

UART Agent

[Describe here or add link to its README]

SPI Agent

[Describe here or add link to its README]

JTAG Agent

[Describe here or add link to its README]

I2C Agent

[Describe here or add link to its README]

USB20 Agent

[Describe here or add link to its README]

UVM RAL Model

The CHIP RAL model is created with the ralgen FuseSoC generator script automatically when the simulation is at the build stage.

It can be created manually (separately) by running make in the the hw/ area.

Reference models

Testbench configurations

Stub CPU mode

Bare-metal SW test mode

XBAR integration mode

Stimulus strategy

Test sequences

All test sequences reside in hw/ip/chip/dv/env/seq_lib. The chip_base_vseq virtual sequence is extended from cip_base_vseq and serves as a starting point. All test sequences are extended from chip_base_vseq. It provides commonly used handles, variables, functions and tasks that the test sequences can simple use / call. Some of the most commonly used tasks / functions are as follows:

  • task 1:
  • task 2:

Functional coverage

To ensure high quality constrained random stimulus, it is necessary to develop a functional coverage model. The following covergroups have been developed to prove that the test intent has been adequately met:

  • cg1:
  • cg2:

Self-checking strategy

Scoreboard

The chip_scoreboard is primarily used for end to end checking. It creates the following analysis ports to retrieve the data monitored by corresponding interface agents:

  • analysis port1:
  • analysis port2:

Assertions

  • TLUL assertions: The tb/chip_bind.sv binds the tlul_assert assertions to the IP to ensure TileLink interface protocol compliance.
  • Unknown checks on DUT outputs: The RTL has assertions to ensure all outputs are initialized to known values after coming out of reset.
  • assert prop 1:
  • assert prop 2:

Building and running tests

DV simulations for top_earlgrey are run with the dvsim tool. Please take a look at the link for detailed information on the usage, capabilities, features and known issues. The basic UART transmit and receive test can be run with the following command:

$ ./util/dvsim/dvsim.py hw/top_earlgrey/dv/chip_sim_cfg.hjson -i chip_sw_uart_tx_rx

For a list of available tests to run, please see the ‘Tests’ column in the testplan below.

Regressions

Sanity

SW access

Nightly

Testplan (RTL simulations)

Testplan

Testplan (Gate level simulations)

Note that the descriptions of the test below may be replicated from the table above. Testplan

Analog Sensor Top Technical Specification

Overview

AST, also known as the analog sensor top, is the OpenTitan analog and security companion. Within AST are various analog functions (such as clocks, regulators, random number generators) needed to make the device function, as well as physical security sensors necessary to protect the device from physical attacks or manipulation.

At a high level, AST communicates with a number of OpenTitan comportable modules. See diagram below.

Analog Sensor Top Diagram

In the following sections, each family of connection is briefly described and explained. Note, the analog connections to AST are not shown in the diagram, but will be explained as well.

Interface Signals Table

Table notes

Signal naming conventions used in this document

It complies with OpenTitan names and suffixes with some augmentations.

  • Clock signals start with clk_*

  • Inputs and outputs are marked with *_i/o

  • Analog signals are marked with *_a

  • Non-core level signals are marked with *_h

  • Dual and negative polarity signals are marked with *_p/n

Clock domains column

  • sys - system clock, mainly used for high performance and security modules. Up to 100MHz

  • io - peripheral clock source, mainly used for peripherals and I/O related functionality. Up to 96MHz (divided by 4 by the clock manager)

  • usb - USB module source clock. 48MHz

  • aon - Always-on domain clock. The only active clock while chip is in deep-sleep power state, 200KHz

  • async - when listed as async, it means it does not matter what domain drives the signal

  • Input clocks: Each functional interface has a dedicated clock named after the interface.

Signal Name & Affiliation I/O

Width/

Type/

Struct

Clock Domain Description
Power Supplies
VCC I

VCC is the main power supply. It is driven from an external source and is used to power the internal VCMAIN and VCAON power domains.

VCC must always be present when the device is functioning; VCC is also used to power a number of pads that must be always on when the device is functioning.

AVCC I Analog blocks power supply. AVCC and AGND are analog supply and ground signals for the AST analog functions. They mainly serve for ADC and USB clock functionality. AVCC is expected to be driven by the same voltage regulator and have similar power availability as VCC. AVCC and AGND have dedicated package balls/pins. In the future, package pins sharing with VCC and GND may be considered based on post-silicon test results.
VCMAIN O Main core power, driven by internal capless voltage regulator
VCAON O Core voltage power for always-on domain (same voltage range as VCMAIN)
VIOA I IO supply, powering a set of pads. Unlike VCC, the IO supplies can be turned off by external components and the device will continue to function, the unpowered pads however, become inoperable.
VIOB I Same as VIOA, but for a different set of pads.
GND I Ground
AGND I Analog ground (see AVCC for further details)
Power Control and Reset
otp_power_seq_i I 2 async Contains the power sequencing signals coming from the OTP macro.
otp_power_seq_h_o O 2 async Contains the power sequencing signals going to the OTP macro (VCC domain).
flash_power_down_h_o O 1 async Connected to flash (VCC domain). Used for flash power management.
flash_power_ready_h_o O 1 async Connected to flash (VCC domain). Used for flash power management.

vcmain_pok

(aka vcmain_pok_o)

O ast_pwst async Main core power-exist indication. Used by the OpenTitan power manager to determine the state of the main digital supply during power up and power down sequencing.

vcaon_pok

(aka vcaon_pok_o)

O ast_pwst async Always-on power-exist indication. Used by the OpenTitan power manager for power-on reset root.

vioa_pok

(aka vioa_pok_o)

O ast_pwst async VIOA power-exist indications. Used as a power-OK status signal.

viob_pok

(aka viob_pok_o)

O ast_pwst async VIOB power-exist indication. Used as a power-OK status signal.
por_ni I 1 async Power on reset input signal to AST. See Resets section for further details
main_pd_ni I 1 aon Power down enable for main core power
0: main core power is down (deep-sleep state)
1: main core power is up
It may take up to 200 uS from this signal transition to power switching completion by AST (not including boot time and so). Note that flash must be prepared for power down before this signal is asserted.
main_env_iso_en_i I 1 aon

Preliminary indication of VCMAIN isolation signal (main_iso_en) assertion. It is used by AST logic to latch interface signals which may no longer be valid after main_iso_en is active. This signal must be set at least 30ns before main_iso_en is active and must remain active at least 30ns after main_iso_en is no longer active.

Note that main_iso_en itself asserts ahead of main_pd_ni. ie, the pwrmgr will set this signal to '1' before requesting the power be turned off. Similar, on power-on, the isolation is only released after power is restored and all powered off modules have been reset.

ast_init_done_o O mubi4 tlul When set, it indicates that the AST initialization was performed. Note that this signal may not be set while the chip is in TEST* or RMA lifecycle states.
Clock Outputs
clk_src_sys_o O 1 sys 100 MHz clock with jitter (main clock domain). Used as the main system clock.
clk_src_sys_val_o O 1 async System clock valid. Used as "ack" signals for the power manager
clk_src_sys_en_i I 1 aon System clock enable.
clk_src_sys_jen_i I mubi4 async System clock jitter enable
clk_src_aon_o O 1 aon 200 KHz clock for always-on domain.
clk_src_aon_val_o O 1 async aon clock valid
clk_src_usb_o O 1 usb 48 MHz clock for USB. To comply with USB full speed clock specification, it supports frequency accuracy of +/-2500 ppm when usb_ref_pulse_i is available and +/-3% otherwise. It may take up to 50 ms for this clock to reach the accuracy target from the time 'usb_ref_pulse_i' is available. USB clock calibration interface is further detailed here.
clk_src_usb_val_o O 1 async USB clock valid
clk_src_usb_en_i I 1 aon USB clock enable
usb_ref_pulse_i I 1 usb USB reference pulse +/-500ppm. When valid, it is expected to pulse for one usb clock cycle every 1ms.
usb_ref_val_i I 1 usb USB reference valid. This bit serves as a valid signal for the usb_ref_pulse_i signal. It is set to 1 after the first valid usb_ref_pulse_i event is detected and remains high as long as usb_ref_pulse_i continues to behave as expected (per usb_ref_pulse description). Once usb_ref_pulse deviates from its expected behavior, usb_ref_val_i immediately negates to 0 and remains 0 until after the next valid usb_ref_val pulse.
clk_src_io_o O 1 io 96 MHz clock with +/-3% frequency accuracy. Used for peripherals that require a fixed frequency, for example SPI and UART
clk_src_io_val_o O 1 async I/O and timer clock valid. Used as "ack" signals for the Power manager.
clk_src_io_en_i I 1 aon I/O and timer clock enable
clk_src_io_48m_o O mubi4 aon Clock frequency indicator. When set, it indicates that the clk_src_io_o's frequency is 48 MHz; otherwise, it is 96 MHz.
Clock & Reset Inputs
clk_ast_adc_i I 1 adc ADC interface clock input
clk_ast_rng_i I 1 rng RNG interface clock input
clk_ast_usb_i I 1 usb USB reference interface clock input
clk_ast_es_i I 1 es Entropy source interface clock input
clk_ast_alert_i I 1 alert Alert interface clock input
clk_ast_tlul_i I 1 tlul TLUL bus interface clock input
rst_ast_adc_ni I 1 adc ADC interface reset (active low)
rst_ast_rng_ni I 1 rng RNG interface reset (active low)
rst_ast_usb_ni I 1 usb USB reference interface reset (active low)
rst_ast_es_ni I 1 es Entropy source interface reset (active low)
rst_ast_alert_ni I 1 alert Alert interface interface reset (active low)
rst_ast_tlul_ni I 1 tlul TLUL bus reference interface reset (active low)
Register Access Interface
tlul I/O tl_* tlul TLUL bus interface. Mainly used for configuration, calibration and trimming. At boot time, data is copied from non-volatile storage into AST registers by the SW boot entity. This interface has no further use beyond this point. Runtime interaction with AST is performed by other signals as described in this document.
Analog modules
adc_a0_ai I awire async ADC analog input channels 0 to be measured.
Signal type is awire (see ana_pkg.sv)
adc_a1_ai I awire async ADC analog input channels 1 to be measured.
Signal type is awire (see ana_pkg.sv)
adc_d_o O 10 adc ADC digital data
adc_chnsel_i I 2 adc ADC input channel select (one hot). No more than one channel should be selected at a time. Any change in 'adc_chnsel_i' value must go through all '0'. Changing 'adc_chnsel_i' from '0' value to non-'0' value starts an ADC conversion.
adc_d_val_o O 1 adc ADC digital data valid
adc_pd_i I 1 adc ADC power down - for saving power during deep-sleep state between measurements. When this signal is high, ADC module is in off state, otherwise, it is in active state. For further description about adc_pd_i usage, see ADC module description below.
entropy_req_o O edn_req es Request entropy from EDN
entropy_rsp_i I edn_rsp es EDN entropy request acknowledgement and data.
rng_en_i I 1 rng Input from controller to enable RNG
rng_fips_i I 1 rng Indicates that the AST RNG module is requested to output FIPS SP-800-90B grade RNG bits. This may, but not necessarily affect bit-rate. This bit is a placeholder. The use of this signal inside AST is TBD.
rng_val_o O 1 rng RNG bit valid. This is a per-transaction valid. rng_b_o can be sampled whenever this bit is high.
rng_b_o O 4 rng RNG digital bit streams. The downstream controller of this signal should sample the rng_b_o whenever rng_val_o is high.
Countermeasures and Alerts
alert_req_o O ast_alert_req alert Alert events. There are 11 such events. The alerts are associated with countermeasures like Active shield, clock glitch detector, voltage glitch detector, temperature sensor, and others.
alert_rsp_i I ast_alert_rsp alert This structure contains acknowledge signals and force-trigger by software signals for each alert event. The acknowledge signals are assumed to be synchronous pulses.
Trimming Test and Debug
dft_scan_md_o O mubi4 Scan mode indication signal. Controllable only when DFT features are enabled (Test and RMA states). Otherwise, these signals are grounded to 0.
scan_shift_en_o O 1 Scan shift enable
scan_reset_no O 1 Scan reset
clk_ast_ext_i I 1 async

External clock. While AST generates most of its clocks on-die, it still needs an external clock for clock calibration and first flash/OTP programming.

Clock calibration: AST clock sources are inaccurate by default and must be calibrated prior to use. The results of the calibration are stored in OTP and reloaded by software upon system boot.

First Flash / OTP programming: AST clock sources are inaccurate by default and may be out of range for initial flash and OTP programming. In this situation, an external clock may be required for initial programming such that a software image can be loaded to calibrate clocks and advance life cycle.

dft_strap_test_i I dft_strap_test_req async Strap inputs for DFT selection
flash_bist_en_o O mubi4 Flash BIST enable
vcc_supp_i I 1 async VCC Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST.
vcmain_supp_i I 1 async VCMAIN Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST.
vcaon_supp_i I 1 async VCAON Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST.
vioa_supp_i I 1 async VIOA Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST.
viob_supp_i I 1 async VIOB Supply Test. (supply indication for DV purposes). In FPGA Verilog view, the respective POK signal follows this signal. In other Verilog views this signal should be connected to constant '1' and will be disconnected inside the AST.
ast2pad_t0_ao, ast2pad_t1_ao I/O async Analog debug signals. These signals should be connected directly to chip PADs. They can share PADs with functional signals but when they are used for their analog debug function, the functional I/O must be in tri-state.

dpram_rmf_o,

dpram_rml_o,

spram_rm_o,

sprgf_rm_o,

sprom_rm_o

O dpm_rm async RAM/ROM Read-write Margin Trimming
padmux2ast_i I 6 async Digital debug input signals (routed to pin mux). These signals are controllable only when DFT features are enabled (Test and RMA states). Otherwise, these signals are grounded to 0.
ast2padmux_o O 9 async Digital debug output signals (routed to pin mux). These signals are only outputted when DFT features are enabled (Test and RMA states). Otherwise, these signals are grounded to 0.
usb_io_pu_cal_o O 20 async USB I/O calibration and trimming
io_clk_byp_req_i I mubi4 async

External clock mux override request for OTP bootstrap purposes. AST responds to the request by setting io_clk_byp_ack_o to 'On'. When this bit is set and ack was received, clk_ast_ext_i serves as the io_clk clock root.

Note: When 'On' (after ack), clk_src_io_o clock max frequency is limited to 50 MHz

io_clk_byp_ack_o O mubi4 async AST response to io_clk_byp_req_i. The ack is set to 'On' after clock switching function is performed.
all_clk_byp_req_i I mubi4 async

External clock mux override request for OTP bootstrap purposes. AST responds to the request by setting io_clk_byp_ack_o to 'On'. When this bit is set and ack was received, clk_ast_ext_i serves as the io_clk clock root.

Note: When 'On' (after ack), clk_src_io_o clock max frequency is limited to 50 MHz

all_clk_byp_ack_o O mubi4 async AST response to io_clk_byp_req_i. The ack is set to 'On' after clock switching function is performed.
ext_freq_is_96m_i I mubi4 async External clock frequency indication to AST. When set, it indicates that the external clock is 96MHz.
lc_dft_en_i I lc_tx async

DFT enable

fla_obs_i I 8 async Flash observe bus for debug
otp_bos_i I 8 async OTP observe bus for debug
usb_obs_i I 1 async USB differential receiver output observe for debug
otm_obs_i I 8 async OpenTitan modules observe bus for debug (optional)
obs_ctrl_o O ast_obs_ctrl async Observability control structure. It contains observability module selection, signal group selection and enable logic. Open source modules may choose to use this infrastructure for selecting and gating observability signals to be driven into otm_obs_i bus. Whether to actually use this interface or not for open source modules observability is a project decision.
sns_clks_i I clkmgr_out async Clocks observability
sns_rst_i I rstmgr_out_t async Resets observability
sns_spi_ext_clk_i I 1 async SPI external clock observability

Interfaces Description Note

The information below augments the Interface Signals Table. For further details, see the corresponding signals description in the table.

Power Connectivity

Note: Power signals may not appear in the verilog files, however, they are described for completeness.

External Supplies

AST has four external power supplies VCC, AVCC, VIOA and VIOB. VCC is the main supply, AVCC is an analog VCC supply. VIOA and VIOB are two additional I/O supplies.

Core Supplies

The core supplies are generated from the VCC supply. There are two core supply domains: VCMAIN and VCAON. VCAON, as its name implies, is the always-on core supply used to power components that stay active during device low power states. VCMAIN on the other hand, powers most chip logic such as RISC-V processor, crypto modules and almost all memories and peripherals. The VCMAIN supply can be turned off when requested, VCAON on the other hand, is active whenever VCC is active. AST core logic is powered by VCAON.

Power Control and Reset

Core Power Control and Indication

VCMAIN is the only supply that can be directly influenced by OpenTitan. The power manager can request VCMAIN to shutdown through main_pd_ni. The state of VCMAIN is reflected by the vcmain_pok_o signal.

IO Power Indication

IO power state is reflected to OpenTitan by vioa_pok_o and viob_pok_o signals

Main (VCC) Power Detection and Flash Protection

On VCC power-down detection, ‘flash_power_ready_h_o’, is immediately negated. In addition, SYS clock, IO clock and USB clock are stopped. This means that negation of the VCC supply always triggers the flash brown-out (BOR) protection circuitry.

When entering deep-sleep mode, ‘flash_power_down_h_o’ is asserted before negating VCMAIN until VCMAIN is back up.

Resets

The AST supports the generation of the root reset for the reset manager. It is driven by ‘vcaon_pok_o’ which is generated inside AST. The ‘vcaon_pok_o’ is activated when the following conditions are met: VCC is detected, internal voltage regulator is active and ‘por_ni’ reset input is inactive. ‘por_ni’ is driven by an external chip reset pin. The following table and diagrams describe the AST sub-modules resets.

ComponentsReset byComments
Regulators, ‘power-OK’ logic and always-on clockself-start / vcaon_pok_oThese circuits come to life shortly after VCC crosses its detection threshold. vcaon_pok_o serves as their register configuration reset.
System/USB/IO clock generatorsvcmain_pok_ovcmain_pok_o is also fed by vcaon_pok_o and por_ni.
Interface functionsInput resetPer the corresponding interface clock domain reset input.

Clock Outputs

AST generates four clocks: System clock, IO clock, USB clock and Always-on clock. Most clocks have ‘enable’ inputs and a corresponding ‘valid’ output. When the enable is de-asserted, the corresponding clock stops and valid is dropped to 0. When the enable is asserted, the clocks begin outputting in a ‘glitchless’ manner and the valid is raised to 1. Unless noted otherwise, clocks duty cycle is 50% +/-5%. At boot time, clocks start toggling at a different (typically slower) frequency than their target. They are configured to their target frequency by the ROM code. Once configured, their frequency is maintained within +/-3% of their target as long as the chip remains in its intended operating conditions until the next boot.

The OpenTitan power and clock managers are responsible for manipulating the enables and observing the valids to know when clocks can be safely released to the system.

USB Clock Calibration

The USB clock requires an accuracy that cannot be achieved by the AST clocks natively. As a result, information from USB frames are used to calibrate the clock.

Clock and Reset Inputs

The root clocks and resets are generated inside AST. However, the clocks go through gating and optional division in the OpenTitan top level and propagate back into AST as feedback clocks, each with associated synchronized reset de-assertion to ensure it can synchronize with the various comportable modules. The input resets are used for the different AST interface functions. For further details about AST resets, see Resets section.

Note: There are several reasons for routing leaf clocks back into AST instead of using the root clocks directly

  • The leaf clocks may be divided down from the root clock and that frequency is used to drive the interface. For example, clk_src_io_clk_o is 96MHz, but comportable modules use either 48MHz or 24MHz.

  • The leaf clocks and root clocks have very different clock tree depths and may be difficult for timing closure if they interacted directly.

  • Decouple AST internal design from OpenTitan top-level interfaces clock and reset selection.

Register Access Interface

AST registers can be accessed via TL-UL interface. These registers are used for test and calibration purposes and are not required for runtime operation. See the Interface Signals Table for more details.

AST registers initialization during boot.

In PROD*/DEV Lifecycle states, the ROM code must copy all AST REGA registers values from OTP to AST. During other Lifecycle states, the ROM code may also copy all AST REGA registers. It is recommended for the ROM code to condition the copy by a digest verification of the register values. If such a digest is too complicated, a simple tag can be used to condition the copy instead. The AST register copy operation must be performed in order and must include all REGA registers (starting from REGA0 and ending at the last REGA). AST sets the ast_init_done_o signal after the copy completion.

After the copy, ROM code can either poll for ast_init_done_o assertion with 100 us timeout (in practice, it should take way less) or ignore it and let the next SW layers handle it. It is recommended to set an OTP field for determining the ROM code action.

The boot code is expected to check all AST output alert signals before handing over the control to the next code layer (ROM_EXT). The ROM code response per alert should be defined in a dedicated OTP space. Recommended response types (per alert):

  1. Do nothing and don’t clear the event

  2. Do nothing (continue to the next SW layer) and clear the event

  3. Log the event in some NV space and halt

  4. Halt immediately

Note that in TEST_UNLOCK*/RMA state, the booter should always act per #1 regardless of the OTP setting.

It is recommended to redundantly code the OTP fields that control the ROM code branching and also to protect the branching code from fault injection.

ADC

AST contains an analog to digital converter that can be used to sample various input signals. For OpenTitan this will primarily be used for debug cable detection. To activate the ADC, the corresponding comportable module must first activate the ADC through ‘adc_pd_i’. Once activated, it should select the channel to sample. Channel transition from zero to non-zero value starts the ADC conversion. The ADC output is synchronous to the ADC controller.

ADC Usage Flow

  1. Activate the ADC by negating ‘adc_pd_i’

  2. Wait 30 uS for the ADC to wake up.

  3. Select an analog channel to measure by setting the corresponding bit in ‘adc_chnsel_i’ bus. This triggers a measurement.

  4. Wait until ‘adc_d_val’ is set and read the result via ‘adc_d_o’

  5. Clear ‘adc_chnsel_i’ bus to 0. Note that adc_chnsel must be cleared to 0 before a new channel is selected.

  6. Repeat steps 3-5 if more channels or more measurements are required

  7. Deactivate the ADC by setting ‘adc_pd_i’ to save power.

Random Number Generator

AST contains a random number generator that outputs random number bitstreams whenever it is enabled. After enabled by the comportable controller through ‘rng_en_i’, the AST begins generating multiple independent four random bit streams. rng_b_o bit streams are valid and can be sampled whenever ‘rng_val_o’ is asserted according to the following diagram.

The expected rng_b_o valid output rate is about 50KHz. For more information on the RNG interface, please see the OpenTitan entropy source module.

Entropy Consumption

AST consumes entropy for defensive purposes. However, AST does not consume its raw entropy directly. Instead, AST receives entropy from the Entropy Distribution Network (EDN). Note that entropy_ack and entropy_i are packed into enropy_rsp_i in the interface. Also note that once entropy_req_o is set, it will remain set until ack or until reset.

Countermeasures and Alerts

Alert Events

AST’s sensors and detectors, when triggered, output alert events to a sensor controller. The event signals are level until acknowledged by the controller. Further, the events are differentially encoded to ensure they cannot be hard-wired or faulted to either ‘1’ or ‘0’.

Inside the sensor controller, the events are then converted into alerts as part of the wider OpenTitan alert handling system.

Alert Signaling

Outgoing alert events are level. Incoming event ack signals clear the alert event (similar to an interrupt). Outgoing alert events should be OR’d inside the sensor or power manager (depending on what level of deep sleep support is needed) to generate wakeup, that way AST does not need to do any additional handling for wakeups during low power mode.

The AST defines each alert signal in both positive (P) and negative (N) polarity (see ast_dif_t typedef with ‘p’ and ‘n’ signals), however, the P and N signals are not necessarily fully differential, for example, at times, it might occur that both P and N are at the same value. For alert_o case, the correct way to treat it is to propagate an alert signal if either P is high or N is low.

Countermeasures

Most countermeasure enablement is controlled by Nuvoton via the registers interface. Clock jitter is an exception because there is a reasoning for dynamically turning it on and off (security/performance tradeoff). Unless stated otherwise, countermeasures are active in all modes but deep-sleep.

Alert Handler Technical Specification

Overview

This document specifies the functionality of the alert handler mechanism. The alert handler is a module that is a peripheral on the chip interconnect bus, and thus follows the Comportability Specification. It gathers alerts - defined as interrupt-type signals from other peripherals that are designated as potential security threats - throughout the design, and converts them to interrupts that the processor can handle. If the processor does not handle them, the alert handler mechanism provides hardware responses to handle the threat.

Features

  • Differentially-signaled, asynchronous alert inputs from NAlerts peripheral sources, where NAlerts is a function of the requirements of the peripherals.

  • Ping testing of alert sources:

    • responder module requests periodic alert response from each source to ensure proper wiring.
    • reset-asserted and clock-gated information is used to temporarily pause the ping mechanism on alert channels that are in a low-power state.
  • Register locking on all configuration registers.

    • Once locked, can not be modified by software until next system reset.
  • Register-based assignment of alert to alert-class.

    • Four classes, can be individually disabled.
    • Each class generates one interrupt.
    • Disambiguation history for software to determine which alert caused the class interrupt.
    • Each class has configurable response time for escalation.
    • Disable allows for ignoring alerts, should only be used in cases when alerts are faulty. Undesirable access is enforced by locking the register state after initial configuration.
  • Register-based escalation controls.

    • Number of alerts in class before escalation.
    • Timeout for unhandled alert IRQs can also trigger escalation.
    • Configurable escalation enables for 4 escalation signals.
      • Could map to NMI, wipe secrets signal, lower privilege, chip reset, etc.
      • Escalation signals differentially-signaled with heartbeat, will trigger response if differential or heartbeat failure at destination.
    • Configurable time in cycles between each escalation level.
  • Two locally sourced hardware alerts.

    • Differential signaling from a source has failed.
    • Ping response from a source has failed.

Description

The alert handler module manages incoming alerts from throughout the system, classifies them, sends interrupts, and escalates interrupts to hardware responses if the processor does not respond to any interrupts. The intention is for this module to be a stand-in for security responses in the case where the processor can not handle the security alerts.

It is first notable that all security alerts are rare events. Module and top level designers should only designate events as alerts if they are expected to never happen, and if they have potential security consequences. Examples are parity errors (which might indicate an attack), illegal actions on cryptography or security modules, physical sensors of environmental modification (e.g. voltage, temperature), etc. Alerts will be routed through this module and initially converted to interrupts for the processor to handle. The expectation is that the secure operating system has a protocol for handling any such alert interrupt in software. The operating system should respond, then clear the interrupt. Since these are possible security attacks, the response is not always obvious, but the response is beyond the scope of this document.

This module is designed to help the full chip respond to security threats in the case where the processor is not trusted: either it has been attacked, or is not responding. It does this by escalating alerts beyond a processor interrupt. It provides four such escalation signals that can be routed to chip functions for attack responses. This could include such functions as wiping secret chip material, power down, reset, etc. It is beyond the scope of this document to specify what those escalation responses are at the chip level.

To ease software management of alerts, classification is provided whereby each alert can be classified into one of four classes. How the classification is done by software is beyond the scope of this document, but it is suggested that alerts of a similar profile (risk of occurring, level of security concern, frequency of false trigger, etc) are classed together. For each class a counter of alerts is kept, clearable by software. If that counter exceeds a programmable maximum value, then the escalation protocol for that class begins.

The details for alert signaling, classification, and escalation are all given in the Theory of Operations section.

Theory of Operation

Block Diagram

The figure below shows a block diagram of the alert handler module, as well as a few examples of alert senders in other peripheral modules. In this diagram, there are seven sources of alerts: three sources from external modules (two from periph0 and one from periph1), and four local sources (alert_ping_fail, alert_sig_int, esc_ping_fail, esc_sig_int). The local sources represent alerts that are created by this module itself. See the later section on special local alerts.

Alert Handler Block Diagram

Also shown are internal modules for classification, interrupt generation, accumulation, escalation, ping generation and alert-channel low-power control. These are described later in the document. Note that the differential alert sender and receiver blocks used for alert signaling support both asynchronous and synchronous clocking schemes, and hence peripherals able to raise alerts may be placed in clock domains different from that of the alert handler (Jittered clock domains are also supported in the asynchronous clocking scheme). Proper care must however be taken when formulating the timing constraints for the diff pairs, and when determining clock-dependent parameters (such as the ping timeout) of the design. On the escalation sender / receiver side, the differential signaling blocks employ a fully synchronous clocking scheme throughout.

Hardware Interfaces

Parameters

The following table lists the main parameters used throughout the alert handler design. Note that the alert handler is generated based on the system configuration, and hence these parameters are placed into a package as “localparams”. The parameterization rules are explained in more detail in the architectural description.

LocalparamDefault (Max)Top EarlgreyDescription
NAlerts8 (248)see RTLNumber of alert instances. Maximum number bounded by LFSR implementation that generates ping timing.
NLpg1see RTLNumber of unique low-power groups as determined by topgen.
LpgMap{0}see RTLArray mapping each alert to a unique low-power group as determined by topgen.
EscCntWidth32 (32)32Width of the escalation counters in bit.
AccuCntWidth16 (32)16Width of the alert accumulation counters in bit.
AsyncOn’0 (2^NAlerts-1)see RTLThis is a bit array specifying whether a certain alert sender / receiver pair goes across an asynchronous boundary or not.

The next table lists free parameters in the prim_alert_sender and prim_alert receiver submodules.

ParameterDefault (Max)Description
AsyncOn1'b0 (1'b1)0: Synchronous, 1: Asynchronous, determines whether additional synchronizer flops and logic need to be instantiated.

Signals

The table below lists other alert handler module signals. The number of alert instances is parametric and hence alert and ping diff pairs are grouped together in packed arrays. The diff pair signals are indexed with the corresponding alert instance <number>.

SignalDirectionTypeDescription
edn_ooutputotp_edn_req_tEntropy request to the entropy distribution network for LFSR reseeding and ephemeral key derivation.
edn_iinputotp_edn_rsp_tEntropy acknowledgment to the entropy distribution network for LFSR reseeding and ephemeral key derivation.
alert_tx_i[<number>]inputpacked alert_tx_t arrayIncoming alert or ping response(s), differentially encoded. Index range: [NAlerts-1:0]
alert_rx_o[<number>]outputpacked alert_rx_t arrayOutgoing alert acknowledgment and ping requests, differentially encoded. Index range: [NAlerts-1:0]
esc_tx_o[<sev>]outputpacked esc_tx_t arrayEscalation or ping request, differentially encoded. Index corresponds to severity level, and ranges from 0 to 3.
esc_rx_i[<sev>]inputpacked esc_rx_t arrayEscalation ping response, differentially encoded. Index corresponds to severity level, and ranges from 0 to 3.
lpg_cg_en_i[<lpg>]inputpacked mubi4_t arrayIncoming clock gated indication from clock manager. Index range: [NLpg-1:0]
lpg_rst_en_i[<lpg>]inputpacked mubi4_t arrayIncoming reset asserted indication from reset manager. Index range: [NLpg-1:0]
crashdump_ooutputpacked structThis is a collection of alert handler state registers that can be latched by hardware debugging circuitry, if needed.

Entropy Network Connections

The LFSR ping timer needs to be periodically reseeded. Therefore, the alert handler is connected to the entropy distribution network via the edn_i/o signals.

Alert Channels

For each alert, there is a pair of input and two pairs of output signals. These signals are connected to a differential sender module within the source, and a differential receiver module within the alert handler. Both of these modules are described in more detail in the following section. These signal pairs carry differentially encoded messages that enable two types of signaling: a native alert and a ping/response test of the alert mechanism. The latter is to ensure that all alert senders are always active and have not been the target of an attack.

Escalation Channels

For each escalation action in the system, there is a pair of input and a pair of output signals, encapsulated in the esc_rx_t and esc_tx_t types. These signals are connected to a differential sender module within the alert handler, and a differential receiver module within the module that performs a particular escalation action (for example the reset manager or life cycle controllers). The signal pairs carry differentially encoded messages that enable two types of signaling: a native escalation and a ping/response test of the escalation mechanism. The latter is to ensure that all escalation receivers are always active and have not been the target of an attack.

Low-power Indication Signals

The lpg_cg_en_i and lpg_rst_en_i are two arrays with multibit indication signals from the clock and reset managers. These indication signals convey whether a specific group of alert senders are either clock gated or in reset. As explained in more detail below, this information is used to temporarily halt the ping timer mechanism on channels that are in a low-power state in order to prevent false positives.

Crashdump Output

The crashdump_o struct outputs a snapshot of CSRs and alert handler state bits that can be read by hardware debugging circuitry:

  typedef struct packed {
    // alerts
    logic    [NAlerts-1:0] alert_cause;     // alert cause bits
    logic    [6:0]         loc_alert_cause; // local alert cause bits
    // class state
    logic    [3:0][15:0]   class_accum_cnt; // current accumulator value
    logic    [3:0][31:0]   class_esc_cnt;   // current escalation counter value
    cstate_e [3:0]         class_esc_state; // current escalation protocol state
  } alert_crashdump_t;

This can be useful for extracting more information about possible failures or bugs without having to use the tile-link bus interface (which may become unresponsive under certain circumstances). It is recommended for the top level to store this information in an always-on location.

Note that the crashdump state is continuously output via crashdump_o until the latching trigger condition is true for the first time (see CLASSA_CRASHDUMP_TRIGGER_SHADOWED). After that, the crashdump_o is held constant until all classes that have escalated are cleared. This is done so that it is possible to capture the true alert cause before spurious alert events start to pop up due to escalation countermeasures with excessive side effects (like life cycle scrapping for example). If classes that have escalated are not configured as clearable, then it is not possible to re-arm the crashdump latching mechanism at runtime and the alert handler has to be reset.

Design Details

This section gives the full design details of the alert handler module and its submodules.

Alert Definition

Alerts are defined as events that have security implications, and should be handled by the main processor, or escalated to other hardware modules to take action. Each peripheral has the option to define one or more alert signals. Those peripherals should instantiate one module (prim_alert_sender) to convert the event associated with that alert into a signal to the alert handler module. The alert handler instantiates one receiver module (prim_alert_receiver) per alert, then handles the classification, accumulation, and escalation of the received signal. The differential signaling submodules may either use a synchronous or asynchronous clocking scheme, since the message type to be transferred is a single discrete event.

Differential Alert Signaling

Each alert sender is connected to the corresponding alert receiver via the 3 differential pairs alert_tx_i/o.alert_p/n, alert_rx_i/o.ack_p/n and alert_rx_i/o.ping_p/n, as illustrated below:

Alert Handler Alert RXTX

Alerts are encoded differentially and signaled using a full handshake on the alert_tx_i/o.alert_p/n and alert_rx_i/o.ack_p/n wires. The use of a full handshake protocol allows this mechanism to be used with an asynchronous clocking strategy, where peripherals may reside in a different clock domain than the alert handler. The full handshake guarantees that alert messages are correctly back-pressured and no alert is “lost” at the asynchronous boundary due to (possibly variable) clock ratios greater or less than 1.0. The “native alert message” will be repeated on the output wires as long as the alert event is still true within the peripheral.

The wave pattern below illustrates differential full handshake mechanism.

The handshake pattern is repeated as long as the alert is true. The sender will wait for 2 cycles between handshakes.

Note that the alert is immediately propagated to alert_o once the initial level change on alert_tx_i.alert_p/n has been received and synchronized to the local clock on the receiver side. This ensures that the first occurrence of an alert is always propagated - even if the handshake lines have been manipulated to emulate backpressure. (In such a scenario, all subsequent alerts would be back-pressured and eventually the ping testing mechanism described in the next subsection would detect that the wires have been tampered with.)

The alert sender and receiver modules can either be used synchronously or asynchronously. The signaling protocol remains the same in both cases, but the additional synchronizer flops at the diff pair inputs may be omitted, which results in lower signaling latency.

Ping Testing

In order to ensure that the event sending modules have not been compromised, the alert receiver module prim_alert_receiver will “ping” or line-test the senders periodically every few microseconds. Pings timing is randomized so their appearance can not be predicted.

The ping timing is generated by a central LFSR-based timer within the alert handler that randomly asserts the ping_req_i signal of a particular prim_alert_receiver module. Once ping_req_i is asserted, the receiver module encodes the ping message as a level change on the differential alert_rx_o.ping_p/n output, and waits until the sender responds with a full handshake on the alert_tx_i.alert_p/n and alert_rx_o.ack_p/n lines. Once that handshake is complete, the ping_ok_o signal is asserted. The LFSR timer has a programmable ping timeout, after which it will automatically assert a “pingfail” alert. That timeout is a function of the clock ratios present in the system, and has to be programmed accordingly at system startup (as explained later in the LFSR timer subsection).

The following wave diagram illustrates a correct ping sequence, viewed from the receiver side:

In the unlikely case that a ping request collides with a native alert at the sender side, the native alert is held back until the ping handshake has been completed. This slightly delays the transmission of a native alert, but the alert will eventually be signaled. Further, if an alert is sent out right before a ping requests comes in at the sender side, the receiver will treat the alert as a ping response. However, the “true” ping response will be returned right after the alert handshake completed, and thus the alert will eventually be signaled with a slight delay.

Note that in both collision cases mentioned, the delay will be in the order of the handshake length, plus the constant amount of pause cycles between handshakes (2 sender cycles).

Monitoring of Signal Integrity Issues

All differential pairs are monitored for signal integrity issues, and if an encoding failure is detected, the receiver module asserts a signal integrity alert via integ_fail_o. In particular, this covers the following failure cases:

  1. The alert_tx_i.alert_p/n pair is not correctly encoded on the receiver side. This can be directly flagged as an integrity failure on the receiver side.

  2. The alert_rx_i.ping_p/n or the alert_rx_i.ack_p/n pairs are not correctly encoded on the sender side. This is signaled to the receiver by setting the alert_tx_o.alert_p/n wires to the same value, and that value will be continuously toggled. This implicitly triggers a signal integrity alert on the receiver side.

Some of these failure patterns are illustrated in the wave diagram below:

Note that if signal integrity failures occur during ping or alert handshaking, it is possible that the protocol state-machines lock up and the alert sender and receiver modules become unresponsive. However, the above mechanisms ensure that this will always trigger either a signal integrity alert or eventually a “pingfail” alert.

Skew on Asynchronous Differential Pairs

Note that there is likely a (small) skew present within each differential pair of the signaling mechanism above. Since these pairs cross clock domain boundaries, it may thus happen that a level change appears in staggered manner after resynchronization, as illustrated below:

This behavior is permissible, but needs to be accounted for in the protocol logic. Further, the skew within the differential pair should be constrained to be smaller than the shortest clock period in the system. This ensures that the staggered level changes appear at most 1 cycle apart from each other.

LFSR Timer

The ping_req_i inputs of all signaling modules (prim_alert_receiver, prim_esc_sender) instantiated within the alert handler are connected to a central ping timer that alternatingly pings either an alert line or an escalation line after waiting for a pseudo-random amount of clock cycles. Further, this ping timer also randomly selects a particular alert line to be pinged (escalation senders are always pinged in-order due to the ping monitoring mechanism on the escalation side). That should make it more difficult to predict the next ping occurrence based on past observations.

The ping timer is implemented using an LFSR-based PRNG of Galois type. This ping timer is reseeded with fresh entropy from EDN roughly every 500k cycles which corresponds to around 16 ping operations on average. The LFSR is 32bits wide, but only 24bits of its state are actually being used to generate the random timer count and select the alert line to be pinged. I.e., the 32bits first go through a fixed permutation function, and then bits [23:16] are used to determine which alert line to ping. The random cycle count is created by OR’ing bits [15:0] with the constant 3'b100 as follows:

cycle_cnt = permuted[15:0] | 3'b100;

This constant DC offset introduces a minimum ping spacing of 4 cycles (1 cycle + margin) to ensure that the handshake protocols of the sender/receiver pairs work.

After selecting one of the peripherals to ping, the LFSR timer waits until either the corresponding *_ping_ok[<number>] signal is asserted, or until the programmable ping timeout value is reached. In both cases, the LFSR timer proceeds with the next ping, but in the second case it will additionally raise a “pingfail” alert. The ping enable signal remains asserted during the time where the LFSR counter waits.

The timeout value is a function of the ratios between the alert handler clock and peripheral clocks present in the system, and can be programmed at startup time via the register PING_TIMEOUT_CYC_SHADOWED.

Note that the ping timer directly flags a “pingfail” alert if a spurious “ping ok” message comes in that has not been requested.

As described in the programmers guide below, the ping timer has to be enabled explicitly. Only alerts that have been enabled and locked will be pinged in order to avoid spurious alerts. Escalation channels are always enabled, and hence will always be pinged once this mechanism has been turned on.

In addition to the ping timer mechanism described above, the escalation receivers contain monitoring counters that monitor the liveness of the alert handler (described in more detail in this section. This mechanism requires that the maximum wait time between escalation receiver pings is bounded. To that end, escalation senders are pinged in-order every second ping operation (i.e., the wait time is randomized, but the selection of the escalation line is not).

Alert Receiving

The alert handler module contains one alert receiver module (prim_alert_receiver) per sending module. This receiver module has three outputs based upon the signaling of the input alert. Primary is the signal of a received native alert, shown in the top-level diagram as alert_triggered[<number>]. Also generated are two other outputs, one that signals a differential encoding error (alert_integ_fail[<number>]), and one that signals the receipt of a ping response (alert_ping_ok[<number>]). Each “triggered” alert received is sent into the classification block for individual configuration. All of the integ_fail signals are OR’ed together to create one alert for classification. The ping responses are fed to the LFSR timer, which determines whether a ping has correctly completed within the timeout window or not.

Alert Classification and Interrupts

Each of the incoming and local alert signals can be classified generically to one of four classes, or disabled for no classification at all. These are the classes A, B, C, and D. There is no pre-determined definition of a class, that is left to software. But for guidance, software can consider that some alert types are similar to others; some alert types are more “noisy” than others (i.e. when triggered they stay on for long periods of time); some are more critical than others, etc.

For each alert class (A-D), an interrupt is generally sent. Like all other peripheral interrupts, there is a triad of registers: enable, status, test. Thus like all other interrupts, software should handle the source of the interrupt (in this case, the original alert), then clear the state. Since the interrupt class is disassociated with the original alert (due to the classification process), software can access cause registers to determine which alerts have fired since the last clearing. Since alerts are expected to be rare (if ever) events, the complexity of dealing with multiple interrupts per class firing during the same time period should not be of concern. See the programming section on interrupt clearing.

Each of the four interrupts can optionally trigger a timeout counter that triggers escalation if the interrupt is not handled and cleared within a certain time frame. This feature is explained in more detail in the next subsection about escalation mechanisms.

Note that an interrupt always fires once an alert has been registered in the corresponding class. Interrupts are not dependent on escalation mechanisms like alert accumulation or timeout as described in the next subsection.

Escalation Mechanisms

There are two mechanisms per class that can trigger the corresponding escalation protocol:

  1. The first consists of an accumulation counter that counts the amount of alert occurrences within a particular class. An alert classified to class A indicates that on every received alert trigger, the accumulation counter for class A is incremented. Note: since alerts are expected to be rare or never occur, the module does not attempt to count every alert per cycle, but rather all triggers per class are ORd before sending to the accumulation counter as an increment signal. Once the threshold has been reached, the next occurrence triggers the escalation escalation protocol for this particular class. The counter is a saturation counter, meaning that it will not wrap around once it hits the maximum representable count. This mechanism has two associated CSRs:

    • Accumulation max value. This is the total number (sum of all alerts classified in this group) of alerts required to enter escalation phase (see below). Example register is CLASSA_ACCUM_THRESH_SHADOWED.
    • Current accumulation register. This clearable register indicates how many alerts have been accumulated to date. Software should clear before it reaches the accumulation setting to avoid escalation. Example register is CLASSA_ACCUM_CNT.
  2. The second way is an interrupt timeout counter which triggers escalation if an alert interrupt is not handled within the programmable timeout window. Once the counter hits the timeout threshold, the escalation protocol is triggered. The corresponding CSRs are:

    • Interrupt timeout value in cycles CLASSA_TIMEOUT_CYC_SHADOWED. The interrupt timeout is disabled if this is set to 0 (default).
    • The current interrupt timeout value can be read via CLASSA_ESC_CNT if CLASSA_STATE is in the Timeout state. Software should clear the corresponding interrupt state bit INTR_STATE.CLASSA before the timeout expires to avoid escalation.

Technically, the interrupt timeout feature (2. above) is implemented using the same counter used to time the escalation phases. This is possible since escalation phases or interrupt timeout periods are non-overlapping (escalation always takes precedence should it be triggered).

Programmable Escalation Protocol

There are four output escalation signals, 0, 1, 2, and 3. There is no predetermined definition of an escalation signal, that is left to the top-level integration. Examples could be processor Non Maskable Interrupt (NMI), privilege lowering, secret wiping, chip reset, etc. Typically the assumption is that escalation level 0 is the first to trigger, followed by 1, 2, and then 3, emulating a “fuse” that is lit that can’t be stopped once the first triggers (this is however not a requirement). See register section for discussion of counter clearing and register locking to determine the finality of accumulation triggers.

Each class can be programmed with its own escalation protocol. If one of the two mechanisms described above fires, a timer for that particular class is started. The timer can be programmed with up to 4 delays (e.g., CLASSA_PHASE0_CYC), each representing a distinct escalation phase (0 - 3). Each of the four escalation severity outputs (0 - 3) are by default configured to be asserted during the corresponding phase, e.g., severity 0 in phase 0, severity 1 in phase 1, etc. However, this mapping can be freely reassigned by modifying the corresponding enable/phase mappings (e.g., CLASSA_CTRL_SHADOWED.E0_MAP for enable bit 0 of class A). This mapping will be locked in together with the alert enable configuration after initial configuration.

SW can stop a triggered escalation protocol by clearing the corresponding escalation counter (e.g., CLASSA_ESC_CNT). Protection of this clearing is up to software, see the register control section that follows for CLASSA_CTRL_SHADOWED.LOCK.

It should be noted that each of the escalation phases have a duration of at least 1 clock cycle, even if the cycle count of a particular phase has been set to 0.

The next waveform shows the gathering of alerts of one class until eventually the escalation protocol is engaged. In this diagram, two different alerts are shown for class A, and the gathering and escalation configuration values are shown.

In this diagram, the first alert triggers an interrupt to class A. The assumption is that the processor is wedged or taken over, in which case it does not handle the interrupt. Once enough interrupts gather (16 in this case), the first escalation phase is entered, followed by three more (each phase has its own programmable length). Note that the accumulator threshold is set to 15 in order to trigger on the 16th occurrence. If escalation shall be triggered on the first occurrence within an alert class, the accumulation threshold shall be set to 0. Also note that it takes one cycle to activate escalation and enter phase 0.

The next wave shows a case where an interrupt remains unhandled and hence the interrupt timeout counter triggers escalation.

It should be noted here that the differential escalation signaling protocol distinguishes ‘true’ escalation conditions from mere pings by encoding them as pulses that are N + 1 cycles long. This is reflected in the two wave diagrams above. Refer to the subsequent section on escalation signaling for more details.

Escalation Signaling

For each of the four escalation severities, the alert handler instantiates a prim_esc_sender module and each of the four escalation countermeasures instantiates an prim_esc_receiver module. The signaling mechanism has similarities with the alert signaling mechanism - but it is a fully synchronous protocol. Hence, it must be ensured at the top-level that all escalation sender and receiver modules are using the same clock and reset signals.

As illustrated in the following block diagram, a sender-receiver pair is connected with two differential lines, one going from sender to receiver and the other going from receiver to sender.

Alert Handler Escalation RXTX

Upon receiving an escalation enable pulse of width N > 0 at the esc_req_i input, the escalation sender encodes that signal as a differential pulse of width N+1 on esc_tx.esc_p/n. The receiver decodes that message and asserts the esc_req_o output after one cycle of delay. Further, it acknowledges the receipt of that message by continuously toggling the esc_rx.resp_p/n signals as long as the escalation signal is asserted. Any failure to respond correctly will trigger a integ_fail_o alert, as illustrated below:

Further, any differential signal mismatch on both the esc_tx_i.esc_p/n and esc_rx_i.resp_p/n lines will trigger an integ_fail_o alert. Mismatches on esc_rx_i.resp_p/n can be directly detected at the sender. Mismatches on the esc_tx_i.esc_p/n line will be signaled back to the sender by setting both the positive and negative response wires to the same value - and that value is being toggled each cycle. This implicitly triggers a signal integrity alert on the sender side. In addition to that, a signal integrity error on the esc_tx_i.esc_p/n lines will lead to assertion of the esc_req_o output, since it cannot be guaranteed that the back signalling mechanism always works when the sender / receiver pair is being tampered with.

This back-signaling mechanism can be leveraged to fast-track escalation and use another countermeasure in case it is detected that a particular escalation signaling path has been tampered with.

Some signal integrity failure cases are illustrated in the wave diagram below:

Ping Testing of the Escalation Signals

Similarly to the alert signaling scheme, the escalation signaling lines can be pinged / line tested in order to test whether the escalation receiver has been tampered with. This is achieved by asserting ping_req_i at the escalation sender module. A ping request is encoded as a single cycle pulse on the esc_tx_o.esc_p/n outputs. Hence, the receiver module will not decode this single cycle pulse as an escalation enable message, but it will respond to it with a “1010” pattern on the esc_rx_i.resp_p/n lines. The escalation sender module will assert ping_ok_o if that pattern is received correctly after one cycle of latency. Otherwise, the escalation sender will first assert integ_fail_o later, after the programmable ping timeout is reached, the LFSR timer will raise a “pingfail” alert. The integ_fail_o triggers in this case since “no ping response” and “wrong ping response” are ambiguous in this setting, and it has been decided to not suppress integrity failures when expecting a ping response.

This mechanism is illustrated below from the viewpoint of the sender module.

Note that the escalation signal always takes precedence, and the ping_req_i will just be acknowledged with ping_ok_o in case esc_req_i is already asserted. An ongoing ping sequence will be aborted immediately.

Another thing to note is that the ping and escalation response sequences have to start exactly one cycle after either a ping or escalation event has been signaled. Otherwise the escalation sender will assert integ_fail_o immediately.

Monitoring of Pings at the Escalation Receiver Side

Escalation receivers contain a mechanism to monitor the liveness of the alert handler itself. In particular, the receivers passively monitor the ping requests sent out by the alert handler using a timeout counter. If ping requests are absent for too long, the corresponding escalation action will be automatically asserted until reset.

The monitoring mechanism builds on top of the following properties of the alert handler system:

  1. the ping mechanism can only be enabled, but not disabled. This allows us to start the timeout counter once the first ping request arrives at a particular escalation receiver.

  2. the escalation receivers are in the same clock/reset domain as the alert handler. This ensures that we are seeing the same clock frequency, and the mechanism is properly reset together with the alert handler logic.

  3. the maximum cycle count between subsequent pings on the same escalation line is bounded, even though the wait counts are randomized. This allows us to compute a safe and fixed timeout threshold based on design constants.

Low-power Management of Alert Channels

Due to the various clock and reset domains in the OpenTitan system, the alert handler ping mechanism needs to have additional logic to deal with alert senders that are either held in reset, or that are clock gated. This is needed to ensure that no false alarms are produced by the ping mechanism when an alert channel (sender / receiver pair) does not respond due to the sender being either in reset or clock gated.

Since the FSMs associated with an alert channel may end up in an inconsistent state when the sender is reset or gated while an asynchronous event handshake is in progress, this logic also needs to be able to re-initialize affected alert channels whenever the channels comes back from reset / clock gated state.

Assumptions

The following diagram shows a typical arrangement of alert sender (TX) and receiver (RX) pairs.

Alert Handler Low-Power Overview

It is assumed that:

  1. The alert handler clock domain cannot be gated by SW. This means that this clock domain is only ever disabled as part of the power-down sequence of the corresponding power domain.
  2. The alert senders are in general located within different clock and reset domains than the alert receivers within the alert handler, and thus use the asynchronous event handshake mode.
  3. Some alert senders may be located in an always-on (AON) power domain, within different clock and reset groups than the alert handler.
  4. The alert handler may be located in an non-AON power domain, and may thus undergo a reset cycle where it cannot be guaranteed that all alert senders are reset as well (i.e., some alert senders may retain their state).

Further, we assume that we can get the following side-band information from the clock and reset managers in the system:

  • All relevant reset signals pertaining to alert sender domains
  • All relevant clock enable signals pertaining to alert sender domains

Scenarios

With the assumptions above, the following two problematic scenarios can occur.

Alert Handler in Reset

It may happen that the alert handler is reset while some alert senders (e.g. those located in the AON domain) are not. In general, if the associated alert channels are idle during an alert handler reset cycle, no problems arise.

However, if an alert channel is reset while it is handling a ping request or an alert event, the sender / receiver FSMs may end up in an inconsistent state upon deassertion of the alert handler reset. This can either lead to spurious alert or ping events, or a completely locked up alert channel which will be flagged eventually by the ping mechanism.

Alert Sender in Reset or Clock-gated

If any of the alert senders is either put into reset or its clock is disabled while the alert handler is operational, the ping mechanism inside the alert handler will eventually report a ping failure because of missing ping responses from the affected alert channel(s).

Further, if the alert sender is reset while the corresponding alert channel is handling a ping request or an alert event, the sender / receiver FSMs may end up in an inconsistent state after reset deassertion.

Employed Solution

As elaborated before, the side effects of resetting / clock gating either the alert handler or any of the alert senders are inconsistent FSM states, leading to locked up alert channels, or spurious alert or ping events. To address these issues, we have to:

  1. make sure spurious events (alert and ping_ok outputs of the alert receivers) are suppressed if an alert channel is clock gated or in reset,
  2. provide a mechanism for resetting an alert channel to an operational state once the associated clock is re-enabled, or the associated reset is released,
  3. trigger this reset mechanism on all alert channels whenever the alert handler itself has been reset.

To attain this, the idea is to make use of side-band information available from the clock and reset managers to detect whether an alert channel (or a group of alert channels with the same clock and reset on the sender side) has to be put into a low-power state. In the following we will refer to such a clock / reset domain grouping as a low-power group (LPG).

The mechanism is illustrated below for a single LPG (in practice, this logic is replicated for each LPG that is identified in the system):

Alert Handler LPG Ctrl

The clock gating enable (lpg_cg_en) and reset enable (lpg_rst_en) indications are routed as multibit signals to the alert handler, where they are synchronized to the alert handler clock and logically combined using an OR function to form a combined low-power indication signal that is multibit encoded.

This multibit indication signal is then routed to all alert receivers, where it is used to trigger re-initialization of each alert channel, and bypass the ping requests from the ping mechanism.

To that end, two extra init states are added to the alert receiver FSMs to perform this in-band reset, as indicated in the state diagram below:

Alert Handler Receiver FSM

Whenever the init_trig multibit signal of an LPG is asserted, all corresponding sender FSMs are moved into the InitReq state. In that state, the alert receivers immediately acknowledge ping requests from the ping mechanism, and ignore alert events from the sender side. In addition to that, the receivers intentionally place a signal integrity error onto the ping_p / ping_n, ack_p / ack_n lines going from receivers to the senders. This causes the senders to 1) move into the signal integrity error state, and 2) respond by placing a signal integrity error onto the alert_p / alert_n lines, which serves as an initialization “acknowledge” signal in this case. Since the sender FSMs fall back into the Idle state once the signal integrity error disappears, this procedure essentially implements an in-band reset mechanism with an acknowledgement handshake that can be used to determine whether the reset has been successful.

Implementation Aspects

Ping Mechanism Bypass

Note that the ping bypass mechanism is to be implemented in a way that pings are only ack’ed immediately if 1) the FSM is in the InitReq state, and 2) the init_trig signal is still asserted.

This allows to subject the initialization process of each alert channel to the ping mechanism for channels that are recovering from a reset or clock gated cycle on the sender side. I.e., alert channels that get stuck during the initialization process can be detected by the ping mechanism since ping requests are not immediately ack’ed anymore once init_trig is deasserted.

FSM Encoding

Since there are many alert channels in the design, the receiver and sender FSMs themselves are not sparsely encoded. Instead, we rely on the ping mechanism to detect alert channels that are in a bad state. The specific implementation of the ping bypass mentioned in the previous subsection ensures that the ping mechanism can also be used to monitor the initialization sequence of alert channels.

Latency / Skew Considerations

Due to asynchronous transitions and different path latencies in the system, a change in reset or clock gating state will experience a different latency through the alert channels than through the indication signals (rst_n and clk_en) that are connected to the low-power control logic.

It is consequently possible for a group of alert senders to already be in reset or clock gated state, while the corresponding LPG logic does not yet know about this state change - and vice versa.

In practice, this means that ping requests may be pending for several cycles until the LPG logic detects a reset or clock-gated condition and disables the corresponding alert channel(s). Fortunately, such delay can be tolerated by setting the ping timeout to a sufficiently large value (see CLASSA_TIMEOUT_CYC_SHADOWED).

As for alert events, this latency difference should not pose a problem. Alert events may get stuck in the alert sender due to a reset or clock-gated condition - but this is to be expected.

Integration Considerations

Note that due to the aforementioned latency tolerance built into the ping timer, it is permissible to connect any reset or clock enable indication signal from the relevant clock group to the LPG logic. I.e., the only requirement is that the indication signals are logically related to the resets and clocks routed to the alert senders, and that the skew between reset / clock state changes and the indication signals is bounded.

The topgen script is extended so that it can identify all LPGs and the associated alert channels. This information is then used to parameterize the alert handler design, and make the necessary top-level connections from the reset and clock management controllers to the alert handler.

Hardening Against Glitch Attacks

In addition to the differential alert and escalation signalling scheme, the internal state machines and counters are hardened against glitch attacks as described bellow:

  1. Ping Timer:
  • The FSM is sparsely encoded.
  • The LFSR and the counter are duplicated.
  • If the FSM or counter are glitched into an invalid state, all internal ping fail alerts will be permanently asserted.
  1. Escalation Timers:
  • The escalation timer FSMs are sparsely encoded.
  • The escalation timer counters are duplicated.
  • The escalation accumulators are duplicated.
  • If one of these FSMs, counters or accumulators are glitched into an invalid state, all escalation actions will be triggered and the affected FSM goes into a terminal FsmError state.
  1. CSRs:
  • Critical configuration CSRs are shadowed.
  • The shadow CSRs can trigger additional internal alerts for CSR storage and update failures. These internal alerts are fed back into the alert classifier in the same manner as the ping and integrity failure alerts.
  1. LPGs:
  • Clock-gated and reset-asserted indication signals that are routed from clock and reset managers to the alert handler are encoded with multibit signals.

ALERT_HANDLER DV document

Goals

  • DV
    • Verify all ALERT_HANDLER IP features by running dynamic simulations with a SV/UVM based testbench
    • Develop and run all tests based on the testplan below towards closing code and functional coverage on the IP and all of its sub-modules
    • Verify transmitter and receiver pairs for alert (/hw/ip/prim/dv/prim_alert) and escalation (/hw/ip/prim/dv/prim_esc) via direct stimulus.
  • FPV
    • Verify TileLink device protocol compliance with an SVA based testbench
    • Verify transmitter and receiver pairs for alert and escalator
    • Verify alert_handler_esc_timer and alert_handler_ping_timer

Current status

Design features

For detailed information on ALERT_HANDLER design features, please see the ALERT_HANDLER HWIP technical specification.

Testbench architecture

ALERT_HANDLER testbench has been constructed based on the CIP testbench architecture.

Block diagram

Block diagram

Top level testbench

Top level testbench is located at hw/ip/alert_handler/dv/tb/tb.sv. It instantiates the ALERT_HANDLER DUT module hw/ip/alert_handler/rtl/alert_handler.sv. In addition, it instantiates the following interfaces, connects them to the DUT and sets their handle into uvm_config_db:

The alert_handler testbench environment can be reused in chip level testing.

Common DV utility components

The following utilities provide generic helper tasks and functions to perform activities that are common across the project:

Global types & methods

All common types and methods defined at the package level can be found in alert_handler_env_pkg. Some of them in use are:

  parameter uint NUM_MAX_ESC_SEV = 8;

TL_agent

ALERT_HANDLER testbench instantiates (already handled in CIP base env) tl_agent which provides the ability to drive and independently monitor random traffic via TL host interface into ALERT_HANDLER device.

ALERT_ESC Agent

ALERT_ESC agent is used to drive and monitor transmitter and receiver pairs for the alerts and escalators. Alert_handler DUT includes alert_receivers and esc_senders, so the alert_esc agent will drive output signals of the alert_senders and esc_receivers.

UVM RAL Model

The ALERT_HANDLER RAL model is created with the ralgen FuseSoC generator script automatically when the simulation is at the build stage.

It can be created manually by invoking regtool.

Stimulus strategy

Test sequences

All test sequences reside in hw/ip/alert_handler/dv/env/seq_lib. The alert_handler_base_vseq virtual sequence is extended from cip_base_vseq and serves as a starting point. All test sequences are extended from alert_handler_base_vseq. It provides commonly used handles, variables, functions and tasks that the test sequences can simple use / call. Some of the most commonly used tasks / functions are as follows:

  • alert_handler_init: Configure alert_handler DUT by writing to intr_en, alert_en_shadowed_*, alert_class_shadowed_*, loc_alert_en_shadowed_*, loc_alert_class_shadowed_* registers.
  • drive_alert: Drive alert_tx signal pairs through alert_sender_driver.
  • drive_esc_rsp: Drive esc_rx signal pairs through esc_receiver_driver.
  • read_ecs_status: Readout registers that reflect escalation status, including classa/b/c/d_accum_cnt, classa/b/c/d_esc_cnt, and classa/b/c/d_state.
  • wait_alert_handshake_done: Wait for alert_rx/tx handshake to finish. If the alert’s low-power-group(LPG) is enabled, immediately return.
  • wait_esc_handshake_done: Wait for esc_rx/tx handshake to finish by reading class*_state registers and check esc_rx/tx signals.
  • set_alert_lpg: Given alert index, find the linked LPG group and enabled the LPG group by driving lpg_cg_en or lpg_rst_en to Mubi4True.
  • run_esc_rsp_seq_nonblocking: A non-blocking sequence to drive esc_tx when received escalation or escalation-ping requests.
  • run_alert_ping_rsp_seq_nonblocking: A non-blocking sequence to drive alert_rx when received alert-ping requests.

Functional coverage

To ensure high quality constrained random stimulus, it is necessary to develop a functional coverage model. The detailed covergroups are documented under alert_handler testplan.

Self-checking strategy

Scoreboard

The alert_handler_scoreboard is primarily used for end to end checking. It creates the following analysis ports to retrieve the data monitored by corresponding interface agents:

  • tl_a_chan_fifo: tl address channel
  • tl_d_chan_fifo: tl data channel
  • alert_fifo: An array of alert_fifo that connects to corresponding alert_monitors
  • esc_fifo: An array of esc_fifo that connects to corresponding esc_monitors

Alert_handler scoreboard monitors all valid CSR registers, alert handshakes, and escalation handshakes. To ensure certain alert, interrupt, or escalation signals are triggered at the expected time, the alert_handler scoreboard implemented a few counters:

  • intr_cnter_per_class[NUM_ALERT_HANDLER_CLASSES]: Count number of clock cycles that the interrupt bit stays high. If the stored number is larger than the timeout_cyc registers, the corresponding escalation is expected to be triggered
  • accum_cnter_per_class[NUM_ALERT_HANDLER_CLASSES]: Count number of alerts triggered under the same class. If the stored number is larger than the accum_threshold registers, the corresponding escalation is expected to be triggered
  • esc_cnter_per_signal[NUM_ESC_SIGNALS]: Count number of clock cycles that each escalation signal stays high. Compare the counter against phase_cyc registers

The alert_handler scoreboard is parameterized to support different number of classes, alert pairs, and escalation pairs.

Assertions

  • TLUL assertions: The tb/alert_handler_bind.sv binds the tlul_assert assertions to the IP to ensure TileLink interface protocol compliance.
  • Unknown checks on DUT outputs: The RTL has assertions to ensure all outputs are initialized to known values after coming out of reset.

Building and running tests

We are using our in-house developed regression tool for building and running our tests and regressions. Please take a look at the link for detailed information on the usage, capabilities, features and known issues. Here’s how to run a smoke test:

$ $REPO_TOP/util/dvsim/dvsim.py $REPO_TOP/hw/$CHIP/ip_autogen/alert_handler/dv/alert_handler_sim_cfg.hjson -i alert_handler_smoke

In this run command, $CHIP can be top_earlgrey, etc.

Testplan

Testplan

Testpoints

Stage Name Tests Description
V1 smoke alert_handler_smoke
  • Alert_handler smoke test with one class configured that escalates through all phases after one alert has been triggered
  • Check interrupt pins, alert cause CSR values, escalation pings, and crashdump_o output values
  • Support both synchronous and asynchronous settings
V1 csr_hw_reset alert_handler_csr_hw_reset

Verify the reset values as indicated in the RAL specification.

  • Write all CSRs with a random value.
  • Apply reset to the DUT as well as the RAL model.
  • Read each CSR and compare it against the reset value. it is mandatory to replicate this test for each reset that affects all or a subset of the CSRs.
  • It is mandatory to run this test for all available interfaces the CSRs are accessible from.
  • Shuffle the list of CSRs first to remove the effect of ordering.
V1 csr_rw alert_handler_csr_rw

Verify accessibility of CSRs as indicated in the RAL specification.

  • Loop through each CSR to write it with a random value.
  • Read the CSR back and check for correctness while adhering to its access policies.
  • It is mandatory to run this test for all available interfaces the CSRs are accessible from.
  • Shuffle the list of CSRs first to remove the effect of ordering.
V1 csr_bit_bash alert_handler_csr_bit_bash

Verify no aliasing within individual bits of a CSR.

  • Walk a 1 through each CSR by flipping 1 bit at a time.
  • Read the CSR back and check for correctness while adhering to its access policies.
  • This verify that writing a specific bit within the CSR did not affect any of the other bits.
  • It is mandatory to run this test for all available interfaces the CSRs are accessible from.
  • Shuffle the list of CSRs first to remove the effect of ordering.
V1 csr_aliasing alert_handler_csr_aliasing

Verify no aliasing within the CSR address space.

  • Loop through each CSR to write it with a random value
  • Shuffle and read ALL CSRs back.
  • All CSRs except for the one that was written in this iteration should read back the previous value.
  • The CSR that was written in this iteration is checked for correctness while adhering to its access policies.
  • It is mandatory to run this test for all available interfaces the CSRs are accessible from.
  • Shuffle the list of CSRs first to remove the effect of ordering.
V1 csr_mem_rw_with_rand_reset alert_handler_csr_mem_rw_with_rand_reset

Verify random reset during CSR/memory access.

  • Run csr_rw sequence to randomly access CSRs
  • If memory exists, run mem_partial_access in parallel with csr_rw
  • Randomly issue reset and then use hw_reset sequence to check all CSRs are reset to default value
  • It is mandatory to run this test for all available interfaces the CSRs are accessible from.
V1 regwen_csr_and_corresponding_lockable_csralert_handler_csr_rw
alert_handler_csr_aliasing

Verify regwen CSR and its corresponding lockable CSRs.

  • Randomly access all CSRs
  • Test when regwen CSR is set, its corresponding lockable CSRs become read-only registers

Note:

  • If regwen CSR is HW read-only, this feature can be fully tested by common CSR tests - csr_rw and csr_aliasing.
  • If regwen CSR is HW updated, a separate test should be created to test it.

This is only applicable if the block contains regwen and locakable CSRs.

V2 esc_accum alert_handler_esc_alert_accum

Based on the smoke test, this test will focus on testing the escalation accumulation feature. So all the escalations in the test will be triggered by alert accumulation.

V2 esc_timeout alert_handler_esc_intr_timeout

Based on the smoke test, this test will focus on testing the escalation timeout feature. So all the escalations in the test will be triggered by interrupt timeout.

V2 entropy alert_handler_entropy

Based on the smoke test, this test enables ping testing, and check if the ping feature correctly pings all devices within certain period of time.

V2 sig_int_fail alert_handler_sig_int_fail

This test will randomly inject differential pair failures on alert tx/rx pairs and the escalator tx/rx pairs. Then check if integrity failure alert is triggered and escalated.

V2 clk_skew alert_handler_smoke

This test will randomly inject clock skew within the differential pairs. Then check no alert is raised.

V2 random_alerts alert_handler_random_alerts

Input random alerts and randomly write phase cycles.

V2 random_classes alert_handler_random_classes

Based on random_alerts test, this test will also randomly enable interrupt classes.

V2 ping_timeout alert_handler_ping_timeout

Based on entropy test, this test request alert_sender and esc_receiver drivers to randomly create ping requests timeout stimulus.

Checks:

  • Verify interrupt pin and states.
  • Verify alert and local alert causes.
  • Verify escalation states and counts.
V2 lpg alert_handler_lpg
alert_handler_lpg_stub_clk

Test alert_handler low_power_group(lpg) request.

Stimulus:

  • Randomly enabled alert_receivers' alert_en but disable their ping response.
  • Turn on their low-power control by either set lpg_cg_en_i or lpg_rst_en_i. Or pause the alert_handler's clk input for a random period of time.
  • Enable alert ping timeout local alert.
  • Run alert_handler_entropy_vseq.

Checks:

  • Expect no ping timeout error because the alert_receivers are disabled via low-power group, or because alert_handler's clk input is paused due to sleep mode.
V2 stress_all alert_handler_stress_all

Combine above sequences in one test to run sequentially with the following exclusions:

  • CSR sequences: scoreboard disabled
  • Ping_corner_cases sequence: included reset in the sequence
V2 alert_handler_entropy_stress_test alert_handler_entropy_stress

Stress the alert_handler's entropy request and make sure there is no spurious alert.

Stimulus:

  • Randomly force the wait_cyc_mask_i to a legal value to stress the ping requests.
  • Wait for all alerts at least being pinged for a few times. Checks:
  • Check alert_cause and loc_alert_cause registers to make sure there is no spurious alert being fired.
V2 alert_handler_alert_accum_saturation alert_handler_alert_accum_saturation

This sequence forces all four alert classes' accumulate counters to a large value that is close to the max saturation value. Then the sequence triggers alerts until the count saturates.

Checks:

  • Check accum_cnt register does not overflow, but stays at the max value.
  • Check the correct interrupt fires if even the count saturates.
V2 intr_test alert_handler_intr_test

Verify common intr_test CSRs that allows SW to mock-inject interrupts.

  • Enable a random set of interrupts by writing random value(s) to intr_enable CSR(s).
  • Randomly "turn on" interrupts by writing random value(s) to intr_test CSR(s).
  • Read all intr_state CSR(s) back to verify that it reflects the same value as what was written to the corresponding intr_test CSR.
  • Check the cfg.intr_vif pins to verify that only the interrupts that were enabled and turned on are set.
  • Clear a random set of interrupts by writing a randomly value to intr_state CSR(s).
  • Repeat the above steps a bunch of times.
V2 tl_d_oob_addr_access alert_handler_tl_errors

Access out of bounds address and verify correctness of response / behavior

V2 tl_d_illegal_access alert_handler_tl_errors

Drive unsupported requests via TL interface and verify correctness of response / behavior. Below error cases are tested bases on the TLUL spec

  • TL-UL protocol error cases
    • invalid opcode
    • some mask bits not set when opcode is PutFullData
    • mask does not match the transfer size, e.g. a_address = 0x00, a_size = 0, a_mask = 'b0010
    • mask and address misaligned, e.g. a_address = 0x01, a_mask = 'b0001
    • address and size aren't aligned, e.g. a_address = 0x01, a_size != 0
    • size is greater than 2
  • OpenTitan defined error cases
    • access unmapped address, expect d_error = 1 when devmode_i == 1
    • write a CSR with unaligned address, e.g. a_address[1:0] != 0
    • write a CSR less than its width, e.g. when CSR is 2 bytes wide, only write 1 byte
    • write a memory with a_mask != '1 when it doesn't support partial accesses
    • read a WO (write-only) memory
    • write a RO (read-only) memory
    • write with instr_type = True
V2 tl_d_outstanding_access alert_handler_csr_hw_reset
alert_handler_csr_rw
alert_handler_csr_aliasing
alert_handler_same_csr_outstanding

Drive back-to-back requests without waiting for response to ensure there is one transaction outstanding within the TL device. Also, verify one outstanding when back- to-back accesses are made to the same address.

V2 tl_d_partial_access alert_handler_csr_hw_reset
alert_handler_csr_rw
alert_handler_csr_aliasing
alert_handler_same_csr_outstanding

Access CSR with one or more bytes of data. For read, expect to return all word value of the CSR. For write, enabling bytes should cover all CSR valid fields.

V2S shadow_reg_update_error alert_handler_shadow_reg_errors

Verify shadowed registers' update error.

  • Randomly pick a shadowed register in the DUT.
  • Write it twice with different values.
  • Verify that the update error alert is triggered and the register value remains unchanged.
  • Verify the update_error status register field is set to 1.
  • Repeat the above steps a bunch of times.
V2S shadow_reg_read_clear_staged_value alert_handler_shadow_reg_errors

Verify reading a shadowed register will clear its staged value.

  • Randomly pick a shadowed register in the DUT.
  • Write it once and read it back to clear the staged value.
  • Then write it twice with the same new value (but different from the previous step).
  • Read it back to verify the new value and ensure that the update error alert did not trigger.
  • Verify the update_error status register field remains the same value.
  • Repeat the above steps a bunch of times.
V2S shadow_reg_storage_error alert_handler_shadow_reg_errors

Verify shadowed registers' storage error.

  • Randomly pick a shadowed register in the DUT.
  • Backdoor write to shadowed or committed flops to create a storage fatal alert.
  • Check if fatal alert continuously fires until reset.
  • Verify that all other frontdoor write attempts are blocked during the storage error.
  • Verify that storage_error status register field is set to 1.
  • Reset the DUT.
  • Read all CSRs to ensure the DUT is properly reset.
  • Repeat the above steps a bunch of times.
V2S shadowed_reset_glitch alert_handler_shadow_reg_errors

Verify toggle shadowed_rst_n pin can trigger storage error.

  • Randomly drive shadowed_rst_n pin to low or rst_n pin to low.
  • check if any registers have been written before the reset. If so check if storage error fatal alert is triggered.
  • Check status register.
  • Drive shadowed_rst_n pin or rst_n pin back to high.
  • If fatal alert is triggered, reset the DUT.
  • Read all CSRs to ensure the DUT is properly reset.
  • Repeat the above steps a bunch of times.
V2S shadow_reg_update_error_with_csr_rw alert_handler_shadow_reg_errors_with_csr_rw

Run shadow_reg_update_error sequence in parallel with csr_rw sequence.

  • Randomly select one of the above sequences.
  • Apply csr_rw sequence in parallel but disable the csr_access_abort to ensure all shadowed registers' write/read to be executed without aborting.
  • Repeat the above steps a bunch of times.
V2S tl_intg_err alert_handler_tl_intg_err
alert_handler_sec_cm

Verify that the data integrity check violation generates an alert.

  • Randomly inject errors on the control, data, or the ECC bits during CSR accesses. Verify that triggers the correct fatal alert.
  • Inject a fault at the onehot check in u_reg.u_prim_reg_we_check and verify the corresponding fatal alert occurs
V2S sec_cm_bus_integrity alert_handler_tl_intg_err

Verify the countermeasure(s) BUS.INTEGRITY.

V2S sec_cm_config_shadow alert_handler_shadow_reg_errors

Verify the countermeasure(s) CONFIG.SHADOW.

V2S sec_cm_ping_timer_config_regwen alert_handler_smoke

Verify the countermeasure(s) PING_TIMER.CONFIG.REGWEN.

V2S sec_cm_alert_config_regwen alert_handler_smoke

Verify the countermeasure(s) ALERT.CONFIG.REGWEN.

V2S sec_cm_alert_loc_config_regwen alert_handler_smoke

Verify the countermeasure(s) ALERT_LOC.CONFIG.REGWEN.

V2S sec_cm_class_config_regwen alert_handler_smoke

Verify the countermeasure(s) CLASS.CONFIG.REGWEN.

V2S sec_cm_alert_intersig_diff alert_handler_sig_int_fail

Verify the countermeasure(s) ALERT.INTERSIG.DIFF.

V2S sec_cm_lpg_intersig_mubi alert_handler_lpg

Verify the countermeasure(s) LPG.INTERSIG.MUBI.

V2S sec_cm_esc_intersig_diff alert_handler_sig_int_fail

Verify the countermeasure(s) ESC.INTERSIG.DIFF.

V2S sec_cm_alert_rx_intersig_bkgn_chk alert_handler_entropy

Verify the countermeasure(s) ALERT_RX.INTERSIG.BKGN_CHK.

V2S sec_cm_esc_tx_intersig_bkgn_chk alert_handler_entropy

Verify the countermeasure(s) ESC_TX.INTERSIG.BKGN_CHK.

V2S sec_cm_esc_rx_intersig_bkgn_chk N/A

Verify the countermeasure(s) ESC_RX.INTERSIG.BKGN_CHK.

V2S sec_cm_esc_timer_fsm_sparse alert_handler_sec_cm

Verify the countermeasure(s) ESC_TIMER.FSM.SPARSE.

V2S sec_cm_ping_timer_fsm_sparse alert_handler_sec_cm

Verify the countermeasure(s) PING_TIMER.FSM.SPARSE.

V2S sec_cm_esc_timer_fsm_local_esc alert_handler_sec_cm

Verify the countermeasure(s) ESC_TIMER.FSM.LOCAL_ESC.

V2S sec_cm_ping_timer_fsm_local_esc alert_handler_sec_cm

Verify the countermeasure(s) PING_TIMER.FSM.LOCAL_ESC.

V2S sec_cm_esc_timer_fsm_global_esc alert_handler_sec_cm

Verify the countermeasure(s) ESC_TIMER.FSM.GLOBAL_ESC.

V2S sec_cm_accu_ctr_redun alert_handler_sec_cm

Verify the countermeasure(s) ACCU.CTR.REDUN.

V2S sec_cm_esc_timer_ctr_redun alert_handler_sec_cm

Verify the countermeasure(s) ESC_TIMER.CTR.REDUN.

V2S sec_cm_ping_timer_ctr_redun alert_handler_sec_cm

Verify the countermeasure(s) PING_TIMER.CTR.REDUN.

V2S sec_cm_ping_timer_lfsr_redun alert_handler_sec_cm

Verify the countermeasure(s) PING_TIMER.LFSR.REDUN.

V3 stress_all_with_rand_reset alert_handler_stress_all_with_rand_reset

This test runs 3 parallel threads - stress_all, tl_errors and random reset. After reset is asserted, the test will read and check all valid CSR registers.

Covergroups

Name Description
accum_cnt_cg

Covers escalation due to accumulated alerts.

  • Collect the threshold of accumulated alerts.
  • Collect which alert_class exceeds the accumulated count.
  • Cross the above coverpoints.
alert_cause_cg

Covers alert_cause register and related items.

  • Collect which alert causes the alert_cause register to set.
  • Collect the alert_class that this alert belongs to.
  • Cross the above coverpoints.
alert_class_regwen_cg

Covers if regwen is locked for alert_class registers.

alert_en_regwen_cg

Covers if regwen is locked for alert_en registers.

alert_handshake_complete_cg

Cover if the alert handshake completes.

alert_loc_alert_cause_cg

Covers loc_alert_cause register regarding alert.

  • Collect two loc_alert causes: alert_ping_fail and alert_integrity_fail.
  • Collect which alert triggers this loc_alert.
  • Collect the alert_class that this local alert belongs to.
  • Cross the first coverpoint with the rest of the coverpoints.
alert_lpg_cg

Covers alert lpg status during an alert request.

Cover if its lower-power-group (lpg) is enabled or disabled during an alert request.

alert_ping_with_lpg_wrap_cg

Covers ping requests are initiated with LPG enabled or disabled.

alert_trans_cg

Cover if the transaction is a ping request or an actual alert request.

class_accum_thresh_regwen_cg

Covers if regwen is locked for class_accum_thresh registers.

class_clr_regwen_cg

Covers if regwen is locked for class_clr registers.

class_crashdump_trigger_regwen_cg

Covers if regwen is locked for class_crashdump_trigger registers.

class_ctrl_regwen_cg

Covers if regwen is locked for class_ctrl registers.

class_phase_cyc_regwen_cg

Covers if regwen is locked for class_phase_cyc registers.

class_timeout_cyc_regwen_cg

Covers if regwen is locked for class_timeout_cyc registers.

clear_esc_cnt_cg

Covers escalation counter being cleared by class_clr_shadowed register.

clear_intr_cnt_cg

Covers interrupt counter being cleared by class_clr_shadowed register.

crashdump_trigger_cg

Covers which phase triggers crashdump.

cycles_bwtween_pings_cg

Covers how many cycles are there between two ping requests.

esc_handshake_complete_cg

Cover if the escalation handshake completes.

esc_loc_alert_cause_cg

Covers loc_alert_cause register regarding escalation.

  • Collect two loc_alert causes: esc_ping_fail and esc_integrity_fail.
  • Collect which escalation triggers this loc_alert.
  • Collect the alert_class that this local alert belongs to.
  • Cross the first coverpoint with the rest of the coverpoints.
esc_sig_length_cg

Covers escalation signal length for each escalation signal.

esc_trans_cg

Cover if the transaction is a ping request or an actual escalation request.

intr_timeout_cnt_cg

Covers escalation due to interrupt timeout.

  • Collect the threshold of interrupt timeout cycles.
  • Collect which alert_class exceeds the timeout threshold.
  • Cross the above coverpoints.
loc_alert_class_regwen_cg

Covers if regwen is locked for loc_alert_class registers.

loc_alert_en_regwen_cg

Covers if regwen is locked for loc_alert_en registers.

num_checked_pings_cg

Covers if simulation runs long enough to capture more than twenty ping requests.

num_edn_reqs_cg

Covers if simulation runs long enough to capture more than five EDN requests.

regwen_val_when_new_value_written_cg

Cover each lockable reg field with these 2 cases:

  • When regwen = 1, a different value is written to the lockable CSR field, and a read occurs after that.
  • When regwen = 0, a different value is written to the lockable CSR field, and a read occurs after that.

This is only applicable if the block contains regwen and locakable CSRs.

shadow_field_errs_cg

Cover all shadow register errors for each register field.

For all register fields within the shadowed register, this coverpoint covers the following errors:

  • Update error
  • Storage error
tl_errors_cg

Cover the following error cases on TL-UL bus:

  • TL-UL protocol error cases.
  • OpenTitan defined error cases, refer to testpoint tl_d_illegal_access.
tl_intg_err_cg

Cover all kinds of integrity errors (command, data or both) and cover number of error bits on each integrity check.

Cover the kinds of integrity errors with byte enabled write on memory if applicable: Some memories store the integrity values. When there is a subword write, design re-calculate the integrity with full word data and update integrity in the memory. This coverage ensures that memory byte write has been issued and the related design logic has been verfied.

Programmer’s Guide

Power-up and Reset Considerations

False alerts during power-up and reset are not possible since the alerts are disabled by default, and need to be configured and locked in by the firmware. The ping timer won’t start until initial configuration is over and the registers are locked in.

The low-power state management of alert channels is handled entirely by hardware and hence this is transparent to software. Note however that the LPGs inherit the security properties of the associated clock groups and resets. This means that the low-power state of certain alerts can be controlled by SW by means of clock gating or block reset. For example, certain crypto blocks are located in a transactional clock group which can be clock gated by SW - and this also affects the associated alerts of these crypto blocks. See clock and reset managers for more detail.

Initialization

To initialize the block, software running at a high privilege levels (early in the security settings process) should do the following:

  1. For each alert and each local alert:

  2. Set the ping timeout value PING_TIMEOUT_CYC_SHADOWED. This value is dependent on the clock ratios present in the system.

  3. For each class (A..D):

    • Determine whether to enable escalation mechanisms (accumulation / interrupt timeout) for this particular class. Set CLASSA_CTRL_SHADOWED.EN accordingly.

    • Determine if this class of alerts allows clearing of escalation once it has begun. Set CLASSA_CTRL_SHADOWED.LOCK to true if clearing should be disabled. If true, once escalation protocol begins, it can not be stopped, the assumption being that it ends in a chip reset else it will be rendered useless thenceforth.

    • Determine the number of alerts required to be accumulated before escalation protocol kicks in. Set CLASSA_ACCUM_THRESH accordingly.

    • Determine whether the interrupt associated with that class needs a timeout. If yes, set CLASSA_TIMEOUT_CYC_SHADOWED to an appropriate value greater than zero (zero corresponds to an infinite timeout and disables the mechanism).

    • For each escalation phase (0..3):

    • For each escalation signal (0..3):

      • Determine whether to enable the escalation signal, and set the CLASSA_CTRL_SHADOWED.E0_EN bit accordingly (default is enabled). Note that setting all of the E*_EN bits to 0 within a class has the same effect of disabling the entire class by setting CLASSA_CTRL_SHADOWED.EN to zero.
      • Determine the phase -> escalation mapping of this class and program it via the CLASSA_CTRL_SHADOWED.E0_MAP values if it needs to be changed from the default mapping (0->0, 1->1, 2->2, 3->3).
    • Optionally lock the class configuration by writing 0 to CLASSA_CTRL_SHADOWED.REGWEN.

  4. After initial configuration at startup, enable the ping timer mechanism by writing 1 to PING_TIMER_EN. It is also recommended to lock the ping timer configuration by clearing PING_TIMER_REGWEN. Note that only locked and enabled alerts are going to be pinged using the ping mechanism. This ensures that spurious ping failures cannot occur when previously enabled alerts are being disabled again (before locking).

Interrupt Handling

For every alert that is enabled, an interrupt will be triggered on class A, B, C, or D. To handle an interrupt of a particular class, software should execute the following steps:

  1. If needed, check the escalation state of this class by reading CLASSA_STATE. This reveals whether escalation protocol has been triggered and in which escalation phase the class is. In case interrupt timeouts are enabled the class will be in timeout state unless escalation has already been triggered. The current interrupt or escalation cycle counter can be read via CLASSA_ESC_CNT.

  2. Since the interrupt does not indicate which alert triggered, SW must read the cause registers LOC_ALERT_CAUSE and ALERT_CAUSE etc. The cause bits of all alerts are concatenated and chunked into 32bit words. Hence the register file contains as many cause words as needed to cover all alerts present in the system. Each cause register contains a sticky bit that is set by the incoming alert, and is clearable with a write by software. This should only be cleared after software has cleared the event trigger, if applicable. It is possible that the event requires no clearing (e.g. a parity error), or can’t be cleared (a breach in the metal mesh protecting the chip).

    Note that in the rare case when multiple events are triggered at or about the same time, all events should be cleared before proceeding.

  3. After the event is cleared (if needed or possible), software should handle the interrupt as follows:

    • Resetting the accumulation register for the class by writing CLASSA_CLR. This also aborts the escalation protocol if it has been triggered. If for some reason it is desired to never allow the accumulator or escalation to be cleared, software can initialize the CLASSA_CLR_REGWEN register to zero. If CLASSA_CLR_REGWEN is already false when an alert interrupt is detected (either due to software control or hardware trigger via CLASSA_CTRL_SHADOWED.LOCK), then the accumulation counter can not be cleared and this step has no effect.

    • After the accumulation counter is reset (if applicable), software should clear the class A interrupt state bit INTR_STATE.CLASSA. Clearing the class A interrupt state bit also clears and stops the interrupt timeout counter (if enabled).

Note that testing interrupts by writing to the interrupt test registers does also trigger the internal interrupt timeout (if enabled), since the interrupt state is used as enable signal for the timer. However, alert accumulation will not be triggered by this testing mechanism.

Device Interface Functions (DIFs)

Register Table

Additional Notes

Timing Constraints

The skew within all differential signal pairs must be constrained to be smaller than the period of the fastest clock operating the alert handler receivers. The maximum propagation delay of differential pair should also be constrained (although it may be longer than the clock periods involved).

Fast-track Alerts

Note that it is possible to program a certain class to provide a fast-track response for critical alerts by setting its accumulation trigger value to 1, and configuring the escalation protocol such that the appropriate escalation measure is triggered within escalation phase 0. This results in a minimal escalation latency of 4 clock cycles from alert sender input to escalation receiver output in the case where all involved signaling modules are completely synchronous with the alert handler. In case the alert sender is asynchronous w.r.t. to the alert handler, the actual latency depends on the clock periods involved. Assuming both clocks have the same frequency alert propagation takes at least 6-8 clock alert handler clock cycles.

For alerts that mandate an asynchronous response (i.e. without requiring a clock to be active), it is highly recommended to build a separate network at the top-level. That network should OR’ the critical sources together and route the asynchronous alert signal directly to the highest severity countermeasure device. Examples for alert conditions of this sort would be attacks on the secure clock.

Hardware Interfaces and Registers

Interfaces

Referring to the Comportable guideline for peripheral device functionality, the module alert_handler has the following hardware interfaces defined.

Primary Clock: clk_i

Other Clocks: clk_edn_i

Bus Device Interfaces (TL-UL): tl

Bus Host Interfaces (TL-UL): none

Peripheral Pins for Chip IO: none

Inter-Module Signals: Reference

Inter-Module Signals
Port Name Package::Struct Type Act Width Description
crashdump alert_pkg::alert_crashdump uni req 1
edn edn_pkg::edn req_rsp req 1
esc_rx prim_esc_pkg::esc_rx uni rcv 4
esc_tx prim_esc_pkg::esc_tx uni req 4
tl tlul_pkg::tl req_rsp rsp 1

Interrupts:

Interrupt NameTypeDescription
classaEvent

Interrupt state bit of Class A. Set by HW in case an alert within this class triggered. Defaults true, write one to clear.

classbEvent

Interrupt state bit of Class B. Set by HW in case an alert within this class triggered. Defaults true, write one to clear.

classcEvent

Interrupt state bit of Class C. Set by HW in case an alert within this class triggered. Defaults true, write one to clear.

classdEvent

Interrupt state bit of Class D. Set by HW in case an alert within this class triggered. Defaults true, write one to clear.

Security Alerts: none

Security Countermeasures:

Countermeasure IDDescription
ALERT_HANDLER.BUS.INTEGRITY

End-to-end bus integrity scheme.

ALERT_HANDLER.CONFIG.SHADOW

Important CSRs are shadowed.

ALERT_HANDLER.PING_TIMER.CONFIG.REGWEN

The ping timer configuration registers are REGWEN protected.

ALERT_HANDLER.ALERT.CONFIG.REGWEN

The individual alert enables are REGWEN protected.

ALERT_HANDLER.ALERT_LOC.CONFIG.REGWEN

The individual local alert enables are REGWEN protected.

ALERT_HANDLER.CLASS.CONFIG.REGWEN

The class configuration registers are REGWEN protected.

ALERT_HANDLER.ALERT.INTERSIG.DIFF

Differentially encoded alert channels.

ALERT_HANDLER.LPG.INTERSIG.MUBI

LPG signals are encoded with MUBI types.

ALERT_HANDLER.ESC.INTERSIG.DIFF

Differentially encoded escalation channels.

ALERT_HANDLER.ALERT_RX.INTERSIG.BKGN_CHK

Periodic background checks on alert channels (ping mechanism).

ALERT_HANDLER.ESC_TX.INTERSIG.BKGN_CHK

Periodic background checks on escalation channels (ping mechanism).

ALERT_HANDLER.ESC_RX.INTERSIG.BKGN_CHK

Escalation receivers can detect absence of periodic ping requests.

ALERT_HANDLER.ESC_TIMER.FSM.SPARSE

Escalation timer FSMs are sparsely encoded.

ALERT_HANDLER.PING_TIMER.FSM.SPARSE

Ping timer FSM is sparsely encoded.

ALERT_HANDLER.ESC_TIMER.FSM.LOCAL_ESC

Escalation timer FSMs move into an invalid state upon local escalation.

ALERT_HANDLER.PING_TIMER.FSM.LOCAL_ESC

Ping timer FSM moves into an invalid state upon local escalation.

ALERT_HANDLER.ESC_TIMER.FSM.GLOBAL_ESC

The escalation timer FSMs are the root of global escalation, hence if any of them moves into an invalid state by virtue of ESC_TIMER.FSM.LOCAL_ESC, this will trigger all escalation actions and thereby global escalation as well.

ALERT_HANDLER.ACCU.CTR.REDUN

Accumulator counters employ a cross-counter implementation.

ALERT_HANDLER.ESC_TIMER.CTR.REDUN

Escalation timer counters employ a duplicated counter implementation.

ALERT_HANDLER.PING_TIMER.CTR.REDUN

Ping timer counters employ a duplicated counter implementation.

ALERT_HANDLER.PING_TIMER.LFSR.REDUN

Ping timer LFSR is redundant.

Registers

Summary
Name Offset Length Description
alert_handler.INTR_STATE 0x0 4

Interrupt State Register

alert_handler.INTR_ENABLE 0x4 4

Interrupt Enable Register

alert_handler.INTR_TEST 0x8 4

Interrupt Test Register

alert_handler.PING_TIMER_REGWEN 0xc 4

Register write enable for PING_TIMEOUT_CYC_SHADOWED and PING_TIMER_EN_SHADOWED.

alert_handler.PING_TIMEOUT_CYC_SHADOWED 0x10 4

Ping timeout cycle count.

alert_handler.PING_TIMER_EN_SHADOWED 0x14 4

Ping timer enable.

alert_handler.ALERT_REGWEN_0 0x18 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_1 0x1c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_2 0x20 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_3 0x24 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_4 0x28 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_5 0x2c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_6 0x30 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_7 0x34 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_8 0x38 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_9 0x3c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_10 0x40 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_11 0x44 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_12 0x48 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_13 0x4c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_14 0x50 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_15 0x54 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_16 0x58 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_17 0x5c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_18 0x60 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_19 0x64 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_20 0x68 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_21 0x6c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_22 0x70 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_23 0x74 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_24 0x78 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_25 0x7c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_26 0x80 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_27 0x84 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_28 0x88 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_29 0x8c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_30 0x90 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_31 0x94 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_32 0x98 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_33 0x9c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_34 0xa0 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_35 0xa4 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_36 0xa8 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_37 0xac 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_38 0xb0 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_39 0xb4 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_40 0xb8 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_41 0xbc 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_42 0xc0 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_43 0xc4 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_44 0xc8 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_45 0xcc 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_46 0xd0 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_47 0xd4 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_48 0xd8 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_49 0xdc 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_50 0xe0 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_51 0xe4 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_52 0xe8 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_53 0xec 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_54 0xf0 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_55 0xf4 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_56 0xf8 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_57 0xfc 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_58 0x100 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_59 0x104 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_60 0x108 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_61 0x10c 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_62 0x110 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_63 0x114 4

Register write enable for alert enable bits.

alert_handler.ALERT_REGWEN_64 0x118 4

Register write enable for alert enable bits.

alert_handler.ALERT_EN_SHADOWED_0 0x11c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_1 0x120 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_2 0x124 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_3 0x128 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_4 0x12c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_5 0x130 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_6 0x134 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_7 0x138 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_8 0x13c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_9 0x140 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_10 0x144 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_11 0x148 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_12 0x14c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_13 0x150 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_14 0x154 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_15 0x158 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_16 0x15c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_17 0x160 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_18 0x164 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_19 0x168 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_20 0x16c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_21 0x170 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_22 0x174 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_23 0x178 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_24 0x17c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_25 0x180 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_26 0x184 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_27 0x188 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_28 0x18c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_29 0x190 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_30 0x194 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_31 0x198 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_32 0x19c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_33 0x1a0 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_34 0x1a4 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_35 0x1a8 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_36 0x1ac 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_37 0x1b0 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_38 0x1b4 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_39 0x1b8 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_40 0x1bc 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_41 0x1c0 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_42 0x1c4 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_43 0x1c8 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_44 0x1cc 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_45 0x1d0 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_46 0x1d4 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_47 0x1d8 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_48 0x1dc 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_49 0x1e0 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_50 0x1e4 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_51 0x1e8 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_52 0x1ec 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_53 0x1f0 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_54 0x1f4 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_55 0x1f8 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_56 0x1fc 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_57 0x200 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_58 0x204 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_59 0x208 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_60 0x20c 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_61 0x210 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_62 0x214 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_63 0x218 4

Enable register for alerts.

alert_handler.ALERT_EN_SHADOWED_64 0x21c 4

Enable register for alerts.

alert_handler.ALERT_CLASS_SHADOWED_0 0x220 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_1 0x224 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_2 0x228 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_3 0x22c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_4 0x230 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_5 0x234 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_6 0x238 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_7 0x23c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_8 0x240 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_9 0x244 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_10 0x248 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_11 0x24c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_12 0x250 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_13 0x254 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_14 0x258 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_15 0x25c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_16 0x260 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_17 0x264 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_18 0x268 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_19 0x26c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_20 0x270 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_21 0x274 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_22 0x278 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_23 0x27c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_24 0x280 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_25 0x284 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_26 0x288 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_27 0x28c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_28 0x290 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_29 0x294 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_30 0x298 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_31 0x29c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_32 0x2a0 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_33 0x2a4 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_34 0x2a8 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_35 0x2ac 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_36 0x2b0 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_37 0x2b4 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_38 0x2b8 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_39 0x2bc 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_40 0x2c0 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_41 0x2c4 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_42 0x2c8 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_43 0x2cc 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_44 0x2d0 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_45 0x2d4 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_46 0x2d8 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_47 0x2dc 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_48 0x2e0 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_49 0x2e4 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_50 0x2e8 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_51 0x2ec 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_52 0x2f0 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_53 0x2f4 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_54 0x2f8 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_55 0x2fc 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_56 0x300 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_57 0x304 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_58 0x308 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_59 0x30c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_60 0x310 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_61 0x314 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_62 0x318 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_63 0x31c 4

Class assignment of alerts.

alert_handler.ALERT_CLASS_SHADOWED_64 0x320 4

Class assignment of alerts.

alert_handler.ALERT_CAUSE_0 0x324 4

Alert Cause Register

alert_handler.ALERT_CAUSE_1 0x328 4

Alert Cause Register

alert_handler.ALERT_CAUSE_2 0x32c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_3 0x330 4

Alert Cause Register

alert_handler.ALERT_CAUSE_4 0x334 4

Alert Cause Register

alert_handler.ALERT_CAUSE_5 0x338 4

Alert Cause Register

alert_handler.ALERT_CAUSE_6 0x33c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_7 0x340 4

Alert Cause Register

alert_handler.ALERT_CAUSE_8 0x344 4

Alert Cause Register

alert_handler.ALERT_CAUSE_9 0x348 4

Alert Cause Register

alert_handler.ALERT_CAUSE_10 0x34c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_11 0x350 4

Alert Cause Register

alert_handler.ALERT_CAUSE_12 0x354 4

Alert Cause Register

alert_handler.ALERT_CAUSE_13 0x358 4

Alert Cause Register

alert_handler.ALERT_CAUSE_14 0x35c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_15 0x360 4

Alert Cause Register

alert_handler.ALERT_CAUSE_16 0x364 4

Alert Cause Register

alert_handler.ALERT_CAUSE_17 0x368 4

Alert Cause Register

alert_handler.ALERT_CAUSE_18 0x36c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_19 0x370 4

Alert Cause Register

alert_handler.ALERT_CAUSE_20 0x374 4

Alert Cause Register

alert_handler.ALERT_CAUSE_21 0x378 4

Alert Cause Register

alert_handler.ALERT_CAUSE_22 0x37c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_23 0x380 4

Alert Cause Register

alert_handler.ALERT_CAUSE_24 0x384 4

Alert Cause Register

alert_handler.ALERT_CAUSE_25 0x388 4

Alert Cause Register

alert_handler.ALERT_CAUSE_26 0x38c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_27 0x390 4

Alert Cause Register

alert_handler.ALERT_CAUSE_28 0x394 4

Alert Cause Register

alert_handler.ALERT_CAUSE_29 0x398 4

Alert Cause Register

alert_handler.ALERT_CAUSE_30 0x39c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_31 0x3a0 4

Alert Cause Register

alert_handler.ALERT_CAUSE_32 0x3a4 4

Alert Cause Register

alert_handler.ALERT_CAUSE_33 0x3a8 4

Alert Cause Register

alert_handler.ALERT_CAUSE_34 0x3ac 4

Alert Cause Register

alert_handler.ALERT_CAUSE_35 0x3b0 4

Alert Cause Register

alert_handler.ALERT_CAUSE_36 0x3b4 4

Alert Cause Register

alert_handler.ALERT_CAUSE_37 0x3b8 4

Alert Cause Register

alert_handler.ALERT_CAUSE_38 0x3bc 4

Alert Cause Register

alert_handler.ALERT_CAUSE_39 0x3c0 4

Alert Cause Register

alert_handler.ALERT_CAUSE_40 0x3c4 4

Alert Cause Register

alert_handler.ALERT_CAUSE_41 0x3c8 4

Alert Cause Register

alert_handler.ALERT_CAUSE_42 0x3cc 4

Alert Cause Register

alert_handler.ALERT_CAUSE_43 0x3d0 4

Alert Cause Register

alert_handler.ALERT_CAUSE_44 0x3d4 4

Alert Cause Register

alert_handler.ALERT_CAUSE_45 0x3d8 4

Alert Cause Register

alert_handler.ALERT_CAUSE_46 0x3dc 4

Alert Cause Register

alert_handler.ALERT_CAUSE_47 0x3e0 4

Alert Cause Register

alert_handler.ALERT_CAUSE_48 0x3e4 4

Alert Cause Register

alert_handler.ALERT_CAUSE_49 0x3e8 4

Alert Cause Register

alert_handler.ALERT_CAUSE_50 0x3ec 4

Alert Cause Register

alert_handler.ALERT_CAUSE_51 0x3f0 4

Alert Cause Register

alert_handler.ALERT_CAUSE_52 0x3f4 4

Alert Cause Register

alert_handler.ALERT_CAUSE_53 0x3f8 4

Alert Cause Register

alert_handler.ALERT_CAUSE_54 0x3fc 4

Alert Cause Register

alert_handler.ALERT_CAUSE_55 0x400 4

Alert Cause Register

alert_handler.ALERT_CAUSE_56 0x404 4

Alert Cause Register

alert_handler.ALERT_CAUSE_57 0x408 4

Alert Cause Register

alert_handler.ALERT_CAUSE_58 0x40c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_59 0x410 4

Alert Cause Register

alert_handler.ALERT_CAUSE_60 0x414 4

Alert Cause Register

alert_handler.ALERT_CAUSE_61 0x418 4

Alert Cause Register

alert_handler.ALERT_CAUSE_62 0x41c 4

Alert Cause Register

alert_handler.ALERT_CAUSE_63 0x420 4

Alert Cause Register

alert_handler.ALERT_CAUSE_64 0x424 4

Alert Cause Register

alert_handler.LOC_ALERT_REGWEN_0 0x428 4

Register write enable for alert enable bits.

alert_handler.LOC_ALERT_REGWEN_1 0x42c 4

Register write enable for alert enable bits.

alert_handler.LOC_ALERT_REGWEN_2 0x430 4

Register write enable for alert enable bits.

alert_handler.LOC_ALERT_REGWEN_3 0x434 4

Register write enable for alert enable bits.

alert_handler.LOC_ALERT_REGWEN_4 0x438 4

Register write enable for alert enable bits.

alert_handler.LOC_ALERT_REGWEN_5 0x43c 4

Register write enable for alert enable bits.

alert_handler.LOC_ALERT_REGWEN_6 0x440 4

Register write enable for alert enable bits.

alert_handler.LOC_ALERT_EN_SHADOWED_0 0x444 4

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_EN_SHADOWED_1 0x448 4

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_EN_SHADOWED_2 0x44c 4

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_EN_SHADOWED_3 0x450 4

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_EN_SHADOWED_4 0x454 4

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_EN_SHADOWED_5 0x458 4

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_EN_SHADOWED_6 0x45c 4

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CLASS_SHADOWED_0 0x460 4

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CLASS_SHADOWED_1 0x464 4

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CLASS_SHADOWED_2 0x468 4

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CLASS_SHADOWED_3 0x46c 4

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CLASS_SHADOWED_4 0x470 4

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CLASS_SHADOWED_5 0x474 4

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CLASS_SHADOWED_6 0x478 4

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CAUSE_0 0x47c 4

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CAUSE_1 0x480 4

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CAUSE_2 0x484 4

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CAUSE_3 0x488 4

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CAUSE_4 0x48c 4

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CAUSE_5 0x490 4

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.LOC_ALERT_CAUSE_6 0x494 4

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

alert_handler.CLASSA_REGWEN 0x498 4

Lock bit for Class A configuration.

alert_handler.CLASSA_CTRL_SHADOWED 0x49c 4

Escalation control register for alert Class A. Can not be modified if CLASSA_REGWEN is false.

alert_handler.CLASSA_CLR_REGWEN 0x4a0 4

Clear enable for escalation protocol of Class A alerts.

alert_handler.CLASSA_CLR_SHADOWED 0x4a4 4

Clear for escalation protocol of Class A.

alert_handler.CLASSA_ACCUM_CNT 0x4a8 4

Current accumulation value for alert Class A. Software can clear this register with a write to CLASSA_CLR_SHADOWED register unless CLASSA_CLR_REGWEN is false.

alert_handler.CLASSA_ACCUM_THRESH_SHADOWED 0x4ac 4

Accumulation threshold value for alert Class A.

alert_handler.CLASSA_TIMEOUT_CYC_SHADOWED 0x4b0 4

Interrupt timeout in cycles.

alert_handler.CLASSA_CRASHDUMP_TRIGGER_SHADOWED 0x4b4 4

Crashdump trigger configuration for Class A.

alert_handler.CLASSA_PHASE0_CYC_SHADOWED 0x4b8 4

Duration of escalation phase 0 for Class A.

alert_handler.CLASSA_PHASE1_CYC_SHADOWED 0x4bc 4

Duration of escalation phase 1 for Class A.

alert_handler.CLASSA_PHASE2_CYC_SHADOWED 0x4c0 4

Duration of escalation phase 2 for Class A.

alert_handler.CLASSA_PHASE3_CYC_SHADOWED 0x4c4 4

Duration of escalation phase 3 for Class A.

alert_handler.CLASSA_ESC_CNT 0x4c8 4

Escalation counter in cycles for Class A.

alert_handler.CLASSA_STATE 0x4cc 4

Current escalation state of Class A. See also CLASSA_ESC_CNT.

alert_handler.CLASSB_REGWEN 0x4d0 4

Lock bit for Class B configuration.

alert_handler.CLASSB_CTRL_SHADOWED 0x4d4 4

Escalation control register for alert Class B. Can not be modified if CLASSB_REGWEN is false.

alert_handler.CLASSB_CLR_REGWEN 0x4d8 4

Clear enable for escalation protocol of Class B alerts.

alert_handler.CLASSB_CLR_SHADOWED 0x4dc 4

Clear for escalation protocol of Class B.

alert_handler.CLASSB_ACCUM_CNT 0x4e0 4

Current accumulation value for alert Class B. Software can clear this register with a write to CLASSB_CLR_SHADOWED register unless CLASSB_CLR_REGWEN is false.

alert_handler.CLASSB_ACCUM_THRESH_SHADOWED 0x4e4 4

Accumulation threshold value for alert Class B.

alert_handler.CLASSB_TIMEOUT_CYC_SHADOWED 0x4e8 4

Interrupt timeout in cycles.

alert_handler.CLASSB_CRASHDUMP_TRIGGER_SHADOWED 0x4ec 4

Crashdump trigger configuration for Class B.

alert_handler.CLASSB_PHASE0_CYC_SHADOWED 0x4f0 4

Duration of escalation phase 0 for Class B.

alert_handler.CLASSB_PHASE1_CYC_SHADOWED 0x4f4 4

Duration of escalation phase 1 for Class B.

alert_handler.CLASSB_PHASE2_CYC_SHADOWED 0x4f8 4

Duration of escalation phase 2 for Class B.

alert_handler.CLASSB_PHASE3_CYC_SHADOWED 0x4fc 4

Duration of escalation phase 3 for Class B.

alert_handler.CLASSB_ESC_CNT 0x500 4

Escalation counter in cycles for Class B.

alert_handler.CLASSB_STATE 0x504 4

Current escalation state of Class B. See also CLASSB_ESC_CNT.

alert_handler.CLASSC_REGWEN 0x508 4

Lock bit for Class C configuration.

alert_handler.CLASSC_CTRL_SHADOWED 0x50c 4

Escalation control register for alert Class C. Can not be modified if CLASSC_REGWEN is false.

alert_handler.CLASSC_CLR_REGWEN 0x510 4

Clear enable for escalation protocol of Class C alerts.

alert_handler.CLASSC_CLR_SHADOWED 0x514 4

Clear for escalation protocol of Class C.

alert_handler.CLASSC_ACCUM_CNT 0x518 4

Current accumulation value for alert Class C. Software can clear this register with a write to CLASSC_CLR_SHADOWED register unless CLASSC_CLR_REGWEN is false.

alert_handler.CLASSC_ACCUM_THRESH_SHADOWED 0x51c 4

Accumulation threshold value for alert Class C.

alert_handler.CLASSC_TIMEOUT_CYC_SHADOWED 0x520 4

Interrupt timeout in cycles.

alert_handler.CLASSC_CRASHDUMP_TRIGGER_SHADOWED 0x524 4

Crashdump trigger configuration for Class C.

alert_handler.CLASSC_PHASE0_CYC_SHADOWED 0x528 4

Duration of escalation phase 0 for Class C.

alert_handler.CLASSC_PHASE1_CYC_SHADOWED 0x52c 4

Duration of escalation phase 1 for Class C.

alert_handler.CLASSC_PHASE2_CYC_SHADOWED 0x530 4

Duration of escalation phase 2 for Class C.

alert_handler.CLASSC_PHASE3_CYC_SHADOWED 0x534 4

Duration of escalation phase 3 for Class C.

alert_handler.CLASSC_ESC_CNT 0x538 4

Escalation counter in cycles for Class C.

alert_handler.CLASSC_STATE 0x53c 4

Current escalation state of Class C. See also CLASSC_ESC_CNT.

alert_handler.CLASSD_REGWEN 0x540 4

Lock bit for Class D configuration.

alert_handler.CLASSD_CTRL_SHADOWED 0x544 4

Escalation control register for alert Class D. Can not be modified if CLASSD_REGWEN is false.

alert_handler.CLASSD_CLR_REGWEN 0x548 4

Clear enable for escalation protocol of Class D alerts.

alert_handler.CLASSD_CLR_SHADOWED 0x54c 4

Clear for escalation protocol of Class D.

alert_handler.CLASSD_ACCUM_CNT 0x550 4

Current accumulation value for alert Class D. Software can clear this register with a write to CLASSD_CLR_SHADOWED register unless CLASSD_CLR_REGWEN is false.

alert_handler.CLASSD_ACCUM_THRESH_SHADOWED 0x554 4

Accumulation threshold value for alert Class D.

alert_handler.CLASSD_TIMEOUT_CYC_SHADOWED 0x558 4

Interrupt timeout in cycles.

alert_handler.CLASSD_CRASHDUMP_TRIGGER_SHADOWED 0x55c 4

Crashdump trigger configuration for Class D.

alert_handler.CLASSD_PHASE0_CYC_SHADOWED 0x560 4

Duration of escalation phase 0 for Class D.

alert_handler.CLASSD_PHASE1_CYC_SHADOWED 0x564 4

Duration of escalation phase 1 for Class D.

alert_handler.CLASSD_PHASE2_CYC_SHADOWED 0x568 4

Duration of escalation phase 2 for Class D.

alert_handler.CLASSD_PHASE3_CYC_SHADOWED 0x56c 4

Duration of escalation phase 3 for Class D.

alert_handler.CLASSD_ESC_CNT 0x570 4

Escalation counter in cycles for Class D.

alert_handler.CLASSD_STATE 0x574 4

Current escalation state of Class D. See also CLASSD_ESC_CNT.

alert_handler.INTR_STATE @ 0x0

Interrupt State Register

Reset default = 0x0, mask 0xf
31302928272625242322212019181716
 
1514131211109876543210
  classd classc classb classa
BitsTypeResetNameDescription
0rw1c0x0classa

Interrupt state bit of Class A. Set by HW in case an alert within this class triggered. Defaults true, write one to clear.

1rw1c0x0classb

Interrupt state bit of Class B. Set by HW in case an alert within this class triggered. Defaults true, write one to clear.

2rw1c0x0classc

Interrupt state bit of Class C. Set by HW in case an alert within this class triggered. Defaults true, write one to clear.

3rw1c0x0classd

Interrupt state bit of Class D. Set by HW in case an alert within this class triggered. Defaults true, write one to clear.


alert_handler.INTR_ENABLE @ 0x4

Interrupt Enable Register

Reset default = 0x0, mask 0xf
31302928272625242322212019181716
 
1514131211109876543210
  classd classc classb classa
BitsTypeResetNameDescription
0rw0x0classa

Enable interrupt when INTR_STATE.classa is set.

1rw0x0classb

Enable interrupt when INTR_STATE.classb is set.

2rw0x0classc

Enable interrupt when INTR_STATE.classc is set.

3rw0x0classd

Enable interrupt when INTR_STATE.classd is set.


alert_handler.INTR_TEST @ 0x8

Interrupt Test Register

Reset default = 0x0, mask 0xf
31302928272625242322212019181716
 
1514131211109876543210
  classd classc classb classa
BitsTypeResetNameDescription
0wo0x0classa

Write 1 to force INTR_STATE.classa to 1.

1wo0x0classb

Write 1 to force INTR_STATE.classb to 1.

2wo0x0classc

Write 1 to force INTR_STATE.classc to 1.

3wo0x0classd

Write 1 to force INTR_STATE.classd to 1.


alert_handler.PING_TIMER_REGWEN @ 0xc

Register write enable for PING_TIMEOUT_CYC_SHADOWED and PING_TIMER_EN_SHADOWED.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  PING_TIMER_REGWEN
BitsTypeResetNameDescription
0rw0c0x1PING_TIMER_REGWEN

When true, the PING_TIMEOUT_CYC_SHADOWED and PING_TIMER_EN_SHADOWED registers can be modified. When false, they become read-only. Defaults true, write one to clear. This should be cleared once the alert handler has been configured and the ping timer mechanism has been kicked off.


alert_handler.PING_TIMEOUT_CYC_SHADOWED @ 0x10

Ping timeout cycle count.

Reset default = 0x100, mask 0xffff
Register enable = PING_TIMER_REGWEN
31302928272625242322212019181716
 
1514131211109876543210
PING_TIMEOUT_CYC_SHADOWED
BitsTypeResetNameDescription
15:0rw0x100PING_TIMEOUT_CYC_SHADOWED

Timeout value in cycles. If an alert receiver or an escalation sender does not respond to a ping within this timeout window, a pingfail alert will be raised. It is recommended to set this value to the equivalent of 256 cycles of the slowest alert sender clock domain in the system (or greater).


alert_handler.PING_TIMER_EN_SHADOWED @ 0x14

Ping timer enable.

Reset default = 0x0, mask 0x1
Register enable = PING_TIMER_REGWEN
31302928272625242322212019181716
 
1514131211109876543210
  PING_TIMER_EN_SHADOWED
BitsTypeResetNameDescription
0rw1s0x0PING_TIMER_EN_SHADOWED

Setting this to 1 enables the ping timer mechanism. This bit cannot be cleared to 0 once it has been set to 1.

Note that the alert pinging mechanism will only ping alerts that have been enabled and locked.


alert_handler.ALERT_REGWEN_0 @ 0x18

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_0
BitsTypeResetNameDescription
0rw0c0x1EN_0

Alert configuration write enable bit. If this is cleared to 0, the corresponding ALERT_EN_SHADOWED and ALERT_CLASS_SHADOWED bits are not writable anymore.

Note that the alert pinging mechanism will only ping alerts that have been enabled and locked.


alert_handler.ALERT_REGWEN_1 @ 0x1c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_1
BitsTypeResetNameDescription
0rw0c0x1EN_1

For alert1


alert_handler.ALERT_REGWEN_2 @ 0x20

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_2
BitsTypeResetNameDescription
0rw0c0x1EN_2

For alert2


alert_handler.ALERT_REGWEN_3 @ 0x24

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_3
BitsTypeResetNameDescription
0rw0c0x1EN_3

For alert3


alert_handler.ALERT_REGWEN_4 @ 0x28

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_4
BitsTypeResetNameDescription
0rw0c0x1EN_4

For alert4


alert_handler.ALERT_REGWEN_5 @ 0x2c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_5
BitsTypeResetNameDescription
0rw0c0x1EN_5

For alert5


alert_handler.ALERT_REGWEN_6 @ 0x30

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_6
BitsTypeResetNameDescription
0rw0c0x1EN_6

For alert6


alert_handler.ALERT_REGWEN_7 @ 0x34

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_7
BitsTypeResetNameDescription
0rw0c0x1EN_7

For alert7


alert_handler.ALERT_REGWEN_8 @ 0x38

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_8
BitsTypeResetNameDescription
0rw0c0x1EN_8

For alert8


alert_handler.ALERT_REGWEN_9 @ 0x3c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_9
BitsTypeResetNameDescription
0rw0c0x1EN_9

For alert9


alert_handler.ALERT_REGWEN_10 @ 0x40

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_10
BitsTypeResetNameDescription
0rw0c0x1EN_10

For alert10


alert_handler.ALERT_REGWEN_11 @ 0x44

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_11
BitsTypeResetNameDescription
0rw0c0x1EN_11

For alert11


alert_handler.ALERT_REGWEN_12 @ 0x48

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_12
BitsTypeResetNameDescription
0rw0c0x1EN_12

For alert12


alert_handler.ALERT_REGWEN_13 @ 0x4c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_13
BitsTypeResetNameDescription
0rw0c0x1EN_13

For alert13


alert_handler.ALERT_REGWEN_14 @ 0x50

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_14
BitsTypeResetNameDescription
0rw0c0x1EN_14

For alert14


alert_handler.ALERT_REGWEN_15 @ 0x54

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_15
BitsTypeResetNameDescription
0rw0c0x1EN_15

For alert15


alert_handler.ALERT_REGWEN_16 @ 0x58

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_16
BitsTypeResetNameDescription
0rw0c0x1EN_16

For alert16


alert_handler.ALERT_REGWEN_17 @ 0x5c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_17
BitsTypeResetNameDescription
0rw0c0x1EN_17

For alert17


alert_handler.ALERT_REGWEN_18 @ 0x60

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_18
BitsTypeResetNameDescription
0rw0c0x1EN_18

For alert18


alert_handler.ALERT_REGWEN_19 @ 0x64

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_19
BitsTypeResetNameDescription
0rw0c0x1EN_19

For alert19


alert_handler.ALERT_REGWEN_20 @ 0x68

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_20
BitsTypeResetNameDescription
0rw0c0x1EN_20

For alert20


alert_handler.ALERT_REGWEN_21 @ 0x6c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_21
BitsTypeResetNameDescription
0rw0c0x1EN_21

For alert21


alert_handler.ALERT_REGWEN_22 @ 0x70

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_22
BitsTypeResetNameDescription
0rw0c0x1EN_22

For alert22


alert_handler.ALERT_REGWEN_23 @ 0x74

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_23
BitsTypeResetNameDescription
0rw0c0x1EN_23

For alert23


alert_handler.ALERT_REGWEN_24 @ 0x78

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_24
BitsTypeResetNameDescription
0rw0c0x1EN_24

For alert24


alert_handler.ALERT_REGWEN_25 @ 0x7c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_25
BitsTypeResetNameDescription
0rw0c0x1EN_25

For alert25


alert_handler.ALERT_REGWEN_26 @ 0x80

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_26
BitsTypeResetNameDescription
0rw0c0x1EN_26

For alert26


alert_handler.ALERT_REGWEN_27 @ 0x84

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_27
BitsTypeResetNameDescription
0rw0c0x1EN_27

For alert27


alert_handler.ALERT_REGWEN_28 @ 0x88

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_28
BitsTypeResetNameDescription
0rw0c0x1EN_28

For alert28


alert_handler.ALERT_REGWEN_29 @ 0x8c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_29
BitsTypeResetNameDescription
0rw0c0x1EN_29

For alert29


alert_handler.ALERT_REGWEN_30 @ 0x90

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_30
BitsTypeResetNameDescription
0rw0c0x1EN_30

For alert30


alert_handler.ALERT_REGWEN_31 @ 0x94

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_31
BitsTypeResetNameDescription
0rw0c0x1EN_31

For alert31


alert_handler.ALERT_REGWEN_32 @ 0x98

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_32
BitsTypeResetNameDescription
0rw0c0x1EN_32

For alert32


alert_handler.ALERT_REGWEN_33 @ 0x9c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_33
BitsTypeResetNameDescription
0rw0c0x1EN_33

For alert33


alert_handler.ALERT_REGWEN_34 @ 0xa0

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_34
BitsTypeResetNameDescription
0rw0c0x1EN_34

For alert34


alert_handler.ALERT_REGWEN_35 @ 0xa4

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_35
BitsTypeResetNameDescription
0rw0c0x1EN_35

For alert35


alert_handler.ALERT_REGWEN_36 @ 0xa8

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_36
BitsTypeResetNameDescription
0rw0c0x1EN_36

For alert36


alert_handler.ALERT_REGWEN_37 @ 0xac

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_37
BitsTypeResetNameDescription
0rw0c0x1EN_37

For alert37


alert_handler.ALERT_REGWEN_38 @ 0xb0

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_38
BitsTypeResetNameDescription
0rw0c0x1EN_38

For alert38


alert_handler.ALERT_REGWEN_39 @ 0xb4

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_39
BitsTypeResetNameDescription
0rw0c0x1EN_39

For alert39


alert_handler.ALERT_REGWEN_40 @ 0xb8

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_40
BitsTypeResetNameDescription
0rw0c0x1EN_40

For alert40


alert_handler.ALERT_REGWEN_41 @ 0xbc

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_41
BitsTypeResetNameDescription
0rw0c0x1EN_41

For alert41


alert_handler.ALERT_REGWEN_42 @ 0xc0

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_42
BitsTypeResetNameDescription
0rw0c0x1EN_42

For alert42


alert_handler.ALERT_REGWEN_43 @ 0xc4

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_43
BitsTypeResetNameDescription
0rw0c0x1EN_43

For alert43


alert_handler.ALERT_REGWEN_44 @ 0xc8

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_44
BitsTypeResetNameDescription
0rw0c0x1EN_44

For alert44


alert_handler.ALERT_REGWEN_45 @ 0xcc

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_45
BitsTypeResetNameDescription
0rw0c0x1EN_45

For alert45


alert_handler.ALERT_REGWEN_46 @ 0xd0

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_46
BitsTypeResetNameDescription
0rw0c0x1EN_46

For alert46


alert_handler.ALERT_REGWEN_47 @ 0xd4

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_47
BitsTypeResetNameDescription
0rw0c0x1EN_47

For alert47


alert_handler.ALERT_REGWEN_48 @ 0xd8

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_48
BitsTypeResetNameDescription
0rw0c0x1EN_48

For alert48


alert_handler.ALERT_REGWEN_49 @ 0xdc

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_49
BitsTypeResetNameDescription
0rw0c0x1EN_49

For alert49


alert_handler.ALERT_REGWEN_50 @ 0xe0

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_50
BitsTypeResetNameDescription
0rw0c0x1EN_50

For alert50


alert_handler.ALERT_REGWEN_51 @ 0xe4

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_51
BitsTypeResetNameDescription
0rw0c0x1EN_51

For alert51


alert_handler.ALERT_REGWEN_52 @ 0xe8

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_52
BitsTypeResetNameDescription
0rw0c0x1EN_52

For alert52


alert_handler.ALERT_REGWEN_53 @ 0xec

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_53
BitsTypeResetNameDescription
0rw0c0x1EN_53

For alert53


alert_handler.ALERT_REGWEN_54 @ 0xf0

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_54
BitsTypeResetNameDescription
0rw0c0x1EN_54

For alert54


alert_handler.ALERT_REGWEN_55 @ 0xf4

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_55
BitsTypeResetNameDescription
0rw0c0x1EN_55

For alert55


alert_handler.ALERT_REGWEN_56 @ 0xf8

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_56
BitsTypeResetNameDescription
0rw0c0x1EN_56

For alert56


alert_handler.ALERT_REGWEN_57 @ 0xfc

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_57
BitsTypeResetNameDescription
0rw0c0x1EN_57

For alert57


alert_handler.ALERT_REGWEN_58 @ 0x100

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_58
BitsTypeResetNameDescription
0rw0c0x1EN_58

For alert58


alert_handler.ALERT_REGWEN_59 @ 0x104

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_59
BitsTypeResetNameDescription
0rw0c0x1EN_59

For alert59


alert_handler.ALERT_REGWEN_60 @ 0x108

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_60
BitsTypeResetNameDescription
0rw0c0x1EN_60

For alert60


alert_handler.ALERT_REGWEN_61 @ 0x10c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_61
BitsTypeResetNameDescription
0rw0c0x1EN_61

For alert61


alert_handler.ALERT_REGWEN_62 @ 0x110

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_62
BitsTypeResetNameDescription
0rw0c0x1EN_62

For alert62


alert_handler.ALERT_REGWEN_63 @ 0x114

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_63
BitsTypeResetNameDescription
0rw0c0x1EN_63

For alert63


alert_handler.ALERT_REGWEN_64 @ 0x118

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_64
BitsTypeResetNameDescription
0rw0c0x1EN_64

For alert64


alert_handler.ALERT_EN_SHADOWED_0 @ 0x11c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_0
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_0
BitsTypeResetNameDescription
0rw0x0EN_A_0

Alert enable bit.

Note that the alert pinging mechanism will only ping alerts that have been enabled and locked.


alert_handler.ALERT_EN_SHADOWED_1 @ 0x120

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_1
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_1
BitsTypeResetNameDescription
0rw0x0EN_A_1

For alert1


alert_handler.ALERT_EN_SHADOWED_2 @ 0x124

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_2
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_2
BitsTypeResetNameDescription
0rw0x0EN_A_2

For alert2


alert_handler.ALERT_EN_SHADOWED_3 @ 0x128

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_3
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_3
BitsTypeResetNameDescription
0rw0x0EN_A_3

For alert3


alert_handler.ALERT_EN_SHADOWED_4 @ 0x12c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_4
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_4
BitsTypeResetNameDescription
0rw0x0EN_A_4

For alert4


alert_handler.ALERT_EN_SHADOWED_5 @ 0x130

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_5
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_5
BitsTypeResetNameDescription
0rw0x0EN_A_5

For alert5


alert_handler.ALERT_EN_SHADOWED_6 @ 0x134

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_6
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_6
BitsTypeResetNameDescription
0rw0x0EN_A_6

For alert6


alert_handler.ALERT_EN_SHADOWED_7 @ 0x138

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_7
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_7
BitsTypeResetNameDescription
0rw0x0EN_A_7

For alert7


alert_handler.ALERT_EN_SHADOWED_8 @ 0x13c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_8
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_8
BitsTypeResetNameDescription
0rw0x0EN_A_8

For alert8


alert_handler.ALERT_EN_SHADOWED_9 @ 0x140

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_9
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_9
BitsTypeResetNameDescription
0rw0x0EN_A_9

For alert9


alert_handler.ALERT_EN_SHADOWED_10 @ 0x144

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_10
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_10
BitsTypeResetNameDescription
0rw0x0EN_A_10

For alert10


alert_handler.ALERT_EN_SHADOWED_11 @ 0x148

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_11
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_11
BitsTypeResetNameDescription
0rw0x0EN_A_11

For alert11


alert_handler.ALERT_EN_SHADOWED_12 @ 0x14c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_12
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_12
BitsTypeResetNameDescription
0rw0x0EN_A_12

For alert12


alert_handler.ALERT_EN_SHADOWED_13 @ 0x150

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_13
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_13
BitsTypeResetNameDescription
0rw0x0EN_A_13

For alert13


alert_handler.ALERT_EN_SHADOWED_14 @ 0x154

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_14
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_14
BitsTypeResetNameDescription
0rw0x0EN_A_14

For alert14


alert_handler.ALERT_EN_SHADOWED_15 @ 0x158

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_15
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_15
BitsTypeResetNameDescription
0rw0x0EN_A_15

For alert15


alert_handler.ALERT_EN_SHADOWED_16 @ 0x15c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_16
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_16
BitsTypeResetNameDescription
0rw0x0EN_A_16

For alert16


alert_handler.ALERT_EN_SHADOWED_17 @ 0x160

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_17
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_17
BitsTypeResetNameDescription
0rw0x0EN_A_17

For alert17


alert_handler.ALERT_EN_SHADOWED_18 @ 0x164

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_18
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_18
BitsTypeResetNameDescription
0rw0x0EN_A_18

For alert18


alert_handler.ALERT_EN_SHADOWED_19 @ 0x168

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_19
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_19
BitsTypeResetNameDescription
0rw0x0EN_A_19

For alert19


alert_handler.ALERT_EN_SHADOWED_20 @ 0x16c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_20
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_20
BitsTypeResetNameDescription
0rw0x0EN_A_20

For alert20


alert_handler.ALERT_EN_SHADOWED_21 @ 0x170

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_21
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_21
BitsTypeResetNameDescription
0rw0x0EN_A_21

For alert21


alert_handler.ALERT_EN_SHADOWED_22 @ 0x174

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_22
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_22
BitsTypeResetNameDescription
0rw0x0EN_A_22

For alert22


alert_handler.ALERT_EN_SHADOWED_23 @ 0x178

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_23
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_23
BitsTypeResetNameDescription
0rw0x0EN_A_23

For alert23


alert_handler.ALERT_EN_SHADOWED_24 @ 0x17c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_24
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_24
BitsTypeResetNameDescription
0rw0x0EN_A_24

For alert24


alert_handler.ALERT_EN_SHADOWED_25 @ 0x180

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_25
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_25
BitsTypeResetNameDescription
0rw0x0EN_A_25

For alert25


alert_handler.ALERT_EN_SHADOWED_26 @ 0x184

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_26
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_26
BitsTypeResetNameDescription
0rw0x0EN_A_26

For alert26


alert_handler.ALERT_EN_SHADOWED_27 @ 0x188

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_27
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_27
BitsTypeResetNameDescription
0rw0x0EN_A_27

For alert27


alert_handler.ALERT_EN_SHADOWED_28 @ 0x18c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_28
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_28
BitsTypeResetNameDescription
0rw0x0EN_A_28

For alert28


alert_handler.ALERT_EN_SHADOWED_29 @ 0x190

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_29
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_29
BitsTypeResetNameDescription
0rw0x0EN_A_29

For alert29


alert_handler.ALERT_EN_SHADOWED_30 @ 0x194

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_30
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_30
BitsTypeResetNameDescription
0rw0x0EN_A_30

For alert30


alert_handler.ALERT_EN_SHADOWED_31 @ 0x198

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_31
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_31
BitsTypeResetNameDescription
0rw0x0EN_A_31

For alert31


alert_handler.ALERT_EN_SHADOWED_32 @ 0x19c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_32
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_32
BitsTypeResetNameDescription
0rw0x0EN_A_32

For alert32


alert_handler.ALERT_EN_SHADOWED_33 @ 0x1a0

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_33
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_33
BitsTypeResetNameDescription
0rw0x0EN_A_33

For alert33


alert_handler.ALERT_EN_SHADOWED_34 @ 0x1a4

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_34
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_34
BitsTypeResetNameDescription
0rw0x0EN_A_34

For alert34


alert_handler.ALERT_EN_SHADOWED_35 @ 0x1a8

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_35
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_35
BitsTypeResetNameDescription
0rw0x0EN_A_35

For alert35


alert_handler.ALERT_EN_SHADOWED_36 @ 0x1ac

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_36
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_36
BitsTypeResetNameDescription
0rw0x0EN_A_36

For alert36


alert_handler.ALERT_EN_SHADOWED_37 @ 0x1b0

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_37
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_37
BitsTypeResetNameDescription
0rw0x0EN_A_37

For alert37


alert_handler.ALERT_EN_SHADOWED_38 @ 0x1b4

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_38
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_38
BitsTypeResetNameDescription
0rw0x0EN_A_38

For alert38


alert_handler.ALERT_EN_SHADOWED_39 @ 0x1b8

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_39
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_39
BitsTypeResetNameDescription
0rw0x0EN_A_39

For alert39


alert_handler.ALERT_EN_SHADOWED_40 @ 0x1bc

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_40
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_40
BitsTypeResetNameDescription
0rw0x0EN_A_40

For alert40


alert_handler.ALERT_EN_SHADOWED_41 @ 0x1c0

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_41
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_41
BitsTypeResetNameDescription
0rw0x0EN_A_41

For alert41


alert_handler.ALERT_EN_SHADOWED_42 @ 0x1c4

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_42
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_42
BitsTypeResetNameDescription
0rw0x0EN_A_42

For alert42


alert_handler.ALERT_EN_SHADOWED_43 @ 0x1c8

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_43
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_43
BitsTypeResetNameDescription
0rw0x0EN_A_43

For alert43


alert_handler.ALERT_EN_SHADOWED_44 @ 0x1cc

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_44
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_44
BitsTypeResetNameDescription
0rw0x0EN_A_44

For alert44


alert_handler.ALERT_EN_SHADOWED_45 @ 0x1d0

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_45
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_45
BitsTypeResetNameDescription
0rw0x0EN_A_45

For alert45


alert_handler.ALERT_EN_SHADOWED_46 @ 0x1d4

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_46
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_46
BitsTypeResetNameDescription
0rw0x0EN_A_46

For alert46


alert_handler.ALERT_EN_SHADOWED_47 @ 0x1d8

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_47
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_47
BitsTypeResetNameDescription
0rw0x0EN_A_47

For alert47


alert_handler.ALERT_EN_SHADOWED_48 @ 0x1dc

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_48
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_48
BitsTypeResetNameDescription
0rw0x0EN_A_48

For alert48


alert_handler.ALERT_EN_SHADOWED_49 @ 0x1e0

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_49
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_49
BitsTypeResetNameDescription
0rw0x0EN_A_49

For alert49


alert_handler.ALERT_EN_SHADOWED_50 @ 0x1e4

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_50
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_50
BitsTypeResetNameDescription
0rw0x0EN_A_50

For alert50


alert_handler.ALERT_EN_SHADOWED_51 @ 0x1e8

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_51
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_51
BitsTypeResetNameDescription
0rw0x0EN_A_51

For alert51


alert_handler.ALERT_EN_SHADOWED_52 @ 0x1ec

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_52
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_52
BitsTypeResetNameDescription
0rw0x0EN_A_52

For alert52


alert_handler.ALERT_EN_SHADOWED_53 @ 0x1f0

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_53
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_53
BitsTypeResetNameDescription
0rw0x0EN_A_53

For alert53


alert_handler.ALERT_EN_SHADOWED_54 @ 0x1f4

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_54
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_54
BitsTypeResetNameDescription
0rw0x0EN_A_54

For alert54


alert_handler.ALERT_EN_SHADOWED_55 @ 0x1f8

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_55
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_55
BitsTypeResetNameDescription
0rw0x0EN_A_55

For alert55


alert_handler.ALERT_EN_SHADOWED_56 @ 0x1fc

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_56
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_56
BitsTypeResetNameDescription
0rw0x0EN_A_56

For alert56


alert_handler.ALERT_EN_SHADOWED_57 @ 0x200

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_57
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_57
BitsTypeResetNameDescription
0rw0x0EN_A_57

For alert57


alert_handler.ALERT_EN_SHADOWED_58 @ 0x204

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_58
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_58
BitsTypeResetNameDescription
0rw0x0EN_A_58

For alert58


alert_handler.ALERT_EN_SHADOWED_59 @ 0x208

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_59
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_59
BitsTypeResetNameDescription
0rw0x0EN_A_59

For alert59


alert_handler.ALERT_EN_SHADOWED_60 @ 0x20c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_60
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_60
BitsTypeResetNameDescription
0rw0x0EN_A_60

For alert60


alert_handler.ALERT_EN_SHADOWED_61 @ 0x210

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_61
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_61
BitsTypeResetNameDescription
0rw0x0EN_A_61

For alert61


alert_handler.ALERT_EN_SHADOWED_62 @ 0x214

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_62
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_62
BitsTypeResetNameDescription
0rw0x0EN_A_62

For alert62


alert_handler.ALERT_EN_SHADOWED_63 @ 0x218

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_63
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_63
BitsTypeResetNameDescription
0rw0x0EN_A_63

For alert63


alert_handler.ALERT_EN_SHADOWED_64 @ 0x21c

Enable register for alerts.

Reset default = 0x0, mask 0x1
Register enable = ALERT_REGWEN_64
31302928272625242322212019181716
 
1514131211109876543210
  EN_A_64
BitsTypeResetNameDescription
0rw0x0EN_A_64

For alert64


alert_handler.ALERT_CLASS_SHADOWED_0 @ 0x220

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_0
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_0
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_0

Classification

0x0ClassA

0x1ClassB

0x2ClassC

0x3ClassD


alert_handler.ALERT_CLASS_SHADOWED_1 @ 0x224

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_1
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_1
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_1

For alert1


alert_handler.ALERT_CLASS_SHADOWED_2 @ 0x228

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_2
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_2
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_2

For alert2


alert_handler.ALERT_CLASS_SHADOWED_3 @ 0x22c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_3
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_3
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_3

For alert3


alert_handler.ALERT_CLASS_SHADOWED_4 @ 0x230

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_4
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_4
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_4

For alert4


alert_handler.ALERT_CLASS_SHADOWED_5 @ 0x234

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_5
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_5
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_5

For alert5


alert_handler.ALERT_CLASS_SHADOWED_6 @ 0x238

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_6
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_6
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_6

For alert6


alert_handler.ALERT_CLASS_SHADOWED_7 @ 0x23c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_7
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_7
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_7

For alert7


alert_handler.ALERT_CLASS_SHADOWED_8 @ 0x240

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_8
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_8
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_8

For alert8


alert_handler.ALERT_CLASS_SHADOWED_9 @ 0x244

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_9
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_9
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_9

For alert9


alert_handler.ALERT_CLASS_SHADOWED_10 @ 0x248

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_10
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_10
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_10

For alert10


alert_handler.ALERT_CLASS_SHADOWED_11 @ 0x24c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_11
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_11
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_11

For alert11


alert_handler.ALERT_CLASS_SHADOWED_12 @ 0x250

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_12
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_12
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_12

For alert12


alert_handler.ALERT_CLASS_SHADOWED_13 @ 0x254

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_13
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_13
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_13

For alert13


alert_handler.ALERT_CLASS_SHADOWED_14 @ 0x258

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_14
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_14
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_14

For alert14


alert_handler.ALERT_CLASS_SHADOWED_15 @ 0x25c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_15
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_15
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_15

For alert15


alert_handler.ALERT_CLASS_SHADOWED_16 @ 0x260

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_16
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_16
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_16

For alert16


alert_handler.ALERT_CLASS_SHADOWED_17 @ 0x264

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_17
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_17
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_17

For alert17


alert_handler.ALERT_CLASS_SHADOWED_18 @ 0x268

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_18
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_18
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_18

For alert18


alert_handler.ALERT_CLASS_SHADOWED_19 @ 0x26c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_19
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_19
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_19

For alert19


alert_handler.ALERT_CLASS_SHADOWED_20 @ 0x270

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_20
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_20
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_20

For alert20


alert_handler.ALERT_CLASS_SHADOWED_21 @ 0x274

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_21
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_21
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_21

For alert21


alert_handler.ALERT_CLASS_SHADOWED_22 @ 0x278

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_22
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_22
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_22

For alert22


alert_handler.ALERT_CLASS_SHADOWED_23 @ 0x27c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_23
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_23
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_23

For alert23


alert_handler.ALERT_CLASS_SHADOWED_24 @ 0x280

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_24
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_24
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_24

For alert24


alert_handler.ALERT_CLASS_SHADOWED_25 @ 0x284

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_25
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_25
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_25

For alert25


alert_handler.ALERT_CLASS_SHADOWED_26 @ 0x288

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_26
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_26
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_26

For alert26


alert_handler.ALERT_CLASS_SHADOWED_27 @ 0x28c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_27
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_27
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_27

For alert27


alert_handler.ALERT_CLASS_SHADOWED_28 @ 0x290

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_28
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_28
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_28

For alert28


alert_handler.ALERT_CLASS_SHADOWED_29 @ 0x294

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_29
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_29
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_29

For alert29


alert_handler.ALERT_CLASS_SHADOWED_30 @ 0x298

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_30
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_30
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_30

For alert30


alert_handler.ALERT_CLASS_SHADOWED_31 @ 0x29c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_31
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_31
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_31

For alert31


alert_handler.ALERT_CLASS_SHADOWED_32 @ 0x2a0

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_32
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_32
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_32

For alert32


alert_handler.ALERT_CLASS_SHADOWED_33 @ 0x2a4

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_33
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_33
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_33

For alert33


alert_handler.ALERT_CLASS_SHADOWED_34 @ 0x2a8

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_34
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_34
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_34

For alert34


alert_handler.ALERT_CLASS_SHADOWED_35 @ 0x2ac

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_35
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_35
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_35

For alert35


alert_handler.ALERT_CLASS_SHADOWED_36 @ 0x2b0

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_36
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_36
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_36

For alert36


alert_handler.ALERT_CLASS_SHADOWED_37 @ 0x2b4

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_37
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_37
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_37

For alert37


alert_handler.ALERT_CLASS_SHADOWED_38 @ 0x2b8

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_38
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_38
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_38

For alert38


alert_handler.ALERT_CLASS_SHADOWED_39 @ 0x2bc

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_39
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_39
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_39

For alert39


alert_handler.ALERT_CLASS_SHADOWED_40 @ 0x2c0

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_40
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_40
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_40

For alert40


alert_handler.ALERT_CLASS_SHADOWED_41 @ 0x2c4

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_41
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_41
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_41

For alert41


alert_handler.ALERT_CLASS_SHADOWED_42 @ 0x2c8

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_42
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_42
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_42

For alert42


alert_handler.ALERT_CLASS_SHADOWED_43 @ 0x2cc

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_43
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_43
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_43

For alert43


alert_handler.ALERT_CLASS_SHADOWED_44 @ 0x2d0

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_44
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_44
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_44

For alert44


alert_handler.ALERT_CLASS_SHADOWED_45 @ 0x2d4

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_45
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_45
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_45

For alert45


alert_handler.ALERT_CLASS_SHADOWED_46 @ 0x2d8

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_46
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_46
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_46

For alert46


alert_handler.ALERT_CLASS_SHADOWED_47 @ 0x2dc

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_47
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_47
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_47

For alert47


alert_handler.ALERT_CLASS_SHADOWED_48 @ 0x2e0

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_48
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_48
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_48

For alert48


alert_handler.ALERT_CLASS_SHADOWED_49 @ 0x2e4

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_49
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_49
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_49

For alert49


alert_handler.ALERT_CLASS_SHADOWED_50 @ 0x2e8

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_50
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_50
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_50

For alert50


alert_handler.ALERT_CLASS_SHADOWED_51 @ 0x2ec

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_51
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_51
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_51

For alert51


alert_handler.ALERT_CLASS_SHADOWED_52 @ 0x2f0

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_52
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_52
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_52

For alert52


alert_handler.ALERT_CLASS_SHADOWED_53 @ 0x2f4

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_53
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_53
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_53

For alert53


alert_handler.ALERT_CLASS_SHADOWED_54 @ 0x2f8

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_54
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_54
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_54

For alert54


alert_handler.ALERT_CLASS_SHADOWED_55 @ 0x2fc

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_55
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_55
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_55

For alert55


alert_handler.ALERT_CLASS_SHADOWED_56 @ 0x300

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_56
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_56
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_56

For alert56


alert_handler.ALERT_CLASS_SHADOWED_57 @ 0x304

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_57
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_57
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_57

For alert57


alert_handler.ALERT_CLASS_SHADOWED_58 @ 0x308

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_58
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_58
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_58

For alert58


alert_handler.ALERT_CLASS_SHADOWED_59 @ 0x30c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_59
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_59
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_59

For alert59


alert_handler.ALERT_CLASS_SHADOWED_60 @ 0x310

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_60
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_60
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_60

For alert60


alert_handler.ALERT_CLASS_SHADOWED_61 @ 0x314

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_61
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_61
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_61

For alert61


alert_handler.ALERT_CLASS_SHADOWED_62 @ 0x318

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_62
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_62
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_62

For alert62


alert_handler.ALERT_CLASS_SHADOWED_63 @ 0x31c

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_63
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_63
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_63

For alert63


alert_handler.ALERT_CLASS_SHADOWED_64 @ 0x320

Class assignment of alerts.

Reset default = 0x0, mask 0x3
Register enable = ALERT_REGWEN_64
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_A_64
BitsTypeResetNameDescription
1:0rw0x0CLASS_A_64

For alert64


alert_handler.ALERT_CAUSE_0 @ 0x324

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_0
BitsTypeResetNameDescription
0rw1c0x0A_0

Cause bit


alert_handler.ALERT_CAUSE_1 @ 0x328

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_1
BitsTypeResetNameDescription
0rw1c0x0A_1

For ALERT1


alert_handler.ALERT_CAUSE_2 @ 0x32c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_2
BitsTypeResetNameDescription
0rw1c0x0A_2

For ALERT2


alert_handler.ALERT_CAUSE_3 @ 0x330

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_3
BitsTypeResetNameDescription
0rw1c0x0A_3

For ALERT3


alert_handler.ALERT_CAUSE_4 @ 0x334

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_4
BitsTypeResetNameDescription
0rw1c0x0A_4

For ALERT4


alert_handler.ALERT_CAUSE_5 @ 0x338

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_5
BitsTypeResetNameDescription
0rw1c0x0A_5

For ALERT5


alert_handler.ALERT_CAUSE_6 @ 0x33c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_6
BitsTypeResetNameDescription
0rw1c0x0A_6

For ALERT6


alert_handler.ALERT_CAUSE_7 @ 0x340

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_7
BitsTypeResetNameDescription
0rw1c0x0A_7

For ALERT7


alert_handler.ALERT_CAUSE_8 @ 0x344

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_8
BitsTypeResetNameDescription
0rw1c0x0A_8

For ALERT8


alert_handler.ALERT_CAUSE_9 @ 0x348

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_9
BitsTypeResetNameDescription
0rw1c0x0A_9

For ALERT9


alert_handler.ALERT_CAUSE_10 @ 0x34c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_10
BitsTypeResetNameDescription
0rw1c0x0A_10

For ALERT10


alert_handler.ALERT_CAUSE_11 @ 0x350

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_11
BitsTypeResetNameDescription
0rw1c0x0A_11

For ALERT11


alert_handler.ALERT_CAUSE_12 @ 0x354

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_12
BitsTypeResetNameDescription
0rw1c0x0A_12

For ALERT12


alert_handler.ALERT_CAUSE_13 @ 0x358

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_13
BitsTypeResetNameDescription
0rw1c0x0A_13

For ALERT13


alert_handler.ALERT_CAUSE_14 @ 0x35c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_14
BitsTypeResetNameDescription
0rw1c0x0A_14

For ALERT14


alert_handler.ALERT_CAUSE_15 @ 0x360

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_15
BitsTypeResetNameDescription
0rw1c0x0A_15

For ALERT15


alert_handler.ALERT_CAUSE_16 @ 0x364

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_16
BitsTypeResetNameDescription
0rw1c0x0A_16

For ALERT16


alert_handler.ALERT_CAUSE_17 @ 0x368

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_17
BitsTypeResetNameDescription
0rw1c0x0A_17

For ALERT17


alert_handler.ALERT_CAUSE_18 @ 0x36c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_18
BitsTypeResetNameDescription
0rw1c0x0A_18

For ALERT18


alert_handler.ALERT_CAUSE_19 @ 0x370

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_19
BitsTypeResetNameDescription
0rw1c0x0A_19

For ALERT19


alert_handler.ALERT_CAUSE_20 @ 0x374

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_20
BitsTypeResetNameDescription
0rw1c0x0A_20

For ALERT20


alert_handler.ALERT_CAUSE_21 @ 0x378

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_21
BitsTypeResetNameDescription
0rw1c0x0A_21

For ALERT21


alert_handler.ALERT_CAUSE_22 @ 0x37c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_22
BitsTypeResetNameDescription
0rw1c0x0A_22

For ALERT22


alert_handler.ALERT_CAUSE_23 @ 0x380

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_23
BitsTypeResetNameDescription
0rw1c0x0A_23

For ALERT23


alert_handler.ALERT_CAUSE_24 @ 0x384

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_24
BitsTypeResetNameDescription
0rw1c0x0A_24

For ALERT24


alert_handler.ALERT_CAUSE_25 @ 0x388

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_25
BitsTypeResetNameDescription
0rw1c0x0A_25

For ALERT25


alert_handler.ALERT_CAUSE_26 @ 0x38c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_26
BitsTypeResetNameDescription
0rw1c0x0A_26

For ALERT26


alert_handler.ALERT_CAUSE_27 @ 0x390

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_27
BitsTypeResetNameDescription
0rw1c0x0A_27

For ALERT27


alert_handler.ALERT_CAUSE_28 @ 0x394

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_28
BitsTypeResetNameDescription
0rw1c0x0A_28

For ALERT28


alert_handler.ALERT_CAUSE_29 @ 0x398

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_29
BitsTypeResetNameDescription
0rw1c0x0A_29

For ALERT29


alert_handler.ALERT_CAUSE_30 @ 0x39c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_30
BitsTypeResetNameDescription
0rw1c0x0A_30

For ALERT30


alert_handler.ALERT_CAUSE_31 @ 0x3a0

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_31
BitsTypeResetNameDescription
0rw1c0x0A_31

For ALERT31


alert_handler.ALERT_CAUSE_32 @ 0x3a4

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_32
BitsTypeResetNameDescription
0rw1c0x0A_32

For ALERT32


alert_handler.ALERT_CAUSE_33 @ 0x3a8

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_33
BitsTypeResetNameDescription
0rw1c0x0A_33

For ALERT33


alert_handler.ALERT_CAUSE_34 @ 0x3ac

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_34
BitsTypeResetNameDescription
0rw1c0x0A_34

For ALERT34


alert_handler.ALERT_CAUSE_35 @ 0x3b0

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_35
BitsTypeResetNameDescription
0rw1c0x0A_35

For ALERT35


alert_handler.ALERT_CAUSE_36 @ 0x3b4

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_36
BitsTypeResetNameDescription
0rw1c0x0A_36

For ALERT36


alert_handler.ALERT_CAUSE_37 @ 0x3b8

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_37
BitsTypeResetNameDescription
0rw1c0x0A_37

For ALERT37


alert_handler.ALERT_CAUSE_38 @ 0x3bc

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_38
BitsTypeResetNameDescription
0rw1c0x0A_38

For ALERT38


alert_handler.ALERT_CAUSE_39 @ 0x3c0

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_39
BitsTypeResetNameDescription
0rw1c0x0A_39

For ALERT39


alert_handler.ALERT_CAUSE_40 @ 0x3c4

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_40
BitsTypeResetNameDescription
0rw1c0x0A_40

For ALERT40


alert_handler.ALERT_CAUSE_41 @ 0x3c8

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_41
BitsTypeResetNameDescription
0rw1c0x0A_41

For ALERT41


alert_handler.ALERT_CAUSE_42 @ 0x3cc

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_42
BitsTypeResetNameDescription
0rw1c0x0A_42

For ALERT42


alert_handler.ALERT_CAUSE_43 @ 0x3d0

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_43
BitsTypeResetNameDescription
0rw1c0x0A_43

For ALERT43


alert_handler.ALERT_CAUSE_44 @ 0x3d4

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_44
BitsTypeResetNameDescription
0rw1c0x0A_44

For ALERT44


alert_handler.ALERT_CAUSE_45 @ 0x3d8

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_45
BitsTypeResetNameDescription
0rw1c0x0A_45

For ALERT45


alert_handler.ALERT_CAUSE_46 @ 0x3dc

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_46
BitsTypeResetNameDescription
0rw1c0x0A_46

For ALERT46


alert_handler.ALERT_CAUSE_47 @ 0x3e0

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_47
BitsTypeResetNameDescription
0rw1c0x0A_47

For ALERT47


alert_handler.ALERT_CAUSE_48 @ 0x3e4

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_48
BitsTypeResetNameDescription
0rw1c0x0A_48

For ALERT48


alert_handler.ALERT_CAUSE_49 @ 0x3e8

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_49
BitsTypeResetNameDescription
0rw1c0x0A_49

For ALERT49


alert_handler.ALERT_CAUSE_50 @ 0x3ec

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_50
BitsTypeResetNameDescription
0rw1c0x0A_50

For ALERT50


alert_handler.ALERT_CAUSE_51 @ 0x3f0

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_51
BitsTypeResetNameDescription
0rw1c0x0A_51

For ALERT51


alert_handler.ALERT_CAUSE_52 @ 0x3f4

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_52
BitsTypeResetNameDescription
0rw1c0x0A_52

For ALERT52


alert_handler.ALERT_CAUSE_53 @ 0x3f8

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_53
BitsTypeResetNameDescription
0rw1c0x0A_53

For ALERT53


alert_handler.ALERT_CAUSE_54 @ 0x3fc

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_54
BitsTypeResetNameDescription
0rw1c0x0A_54

For ALERT54


alert_handler.ALERT_CAUSE_55 @ 0x400

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_55
BitsTypeResetNameDescription
0rw1c0x0A_55

For ALERT55


alert_handler.ALERT_CAUSE_56 @ 0x404

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_56
BitsTypeResetNameDescription
0rw1c0x0A_56

For ALERT56


alert_handler.ALERT_CAUSE_57 @ 0x408

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_57
BitsTypeResetNameDescription
0rw1c0x0A_57

For ALERT57


alert_handler.ALERT_CAUSE_58 @ 0x40c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_58
BitsTypeResetNameDescription
0rw1c0x0A_58

For ALERT58


alert_handler.ALERT_CAUSE_59 @ 0x410

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_59
BitsTypeResetNameDescription
0rw1c0x0A_59

For ALERT59


alert_handler.ALERT_CAUSE_60 @ 0x414

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_60
BitsTypeResetNameDescription
0rw1c0x0A_60

For ALERT60


alert_handler.ALERT_CAUSE_61 @ 0x418

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_61
BitsTypeResetNameDescription
0rw1c0x0A_61

For ALERT61


alert_handler.ALERT_CAUSE_62 @ 0x41c

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_62
BitsTypeResetNameDescription
0rw1c0x0A_62

For ALERT62


alert_handler.ALERT_CAUSE_63 @ 0x420

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_63
BitsTypeResetNameDescription
0rw1c0x0A_63

For ALERT63


alert_handler.ALERT_CAUSE_64 @ 0x424

Alert Cause Register

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  A_64
BitsTypeResetNameDescription
0rw1c0x0A_64

For ALERT64


alert_handler.LOC_ALERT_REGWEN_0 @ 0x428

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_0
BitsTypeResetNameDescription
0rw0c0x1EN_0

Alert configuration write enable bit. If this is cleared to 0, the corresponding LOC_ALERT_EN_SHADOWED and LOC_ALERT_CLASS_SHADOWED bits are not writable anymore.

Note that the alert pinging mechanism will only ping alerts that have been enabled and locked.


alert_handler.LOC_ALERT_REGWEN_1 @ 0x42c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_1
BitsTypeResetNameDescription
0rw0c0x1EN_1

For LOC_ALERT1


alert_handler.LOC_ALERT_REGWEN_2 @ 0x430

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_2
BitsTypeResetNameDescription
0rw0c0x1EN_2

For LOC_ALERT2


alert_handler.LOC_ALERT_REGWEN_3 @ 0x434

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_3
BitsTypeResetNameDescription
0rw0c0x1EN_3

For LOC_ALERT3


alert_handler.LOC_ALERT_REGWEN_4 @ 0x438

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_4
BitsTypeResetNameDescription
0rw0c0x1EN_4

For LOC_ALERT4


alert_handler.LOC_ALERT_REGWEN_5 @ 0x43c

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_5
BitsTypeResetNameDescription
0rw0c0x1EN_5

For LOC_ALERT5


alert_handler.LOC_ALERT_REGWEN_6 @ 0x440

Register write enable for alert enable bits.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  EN_6
BitsTypeResetNameDescription
0rw0c0x1EN_6

For LOC_ALERT6


alert_handler.LOC_ALERT_EN_SHADOWED_0 @ 0x444

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
Register enable = LOC_ALERT_REGWEN_0
31302928272625242322212019181716
 
1514131211109876543210
  EN_LA_0
BitsTypeResetNameDescription
0rw0x0EN_LA_0

Alert enable bit.

Note that the alert pinging mechanism will only ping alerts that have been enabled and locked.


alert_handler.LOC_ALERT_EN_SHADOWED_1 @ 0x448

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
Register enable = LOC_ALERT_REGWEN_1
31302928272625242322212019181716
 
1514131211109876543210
  EN_LA_1
BitsTypeResetNameDescription
0rw0x0EN_LA_1

For LOC_ALERT1


alert_handler.LOC_ALERT_EN_SHADOWED_2 @ 0x44c

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
Register enable = LOC_ALERT_REGWEN_2
31302928272625242322212019181716
 
1514131211109876543210
  EN_LA_2
BitsTypeResetNameDescription
0rw0x0EN_LA_2

For LOC_ALERT2


alert_handler.LOC_ALERT_EN_SHADOWED_3 @ 0x450

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
Register enable = LOC_ALERT_REGWEN_3
31302928272625242322212019181716
 
1514131211109876543210
  EN_LA_3
BitsTypeResetNameDescription
0rw0x0EN_LA_3

For LOC_ALERT3


alert_handler.LOC_ALERT_EN_SHADOWED_4 @ 0x454

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
Register enable = LOC_ALERT_REGWEN_4
31302928272625242322212019181716
 
1514131211109876543210
  EN_LA_4
BitsTypeResetNameDescription
0rw0x0EN_LA_4

For LOC_ALERT4


alert_handler.LOC_ALERT_EN_SHADOWED_5 @ 0x458

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
Register enable = LOC_ALERT_REGWEN_5
31302928272625242322212019181716
 
1514131211109876543210
  EN_LA_5
BitsTypeResetNameDescription
0rw0x0EN_LA_5

For LOC_ALERT5


alert_handler.LOC_ALERT_EN_SHADOWED_6 @ 0x45c

Enable register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
Register enable = LOC_ALERT_REGWEN_6
31302928272625242322212019181716
 
1514131211109876543210
  EN_LA_6
BitsTypeResetNameDescription
0rw0x0EN_LA_6

For LOC_ALERT6


alert_handler.LOC_ALERT_CLASS_SHADOWED_0 @ 0x460

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x3
Register enable = LOC_ALERT_REGWEN_0
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_LA_0
BitsTypeResetNameDescription
1:0rw0x0CLASS_LA_0

Classification

0x0ClassA

0x1ClassB

0x2ClassC

0x3ClassD


alert_handler.LOC_ALERT_CLASS_SHADOWED_1 @ 0x464

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x3
Register enable = LOC_ALERT_REGWEN_1
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_LA_1
BitsTypeResetNameDescription
1:0rw0x0CLASS_LA_1

For LOC_ALERT1


alert_handler.LOC_ALERT_CLASS_SHADOWED_2 @ 0x468

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x3
Register enable = LOC_ALERT_REGWEN_2
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_LA_2
BitsTypeResetNameDescription
1:0rw0x0CLASS_LA_2

For LOC_ALERT2


alert_handler.LOC_ALERT_CLASS_SHADOWED_3 @ 0x46c

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x3
Register enable = LOC_ALERT_REGWEN_3
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_LA_3
BitsTypeResetNameDescription
1:0rw0x0CLASS_LA_3

For LOC_ALERT3


alert_handler.LOC_ALERT_CLASS_SHADOWED_4 @ 0x470

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x3
Register enable = LOC_ALERT_REGWEN_4
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_LA_4
BitsTypeResetNameDescription
1:0rw0x0CLASS_LA_4

For LOC_ALERT4


alert_handler.LOC_ALERT_CLASS_SHADOWED_5 @ 0x474

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x3
Register enable = LOC_ALERT_REGWEN_5
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_LA_5
BitsTypeResetNameDescription
1:0rw0x0CLASS_LA_5

For LOC_ALERT5


alert_handler.LOC_ALERT_CLASS_SHADOWED_6 @ 0x478

Class assignment of the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x3
Register enable = LOC_ALERT_REGWEN_6
31302928272625242322212019181716
 
1514131211109876543210
  CLASS_LA_6
BitsTypeResetNameDescription
1:0rw0x0CLASS_LA_6

For LOC_ALERT6


alert_handler.LOC_ALERT_CAUSE_0 @ 0x47c

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  LA_0
BitsTypeResetNameDescription
0rw1c0x0LA_0

Cause bit


alert_handler.LOC_ALERT_CAUSE_1 @ 0x480

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  LA_1
BitsTypeResetNameDescription
0rw1c0x0LA_1

For LOC_ALERT1


alert_handler.LOC_ALERT_CAUSE_2 @ 0x484

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  LA_2
BitsTypeResetNameDescription
0rw1c0x0LA_2

For LOC_ALERT2


alert_handler.LOC_ALERT_CAUSE_3 @ 0x488

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  LA_3
BitsTypeResetNameDescription
0rw1c0x0LA_3

For LOC_ALERT3


alert_handler.LOC_ALERT_CAUSE_4 @ 0x48c

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  LA_4
BitsTypeResetNameDescription
0rw1c0x0LA_4

For LOC_ALERT4


alert_handler.LOC_ALERT_CAUSE_5 @ 0x490

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  LA_5
BitsTypeResetNameDescription
0rw1c0x0LA_5

For LOC_ALERT5


alert_handler.LOC_ALERT_CAUSE_6 @ 0x494

Alert Cause Register for the local alerts "alert pingfail" (0), "escalation pingfail" (1), "alert integfail" (2), "escalation integfail" (3), "bus integrity failure" (4), "shadow reg update error" (5) and "shadow reg storage error" (6).

Reset default = 0x0, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  LA_6
BitsTypeResetNameDescription
0rw1c0x0LA_6

For LOC_ALERT6


alert_handler.CLASSA_REGWEN @ 0x498

Lock bit for Class A configuration.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  CLASSA_REGWEN
BitsTypeResetNameDescription
0rw0c0x1CLASSA_REGWEN

Class configuration enable bit. If this is cleared to 0, the corresponding class configuration registers cannot be written anymore.


alert_handler.CLASSA_CTRL_SHADOWED @ 0x49c

Escalation control register for alert Class A. Can not be modified if CLASSA_REGWEN is false.

Reset default = 0x393c, mask 0x3fff
Register enable = CLASSA_REGWEN
31302928272625242322212019181716
 
1514131211109876543210
  MAP_E3 MAP_E2 MAP_E1 MAP_E0 EN_E3 EN_E2 EN_E1 EN_E0 LOCK EN
BitsTypeResetNameDescription
0rw0x0EN

Enable escalation mechanisms (accumulation and interrupt timeout) for Class A. Note that interrupts can fire regardless of whether the escalation mechanisms are enabled for this class or not.

1rw0x0LOCK

Enable automatic locking of escalation counter for class A. If true, there is no way to stop the escalation protocol for class A once it has been triggered.

2rw0x1EN_E0

Enable escalation signal 0 for Class A

3rw0x1EN_E1

Enable escalation signal 1 for Class A

4rw0x1EN_E2

Enable escalation signal 2 for Class A

5rw0x1EN_E3

Enable escalation signal 3 for Class A

7:6rw0x0MAP_E0

Determines in which escalation phase escalation signal 0 shall be asserted.

9:8rw0x1MAP_E1

Determines in which escalation phase escalation signal 1 shall be asserted.

11:10rw0x2MAP_E2

Determines in which escalation phase escalation signal 2 shall be asserted.

13:12rw0x3MAP_E3

Determines in which escalation phase escalation signal 3 shall be asserted.


alert_handler.CLASSA_CLR_REGWEN @ 0x4a0

Clear enable for escalation protocol of Class A alerts.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  CLASSA_CLR_REGWEN
BitsTypeResetNameDescription
0rw0c0x1CLASSA_CLR_REGWEN

Register defaults to true, can only be cleared. This register is set to false by the hardware if the escalation protocol has been triggered and the bit CLASSA_CTRL_SHADOWED.LOCK is true.


alert_handler.CLASSA_CLR_SHADOWED @ 0x4a4

Clear for escalation protocol of Class A.

Reset default = 0x0, mask 0x1
Register enable = CLASSA_CLR_REGWEN
31302928272625242322212019181716
 
1514131211109876543210
  CLASSA_CLR_SHADOWED
BitsTypeResetNameDescription
0rw0x0CLASSA_CLR_SHADOWED

Writing 1 to this register clears the accumulator and aborts escalation (if it has been triggered). This clear is disabled if CLASSA_CLR_REGWEN is false.


alert_handler.CLASSA_ACCUM_CNT @ 0x4a8

Current accumulation value for alert Class A. Software can clear this register with a write to CLASSA_CLR_SHADOWED register unless CLASSA_CLR_REGWEN is false.

Reset default = 0x0, mask 0xffff
31302928272625242322212019181716
 
1514131211109876543210
CLASSA_ACCUM_CNT
BitsTypeResetNameDescription
15:0roxCLASSA_ACCUM_CNT

alert_handler.CLASSA_ACCUM_THRESH_SHADOWED @ 0x4ac

Accumulation threshold value for alert Class A.

Reset default = 0x0, mask 0xffff
Register enable = CLASSA_REGWEN
31302928272625242322212019181716
 
1514131211109876543210
CLASSA_ACCUM_THRESH_SHADOWED
BitsTypeResetNameDescription
15:0rw0x0CLASSA_ACCUM_THRESH_SHADOWED

Once the accumulation value register is equal to the threshold escalation will be triggered on the next alert occurrence within this class A begins. Note that this register can not be modified if CLASSA_REGWEN is false.


alert_handler.CLASSA_TIMEOUT_CYC_SHADOWED @ 0x4b0

Interrupt timeout in cycles.

Reset default = 0x0, mask 0xffffffff
Register enable = CLASSA_REGWEN
31302928272625242322212019181716
CLASSA_TIMEOUT_CYC_SHADOWED...
1514131211109876543210
...CLASSA_TIMEOUT_CYC_SHADOWED
BitsTypeResetNameDescription
31:0rw0x0CLASSA_TIMEOUT_CYC_SHADOWED

If the interrupt corresponding to this class is not handled within the specified amount of cycles, escalation will be triggered. Set to a positive value to enable the interrupt timeout for Class A. The timeout is set to zero by default, which disables this feature. Note that this register can not be modified if CLASSA_REGWEN is false.


alert_handler.CLASSA_CRASHDUMP_TRIGGER_SHADOWED @ 0x4b4

Crashdump trigger configuration for Class A.

Reset default = 0x0, mask 0x3
Register enable = CLASSA_REGWEN
31302928272625242322212019181716
 
1514131211109876543210
  CLASSA_CRASHDUMP_TRIGGER_SHADOWED
BitsTypeResetNameDescription
1:0rw0x0CLASSA_CRASHDUMP_TRIGGER_SHADOWED

Determine in which escalation phase to capture the crashdump containing all alert cause CSRs and escalation timer states. It is recommended to capture the crashdump upon entering the first escalation phase that activates a countermeasure with many side-effects (e.g. life cycle state scrapping) in order to prevent spurious alert events from masking the original alert causes. Note that this register can not be modified if CLASSA_REGWEN is false.


alert_handler.CLASSA_PHASE0_CYC_SHADOWED @ 0x4b8

Duration of escalation phase 0 for Class A.

Reset default = 0x0, mask 0xffffffff
Register enable = CLASSA_REGWEN
31302928272625242322212019181716
CLASSA_PHASE0_CYC_SHADOWED...
1514131211109876543210
...CLASSA_PHASE0_CYC_SHADOWED
BitsTypeResetNameDescription
31:0rw0x0CLASSA_PHASE0_CYC_SHADOWED

Escalation phase duration in cycles. Note that this register can not be modified if CLASSA_REGWEN is false.


alert_handler.CLASSA_PHASE1_CYC_SHADOWED @ 0x4bc

Duration of escalation phase 1 for Class A.

Reset default = 0x0, mask 0xffffffff
Register enable = CLASSA_REGWEN
31302928272625242322212019181716
CLASSA_PHASE1_CYC_SHADOWED...
1514131211109876543210
...CLASSA_PHASE1_CYC_SHADOWED
BitsTypeResetNameDescription
31:0rw0x0CLASSA_PHASE1_CYC_SHADOWED

Escalation phase duration in cycles. Note that this register can not be modified if CLASSA_REGWEN is false.


alert_handler.CLASSA_PHASE2_CYC_SHADOWED @ 0x4c0

Duration of escalation phase 2 for Class A.

Reset default = 0x0, mask 0xffffffff
Register enable = CLASSA_REGWEN
31302928272625242322212019181716
CLASSA_PHASE2_CYC_SHADOWED...
1514131211109876543210
...CLASSA_PHASE2_CYC_SHADOWED
BitsTypeResetNameDescription
31:0rw0x0CLASSA_PHASE2_CYC_SHADOWED

Escalation phase duration in cycles. Note that this register can not be modified if CLASSA_REGWEN is false.


alert_handler.CLASSA_PHASE3_CYC_SHADOWED @ 0x4c4

Duration of escalation phase 3 for Class A.

Reset default = 0x0, mask 0xffffffff
Register enable = CLASSA_REGWEN
31302928272625242322212019181716
CLASSA_PHASE3_CYC_SHADOWED...
1514131211109876543210
...CLASSA_PHASE3_CYC_SHADOWED
BitsTypeResetNameDescription
31:0rw0x0CLASSA_PHASE3_CYC_SHADOWED

Escalation phase duration in cycles. Note that this register can not be modified if CLASSA_REGWEN is false.


alert_handler.CLASSA_ESC_CNT @ 0x4c8

Escalation counter in cycles for Class A.

Reset default = 0x0, mask 0xffffffff
31302928272625242322212019181716
CLASSA_ESC_CNT...
1514131211109876543210
...CLASSA_ESC_CNT
BitsTypeResetNameDescription
31:0roxCLASSA_ESC_CNT

Returns the current timeout or escalation count (depending on CLASSA_STATE). This register can not be directly cleared. However, SW can indirectly clear as follows.

If the class is in the Timeout state, the timeout can be aborted by clearing the corresponding interrupt bit.

If this class is in any of the escalation phases (e.g. Phase0), escalation protocol can be aborted by writing to CLASSA_CLR_SHADOWED. Note however that has no effect if CLASSA_REGWEN is set to false (either by SW or by HW via the CLASSA_CTRL_SHADOWED.LOCK feature).


alert_handler.CLASSA_STATE @ 0x4cc

Current escalation state of Class A. See also CLASSA_ESC_CNT.

Reset default = 0x0, mask 0x7
31302928272625242322212019181716
 
1514131211109876543210
  CLASSA_STATE
BitsTypeResetNameDescription
2:0roxCLASSA_STATE
0x0Idle

No timeout or escalation triggered.

0x1Timeout

IRQ timeout counter is active.

0x2FsmError

Terminal error state if FSM has been glitched.

0x3Terminal

Terminal state after escalation protocol.

0x4Phase0

Escalation Phase0 is active.

0x5Phase1

Escalation Phase1 is active.

0x6Phase2

Escalation Phase2 is active.

0x7Phase3

Escalation Phase3 is active.


alert_handler.CLASSB_REGWEN @ 0x4d0

Lock bit for Class B configuration.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  CLASSB_REGWEN
BitsTypeResetNameDescription
0rw0c0x1CLASSB_REGWEN

Class configuration enable bit. If this is cleared to 0, the corresponding class configuration registers cannot be written anymore.


alert_handler.CLASSB_CTRL_SHADOWED @ 0x4d4

Escalation control register for alert Class B. Can not be modified if CLASSB_REGWEN is false.

Reset default = 0x393c, mask 0x3fff
Register enable = CLASSB_REGWEN
31302928272625242322212019181716
 
1514131211109876543210
  MAP_E3 MAP_E2 MAP_E1 MAP_E0 EN_E3 EN_E2 EN_E1 EN_E0 LOCK EN
BitsTypeResetNameDescription
0rw0x0EN

Enable escalation mechanisms (accumulation and interrupt timeout) for Class B. Note that interrupts can fire regardless of whether the escalation mechanisms are enabled for this class or not.

1rw0x0LOCK

Enable automatic locking of escalation counter for class B. If true, there is no way to stop the escalation protocol for class B once it has been triggered.

2rw0x1EN_E0

Enable escalation signal 0 for Class B

3rw0x1EN_E1

Enable escalation signal 1 for Class B

4rw0x1EN_E2

Enable escalation signal 2 for Class B

5rw0x1EN_E3

Enable escalation signal 3 for Class B

7:6rw0x0MAP_E0

Determines in which escalation phase escalation signal 0 shall be asserted.

9:8rw0x1MAP_E1

Determines in which escalation phase escalation signal 1 shall be asserted.

11:10rw0x2MAP_E2

Determines in which escalation phase escalation signal 2 shall be asserted.

13:12rw0x3MAP_E3

Determines in which escalation phase escalation signal 3 shall be asserted.


alert_handler.CLASSB_CLR_REGWEN @ 0x4d8

Clear enable for escalation protocol of Class B alerts.

Reset default = 0x1, mask 0x1
31302928272625242322212019181716
 
1514131211109876543210
  CLASSB_CLR_REGWEN
BitsTypeResetNameDescription
0rw0c0x1CLASSB_CLR_REGWEN

Register defaults to true, can only be cleared. This register is set to false by the hardware if the escalation protocol has been triggered and the bit CLASSB_CTRL_SHADOWED.LOCK is true.


alert_handler.CLASSB_CLR_SHADOWED @ 0x4dc

Clear for escalation protocol of Class B.

Reset default = 0x0, mask 0x1
Register enable = CLASSB_CLR_REGWEN
313029282726252423222120191817