Name | Offset | Length | Description |
---|---|---|---|
entropy_src.INTR_STATE |
0x0 | 4 | Interrupt State Register |
entropy_src.INTR_ENABLE |
0x4 | 4 | Interrupt Enable Register |
entropy_src.INTR_TEST |
0x8 | 4 | Interrupt Test Register |
entropy_src.ALERT_TEST |
0xc | 4 | Alert Test Register |
entropy_src.ME_REGWEN |
0x10 | 4 | Register write enable for module enable register |
entropy_src.SW_REGUPD |
0x14 | 4 | Register write enable for control and threshold registers |
entropy_src.REGWEN |
0x18 | 4 | Register write enable for all control registers |
entropy_src.REV |
0x1c | 4 | Revision register |
entropy_src.MODULE_ENABLE |
0x20 | 4 | Module enable register |
entropy_src.CONF |
0x24 | 4 | Configuration register |
entropy_src.ENTROPY_CONTROL |
0x28 | 4 | Entropy control register |
entropy_src.ENTROPY_DATA |
0x2c | 4 | Entropy data bits |
entropy_src.HEALTH_TEST_WINDOWS |
0x30 | 4 | Health test windows register |
entropy_src.REPCNT_THRESHOLDS |
0x34 | 4 | Repetition count test thresholds register |
entropy_src.REPCNTS_THRESHOLDS |
0x38 | 4 | Repetition count symbol test thresholds register |
entropy_src.ADAPTP_HI_THRESHOLDS |
0x3c | 4 | Adaptive proportion test high thresholds register |
entropy_src.ADAPTP_LO_THRESHOLDS |
0x40 | 4 | Adaptive proportion test low thresholds register |
entropy_src.BUCKET_THRESHOLDS |
0x44 | 4 | Bucket test thresholds register |
entropy_src.MARKOV_HI_THRESHOLDS |
0x48 | 4 | Markov test high thresholds register |
entropy_src.MARKOV_LO_THRESHOLDS |
0x4c | 4 | Markov test low thresholds register |
entropy_src.EXTHT_HI_THRESHOLDS |
0x50 | 4 | External health test high thresholds register |
entropy_src.EXTHT_LO_THRESHOLDS |
0x54 | 4 | External health test low thresholds register |
entropy_src.REPCNT_HI_WATERMARKS |
0x58 | 4 | Repetition count test high watermarks register |
entropy_src.REPCNTS_HI_WATERMARKS |
0x5c | 4 | Repetition count symbol test high watermarks register |
entropy_src.ADAPTP_HI_WATERMARKS |
0x60 | 4 | Adaptive proportion test high watermarks register |
entropy_src.ADAPTP_LO_WATERMARKS |
0x64 | 4 | Adaptive proportion test low watermarks register |
entropy_src.EXTHT_HI_WATERMARKS |
0x68 | 4 | External health test high watermarks register |
entropy_src.EXTHT_LO_WATERMARKS |
0x6c | 4 | External health test low watermarks register |
entropy_src.BUCKET_HI_WATERMARKS |
0x70 | 4 | Bucket test high watermarks register |
entropy_src.MARKOV_HI_WATERMARKS |
0x74 | 4 | Markov test high watermarks register |
entropy_src.MARKOV_LO_WATERMARKS |
0x78 | 4 | Markov test low watermarks register |
entropy_src.REPCNT_TOTAL_FAILS |
0x7c | 4 | Repetition count test failure counter register |
entropy_src.REPCNTS_TOTAL_FAILS |
0x80 | 4 | Repetition count symbol test failure counter register |
entropy_src.ADAPTP_HI_TOTAL_FAILS |
0x84 | 4 | Adaptive proportion high test failure counter register |
entropy_src.ADAPTP_LO_TOTAL_FAILS |
0x88 | 4 | Adaptive proportion low test failure counter register |
entropy_src.BUCKET_TOTAL_FAILS |
0x8c | 4 | Bucket test failure counter register |
entropy_src.MARKOV_HI_TOTAL_FAILS |
0x90 | 4 | Markov high test failure counter register |
entropy_src.MARKOV_LO_TOTAL_FAILS |
0x94 | 4 | Markov low test failure counter register |
entropy_src.EXTHT_HI_TOTAL_FAILS |
0x98 | 4 | External health test high threshold failure counter register |
entropy_src.EXTHT_LO_TOTAL_FAILS |
0x9c | 4 | External health test low threshold failure counter register |
entropy_src.ALERT_THRESHOLD |
0xa0 | 4 | Alert threshold register |
entropy_src.ALERT_SUMMARY_FAIL_COUNTS |
0xa4 | 4 | Alert summary failure counts register |
entropy_src.ALERT_FAIL_COUNTS |
0xa8 | 4 | Alert failure counts register |
entropy_src.EXTHT_FAIL_COUNTS |
0xac | 4 | External health test alert failure counts register |
entropy_src.FW_OV_CONTROL |
0xb0 | 4 | Firmware override control register |
entropy_src.FW_OV_SHA3_START |
0xb4 | 4 | Firmware override sha3 block start control register |
entropy_src.FW_OV_WR_FIFO_FULL |
0xb8 | 4 | Firmware override FIFO write full status register |
entropy_src.FW_OV_RD_FIFO_OVERFLOW |
0xbc | 4 | Firmware override observe FIFO overflow status |
entropy_src.FW_OV_RD_DATA |
0xc0 | 4 | Firmware override observe FIFO read register |
entropy_src.FW_OV_WR_DATA |
0xc4 | 4 | Firmware override FIFO write register |
entropy_src.OBSERVE_FIFO_THRESH |
0xc8 | 4 | Observe FIFO threshold register |
entropy_src.OBSERVE_FIFO_DEPTH |
0xcc | 4 | Observe FIFO depth register |
entropy_src.DEBUG_STATUS |
0xd0 | 4 | Debug status register |
entropy_src.RECOV_ALERT_STS |
0xd4 | 4 | Recoverable alert status register |
entropy_src.ERR_CODE |
0xd8 | 4 | Hardware detection of error conditions status register |
entropy_src.ERR_CODE_TEST |
0xdc | 4 | Test error conditions register |
entropy_src.MAIN_SM_STATE |
0xe0 | 4 | Main state machine state debug register |
Interrupt State Register
- Offset:
0x0
- Reset default:
0x0
- Reset mask:
0xf
{"reg": [{"name": "es_entropy_valid", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "es_health_test_failed", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "es_observe_fifo_ready", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "es_fatal_err", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"bits": 28}], "config": {"lanes": 1, "fontsize": 10, "vspace": 230}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:4 | Reserved | |||
3 | rw1c | 0x0 | es_fatal_err | Asserted when a FIFO error occurs, or if an illegal state machine state is reached. |
2 | rw1c | 0x0 | es_observe_fifo_ready | Asserted when the observe FIFO has filled to the threshold level. |
1 | rw1c | 0x0 | es_health_test_failed | Asserted when the alert count has been met. |
0 | rw1c | 0x0 | es_entropy_valid | Asserted when entropy source bits are available. |
Interrupt Enable Register
- Offset:
0x4
- Reset default:
0x0
- Reset mask:
0xf
{"reg": [{"name": "es_entropy_valid", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "es_health_test_failed", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "es_observe_fifo_ready", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "es_fatal_err", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 28}], "config": {"lanes": 1, "fontsize": 10, "vspace": 230}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:4 | Reserved | |||
3 | rw | 0x0 | es_fatal_err | Enable interrupt when INTR_STATE.es_fatal_err is set. |
2 | rw | 0x0 | es_observe_fifo_ready | Enable interrupt when INTR_STATE.es_observe_fifo_ready is set. |
1 | rw | 0x0 | es_health_test_failed | Enable interrupt when INTR_STATE.es_health_test_failed is set. |
0 | rw | 0x0 | es_entropy_valid | Enable interrupt when INTR_STATE.es_entropy_valid is set. |
Interrupt Test Register
- Offset:
0x8
- Reset default:
0x0
- Reset mask:
0xf
{"reg": [{"name": "es_entropy_valid", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "es_health_test_failed", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "es_observe_fifo_ready", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "es_fatal_err", "bits": 1, "attr": ["wo"], "rotate": -90}, {"bits": 28}], "config": {"lanes": 1, "fontsize": 10, "vspace": 230}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:4 | Reserved | |||
3 | wo | 0x0 | es_fatal_err | Write 1 to force INTR_STATE.es_fatal_err to 1. |
2 | wo | 0x0 | es_observe_fifo_ready | Write 1 to force INTR_STATE.es_observe_fifo_ready to 1. |
1 | wo | 0x0 | es_health_test_failed | Write 1 to force INTR_STATE.es_health_test_failed to 1. |
0 | wo | 0x0 | es_entropy_valid | Write 1 to force INTR_STATE.es_entropy_valid to 1. |
Alert Test Register
- Offset:
0xc
- Reset default:
0x0
- Reset mask:
0x3
{"reg": [{"name": "recov_alert", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "fatal_alert", "bits": 1, "attr": ["wo"], "rotate": -90}, {"bits": 30}], "config": {"lanes": 1, "fontsize": 10, "vspace": 130}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:2 | Reserved | |||
1 | wo | 0x0 | fatal_alert | Write 1 to trigger one alert event of this kind. |
0 | wo | 0x0 | recov_alert | Write 1 to trigger one alert event of this kind. |
Register write enable for module enable register
- Offset:
0x10
- Reset default:
0x1
- Reset mask:
0x1
{"reg": [{"name": "ME_REGWEN", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 110}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:1 | Reserved | |||
0 | rw0c | 0x1 | ME_REGWEN | When true, the MODULE_ENABLE register can be modified. When false, it becomes read-only. |
Register write enable for control and threshold registers
- Offset:
0x14
- Reset default:
0x1
- Reset mask:
0x1
{"reg": [{"name": "SW_REGUPD", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 110}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:1 | Reserved | |||
0 | rw0c | 0x1 | SW_REGUPD | When this bit true and the MODULE_ENABLE field is false, the REGWEN write enable bit read as true, and is distributed to all associated control and threshold registers. When false, these registers become read-only. |
Register write enable for all control registers
- Offset:
0x18
- Reset default:
0x1
- Reset mask:
0x1
{"reg": [{"name": "REGWEN", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:1 | Reserved | ||
0 | ro | 0x1 | REGWEN |
This read-only write enable bit will allow write access to control and threshold registers that are associated with this bit, but only when the MODULE_ENABLE
register is set to kMultiBitBool4False
and the SW_REGUPD
write enable bit is set to true.
When read as false, these registers become read-only.
Revision register
- Offset:
0x1c
- Reset default:
0x10303
- Reset mask:
0xffffff
{"reg": [{"name": "ABI_REVISION", "bits": 8, "attr": ["ro"], "rotate": 0}, {"name": "HW_REVISION", "bits": 8, "attr": ["ro"], "rotate": 0}, {"name": "CHIP_TYPE", "bits": 8, "attr": ["ro"], "rotate": 0}, {"bits": 8}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:24 | Reserved | |||
23:16 | ro | 0x1 | CHIP_TYPE | Read of this register shows the type of chip using this block. |
15:8 | ro | 0x3 | HW_REVISION | Read of this register shows the revision of this block. |
7:0 | ro | 0x3 | ABI_REVISION | Read of this register shows the ABI of this block. |
Module enable register
- Offset:
0x20
- Reset default:
0x9
- Reset mask:
0xf
- Register enable:
ME_REGWEN
{"reg": [{"name": "MODULE_ENABLE", "bits": 4, "attr": ["rw"], "rotate": -90}, {"bits": 28}], "config": {"lanes": 1, "fontsize": 10, "vspace": 150}}
Bits | Type | Reset | Name |
---|---|---|---|
31:4 | Reserved | ||
3:0 | rw | 0x9 | MODULE_ENABLE |
Setting this field to kMultiBitBool4True
will enable the ENTROPY_SRC module. Setting this field to kMultiBitBool4False
will effectively reset the module.
The modules of the entropy complex may only be enabled and disabled in a specific order, see Programmers Guide for details.
Configuration register
- Offset:
0x24
- Reset default:
0x909099
- Reset mask:
0x3f0f0ff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_ENABLE", "bits": 4, "attr": ["rw"], "rotate": -90}, {"name": "ENTROPY_DATA_REG_ENABLE", "bits": 4, "attr": ["rw"], "rotate": -90}, {"bits": 4}, {"name": "THRESHOLD_SCOPE", "bits": 4, "attr": ["rw"], "rotate": -90}, {"bits": 4}, {"name": "RNG_BIT_ENABLE", "bits": 4, "attr": ["rw"], "rotate": -90}, {"name": "RNG_BIT_SEL", "bits": 2, "attr": ["rw"], "rotate": -90}, {"bits": 6}], "config": {"lanes": 1, "fontsize": 10, "vspace": 250}}
Bits | Type | Reset | Name |
---|---|---|---|
31:26 | Reserved | ||
25:24 | rw | 0x0 | RNG_BIT_SEL |
23:20 | rw | 0x9 | RNG_BIT_ENABLE |
19:16 | Reserved | ||
15:12 | rw | 0x9 | THRESHOLD_SCOPE |
11:8 | Reserved | ||
7:4 | rw | 0x9 | ENTROPY_DATA_REG_ENABLE |
3:0 | rw | 0x9 | FIPS_ENABLE |
When the above bit iset, this field selects which bit from the RNG bus will be processed when in single RNG bit mode. This two bit field selects the RNG bit stream: 0b00: RNG bit 0 0b01: RNG bit 1 0b10: RNG bit 2 0b11: RNG bit 3
Setting this field to kMultiBitBool4True
enables the single RNG bit mode, where only one bit is sampled.
Note that the ENTROPY_SRC block can only generate FIPS qualified entropy if this field is set to kMultiBitBool4False
.
Additional requirements to generate FIPS qualified entropy are i) that CONF.FIPS_ENABLE
is set to kMultiBitBool4True
, and ii) that at most one of the ENTROPY_CONTROL.ES_ROUTE
and ENTROPY_CONTROL.ES_TYPE
fields but not both are set to kMultiBitBool4True
.
This field controls the scope (either by-line or by-sum) of the health checks.
If set to kMultiBitBool4True
, the Adaptive Proportion and Markov Tests will accumulate all RNG input lines into a single score, and thresholds will be applied to the sum all the entropy input lines.
If set to kMultiBitBool4False
, the RNG input lines are all scored individually.
A statistical deviation in any one input line, be it due to coincidence or failure, will force rejection of the sample, and count toward the total alert count.
Setting this field to kMultiBitBool4True
will enable reading entropy values from the ENTROPY_DATA
register.
This function also requires that the otp_en_entropy_src_fw_read input is set to kMultiBitBool8True
.
Setting this field to kMultiBitBool4True
selects the FIPS/CC compliant mode (or short FIPS mode).
In this mode, the ENTROPY_SRC block can generate FIPS qualified entropy.
Additional requirements to generate FIPS qualified entropy are i) that at most one of the ENTROPY_CONTROL.ES_ROUTE
and ENTROPY_CONTROL.ES_TYPE
fields are set to kMultiBitBool4True
but not both, and ii) that CONF.RNG_BIT_ENABLE
is set to kMultiBitBool4False
.
Setting this field to kMultiBitBool4False
selects the boot-time / bypass mode in which the hardware conditioning is bypassed.
Entropy control register
- Offset:
0x28
- Reset default:
0x99
- Reset mask:
0xff
- Register enable:
REGWEN
{"reg": [{"name": "ES_ROUTE", "bits": 4, "attr": ["rw"], "rotate": -90}, {"name": "ES_TYPE", "bits": 4, "attr": ["rw"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 100}}
Bits | Type | Reset | Name |
---|---|---|---|
31:8 | Reserved | ||
7:4 | rw | 0x9 | ES_TYPE |
3:0 | rw | 0x9 | ES_ROUTE |
When this field is kMultiBitBool4False
, the hardware conditioning inside the ENTROPY_SRC block is enabled.
Setting this field to kMultiBitBool4True
will bypass the hardware conditioning.
For this to work, also ENTROPY_CONTROL.ES_ROUTE
needs to be set to kMultiBitBool4True
to route the unconditioned, raw entropy to the ENTROPY_DATA
register.
Alternatively, the hardware conditioning can be bypassed by setting CONF.FIPS_ENABLE
to kMultiBitBool4False
to disable FIPS mode and enable bypass / boot-time mode.
In both cases, the ENTROPY_SRC block will not generate FIPS qualified entropy.
To generate FIPS qualified entropy, i) CONF.FIPS_ENABLE
needs to be set to kMultiBitBool4True
, ii) CONF.RNG_BIT_ENABLE
needs to be set to kMultiBitBool4False
, and iii) at most one of the ENTROPY_CONTROL.ES_ROUTE
and ENTROPY_CONTROL.ES_TYPE
fields needs to be set to kMultiBitBool4True
but not both.
When this field is kMultiBitBool4False
, the generated entropy will be forwarded out of this module to the hardware interface.
Setting this field to kMultiBitBool4True
routes the generated entropy to the ENTROPY_DATA
register to be read by firmware.
Note that for ENTROPY_DATA
to become readable, also CONF.ENTROPY_DATA_REG_ENABLE
needs to be set to kMultiBitBool4True
.
In addition, the otp_en_entropy_src_fw_read input needs to be set to kMultiBitBool8True
.
Entropy data bits
- Offset:
0x2c
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "ENTROPY_DATA", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:0 | ro | x | ENTROPY_DATA |
A read of this register provides generated entropy bits to firmware.
For this to work also CONF.ENTROPY_DATA_REG_ENABLE
needs to be set to kMultiBitBool4True
.
In addition, the otp_en_entropy_src_fw_read input needs to be set to kMultiBitBool8True
.
Health test windows register
- Offset:
0x30
- Reset default:
0x600200
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_WINDOW", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_WINDOW", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0x60 | BYPASS_WINDOW |
15:0 | rw | 0x200 | FIPS_WINDOW |
This is the window size for all health tests when running in bypass mode.
This mode is active after reset for the first and only test run, or when this mode is programmed by firmware by setting CONF.FIPS_ENABLE
to kMultiBitBool4False
.
The default value is (384 bits * 1 clock/4 bits);
Note that currently only a window size of 384 is supported and tested (this corresponds to the register default value 0x60). Do not use any other values, unless you know what you are doing.
This is the window size for all health tests. This value is used when entropy is being tested in FIPS/CC compliance mode (for simplicity referred to as FIPS mode). The default value is (2048 bits * 1 clock/4 bits);
Note that the number of tested bits taken by the conditioner to produce a seed is equal to the window size x 4.
The only exception is the startup seed which is produced using the bits of two subsequent windows, i.e., 2 x window size x 4 tested bits.
The factor of 4 relates to the number of noise source channels (i.e. symbol size) and applies both in single-channel and multi-channel mode (see ENTROPY_SRC.RNG_BIT_ENABLE
).
Note that NIST SP 800-90B (Table 2) requires the adaptive proportion test to be run on 1024 or 512 samples in single-channel or multi-channel mode, respectively (see ENTROPY_SRC.RNG_BIT_ENABLE
).
The startup tests must be run on at least 1024 consecutive samples (see Section 4.3 Requirements for Health Tests of NIST SP 800-90B) and this block always uses two subsequent windows for startup health testing.
The use of window sizes below 512 samples is thus not recommended as this may not comply with NIST SP 800-90B.
Repetition count test thresholds register
- Offset:
0x34
- Reset default:
0xffffffff
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0xffff | BYPASS_THRESH |
15:0 | rw | 0xffff | FIPS_THRESH |
This is the threshold size for the repetition count health test running in bypass mode. This mode is active after reset for the first and only test run, or when this mode is programmed by firmware. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
This is the threshold size for the repetition count health test. This value is used in FIPS mode. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
Repetition count symbol test thresholds register
- Offset:
0x38
- Reset default:
0xffffffff
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0xffff | BYPASS_THRESH |
15:0 | rw | 0xffff | FIPS_THRESH |
This is the threshold size for the repetition count symbol health test running in bypass mode. This mode is active after reset for the first and only test run, or when this mode is programmed by firmware. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
This is the threshold size for the repetition count symbol health test. This value is used in FIPS mode. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
Adaptive proportion test high thresholds register
- Offset:
0x3c
- Reset default:
0xffffffff
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0xffff | BYPASS_THRESH |
15:0 | rw | 0xffff | FIPS_THRESH |
This is the threshold size for the adaptive proportion health test running in bypass mode. This mode is active after reset for the first and only test run, or when this mode is programmed by firmware. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
This is the threshold size for the adaptive proportion health test. This value is used in FIPS mode. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
Adaptive proportion test low thresholds register
- Offset:
0x40
- Reset default:
0x0
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0x0 | BYPASS_THRESH |
15:0 | rw | 0x0 | FIPS_THRESH |
This is the threshold size for the adaptive proportion health test running in bypass mode. This mode is active after reset for the first and only test run, or when this mode is programmed by firmware. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is greater than the current value of this register. A read from this register always reflects the current value.
This is the threshold size for the adaptive proportion health test. This value is used in FIPS mode. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is greater than the current value of this register. A read from this register always reflects the current value.
Bucket test thresholds register
- Offset:
0x44
- Reset default:
0xffffffff
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0xffff | BYPASS_THRESH |
15:0 | rw | 0xffff | FIPS_THRESH |
This is the threshold size for the bucket health test running in bypass mode. This mode is active after reset for the first and only test run, or when this mode is programmed by firmware. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
This is the threshold size for the bucket health test. This value is used in FIPS mode. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
Markov test high thresholds register
- Offset:
0x48
- Reset default:
0xffffffff
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0xffff | BYPASS_THRESH |
15:0 | rw | 0xffff | FIPS_THRESH |
This is the threshold size for the Markov health test running in bypass mode. This mode is active after reset for the first and only test run, or when this mode is programmed by firmware. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
This is the threshold size for the Markov health test. This value is used in FIPS mode. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
Markov test low thresholds register
- Offset:
0x4c
- Reset default:
0x0
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0x0 | BYPASS_THRESH |
15:0 | rw | 0x0 | FIPS_THRESH |
This is the threshold size for the Markov health test running in bypass mode. This mode is active after reset for the first and only test run, or when this mode is programmed by firmware. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is greater than the current value of this register. A read from this register always reflects the current value.
This is the threshold size for the Markov health test. This value is used in FIPS mode. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is greater than the current value of this register. A read from this register always reflects the current value.
External health test high thresholds register
- Offset:
0x50
- Reset default:
0xffffffff
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0xffff | BYPASS_THRESH |
15:0 | rw | 0xffff | FIPS_THRESH |
This is the threshold size for the external health test running in bypass mode. This mode is active after reset for the first and only test run, or when this mode is programmed by firmware. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
This is the threshold size for the external health test. This value is used in FIPS mode. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is less than the current value of this register. A read from this register always reflects the current value.
External health test low thresholds register
- Offset:
0x54
- Reset default:
0x0
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "FIPS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "BYPASS_THRESH", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | rw | 0x0 | BYPASS_THRESH |
15:0 | rw | 0x0 | FIPS_THRESH |
This is the threshold size for the external health test running in bypass mode. This mode is active after reset for the first and only test run, or when this mode is programmed by firmware. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is greater than the current value of this register. A read from this register always reflects the current value.
This is the threshold size for the external health test. This value is used in FIPS mode. This register must be written before the module is enabled. Writing to this register will only update the register if the written value is greater than the current value of this register. A read from this register always reflects the current value.
Repetition count test high watermarks register
- Offset:
0x58
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "FIPS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}, {"name": "BYPASS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | ro | x | BYPASS_WATERMARK | High watermark value of the REPCNT test in bypass mode. |
15:0 | ro | x | FIPS_WATERMARK | High watermark value of the REPCNT test in FIPS mode. |
Repetition count symbol test high watermarks register
- Offset:
0x5c
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "FIPS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}, {"name": "BYPASS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | ro | x | BYPASS_WATERMARK | High watermark value of the REPCNTS test in bypass mode. |
15:0 | ro | x | FIPS_WATERMARK | High watermark value of the REPCNTS test in FIPS mode. |
Adaptive proportion test high watermarks register
- Offset:
0x60
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "FIPS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}, {"name": "BYPASS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | ro | x | BYPASS_WATERMARK | High watermark value of the adaptive proportion test in bypass mode. |
15:0 | ro | x | FIPS_WATERMARK | High watermark value of the adaptive proportion test in FIPS mode. |
Adaptive proportion test low watermarks register
- Offset:
0x64
- Reset default:
0xffffffff
- Reset mask:
0xffffffff
{"reg": [{"name": "FIPS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}, {"name": "BYPASS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | ro | 0xffff | BYPASS_WATERMARK | Low watermark value of the adaptive proportion test in bypass mode. |
15:0 | ro | 0xffff | FIPS_WATERMARK | Low watermark value of the adaptive proportion test in FIPS mode. |
External health test high watermarks register
- Offset:
0x68
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "FIPS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}, {"name": "BYPASS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | ro | x | BYPASS_WATERMARK | High watermark value of the external health test in bypass mode. |
15:0 | ro | x | FIPS_WATERMARK | High watermark value of the external health test in FIPS mode. |
External health test low watermarks register
- Offset:
0x6c
- Reset default:
0xffffffff
- Reset mask:
0xffffffff
{"reg": [{"name": "FIPS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}, {"name": "BYPASS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | ro | 0xffff | BYPASS_WATERMARK | Low watermark value of the external health test in bypass mode. |
15:0 | ro | 0xffff | FIPS_WATERMARK | Low watermark value of the external health test in FIPS mode. |
Bucket test high watermarks register
- Offset:
0x70
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "FIPS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}, {"name": "BYPASS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | ro | x | BYPASS_WATERMARK | High watermark value of the bucket test in bypass mode. |
15:0 | ro | x | FIPS_WATERMARK | High watermark value of the bucket test in FIPS mode. |
Markov test high watermarks register
- Offset:
0x74
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "FIPS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}, {"name": "BYPASS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | ro | x | BYPASS_WATERMARK | High watermark value of the Markov test in bypass mode. |
15:0 | ro | x | FIPS_WATERMARK | High watermark value of the Markov test in FIPS mode. |
Markov test low watermarks register
- Offset:
0x78
- Reset default:
0xffffffff
- Reset mask:
0xffffffff
{"reg": [{"name": "FIPS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}, {"name": "BYPASS_WATERMARK", "bits": 16, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | ro | 0xffff | BYPASS_WATERMARK | Low watermark value of the Markov test in bypass mode. |
15:0 | ro | 0xffff | FIPS_WATERMARK | Low watermark value of the Markov test in FIPS mode. |
Repetition count test failure counter register
- Offset:
0x7c
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "REPCNT_TOTAL_FAILS", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:0 | ro | x | REPCNT_TOTAL_FAILS | This register will hold a running count of test failures observed during normal operation. It will persist until cleared. |
Repetition count symbol test failure counter register
- Offset:
0x80
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "REPCNTS_TOTAL_FAILS", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:0 | ro | x | REPCNTS_TOTAL_FAILS | This register will hold a running count of test failures observed during normal operation. It will persist until cleared. |
Adaptive proportion high test failure counter register
- Offset:
0x84
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "ADAPTP_HI_TOTAL_FAILS", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:0 | ro | x | ADAPTP_HI_TOTAL_FAILS | This register will hold a running count of test failures observed during normal operation. It will persist until cleared. |
Adaptive proportion low test failure counter register
- Offset:
0x88
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "ADAPTP_LO_TOTAL_FAILS", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:0 | ro | x | ADAPTP_LO_TOTAL_FAILS | This register will hold a running count of test failures observed during normal operation. It will persist until cleared. |
Bucket test failure counter register
- Offset:
0x8c
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "BUCKET_TOTAL_FAILS", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:0 | ro | x | BUCKET_TOTAL_FAILS | This register will hold a running count of test failures observed during normal operation. It will persist until cleared. |
Markov high test failure counter register
- Offset:
0x90
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "MARKOV_HI_TOTAL_FAILS", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:0 | ro | x | MARKOV_HI_TOTAL_FAILS | This register will hold a running count of test failures observed during normal operation. It will persist until cleared. |
Markov low test failure counter register
- Offset:
0x94
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "MARKOV_LO_TOTAL_FAILS", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:0 | ro | x | MARKOV_LO_TOTAL_FAILS | This register will hold a running count of test failures observed during normal operation. It will persist until cleared. |
External health test high threshold failure counter register
- Offset:
0x98
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "EXTHT_HI_TOTAL_FAILS", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:0 | ro | x | EXTHT_HI_TOTAL_FAILS | This register will hold a running count of test failures observed during normal operation. It will persist until cleared. |
External health test low threshold failure counter register
- Offset:
0x9c
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "EXTHT_LO_TOTAL_FAILS", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:0 | ro | x | EXTHT_LO_TOTAL_FAILS | This register will hold a running count of test failures observed during normal operation. It will persist until cleared. |
Alert threshold register
- Offset:
0xa0
- Reset default:
0xfffd0002
- Reset mask:
0xffffffff
- Register enable:
REGWEN
{"reg": [{"name": "ALERT_THRESHOLD", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "ALERT_THRESHOLD_INV", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:16 | rw | 0xfffd | ALERT_THRESHOLD_INV | This should be set to the value above, but inverted. |
15:0 | rw | 0x2 | ALERT_THRESHOLD | This is the threshold size that will signal an alert when value is reached. A value of zero will disable alerts. The default value is 2. |
Alert summary failure counts register
- Offset:
0xa4
- Reset default:
0x0
- Reset mask:
0xffff
{"reg": [{"name": "ANY_FAIL_COUNT", "bits": 16, "attr": ["ro"], "rotate": 0}, {"bits": 16}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:16 | Reserved | ||
15:0 | ro | x | ANY_FAIL_COUNT |
This field will hold a running count of
the total alert count, which is a sum of all of the other
counters in the ALERT_FAIL_COUNTS
register.
It will be reset after every passing test sequence unless in firmware override mode (extract and insert only).
If an alert is signaled, this value will persist until it is cleared.
Alert failure counts register
- Offset:
0xa8
- Reset default:
0x0
- Reset mask:
0xfffffff0
{"reg": [{"bits": 4}, {"name": "REPCNT_FAIL_COUNT", "bits": 4, "attr": ["ro"], "rotate": -90}, {"name": "ADAPTP_HI_FAIL_COUNT", "bits": 4, "attr": ["ro"], "rotate": -90}, {"name": "ADAPTP_LO_FAIL_COUNT", "bits": 4, "attr": ["ro"], "rotate": -90}, {"name": "BUCKET_FAIL_COUNT", "bits": 4, "attr": ["ro"], "rotate": -90}, {"name": "MARKOV_HI_FAIL_COUNT", "bits": 4, "attr": ["ro"], "rotate": -90}, {"name": "MARKOV_LO_FAIL_COUNT", "bits": 4, "attr": ["ro"], "rotate": -90}, {"name": "REPCNTS_FAIL_COUNT", "bits": 4, "attr": ["ro"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 220}}
Bits | Type | Reset | Name |
---|---|---|---|
31:28 | ro | x | REPCNTS_FAIL_COUNT |
27:24 | ro | x | MARKOV_LO_FAIL_COUNT |
23:20 | ro | x | MARKOV_HI_FAIL_COUNT |
19:16 | ro | x | BUCKET_FAIL_COUNT |
15:12 | ro | x | ADAPTP_LO_FAIL_COUNT |
11:8 | ro | x | ADAPTP_HI_FAIL_COUNT |
7:4 | ro | x | REPCNT_FAIL_COUNT |
3:0 | Reserved |
This field will hold a running count of test failures that contribute to the total alert count. It will be reset after every passing test sequence unless in firmware override mode (extract and insert only). If an alert is signaled, this value will persist until it is cleared.
This field will hold a running count of test failures that contribute to the total alert count. It will be reset after every passing test sequence unless in firmware override mode (extract and insert only). If an alert is signaled, this value will persist until it is cleared.
This field will hold a running count of test failures that contribute to the total alert count. It will be reset after every passing test sequence unless in firmware override mode (extract and insert only). If an alert is signaled, this value will persist until it is cleared.
This field will hold a running count of test failures that contribute to the total alert count. It will be reset after every passing test sequence unless in firmware override mode (extract and insert only). If an alert is signaled, this value will persist until it is cleared.
This field will hold a running count of test failures that contribute to the total alert count. It will be reset after every passing test sequence unless in firmware override mode (extract and insert only). If an alert is signaled, this value will persist until it is cleared.
This field will hold a running count of test failures that contribute to the total alert count. It will be reset after every passing test sequence unless in firmware override mode (extract and insert only). If an alert is signaled, this value will persist until it is cleared.
This field will hold a running count of test failures that contribute to the total alert count. It will be reset after every passing test sequence unless in firmware override mode (extract and insert only). If an alert is signaled, this value will persist until it is cleared.
External health test alert failure counts register
- Offset:
0xac
- Reset default:
0x0
- Reset mask:
0xff
{"reg": [{"name": "EXTHT_HI_FAIL_COUNT", "bits": 4, "attr": ["ro"], "rotate": -90}, {"name": "EXTHT_LO_FAIL_COUNT", "bits": 4, "attr": ["ro"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 210}}
Bits | Type | Reset | Name |
---|---|---|---|
31:8 | Reserved | ||
7:4 | ro | x | EXTHT_LO_FAIL_COUNT |
3:0 | ro | x | EXTHT_HI_FAIL_COUNT |
This field will hold a running count of test failures that contribute to the total alert count. It will be reset after every passing test sequence unless in firmware override mode (extract and insert only). If an alert is signaled, this value will persist until it is cleared.
This field will hold a running count of test failures that contribute to the total alert count. It will be reset after every passing test sequence unless in firmware override mode (extract and insert only). If an alert is signaled, this value will persist until it is cleared.
Firmware override control register
- Offset:
0xb0
- Reset default:
0x99
- Reset mask:
0xff
- Register enable:
REGWEN
{"reg": [{"name": "FW_OV_MODE", "bits": 4, "attr": ["rw"], "rotate": -90}, {"name": "FW_OV_ENTROPY_INSERT", "bits": 4, "attr": ["rw"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 220}}
Bits | Type | Reset | Name |
---|---|---|---|
31:8 | Reserved | ||
7:4 | rw | 0x9 | FW_OV_ENTROPY_INSERT |
3:0 | rw | 0x9 | FW_OV_MODE |
Setting this field to kMultiBitBool4True
allows firmware to extract entropy bits by reading the observe FIFO (see FW_OV_RD_DATA
) and insert entropy bits into the entropy flow by writing the FW_OV_WR_DATA
register.
This is useful e.g. for performing additional health tests and/or firmware-based conditioning.
For this to work, FW_OV_CONTROL.FW_OV_MODE
needs to be set to kMultiBitBool4True
.
In addition, the otp_en_entropy_src_fw_over input needs to be set to kMultiBitBool8True
.
Firmware can use the hardware conditioning for the inserted entropy bits (see FW_OV_SHA3_START
).
Note that if the field is set to kMultiBitBool4True
, post-health test entropy bits do NOT continue to flow through the hardware pipeline.
Also, the FW_OV_CONTROL.FW_OV_MODE
bit must be set.
The observe FIFO will collect 2 kBit of contiguous entropy bits.
Any entropy bits arriving after the observe FIFO is full are being discarded.
Firmware has to read out the entire observe FIFO to restart entropy collection.
Only entropy bits inserted by firmware by writing FW_OV_WR_DATA
may eventually reach the block hardware interface.
Setting this field to kMultiBitBool4True
will put the entropy flow in firmware override mode.
In this mode, firmware can monitor the post-health test entropy by reading
the observe FIFO (see FW_OV_RD_DATA
).
For this to work, the otp_en_entropy_src_fw_over input needs to be set to kMultiBitBool8True
.
Note that the post-health test entropy bits collected in the observe FIFO continue to flow through the hardware pipeline and may eventually reach the block hardware interface.
Firmware override sha3 block start control register
- Offset:
0xb4
- Reset default:
0x9
- Reset mask:
0xf
{"reg": [{"name": "FW_OV_INSERT_START", "bits": 4, "attr": ["rw"], "rotate": -90}, {"bits": 28}], "config": {"lanes": 1, "fontsize": 10, "vspace": 200}}
Bits | Type | Reset | Name |
---|---|---|---|
31:4 | Reserved | ||
3:0 | rw | 0x9 | FW_OV_INSERT_START |
Setting this field to kMultiBitBool4True
will instruct the ENTROPY_SRC main state machine to start the SHA3 process and be ready to accept entropy data.
This field should be set prior to writing the FW_OV_WR_DATA
register.
Once all data has been written, this field should be set to kMultiBitBool4False
.
Once that happened, the SHA3 block will finish processing and push the result into the esfinal FIFO.
Note that clearing this bit to kMultiBitBool4False
while there is still unprocessed entropy in FW_OV_WR_DATA
will start the SHA3 engine before data can be added to the input message, and will also signal a recoverable alert in RECOV_ALERT_STS.ES_FW_OV_DISABLE_ALERT.
To avoid this, check that FW_OV_WR_FIFO_FULL
is clear before setting this field to kMultiBitBool4False
.
Firmware override FIFO write full status register
- Offset:
0xb8
- Reset default:
0x0
- Reset mask:
0x1
{"reg": [{"name": "FW_OV_WR_FIFO_FULL", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 200}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:1 | Reserved | |||
0 | ro | x | FW_OV_WR_FIFO_FULL | "When this bit is clear, writes to the FW_OV_WR_DATA register are allowed. If this bit is set, it is the equivalent to a FIFO full condition, and writes to the FW_OV_WR_DATA register must be delayed until this bit is reset. |
Firmware override observe FIFO overflow status
- Offset:
0xbc
- Reset default:
0x0
- Reset mask:
0x1
{"reg": [{"name": "FW_OV_RD_FIFO_OVERFLOW", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 240}}
Bits | Type | Reset | Name |
---|---|---|---|
31:1 | Reserved | ||
0 | rw0c | 0x0 | FW_OV_RD_FIFO_OVERFLOW |
This bit is set by hardware whenever RNG data is lost due to an overflow condition
in the observe FIFO. The RNG data rate is slow enough that firmware should always
be able to keep up. This register meanwhile provides an additional check to confirm
that bytes read from the FW_OV_RD_DATA
register represent contiguous RNG samples.
If an overflow event occurs, this bit must be cleared by software.
Firmware override observe FIFO read register
- Offset:
0xc0
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "FW_OV_RD_DATA", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:0 | ro | x | FW_OV_RD_DATA |
A read of this register pops and returns the top of the observe FIFO.
For this to work, the FW_OV_CONTROL.FW_OV_MODE
field needs to be set to kMultiBitBool4True
In addition, the otp_en_entropy_src_fw_over input needs to be set to kMultiBitBool8True
.
Firmware override FIFO write register
- Offset:
0xc4
- Reset default:
0x0
- Reset mask:
0xffffffff
{"reg": [{"name": "FW_OV_WR_DATA", "bits": 32, "attr": ["wo"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name |
---|---|---|---|
31:0 | wo | x | FW_OV_WR_DATA |
A write to this register will insert entropy back into the entropy source module flow.
For this to work, both the FW_OV_CONTROL.FW_OV_MODE
and FW_OV_CONTROL.FW_OV_ENTROPY_INSERT
fields need to be set to kMultiBitBool4True
.
In addition, the otp_en_entropy_src_fw_over input needs to be set to kMultiBitBool8True
.
Observe FIFO threshold register
- Offset:
0xc8
- Reset default:
0x20
- Reset mask:
0x7f
- Register enable:
REGWEN
{"reg": [{"name": "OBSERVE_FIFO_THRESH", "bits": 7, "attr": ["rw"], "rotate": -90}, {"bits": 25}], "config": {"lanes": 1, "fontsize": 10, "vspace": 210}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:7 | Reserved | |||
6:0 | rw | 0x20 | OBSERVE_FIFO_THRESH | This field will set the threshold that the depth of the observe FIFO will be compared with when setting the interrupt status bit. Note: a value of zero is reserved and not to be used. |
Observe FIFO depth register
- Offset:
0xcc
- Reset default:
0x0
- Reset mask:
0x7f
{"reg": [{"name": "OBSERVE_FIFO_DEPTH", "bits": 7, "attr": ["ro"], "rotate": -90}, {"bits": 25}], "config": {"lanes": 1, "fontsize": 10, "vspace": 200}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:7 | Reserved | |||
6:0 | ro | x | OBSERVE_FIFO_DEPTH | This field will hold the current depth of the observe FIFO. |
Debug status register
- Offset:
0xd0
- Reset default:
0x10000
- Reset mask:
0x303ff
{"reg": [{"name": "ENTROPY_FIFO_DEPTH", "bits": 3, "attr": ["ro"], "rotate": -90}, {"name": "SHA3_FSM", "bits": 3, "attr": ["ro"], "rotate": -90}, {"name": "SHA3_BLOCK_PR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SHA3_SQUEEZING", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SHA3_ABSORBED", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SHA3_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 6}, {"name": "MAIN_SM_IDLE", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "MAIN_SM_BOOT_DONE", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 14}], "config": {"lanes": 1, "fontsize": 10, "vspace": 200}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:18 | Reserved | |||
17 | ro | x | MAIN_SM_BOOT_DONE | The entropy_src main state machine is in the boot phase done state. |
16 | ro | 0x1 | MAIN_SM_IDLE | The entropy_src main state machine is in the idle state. |
15:10 | Reserved | |||
9 | ro | x | SHA3_ERR | This is a logic-or of all of the SHA3 error signals. |
8 | ro | x | SHA3_ABSORBED | This is the SHA3 absorbed signal current state. |
7 | ro | x | SHA3_SQUEEZING | This is the SHA3 squeezing signal current state. |
6 | ro | x | SHA3_BLOCK_PR | This is the SHA3 block processed signal current state. |
5:3 | ro | x | SHA3_FSM | This is the SHA3 finite state machine current state. |
2:0 | ro | x | ENTROPY_FIFO_DEPTH | This is the depth of the entropy source FIFO. |
Recoverable alert status register
- Offset:
0xd4
- Reset default:
0x0
- Reset mask:
0x1ffaf
{"reg": [{"name": "FIPS_ENABLE_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "ENTROPY_DATA_REG_EN_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "MODULE_ENABLE_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "THRESHOLD_SCOPE_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"bits": 1}, {"name": "RNG_BIT_ENABLE_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"bits": 1}, {"name": "FW_OV_SHA3_START_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "FW_OV_MODE_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "FW_OV_ENTROPY_INSERT_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "ES_ROUTE_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "ES_TYPE_FIELD_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "ES_MAIN_SM_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "ES_BUS_CMP_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "ES_THRESH_CFG_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "ES_FW_OV_WR_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "ES_FW_OV_DISABLE_ALERT", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"bits": 15}], "config": {"lanes": 1, "fontsize": 10, "vspace": 340}}
Bits | Type | Reset | Name |
---|---|---|---|
31:17 | Reserved | ||
16 | rw0c | 0x0 | ES_FW_OV_DISABLE_ALERT |
15 | rw0c | 0x0 | ES_FW_OV_WR_ALERT |
14 | rw0c | 0x0 | ES_THRESH_CFG_ALERT |
13 | rw0c | 0x0 | ES_BUS_CMP_ALERT |
12 | rw0c | 0x0 | ES_MAIN_SM_ALERT |
11 | rw0c | 0x0 | ES_TYPE_FIELD_ALERT |
10 | rw0c | 0x0 | ES_ROUTE_FIELD_ALERT |
9 | rw0c | 0x0 | FW_OV_ENTROPY_INSERT_FIELD_ALERT |
8 | rw0c | 0x0 | FW_OV_MODE_FIELD_ALERT |
7 | rw0c | 0x0 | FW_OV_SHA3_START_FIELD_ALERT |
6 | Reserved | ||
5 | rw0c | 0x0 | RNG_BIT_ENABLE_FIELD_ALERT |
4 | Reserved | ||
3 | rw0c | 0x0 | THRESHOLD_SCOPE_FIELD_ALERT |
2 | rw0c | 0x0 | MODULE_ENABLE_FIELD_ALERT |
1 | rw0c | 0x0 | ENTROPY_DATA_REG_EN_FIELD_ALERT |
0 | rw0c | 0x0 | FIPS_ENABLE_FIELD_ALERT |
This bit is set when FW_OV_SHA3_START
has been set to kMultiBitBool4False
, without waiting for the bypass packer FIFO to clear.
The final entropy entry in the FIFO will not be included in the SHA3 digest.
(Rather it will be added to the subsequent SHA3 digest.)
To avoid this alert, monitor FW_OV_WR_FIFO_FULL
before clearing FW_OV_SHA3_START.
This alert only applies when both FW_OV_CONTROL.FW_OV_MODE
and FW_OV_CONTROL.FW_OV_ENTROPY_INSERT
are set to kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the packer FIFO has been written but was full at the time,
and in both FW_OV_MODE and FW_OV_ENTROPY_INSERT modes.
This alert would normally be the result of not monitoring the FW_OV_WR_FIFO_FULL
register before each write to the FW_OV_WR_DATA
register.
Writing a zero resets this status bit.
This bit is set when the ALERT_THRESHOLD
register is not configured properly.
The upper field must be the exact inverse of the lower field.
Writing a zero resets this status bit.
This bit is set when the interal entropy bus value is equal to the prior valid value on the bus, indicating a possible attack. Writing a zero resets this status bit.
This bit is set when the main state machine detects a threshhold failure state. Writing a zero resets this status bit.
This bit is set when the ES_TYPE field in the ENTROPY_CONTROL
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the ES_ROUTE field in the ENTROPY_CONTROL
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the FW_OV_ENTROPY_INSERT field in the FW_OV_CONTROL
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the FW_OV_MODE field in the FW_OV_CONTROL
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the FW_OV_SHA3_START field in the FW_OV_SHA3_START
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the RNG_BIT_ENABLE field in the CONF
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the THRESHOLD_SCOPE field in the CONF
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the MODULE_ENABLE field in the MODULE_ENABLE
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the ENTROPY_DATA_REG_ENABLE field in the CONF
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
This bit is set when the FIPS_ENABLE field in the CONF
register is set to a value other than kMultiBitBool4False
or kMultiBitBool4True
.
Writing a zero resets this status bit.
Hardware detection of error conditions status register
- Offset:
0xd8
- Reset default:
0x0
- Reset mask:
0x71f00007
{"reg": [{"name": "SFIFO_ESRNG_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_OBSERVE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SFIFO_ESFINAL_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 17}, {"name": "ES_ACK_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "ES_MAIN_SM_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "ES_CNTR_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SHA3_STATE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "SHA3_RST_STORAGE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 3}, {"name": "FIFO_WRITE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "FIFO_READ_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "FIFO_STATE_ERR", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 1}], "config": {"lanes": 1, "fontsize": 10, "vspace": 220}}
Bits | Type | Reset | Name |
---|---|---|---|
31 | Reserved | ||
30 | ro | 0x0 | FIFO_STATE_ERR |
29 | ro | 0x0 | FIFO_READ_ERR |
28 | ro | 0x0 | FIFO_WRITE_ERR |
27:25 | Reserved | ||
24 | ro | 0x0 | SHA3_RST_STORAGE_ERR |
23 | ro | 0x0 | SHA3_STATE_ERR |
22 | ro | 0x0 | ES_CNTR_ERR |
21 | ro | 0x0 | ES_MAIN_SM_ERR |
20 | ro | 0x0 | ES_ACK_SM_ERR |
19:3 | Reserved | ||
2 | ro | 0x0 | SFIFO_ESFINAL_ERR |
1 | ro | 0x0 | SFIFO_OBSERVE_ERR |
0 | ro | 0x0 | SFIFO_ESRNG_ERR |
This bit will be set to one when any of the source bits (bits 0 through 1 of this this register) are asserted as a result of an error pulse generated from any FIFO where both the empty and full status bits are set. This bit will stay set until the next reset.
This bit will be set to one when any of the source bits (bits 0 through 1 of this this register) are asserted as a result of an error pulse generated from any empty FIFO that has recieved a read pulse. This bit will stay set until the next reset.
This bit will be set to one when any of the source bits (bits 0 through 1 of this this register) are asserted as a result of an error pulse generated from any full FIFO that has been recieved a write pulse. This bit will stay set until the next reset.
This bit will be set to one when a SHA3_RST_STORAGE_ERR signal being active has been detected. This error will signal a fatal alert, and also an interrupt if enabled. This bit will stay set until the next reset.
This bit will be set to one when a SHA3 state error has been detected. This error will signal a fatal alert, and also an interrupt if enabled. This bit will stay set until the next reset.
This bit will be set to one when a hardened counter has detected an error condition. This error will signal a fatal alert, and also an interrupt if enabled. This bit will stay set until the next reset.
This bit will be set to one when an illegal state has been detected for the ES main stage state machine. This error will signal a fatal alert, and also an interrupt if enabled. This bit will stay set until the next reset.
This bit will be set to one when an illegal state has been detected for the ES ack stage state machine. This error will signal a fatal alert, and also an interrupt if enabled. This bit will stay set until the next reset.
This bit will be set to one when an error has been detected for the esfinal FIFO. The type of error is reflected in the type status bits (bits 28 through 30 of this register). This bit will stay set until the next reset.
This bit will be set to one when an error has been detected for the observe FIFO. The type of error is reflected in the type status bits (bits 28 through 30 of this register). This bit will stay set until the next reset.
This bit will be set to one when an error has been detected for the esrng FIFO. The type of error is reflected in the type status bits (bits 28 through 30 of this register). This bit will stay set until the next reset.
Test error conditions register
- Offset:
0xdc
- Reset default:
0x0
- Reset mask:
0x1f
{"reg": [{"name": "ERR_CODE_TEST", "bits": 5, "attr": ["rw"], "rotate": -90}, {"bits": 27}], "config": {"lanes": 1, "fontsize": 10, "vspace": 150}}
Bits | Type | Reset | Name |
---|---|---|---|
31:5 | Reserved | ||
4:0 | rw | 0x0 | ERR_CODE_TEST |
Setting this field will set the bit number for which an error
will be forced in the hardware. This bit number is that same one
found in the ERR_CODE
register. The action of writing this
register will force an error pulse. The sole purpose of this
register is to test that any error properly propagates to either
an interrupt or an alert.
Main state machine state debug register
- Offset:
0xe0
- Reset default:
0xf5
- Reset mask:
0x1ff
{"reg": [{"name": "MAIN_SM_STATE", "bits": 9, "attr": ["ro"], "rotate": 0}, {"bits": 23}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
Bits | Type | Reset | Name | Description |
---|---|---|---|---|
31:9 | Reserved | |||
8:0 | ro | 0xf5 | MAIN_SM_STATE | This is the state of the ENTROPY_SRC main state machine. See the RTL file entropy_src_main_sm for the meaning of the values. |