RACL Control Technical specification

Overview

This document specifies the functionality of the RACL control permission IP. racl_ctrl is an interface between the TileLink bus and RACL policy distribution and error logs. As a peripheral on the chip interconnect bus, it follows the Comportability Specification.

Distribution of policies

RACL policies on the system can be configured through registers in racl_ctrl. Each policy is specified in a register named after that policy. The set of policies is then distributed by racl_ctrl through as a single vector called racl_policies_o.

Error logs

A subscribing IP can log an error with racl_ctrl using the IP’s item in the racl_error_i port. Similarly, a RACL error from outside of OpenTitan can be reported through a particular index of the racl_error_external_i port. If multiple errors are logged on the same cycle, arbitration will record the one with the lowest index in this list:

  • Items from racl_error_i (internal errors)
  • Items from racl_error_external_i (errors from outside of OpenTitan)
  • An error reported by racl_ctrl itself.

If there is more than one error reported (concurrently or over several cycles), the error_log.overflow field will be set. The log can be cleared by writing 1 to the error_log.overflow field.

Alerts and security

A TileLink transaction with incorrect integrity bits will cause a TL integrity error. This generates a fatal_fault alert.

This instantiation of racl_ctrl uses shadowed policy registers. A storage error (meaning that the shadowed copy is not an inverse) causes the fatal_fault alert. An update error causes the recov_ctrl_update_err alert, which is not fatal.