Registers

Summary

NameOffsetLengthDescription
spi_device.INTR_STATE0x04Interrupt State Register
spi_device.INTR_ENABLE0x44Interrupt Enable Register
spi_device.INTR_TEST0x84Interrupt Test Register
spi_device.ALERT_TEST0xc4Alert Test Register
spi_device.CONTROL0x104Control register.
spi_device.CFG0x144Configuration Register.
spi_device.STATUS0x184SPI Device status register.
spi_device.INTERCEPT_EN0x1c4Intercept Passthrough datapath.
spi_device.ADDR_MODE0x204Flash Address Mode configuration.
spi_device.LAST_READ_ADDR0x244Last Read Address.
spi_device.FLASH_STATUS0x284SPI Flash Status register.
spi_device.JEDEC_CC0x2c4JEDEC Continuation Code configuration register.
spi_device.JEDEC_ID0x304JEDEC ID register.
spi_device.READ_THRESHOLD0x344Read Buffer threshold register.
spi_device.MAILBOX_ADDR0x384Mailbox Base address register.
spi_device.UPLOAD_STATUS0x3c4Upload Module status register.
spi_device.UPLOAD_STATUS20x404Upload Module second status register.
spi_device.UPLOAD_CMDFIFO0x444Command FIFO Read Port.
spi_device.UPLOAD_ADDRFIFO0x484Address FIFO Read Port.
spi_device.CMD_FILTER_00x4c4Passthrough mode: Command Filter.
spi_device.CMD_FILTER_10x504Passthrough mode: Command Filter.
spi_device.CMD_FILTER_20x544Passthrough mode: Command Filter.
spi_device.CMD_FILTER_30x584Passthrough mode: Command Filter.
spi_device.CMD_FILTER_40x5c4Passthrough mode: Command Filter.
spi_device.CMD_FILTER_50x604Passthrough mode: Command Filter.
spi_device.CMD_FILTER_60x644Passthrough mode: Command Filter.
spi_device.CMD_FILTER_70x684Passthrough mode: Command Filter.
spi_device.ADDR_SWAP_MASK0x6c4Passthrough mode: Address Swap Mask.
spi_device.ADDR_SWAP_DATA0x704Passthrough mode: Address Swap Data.
spi_device.PAYLOAD_SWAP_MASK0x744Passthrough mode: Payload Swap Mask.
spi_device.PAYLOAD_SWAP_DATA0x784Passthrough mode: Payload Swap Data.
spi_device.CMD_INFO_00x7c4Command Information register.
spi_device.CMD_INFO_10x804Command Information register.
spi_device.CMD_INFO_20x844Command Information register.
spi_device.CMD_INFO_30x884Command Information register.
spi_device.CMD_INFO_40x8c4Command Information register.
spi_device.CMD_INFO_50x904Command Information register.
spi_device.CMD_INFO_60x944Command Information register.
spi_device.CMD_INFO_70x984Command Information register.
spi_device.CMD_INFO_80x9c4Command Information register.
spi_device.CMD_INFO_90xa04Command Information register.
spi_device.CMD_INFO_100xa44Command Information register.
spi_device.CMD_INFO_110xa84Command Information register.
spi_device.CMD_INFO_120xac4Command Information register.
spi_device.CMD_INFO_130xb04Command Information register.
spi_device.CMD_INFO_140xb44Command Information register.
spi_device.CMD_INFO_150xb84Command Information register.
spi_device.CMD_INFO_160xbc4Command Information register.
spi_device.CMD_INFO_170xc04Command Information register.
spi_device.CMD_INFO_180xc44Command Information register.
spi_device.CMD_INFO_190xc84Command Information register.
spi_device.CMD_INFO_200xcc4Command Information register.
spi_device.CMD_INFO_210xd04Command Information register.
spi_device.CMD_INFO_220xd44Command Information register.
spi_device.CMD_INFO_230xd84Command Information register.
spi_device.CMD_INFO_EN4B0xdc4EN4B command information register.
spi_device.CMD_INFO_EX4B0xe04EX4B command information register.
spi_device.CMD_INFO_WREN0xe44Write Enable (WREN) command information register.
spi_device.CMD_INFO_WRDI0xe84Write Disable (WRDI) command information register.
spi_device.TPM_CAP0x8004TPM HWIP Capability register.
spi_device.TPM_CFG0x8044TPM Configuration register.
spi_device.TPM_STATUS0x8084TPM submodule state register.
spi_device.TPM_ACCESS_00x80c4TPM_ACCESS_x register.
spi_device.TPM_ACCESS_10x8104TPM_ACCESS_x register.
spi_device.TPM_STS0x8144TPM_STS_x register.
spi_device.TPM_INTF_CAPABILITY0x8184TPM_INTF_CAPABILITY register.
spi_device.TPM_INT_ENABLE0x81c4TPM_INT_ENABLE register.
spi_device.TPM_INT_VECTOR0x8204TPM_INT_VECTOR register.
spi_device.TPM_INT_STATUS0x8244TPM_INT_STATUS register.
spi_device.TPM_DID_VID0x8284TPM_DID/ TPM_VID register.
spi_device.TPM_RID0x82c4TPM_RID register.
spi_device.TPM_CMD_ADDR0x8304TPM Command and Address buffer.
spi_device.TPM_READ_FIFO0x8344TPM Read command return data FIFO.
spi_device.egress_buffer0x10003392SPI internal egress buffer.
spi_device.ingress_buffer0x1e00448SPI internal ingress buffer.

INTR_STATE

Interrupt State Register

  • Offset: 0x0
  • Reset default: 0x0
  • Reset mask: 0xff

Fields

{"reg": [{"name": "upload_cmdfifo_not_empty", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "upload_payload_not_empty", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "upload_payload_overflow", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "readbuf_watermark", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "readbuf_flip", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "tpm_header_not_empty", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "tpm_rdfifo_cmd_end", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"name": "tpm_rdfifo_drop", "bits": 1, "attr": ["rw1c"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 260}}
BitsTypeResetNameDescription
31:8Reserved
7rw1c0x0tpm_rdfifo_dropTPM RdFIFO data dropped. Data was dropped from the RdFIFO. Data was written while a read command was not active, and it was not accepted. This can occur when the host aborts a read command.
6rw1c0x0tpm_rdfifo_cmd_endTPM RdFIFO command ended. The TPM Read command targeting the RdFIFO ended. Check TPM_STATUS.rdfifo_aborted to see if the transaction completed.
5ro0x0tpm_header_not_emptyTPM Header(Command/Address) buffer available
4rw1c0x0readbuf_flipRead buffer flipped event. The host system accesses other side of buffer.
3rw1c0x0readbuf_watermarkRead Buffer Threshold event. The host system accesses greater than or equal to the threshold of a buffer.
2rw1c0x0upload_payload_overflowUpload payload overflow event. When a SPI Host system issues a command with payload more than 256B, this event is reported. When it happens, SW should read the last written payload index CSR to figure out the starting address of the last 256B.
1rw1c0x0upload_payload_not_emptyUpload payload is not empty. The event occurs after a SPI transaction is completed.
0rw1c0x0upload_cmdfifo_not_emptyUpload Command FIFO is not empty.

INTR_ENABLE

Interrupt Enable Register

  • Offset: 0x4
  • Reset default: 0x0
  • Reset mask: 0xff

Fields

{"reg": [{"name": "upload_cmdfifo_not_empty", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "upload_payload_not_empty", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "upload_payload_overflow", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "readbuf_watermark", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "readbuf_flip", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "tpm_header_not_empty", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "tpm_rdfifo_cmd_end", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "tpm_rdfifo_drop", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 260}}
BitsTypeResetNameDescription
31:8Reserved
7rw0x0tpm_rdfifo_dropEnable interrupt when INTR_STATE.tpm_rdfifo_drop is set.
6rw0x0tpm_rdfifo_cmd_endEnable interrupt when INTR_STATE.tpm_rdfifo_cmd_end is set.
5rw0x0tpm_header_not_emptyEnable interrupt when INTR_STATE.tpm_header_not_empty is set.
4rw0x0readbuf_flipEnable interrupt when INTR_STATE.readbuf_flip is set.
3rw0x0readbuf_watermarkEnable interrupt when INTR_STATE.readbuf_watermark is set.
2rw0x0upload_payload_overflowEnable interrupt when INTR_STATE.upload_payload_overflow is set.
1rw0x0upload_payload_not_emptyEnable interrupt when INTR_STATE.upload_payload_not_empty is set.
0rw0x0upload_cmdfifo_not_emptyEnable interrupt when INTR_STATE.upload_cmdfifo_not_empty is set.

INTR_TEST

Interrupt Test Register

  • Offset: 0x8
  • Reset default: 0x0
  • Reset mask: 0xff

Fields

{"reg": [{"name": "upload_cmdfifo_not_empty", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "upload_payload_not_empty", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "upload_payload_overflow", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "readbuf_watermark", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "readbuf_flip", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "tpm_header_not_empty", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "tpm_rdfifo_cmd_end", "bits": 1, "attr": ["wo"], "rotate": -90}, {"name": "tpm_rdfifo_drop", "bits": 1, "attr": ["wo"], "rotate": -90}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 260}}
BitsTypeResetNameDescription
31:8Reserved
7wo0x0tpm_rdfifo_dropWrite 1 to force INTR_STATE.tpm_rdfifo_drop to 1.
6wo0x0tpm_rdfifo_cmd_endWrite 1 to force INTR_STATE.tpm_rdfifo_cmd_end to 1.
5wo0x0tpm_header_not_emptyWrite 1 to force INTR_STATE.tpm_header_not_empty to 1.
4wo0x0readbuf_flipWrite 1 to force INTR_STATE.readbuf_flip to 1.
3wo0x0readbuf_watermarkWrite 1 to force INTR_STATE.readbuf_watermark to 1.
2wo0x0upload_payload_overflowWrite 1 to force INTR_STATE.upload_payload_overflow to 1.
1wo0x0upload_payload_not_emptyWrite 1 to force INTR_STATE.upload_payload_not_empty to 1.
0wo0x0upload_cmdfifo_not_emptyWrite 1 to force INTR_STATE.upload_cmdfifo_not_empty to 1.

ALERT_TEST

Alert Test Register

  • Offset: 0xc
  • Reset default: 0x0
  • Reset mask: 0x1

Fields

{"reg": [{"name": "fatal_fault", "bits": 1, "attr": ["wo"], "rotate": -90}, {"bits": 31}], "config": {"lanes": 1, "fontsize": 10, "vspace": 130}}
BitsTypeResetNameDescription
31:1Reserved
0wo0x0fatal_faultWrite 1 to trigger one alert event of this kind.

CONTROL

Control register.

  • Offset: 0x10
  • Reset default: 0x10
  • Reset mask: 0x33

Fields

{"reg": [{"name": "FLASH_STATUS_FIFO_CLR", "bits": 1, "attr": ["rw1s"], "rotate": -90}, {"name": "FLASH_READ_BUFFER_CLR", "bits": 1, "attr": ["rw1s"], "rotate": -90}, {"bits": 2}, {"name": "MODE", "bits": 2, "attr": ["rw"], "rotate": -90}, {"bits": 26}], "config": {"lanes": 1, "fontsize": 10, "vspace": 230}}
BitsTypeResetName
31:6Reserved
5:4rw0x1MODE
3:2Reserved
1rw1s0x0FLASH_READ_BUFFER_CLR
0rw1s0x0FLASH_STATUS_FIFO_CLR

CONTROL . MODE

SPI Device flash operation mode.

ValueNameDescription
0x0disabledSPI Flash operations disabled. SPI Device operations are disabled, and all transactions are ignored. Note that SPI TPM operation is controlled by TPM_CFG.
0x1flashmodeSPI Flash Emulation mode. In Flash mode, the SPI Device IP accepts SPI Flash commands and processes internally, then returns data for the read commands. HW processes the Status, JEDEC ID, SFDP commands. The current version does not support Dual/Quad IO and QPI commands.
0x2passthroughIn Passthrough mode, SPI Device IP forwards the incoming SPI flash traffics to the attached downstream flash device. HW may processes commands internally and returns data. SW may configure the device to drop inadmissible commands.

Other values are reserved.

CONTROL . FLASH_READ_BUFFER_CLR

Set to clear the read buffer state.

When set to 1, resets the flash read buffer state that tracks the host read address. The reset should only be used when the upstream SPI host is known to be inactive. This function is intended to allow restoring initial values when the upstream SPI host is reset.

This CSR automatically resets to 0.

CONTROL . FLASH_STATUS_FIFO_CLR

Set to clear the flash status FIFO.

When set to 1, resets the flash status FIFO used for synchronizing changes from firmware. The reset should only be used when the upstream SPI host is known to be inactive. This function is intended to allow restoring initial values when the upstream SPI host is reset.

This CSR automatically resets to 0.

CFG

Configuration Register.

  • Offset: 0x14
  • Reset default: 0x0
  • Reset mask: 0x100000c

Fields

{"reg": [{"bits": 2}, {"name": "tx_order", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "rx_order", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 20}, {"name": "mailbox_en", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 7}], "config": {"lanes": 1, "fontsize": 10, "vspace": 120}}
BitsTypeResetNameDescription
31:25Reserved
24rw0x0mailbox_enMailbox enable. If 1, in the flash and passthrough mode, the IP checks the incoming address and return from the internal Mailbox buffer if the address falls into the MAILBOX range (MAILBOX_ADDR:MAILBOX_ADDR+MAILBOX_SIZE)}.
23:4Reserved
3rw0x0rx_orderRX bit order on SDI. Module stores bitstream from MSB to LSB if value is 0.
2rw0x0tx_orderTX bit order on SDO. 0 for MSB to LSB, 1 for LSB to MSB.
1:0Reserved

STATUS

SPI Device status register.

  • Offset: 0x18
  • Reset default: 0x60
  • Reset mask: 0x60

Fields

{"reg": [{"bits": 5}, {"name": "csb", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "tpm_csb", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 25}], "config": {"lanes": 1, "fontsize": 10, "vspace": 90}}
BitsTypeResetNameDescription
31:7Reserved
6ro0x1tpm_csbDirect input of the TPM CSb signal.
5ro0x1csbDirect input of CSb signal.
4:0Reserved

INTERCEPT_EN

Intercept Passthrough datapath.

  • Offset: 0x1c
  • Reset default: 0x0
  • Reset mask: 0xf

Fields

{"reg": [{"name": "status", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "jedec", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "sfdp", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "mbx", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 28}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:4Reserved
3rw0x0mbxIf set, Read commands reading from the mailbox region are processed internally.
2rw0x0sfdpIf set, Read SFDP commands are processed internally.
1rw0x0jedecIf set, Read JEDEC ID commands are processed internally.
0rw0x0statusIf set, Read Status commands are processed internally.

ADDR_MODE

Flash Address Mode configuration.

This register shows the current address mode and pending changes to it. It is updated by the HW when the command opcode phase completes.

  • Offset: 0x20
  • Reset default: 0x0
  • Reset mask: 0x80000001

Fields

{"reg": [{"name": "addr_4b_en", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 30}, {"name": "pending", "bits": 1, "attr": ["ro"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 120}}
BitsTypeResetName
31roxpending
30:1Reserved
0rwxaddr_4b_en

ADDR_MODE . pending

SW-initiated change is pending.

This bit is set whenever the current value of ADDR_MODE.addr_4b_en is not yet in sync with the SPI domain. If an EN4B or EX4B command arrives next, the current value in ADDR_MODE.addr_4b_en will be ignored and the command will take priority.

ADDR_MODE . addr_4b_en

4B Address Mode enable.

This field determines whether 4B address mode is currently enabled.

If set, the size of addresses for SPI commands with CMD_INFO.addr_mode == AddrCfg is 4B, otherwise it is 3B. This field is modified by HW on receiving the EN4B and EX4B commands - see CMD_INFO_EN4B and CMD_INFO_EX4B.

Read SFDP commands (CMD_INFO slot 4) are unaffected by the configuration of ADDR_MODE.addr_4b_en, and a 3-byte address will always be expected following the command opcode.

If a SW-initiated change is still pending the sync to the SPI domain, this bit will reflect the value to be sent. Otherwise, this field will reflect the current value observed in the SPI domain. See ADDR_MODE.pending.

It is expected that software only sets this field during early configuration. Modifying this field mid-operation is almost always a protocol violation.

LAST_READ_ADDR

Last Read Address.

This register shows the last address accessed by the host system. It is updated by the HW when CSb is de-asserted.

  • Offset: 0x24
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "addr", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0roxaddrLast address.

FLASH_STATUS

SPI Flash Status register.

This register emulates the SPI Flash Status 1-3 registers. Bits [7:0], [15:8], and [23:16] contain the values for the Status 1, 2, and 3 registers respectively. It is the responsibility of SW to keep the value of this register up-to-date.

When software writes a value here, it is delivered to a staging async FIFO, where it waits for the SPI side to commit it. Any updates require at least 8 SPI clocks before they commit on the SPI side, which is the source-of-truth. After committing on the SPI side, the CSRs will eventually update with the latest value.

  • Offset: 0x28
  • Reset default: 0x0
  • Reset mask: 0xffffff

Fields

{"reg": [{"name": "busy", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "wel", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "status", "bits": 22, "attr": ["rw"], "rotate": 0}, {"bits": 8}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetName
31:24Reserved
23:2rwxstatus
1rw0cxwel
0rw0cxbusy

FLASH_STATUS . status

Rest of the status register. HW reads will return the value stored. This field is managed by SW and the bits have no special significance to the HW - SW should use the bits according to the specific flash chip emulated. The following is a normative list of common uses for each bit:

BitCommon Usage
2BP0
3BP1
4BP2
5TB
6SEC
7SRP0
8SRP1
9QE
11LB1
12LB2
13LB3
14CMP
15SUS
18WPS
21DRV0
22DRV1
23HOLD /RST

FLASH_STATUS . wel

The Write Enable Latch signal.

This bit is set or unset by HW when a WREN or WRDI command is received - see CMD_INFO_WREN and CMD_INFO_WRDI. SW may only clear this bit. SW should read back the register to confirm the bit is cleared.

FLASH_STATUS . busy

The BUSY signal.

This bit is set by HW when a matched command with CMD_INFO.upload and CMD_INFO.busy set is received. SW may only clear this bit. SW should read back the register to confirm the bit is cleared.

Note that the observable state of the BUSY bit updates every 8 SPI clocks. This enables continuous polling of the BUSY bit. However, the passthrough gate (for passthrough mode) only updates when CSb is de-asserted, not on SPI clocks.

JEDEC_CC

JEDEC Continuation Code configuration register.

Read JEDEC ID must return the continuation code if the manufacturer ID is not shown in the first page of JEDEC table. This register controls the Continuation Code.

  • Offset: 0x2c
  • Reset default: 0x7f
  • Reset mask: 0xffff

Fields

{"reg": [{"name": "cc", "bits": 8, "attr": ["rw"], "rotate": 0}, {"name": "num_cc", "bits": 8, "attr": ["rw"], "rotate": 0}, {"bits": 16}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:16Reserved
15:8rw0x0num_ccThe number of Continuation Code repeats.
7:0rw0x7fccContinuation Code byte value, typically 0x7F.

JEDEC_ID

JEDEC ID register.

  • Offset: 0x30
  • Reset default: 0x0
  • Reset mask: 0xffffff

Fields

{"reg": [{"name": "id", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "mf", "bits": 8, "attr": ["rw"], "rotate": 0}, {"bits": 8}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:24Reserved
23:16rw0x0mfManufacturer ID
15:0rw0x0idDevice ID

READ_THRESHOLD

Read Buffer threshold register.

  • Offset: 0x34
  • Reset default: 0x0
  • Reset mask: 0x3ff

Fields

{"reg": [{"name": "threshold", "bits": 10, "attr": ["rw"], "rotate": 0}, {"bits": 22}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:10Reserved
9:0rw0x0thresholdThreshold value in bytes. If zero, the threshold is disabled. Otherwise, when the host accesses bytes beyond or equal to this threshold in the Read Buffer, a readbuf_watermark interrupt is generated.

MAILBOX_ADDR

Mailbox Base address register.

The mailbox size is fixed. In this version of IP, the size is 1kB. The least-significant 10 bits of the Mailbox address are tied to 0.

  • Offset: 0x38
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "addr", "bits": 32, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0rw0x0addrMailbox Address. The least-significant 10 bits are tied to 0.

UPLOAD_STATUS

Upload Module status register.

  • Offset: 0x3c
  • Reset default: 0x0
  • Reset mask: 0x9f9f

Fields

{"reg": [{"name": "cmdfifo_depth", "bits": 5, "attr": ["ro"], "rotate": -90}, {"bits": 2}, {"name": "cmdfifo_notempty", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "addrfifo_depth", "bits": 5, "attr": ["ro"], "rotate": -90}, {"bits": 2}, {"name": "addrfifo_notempty", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 16}], "config": {"lanes": 1, "fontsize": 10, "vspace": 190}}
BitsTypeResetNameDescription
31:16Reserved
15ro0x0addrfifo_notemptyIf set, the Address Upload FIFO is not empty.
14:13Reserved
12:8ro0x0addrfifo_depthNumber of entries in the Address Upload FIFO.
7ro0x0cmdfifo_notemptyIf set, the Command Upload FIFO is not empty.
6:5Reserved
4:0ro0x0cmdfifo_depthNumber of entries in the Command Upload FIFO.

UPLOAD_STATUS2

Upload Module second status register.

This register contains information related to the uploaded command payload. UPLOAD_STATUS2.payload_depth indicates the length of the command payload, in bytes.

UPLOAD_STATUS2.payload_start_idx indicates the start position of this command payload within the Payload Buffer, in bytes. This field is usually 0, unless more than 256 bytes of payload have been issued.

For example, if 258 bytes of payload are issued, UPLOAD_STATUS2.payload_depth will be 256 (as the Payload Buffer only has capacity for 256 bytes), but UPLOAD_STATUS2.payload_start_idx will be 2. SW should read bytes 2-255 followed by bytes 0-1 to read the intact portion of the payload in the correct order.

  • Offset: 0x40
  • Reset default: 0x0
  • Reset mask: 0xff01ff

Fields

{"reg": [{"name": "payload_depth", "bits": 9, "attr": ["ro"], "rotate": 0}, {"bits": 7}, {"name": "payload_start_idx", "bits": 8, "attr": ["ro"], "rotate": -90}, {"bits": 8}], "config": {"lanes": 1, "fontsize": 10, "vspace": 190}}
BitsTypeResetNameDescription
31:24Reserved
23:16ro0x0payload_start_idxPayload start index.
15:9Reserved
8:0ro0x0payload_depthPayload buffer depth.

UPLOAD_CMDFIFO

Command FIFO Read Port.

  • Offset: 0x44
  • Reset default: 0x0
  • Reset mask: 0xe0ff

Fields

{"reg": [{"name": "data", "bits": 8, "attr": ["ro"], "rotate": 0}, {"bits": 5}, {"name": "busy", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "wel", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "addr4b_mode", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 16}], "config": {"lanes": 1, "fontsize": 10, "vspace": 130}}
BitsTypeResetNameDescription
31:16Reserved
15roxaddr4b_modeState of ADDR_MODE.addr_4b_en when the command was received.
14roxwelState of FLASH_STATUS.wel bit when the command was received.
13roxbusyState of FLASH_STATUS.busy bit when the command was received.
12:8Reserved
7:0roxdataUploaded command’s opcode.

UPLOAD_ADDRFIFO

Address FIFO Read Port.

  • Offset: 0x48
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "data", "bits": 32, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0roxdataread data

CMD_FILTER_0

Passthrough mode: Command Filter.

If the bit corresponding to a received command’s opcode is set, the command is filtered (CSb is de-asserted) and does not reach the downstream flash device.

  • Offset: 0x4c
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "filter_0", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_1", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_2", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_3", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_4", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_5", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_6", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_7", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_8", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_9", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_10", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_11", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_12", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_13", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_14", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_15", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_16", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_17", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_18", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_19", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_20", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_21", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_22", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_23", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_24", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_25", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_26", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_27", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_28", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_29", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_30", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_31", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 110}}
BitsTypeResetNameDescription
31rw0x0filter_31If set, this command will be filtered.
30rw0x0filter_30If set, this command will be filtered.
29rw0x0filter_29If set, this command will be filtered.
28rw0x0filter_28If set, this command will be filtered.
27rw0x0filter_27If set, this command will be filtered.
26rw0x0filter_26If set, this command will be filtered.
25rw0x0filter_25If set, this command will be filtered.
24rw0x0filter_24If set, this command will be filtered.
23rw0x0filter_23If set, this command will be filtered.
22rw0x0filter_22If set, this command will be filtered.
21rw0x0filter_21If set, this command will be filtered.
20rw0x0filter_20If set, this command will be filtered.
19rw0x0filter_19If set, this command will be filtered.
18rw0x0filter_18If set, this command will be filtered.
17rw0x0filter_17If set, this command will be filtered.
16rw0x0filter_16If set, this command will be filtered.
15rw0x0filter_15If set, this command will be filtered.
14rw0x0filter_14If set, this command will be filtered.
13rw0x0filter_13If set, this command will be filtered.
12rw0x0filter_12If set, this command will be filtered.
11rw0x0filter_11If set, this command will be filtered.
10rw0x0filter_10If set, this command will be filtered.
9rw0x0filter_9If set, this command will be filtered.
8rw0x0filter_8If set, this command will be filtered.
7rw0x0filter_7If set, this command will be filtered.
6rw0x0filter_6If set, this command will be filtered.
5rw0x0filter_5If set, this command will be filtered.
4rw0x0filter_4If set, this command will be filtered.
3rw0x0filter_3If set, this command will be filtered.
2rw0x0filter_2If set, this command will be filtered.
1rw0x0filter_1If set, this command will be filtered.
0rw0x0filter_0If set, this command will be filtered.

CMD_FILTER_1

Passthrough mode: Command Filter.

If the bit corresponding to a received command’s opcode is set, the command is filtered (CSb is de-asserted) and does not reach the downstream flash device.

  • Offset: 0x50
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "filter_32", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_33", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_34", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_35", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_36", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_37", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_38", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_39", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_40", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_41", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_42", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_43", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_44", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_45", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_46", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_47", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_48", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_49", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_50", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_51", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_52", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_53", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_54", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_55", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_56", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_57", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_58", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_59", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_60", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_61", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_62", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_63", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 110}}
BitsTypeResetNameDescription
31rw0x0filter_63For SPI_DEVICE1
30rw0x0filter_62For SPI_DEVICE1
29rw0x0filter_61For SPI_DEVICE1
28rw0x0filter_60For SPI_DEVICE1
27rw0x0filter_59For SPI_DEVICE1
26rw0x0filter_58For SPI_DEVICE1
25rw0x0filter_57For SPI_DEVICE1
24rw0x0filter_56For SPI_DEVICE1
23rw0x0filter_55For SPI_DEVICE1
22rw0x0filter_54For SPI_DEVICE1
21rw0x0filter_53For SPI_DEVICE1
20rw0x0filter_52For SPI_DEVICE1
19rw0x0filter_51For SPI_DEVICE1
18rw0x0filter_50For SPI_DEVICE1
17rw0x0filter_49For SPI_DEVICE1
16rw0x0filter_48For SPI_DEVICE1
15rw0x0filter_47For SPI_DEVICE1
14rw0x0filter_46For SPI_DEVICE1
13rw0x0filter_45For SPI_DEVICE1
12rw0x0filter_44For SPI_DEVICE1
11rw0x0filter_43For SPI_DEVICE1
10rw0x0filter_42For SPI_DEVICE1
9rw0x0filter_41For SPI_DEVICE1
8rw0x0filter_40For SPI_DEVICE1
7rw0x0filter_39For SPI_DEVICE1
6rw0x0filter_38For SPI_DEVICE1
5rw0x0filter_37For SPI_DEVICE1
4rw0x0filter_36For SPI_DEVICE1
3rw0x0filter_35For SPI_DEVICE1
2rw0x0filter_34For SPI_DEVICE1
1rw0x0filter_33For SPI_DEVICE1
0rw0x0filter_32For SPI_DEVICE1

CMD_FILTER_2

Passthrough mode: Command Filter.

If the bit corresponding to a received command’s opcode is set, the command is filtered (CSb is de-asserted) and does not reach the downstream flash device.

  • Offset: 0x54
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "filter_64", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_65", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_66", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_67", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_68", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_69", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_70", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_71", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_72", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_73", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_74", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_75", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_76", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_77", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_78", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_79", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_80", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_81", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_82", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_83", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_84", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_85", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_86", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_87", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_88", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_89", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_90", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_91", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_92", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_93", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_94", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_95", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 110}}
BitsTypeResetNameDescription
31rw0x0filter_95For SPI_DEVICE2
30rw0x0filter_94For SPI_DEVICE2
29rw0x0filter_93For SPI_DEVICE2
28rw0x0filter_92For SPI_DEVICE2
27rw0x0filter_91For SPI_DEVICE2
26rw0x0filter_90For SPI_DEVICE2
25rw0x0filter_89For SPI_DEVICE2
24rw0x0filter_88For SPI_DEVICE2
23rw0x0filter_87For SPI_DEVICE2
22rw0x0filter_86For SPI_DEVICE2
21rw0x0filter_85For SPI_DEVICE2
20rw0x0filter_84For SPI_DEVICE2
19rw0x0filter_83For SPI_DEVICE2
18rw0x0filter_82For SPI_DEVICE2
17rw0x0filter_81For SPI_DEVICE2
16rw0x0filter_80For SPI_DEVICE2
15rw0x0filter_79For SPI_DEVICE2
14rw0x0filter_78For SPI_DEVICE2
13rw0x0filter_77For SPI_DEVICE2
12rw0x0filter_76For SPI_DEVICE2
11rw0x0filter_75For SPI_DEVICE2
10rw0x0filter_74For SPI_DEVICE2
9rw0x0filter_73For SPI_DEVICE2
8rw0x0filter_72For SPI_DEVICE2
7rw0x0filter_71For SPI_DEVICE2
6rw0x0filter_70For SPI_DEVICE2
5rw0x0filter_69For SPI_DEVICE2
4rw0x0filter_68For SPI_DEVICE2
3rw0x0filter_67For SPI_DEVICE2
2rw0x0filter_66For SPI_DEVICE2
1rw0x0filter_65For SPI_DEVICE2
0rw0x0filter_64For SPI_DEVICE2

CMD_FILTER_3

Passthrough mode: Command Filter.

If the bit corresponding to a received command’s opcode is set, the command is filtered (CSb is de-asserted) and does not reach the downstream flash device.

  • Offset: 0x58
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "filter_96", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_97", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_98", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_99", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_100", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_101", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_102", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_103", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_104", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_105", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_106", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_107", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_108", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_109", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_110", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_111", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_112", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_113", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_114", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_115", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_116", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_117", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_118", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_119", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_120", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_121", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_122", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_123", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_124", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_125", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_126", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_127", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 120}}
BitsTypeResetNameDescription
31rw0x0filter_127For SPI_DEVICE3
30rw0x0filter_126For SPI_DEVICE3
29rw0x0filter_125For SPI_DEVICE3
28rw0x0filter_124For SPI_DEVICE3
27rw0x0filter_123For SPI_DEVICE3
26rw0x0filter_122For SPI_DEVICE3
25rw0x0filter_121For SPI_DEVICE3
24rw0x0filter_120For SPI_DEVICE3
23rw0x0filter_119For SPI_DEVICE3
22rw0x0filter_118For SPI_DEVICE3
21rw0x0filter_117For SPI_DEVICE3
20rw0x0filter_116For SPI_DEVICE3
19rw0x0filter_115For SPI_DEVICE3
18rw0x0filter_114For SPI_DEVICE3
17rw0x0filter_113For SPI_DEVICE3
16rw0x0filter_112For SPI_DEVICE3
15rw0x0filter_111For SPI_DEVICE3
14rw0x0filter_110For SPI_DEVICE3
13rw0x0filter_109For SPI_DEVICE3
12rw0x0filter_108For SPI_DEVICE3
11rw0x0filter_107For SPI_DEVICE3
10rw0x0filter_106For SPI_DEVICE3
9rw0x0filter_105For SPI_DEVICE3
8rw0x0filter_104For SPI_DEVICE3
7rw0x0filter_103For SPI_DEVICE3
6rw0x0filter_102For SPI_DEVICE3
5rw0x0filter_101For SPI_DEVICE3
4rw0x0filter_100For SPI_DEVICE3
3rw0x0filter_99For SPI_DEVICE3
2rw0x0filter_98For SPI_DEVICE3
1rw0x0filter_97For SPI_DEVICE3
0rw0x0filter_96For SPI_DEVICE3

CMD_FILTER_4

Passthrough mode: Command Filter.

If the bit corresponding to a received command’s opcode is set, the command is filtered (CSb is de-asserted) and does not reach the downstream flash device.

  • Offset: 0x5c
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "filter_128", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_129", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_130", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_131", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_132", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_133", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_134", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_135", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_136", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_137", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_138", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_139", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_140", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_141", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_142", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_143", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_144", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_145", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_146", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_147", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_148", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_149", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_150", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_151", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_152", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_153", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_154", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_155", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_156", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_157", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_158", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_159", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 120}}
BitsTypeResetNameDescription
31rw0x0filter_159For SPI_DEVICE4
30rw0x0filter_158For SPI_DEVICE4
29rw0x0filter_157For SPI_DEVICE4
28rw0x0filter_156For SPI_DEVICE4
27rw0x0filter_155For SPI_DEVICE4
26rw0x0filter_154For SPI_DEVICE4
25rw0x0filter_153For SPI_DEVICE4
24rw0x0filter_152For SPI_DEVICE4
23rw0x0filter_151For SPI_DEVICE4
22rw0x0filter_150For SPI_DEVICE4
21rw0x0filter_149For SPI_DEVICE4
20rw0x0filter_148For SPI_DEVICE4
19rw0x0filter_147For SPI_DEVICE4
18rw0x0filter_146For SPI_DEVICE4
17rw0x0filter_145For SPI_DEVICE4
16rw0x0filter_144For SPI_DEVICE4
15rw0x0filter_143For SPI_DEVICE4
14rw0x0filter_142For SPI_DEVICE4
13rw0x0filter_141For SPI_DEVICE4
12rw0x0filter_140For SPI_DEVICE4
11rw0x0filter_139For SPI_DEVICE4
10rw0x0filter_138For SPI_DEVICE4
9rw0x0filter_137For SPI_DEVICE4
8rw0x0filter_136For SPI_DEVICE4
7rw0x0filter_135For SPI_DEVICE4
6rw0x0filter_134For SPI_DEVICE4
5rw0x0filter_133For SPI_DEVICE4
4rw0x0filter_132For SPI_DEVICE4
3rw0x0filter_131For SPI_DEVICE4
2rw0x0filter_130For SPI_DEVICE4
1rw0x0filter_129For SPI_DEVICE4
0rw0x0filter_128For SPI_DEVICE4

CMD_FILTER_5

Passthrough mode: Command Filter.

If the bit corresponding to a received command’s opcode is set, the command is filtered (CSb is de-asserted) and does not reach the downstream flash device.

  • Offset: 0x60
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "filter_160", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_161", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_162", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_163", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_164", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_165", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_166", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_167", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_168", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_169", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_170", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_171", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_172", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_173", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_174", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_175", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_176", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_177", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_178", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_179", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_180", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_181", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_182", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_183", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_184", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_185", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_186", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_187", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_188", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_189", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_190", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_191", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 120}}
BitsTypeResetNameDescription
31rw0x0filter_191For SPI_DEVICE5
30rw0x0filter_190For SPI_DEVICE5
29rw0x0filter_189For SPI_DEVICE5
28rw0x0filter_188For SPI_DEVICE5
27rw0x0filter_187For SPI_DEVICE5
26rw0x0filter_186For SPI_DEVICE5
25rw0x0filter_185For SPI_DEVICE5
24rw0x0filter_184For SPI_DEVICE5
23rw0x0filter_183For SPI_DEVICE5
22rw0x0filter_182For SPI_DEVICE5
21rw0x0filter_181For SPI_DEVICE5
20rw0x0filter_180For SPI_DEVICE5
19rw0x0filter_179For SPI_DEVICE5
18rw0x0filter_178For SPI_DEVICE5
17rw0x0filter_177For SPI_DEVICE5
16rw0x0filter_176For SPI_DEVICE5
15rw0x0filter_175For SPI_DEVICE5
14rw0x0filter_174For SPI_DEVICE5
13rw0x0filter_173For SPI_DEVICE5
12rw0x0filter_172For SPI_DEVICE5
11rw0x0filter_171For SPI_DEVICE5
10rw0x0filter_170For SPI_DEVICE5
9rw0x0filter_169For SPI_DEVICE5
8rw0x0filter_168For SPI_DEVICE5
7rw0x0filter_167For SPI_DEVICE5
6rw0x0filter_166For SPI_DEVICE5
5rw0x0filter_165For SPI_DEVICE5
4rw0x0filter_164For SPI_DEVICE5
3rw0x0filter_163For SPI_DEVICE5
2rw0x0filter_162For SPI_DEVICE5
1rw0x0filter_161For SPI_DEVICE5
0rw0x0filter_160For SPI_DEVICE5

CMD_FILTER_6

Passthrough mode: Command Filter.

If the bit corresponding to a received command’s opcode is set, the command is filtered (CSb is de-asserted) and does not reach the downstream flash device.

  • Offset: 0x64
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "filter_192", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_193", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_194", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_195", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_196", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_197", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_198", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_199", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_200", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_201", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_202", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_203", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_204", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_205", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_206", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_207", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_208", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_209", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_210", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_211", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_212", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_213", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_214", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_215", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_216", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_217", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_218", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_219", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_220", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_221", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_222", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_223", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 120}}
BitsTypeResetNameDescription
31rw0x0filter_223For SPI_DEVICE6
30rw0x0filter_222For SPI_DEVICE6
29rw0x0filter_221For SPI_DEVICE6
28rw0x0filter_220For SPI_DEVICE6
27rw0x0filter_219For SPI_DEVICE6
26rw0x0filter_218For SPI_DEVICE6
25rw0x0filter_217For SPI_DEVICE6
24rw0x0filter_216For SPI_DEVICE6
23rw0x0filter_215For SPI_DEVICE6
22rw0x0filter_214For SPI_DEVICE6
21rw0x0filter_213For SPI_DEVICE6
20rw0x0filter_212For SPI_DEVICE6
19rw0x0filter_211For SPI_DEVICE6
18rw0x0filter_210For SPI_DEVICE6
17rw0x0filter_209For SPI_DEVICE6
16rw0x0filter_208For SPI_DEVICE6
15rw0x0filter_207For SPI_DEVICE6
14rw0x0filter_206For SPI_DEVICE6
13rw0x0filter_205For SPI_DEVICE6
12rw0x0filter_204For SPI_DEVICE6
11rw0x0filter_203For SPI_DEVICE6
10rw0x0filter_202For SPI_DEVICE6
9rw0x0filter_201For SPI_DEVICE6
8rw0x0filter_200For SPI_DEVICE6
7rw0x0filter_199For SPI_DEVICE6
6rw0x0filter_198For SPI_DEVICE6
5rw0x0filter_197For SPI_DEVICE6
4rw0x0filter_196For SPI_DEVICE6
3rw0x0filter_195For SPI_DEVICE6
2rw0x0filter_194For SPI_DEVICE6
1rw0x0filter_193For SPI_DEVICE6
0rw0x0filter_192For SPI_DEVICE6

CMD_FILTER_7

Passthrough mode: Command Filter.

If the bit corresponding to a received command’s opcode is set, the command is filtered (CSb is de-asserted) and does not reach the downstream flash device.

  • Offset: 0x68
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "filter_224", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_225", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_226", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_227", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_228", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_229", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_230", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_231", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_232", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_233", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_234", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_235", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_236", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_237", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_238", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_239", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_240", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_241", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_242", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_243", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_244", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_245", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_246", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_247", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_248", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_249", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_250", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_251", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_252", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_253", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_254", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "filter_255", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 120}}
BitsTypeResetNameDescription
31rw0x0filter_255For SPI_DEVICE7
30rw0x0filter_254For SPI_DEVICE7
29rw0x0filter_253For SPI_DEVICE7
28rw0x0filter_252For SPI_DEVICE7
27rw0x0filter_251For SPI_DEVICE7
26rw0x0filter_250For SPI_DEVICE7
25rw0x0filter_249For SPI_DEVICE7
24rw0x0filter_248For SPI_DEVICE7
23rw0x0filter_247For SPI_DEVICE7
22rw0x0filter_246For SPI_DEVICE7
21rw0x0filter_245For SPI_DEVICE7
20rw0x0filter_244For SPI_DEVICE7
19rw0x0filter_243For SPI_DEVICE7
18rw0x0filter_242For SPI_DEVICE7
17rw0x0filter_241For SPI_DEVICE7
16rw0x0filter_240For SPI_DEVICE7
15rw0x0filter_239For SPI_DEVICE7
14rw0x0filter_238For SPI_DEVICE7
13rw0x0filter_237For SPI_DEVICE7
12rw0x0filter_236For SPI_DEVICE7
11rw0x0filter_235For SPI_DEVICE7
10rw0x0filter_234For SPI_DEVICE7
9rw0x0filter_233For SPI_DEVICE7
8rw0x0filter_232For SPI_DEVICE7
7rw0x0filter_231For SPI_DEVICE7
6rw0x0filter_230For SPI_DEVICE7
5rw0x0filter_229For SPI_DEVICE7
4rw0x0filter_228For SPI_DEVICE7
3rw0x0filter_227For SPI_DEVICE7
2rw0x0filter_226For SPI_DEVICE7
1rw0x0filter_225For SPI_DEVICE7
0rw0x0filter_224For SPI_DEVICE7

ADDR_SWAP_MASK

Passthrough mode: Address Swap Mask.

This register is used in the SPI passthrough mode. If any of bits in this register is set, the corresponding address bit in the SPI Read commands is replaced with the data from ADDR_SWAP_DATA.

If the command’s address size is 3B, the upper byte (bits [31:24]) are not used.

  • Offset: 0x6c
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "mask", "bits": 32, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0rw0x0maskFor any bit set in this register, the value of the corresponding bit in ADDR_SWAP_DATA is used for that address bit.

ADDR_SWAP_DATA

Passthrough mode: Address Swap Data.

  • Offset: 0x70
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "data", "bits": 32, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0rw0x0dataFor any bit set in ADDR_SWAP_MASK, the value of the corresponding bit in this register is used for that address bit.

PAYLOAD_SWAP_MASK

Passthrough mode: Payload Swap Mask.

Passthrough mode payload swapping can set or unset any bits in the first 4 bytes of the payload written to the downstream flash. For any bit set in PAYLOAD_SWAP_MASK, the passthrough logic instead uses the value of the corresponding bit in PAYLOAD_SWAP_DATA for that payload bit.

For example, if PAYLOAD_SWAP_MASK is set to 0x0000000f and PAYLOAD_SWAP_DATA is set to 0x00000005, bits 0 and 2 of the first payload byte are set to 1, bits 1 and 3 of the first payload byte are set to 0, and the rest of the payload is unchanged.

Payload swapping is applied least-significant bit first - bits [7:0] are applied to the first received byte, followed by bits [15:8], and so on.

  • Offset: 0x74
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "mask", "bits": 32, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0rw0x0maskFor any bit set in this register, the value of the corresponding bit in PAYLOAD_SWAP_DATA is used for that payload bit.

PAYLOAD_SWAP_DATA

Passthrough mode: Payload Swap Data.

Passthrough mode payload swapping can set or unset any bits in the first 4 bytes of the payload written to the downstream flash. For any bit set in PAYLOAD_SWAP_MASK, the passthrough logic instead uses the value of the corresponding bit in PAYLOAD_SWAP_DATA for that payload bit.

For example, if PAYLOAD_SWAP_MASK is set to 0x0000000f and PAYLOAD_SWAP_DATA is set to 0x00000005, bits 0 and 2 of the first payload byte are set to 1, bits 1 and 3 of the first payload byte are set to 0, and the rest of the payload is unchanged.

Payload swapping is applied least-significant bit first - bits [7:0] are applied to the first received byte, followed by bits [15:8], and so on.

  • Offset: 0x78
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "data", "bits": 32, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0rw0x0dataFor any bit set in PAYLOAD_SWAP_MASK, the value of the corresponding bit in this register is used for that payload bit.

CMD_INFO

Command Information register.

For CMD_INFO slots assigned to HW functionality, HW ignores the setting of some configurable fields and the behaviour is hard-coded.

Read SFDP commands (CMD_INFO slot 4) are unaffected by the configuration of ADDR_MODE.addr_4b_en, and a 3-byte address will always be expected following the command opcode.

  • Reset default: 0x7000
  • Reset mask: 0x83ffffff

Instances

NameOffset
CMD_INFO_00x7c
CMD_INFO_10x80
CMD_INFO_20x84
CMD_INFO_30x88
CMD_INFO_40x8c
CMD_INFO_50x90
CMD_INFO_60x94
CMD_INFO_70x98
CMD_INFO_80x9c
CMD_INFO_90xa0
CMD_INFO_100xa4
CMD_INFO_110xa8
CMD_INFO_120xac
CMD_INFO_130xb0
CMD_INFO_140xb4
CMD_INFO_150xb8
CMD_INFO_160xbc
CMD_INFO_170xc0
CMD_INFO_180xc4
CMD_INFO_190xc8
CMD_INFO_200xcc
CMD_INFO_210xd0
CMD_INFO_220xd4
CMD_INFO_230xd8

Fields

{"reg": [{"name": "opcode", "bits": 8, "attr": ["rw"], "rotate": 0}, {"name": "addr_mode", "bits": 2, "attr": ["rw"], "rotate": -90}, {"name": "addr_swap_en", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "mbyte_en", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "dummy_size", "bits": 3, "attr": ["rw"], "rotate": -90}, {"name": "dummy_en", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "payload_en", "bits": 4, "attr": ["rw"], "rotate": -90}, {"name": "payload_dir", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "payload_swap_en", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "read_pipeline_mode", "bits": 2, "attr": ["rw"], "rotate": -90}, {"name": "upload", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "busy", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 5}, {"name": "valid", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 200}}
BitsTypeResetName
31rw0x0valid
30:26Reserved
25rw0x0busy
24rw0x0upload
23:22rw0x0read_pipeline_mode
21rw0x0payload_swap_en
20rw0x0payload_dir
19:16rw0x0payload_en
15rw0x0dummy_en
14:12rw0x7dummy_size
11rw0x0mbyte_en
10rw0x0addr_swap_en
9:8rw0x0addr_mode
7:0rw0x0opcode

CMD_INFO . valid

If set, the command is active and can be matched on command receive. Otherwise, this command information entry is ignored.

CMD_INFO . busy

If set, sets the FLASH_STATUS.busy bit when the command is received. This bit is only effective if the CMD_INFO.upload bit is set.

CMD_INFO . upload

If set, the command parser activates the upload submodule when this command is received and the command is uploaded.

The command’s opcode (CMD_INFO.opcode), as well as the state of the FLASH_STATUS.busy, FLASH_STATUS.wel, and ADDR_MODE.addr_4b_en bits at the time the command is received, are stored in the Command Upload FIFO, readable from UPLOAD_CMDFIFO.

if CMD_INFO.addr_mode is not AddrDisabled, the command’s address field is stored in the Address Upload FIFO, readable from UPLOAD_ADDRFIFO.

The behaviour of CMD_INFO.upload with CMD_INFO.addr_mode == AddrDisabled is not defined.

The command’s payload is written to the Payload Buffer. See UPLOAD_STATUS and UPLOAD_STATUS2.

The behaviour of CMD_INFO.upload with CMD_INFO.payload_dir is not defined.

In Passthrough mode, uploaded commands are still delivered to the downstream flash device unless the bit corresponding to the opcode is set in CMD_FILTER.

The behaviour of CMD_INFO.upload with CMD_INFO.addr_swap_en and CMD_INFO.payload_swap_en is not defined.

In Passthrough mode, address and payload swapping (as controlled by CMD_INFO.addr_swap_en and CMD_INFO.payload_swap_en) are applied only to the data passed-through to the downstream flash, and not the uploaded address and payload. SW may manually apply address and payload swapping to see the values sent downstream using the same swap mask/data registers.

CMD_INFO . read_pipeline_mode

Add 2-stage pipeline to read payload.

If read_pipeline_mode is not set to zero_stages, the read logic adds a 2-stage pipeline to the read data for this command. This read pipeline enables higher throughput for certain read commands in passthrough mode.

payload_dir must be set to PayloadOut: payload_pipeline_en only works with read data. It may be used with any IO mode, but general host compatibility is likely limited to Quad Read. If this pipeline is used for passthrough, the internal SFDP should report 2 additional dummy cycles compared to the downstream flash. SFDP read commands should be processed internally, and dummy_size should still reflect the downstream device’s dummy cycle count.

ValueNameDescription
0x0zero_stagesBypass the 2-stage read pipeline. This mode is for ordinary SPI flash operation. Passthrough read data flows combinatorially from input pads to output pads.
0x1two_stages_half_cycle2-stage read pipeline with half-cycle sampling. In this mode, the 2-stage read pipeline is enabled. Read data appears 2 cycles later than the zero_stages option. In addition, read data originating from the downstream flash is first sampled on the normal sampling edge for half-cycle sampling.
0x2two_stages_full_cycle2-stage read pipeline with full-cycle sampling. In this mode, the 2-stage read pipeline is enabled. Read data appears 2 cycles later than the zero_stages option. In addition, read data originating from the downstream flash is first sampled on the next launch edge. In other words, the internal pipeline performs full-cycle sampling of the downstream flash’s response.

Other values are reserved.

CMD_INFO . payload_swap_en

Passthrough mode: Swap the first 4 bytes of the write payload.

If set, passthrough logic swaps the first 4 bytes of the command’s written payload, according to the values of PAYLOAD_SWAP_MASK and PAYLOAD_SWAP_DATA.

Payload swapping only works with write payloads and in Single IO mode - CMD_INFO.payload_en must be 0b0001 and CMD_INFO.payload_dir must be PayloadIn.

CMD_INFO . payload_dir

The direction of the command’s payload phase.

If set, the payload is from the downstream flash or SPI Device IP to the host, otherwise it is from the host to the downstream flash or SPI Device IP.

This field has no effect if the command has no payload phase - see also CMD_INFO.payload_en.

ValueNameDescription
0x0PayloadInFrom host to the downstream flash device.
0x1PayloadOutFrom the downstream flash device to the host.

CMD_INFO . payload_en

Payload Enable per SPI lane.

Represents which SPI lines this command’s payload is transmitted over, if any. Each bit corresponds to one of the SPI IO lines.

For example, if the command is a Single IO command with a payload that is written to the SPI Device IP or downstream flash, this should be set to 0b0001 for the MOSI line (IO[0]). If the payload is read from the SPI Device IP or downstream flash, this should be set to 0b0010 for the MISO line (IO[1]). CMD_INFO.payload_dir should also be configured with the appropriate payload direction.

CMD_INFO . dummy_en

If set, the command has at least one dummy cycle between the opcode/address phase and the payload phase.

CMD_INFO . dummy_size

The number of dummy cycles between this command’s opcode/address phase and the payload phase, minus one.

This field has no effect if CMD_INFO.dummy_en is unset.

CMD_INFO . mbyte_en

If set, the command has an MByte field following the address field. This should be set for Dual IO and Quad IO commands.

This field is currently unimplemented.

CMD_INFO . addr_swap_en

Passthrough mode: Swap the command’s address bytes.

If set, passthrough logic swaps the bytes of the command’s address field, according to the values ADDR_SWAP_MASK and ADDR_SWAP_DATA.

This bit is only effective if CMD_INFO.addr_mode is not AddrDisabled.

CMD_INFO . addr_mode

The size of the command’s address field.

ValueNameDescription
0x0AddrDisabledThe command has no address field.
0x1AddrCfgThe size of the command’s address field is determined by ADDR_MODE.addr_4b_en.
0x2Addr3BThe size of the command’s address field is always 3B.
0x3Addr4BThe size of the command’s address field is always 4B.

CMD_INFO . opcode

Command opcode

CMD_INFO_EN4B

EN4B command information register.

This command is handled by HW in Flash and Passthrough modes.

This command sets the ADDR_MODE.addr_4b_en bit.

  • Offset: 0xdc
  • Reset default: 0x0
  • Reset mask: 0x800000ff

Fields

{"reg": [{"name": "opcode", "bits": 8, "attr": ["rw"], "rotate": 0}, {"bits": 23}, {"name": "valid", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31rw0x0validIf set, the command is active and can be matched on command receive. Otherwise, this command information entry is ignored.
30:8Reserved
7:0rw0x0opcodeVendor-specific opcode for EN4B, typically 0xb7.

CMD_INFO_EX4B

EX4B command information register.

This command is handled by HW in Flash and Passthrough modes.

This command clears the ADDR_MODE.addr_4b_en bit.

  • Offset: 0xe0
  • Reset default: 0x0
  • Reset mask: 0x800000ff

Fields

{"reg": [{"name": "opcode", "bits": 8, "attr": ["rw"], "rotate": 0}, {"bits": 23}, {"name": "valid", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31rw0x0validIf set, the command is active and can be matched on command receive. Otherwise, this command information entry is ignored.
30:8Reserved
7:0rw0x0opcodeVendor-specific opcode for EX4B, typically 0xe9.

CMD_INFO_WREN

Write Enable (WREN) command information register.

This command is handled by HW in Flash and Passthrough modes.

This command sets the FLASH_STATUS.wel bit.

  • Offset: 0xe4
  • Reset default: 0x0
  • Reset mask: 0x800000ff

Fields

{"reg": [{"name": "opcode", "bits": 8, "attr": ["rw"], "rotate": 0}, {"bits": 23}, {"name": "valid", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31rw0x0validIf set, the command is active and can be matched on command receive. Otherwise, this command information entry is ignored.
30:8Reserved
7:0rw0x0opcodeVendor-specific opcode for WREN, typically 0x06.

CMD_INFO_WRDI

Write Disable (WRDI) command information register.

This command is handled by HW in Flash and Passthrough modes.

This command clears the FLASH_STATUS.wel bit.

  • Offset: 0xe8
  • Reset default: 0x0
  • Reset mask: 0x800000ff

Fields

{"reg": [{"name": "opcode", "bits": 8, "attr": ["rw"], "rotate": 0}, {"bits": 23}, {"name": "valid", "bits": 1, "attr": ["rw"], "rotate": -90}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31rw0x0validIf set, the command is active and can be matched on command receive. Otherwise, this command information entry is ignored.
30:8Reserved
7:0rw0x0opcodeVendor-specific opcode for WRDI, typically 0x04.

TPM_CAP

TPM HWIP Capability register.

This register shows the features the current TPM HWIP supports.

  • Offset: 0x800
  • Reset default: 0x660100
  • Reset mask: 0x7701ff

Fields

{"reg": [{"name": "rev", "bits": 8, "attr": ["ro"], "rotate": 0}, {"name": "locality", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 7}, {"name": "max_wr_size", "bits": 3, "attr": ["ro"], "rotate": -90}, {"bits": 1}, {"name": "max_rd_size", "bits": 3, "attr": ["ro"], "rotate": -90}, {"bits": 9}], "config": {"lanes": 1, "fontsize": 10, "vspace": 130}}
BitsTypeResetName
31:23Reserved
22:20ro0x6max_rd_size
19Reserved
18:16ro0x6max_wr_size
15:9Reserved
8ro0x1locality
7:0ro0x0rev

TPM_CAP . max_rd_size

The maximum read size in bytes the TPM submodule supports. The maximum read size is 2 to the power of the value in this field (between 4 and 64 byes).

ValueMaximum read size
0b0104B
0b0118B
0b10016B
0b10132B
0b11064B

All other values are reserved.

It is recommended that SW does not advertise the TPM as supporting reads larger than max_rd_size to the Southbridge.

TPM_CAP . max_wr_size

The maximum write size in bytes the TPM submodule supports. The maximum write size is 2 to the power of the value in this field (between 4 and 64 byes).

ValueMaximum write size
0b0104B
0b0118B
0b10016B
0b10132B
0b11064B

All other values are reserved.

It is recommended that SW does not advertise the TPM as supporting writes larger than max_wr_size to the Southbridge.

TPM_CAP . locality

If set, the TPM submodule supports 5 Localities, otherwise only one Locality is supported.

TPM_CAP . rev

Revision of the TPM submodule.

TPM_CFG

TPM Configuration register.

  • Offset: 0x804
  • Reset default: 0x0
  • Reset mask: 0x1f

Fields

{"reg": [{"name": "en", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "tpm_mode", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "hw_reg_dis", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "tpm_reg_chk_dis", "bits": 1, "attr": ["rw"], "rotate": -90}, {"name": "invalid_locality", "bits": 1, "attr": ["rw"], "rotate": -90}, {"bits": 27}], "config": {"lanes": 1, "fontsize": 10, "vspace": 180}}
BitsTypeResetName
31:5Reserved
4rw0x0invalid_locality
3rw0x0tpm_reg_chk_dis
2rw0x0hw_reg_dis
1rw0x0tpm_mode
0rw0x0en

TPM_CFG . invalid_locality

If set, TPM submodule returns the invalid data (0xFF) for the out of the max Locality request. If the request is a write request, The HW will still upload the command and address. In that case, SW still needs to precess the incoming invalid command.

If unset, TPM submodule uploads the TPM command and address. The SW may write 0xFF to the read FIFO.

Note: The TPM submodule uploads the TPM commands that do not fall into the FIFO registers (0xD4_XXXX) regardless of invalid_locality bit.

TPM_CFG . tpm_reg_chk_dis

If set, the logic does not compare the upper 8 bits of the received address with the TpmAddr constant, 0xD4.

If unset, the HW uploads the command, address, and write payload to the buffers in case of address that is not 0xD4_XXXX.

TPM_CFG . hw_reg_dis

If unset, TPM submodule directly returns the return-by-HW registers for read requests.

If set, TPM submodule uploads the TPM command regardless of the address, and the SW may return the value through the read FIFO.

TPM_CFG . tpm_mode

Configure the TPM mode. If set, the TPM is in CRB mode, otherwise it is FIFO mode.

If this field is set by SW, the HW logic always pushes the command, address, and write data to buffers. The logic does not compare the incoming address to the list of managed-by-HW register addresses.

The invalid locality check still runs based on the invalid_locality configuration.

TPM_CFG . en

If set, the TPM submodule accepts the transactions over SPI.

TPM_STATUS

TPM submodule state register.

The TPM_STATUS CSR provides the status of the read and write FIFOs, as well as the Command and Address buffer.

  • Offset: 0x808
  • Reset default: 0x0
  • Reset mask: 0x7

Fields

{"reg": [{"name": "cmdaddr_notempty", "bits": 1, "attr": ["ro"], "rotate": -90}, {"name": "wrfifo_pending", "bits": 1, "attr": ["rw0c"], "rotate": -90}, {"name": "rdfifo_aborted", "bits": 1, "attr": ["ro"], "rotate": -90}, {"bits": 29}], "config": {"lanes": 1, "fontsize": 10, "vspace": 180}}
BitsTypeResetName
31:3Reserved
2roxrdfifo_aborted
1rw0cxwrfifo_pending
0roxcmdaddr_notempty

TPM_STATUS . rdfifo_aborted

If set, the last Read FIFO command was aborted.

This bit becomes set when a Read FIFO command became active, but the transaction did not complete. An aborted transaction occurs when the host de-asserts CSb without clocking all the requested data. This bit remains set until reset, or it will clear automatically after the next valid command is read from TPM_CMD_ADDR.

TPM_STATUS . wrfifo_pending

If set, the Write FIFO is reserved for software processing.

This bit becomes set when a complete write command is received. While it remains set, subsequent write commands will block at the wait state until it is cleared. Write 0 to release the Write FIFO back to the TPM module.

TPM_STATUS . cmdaddr_notempty

If set, TPM_CMD_ADDR contains valid data. This status is reported via the interrupt also.

TPM_ACCESS_0

TPM_ACCESS_x register.

  • Offset: 0x80c
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "access_0", "bits": 8, "attr": ["rw"], "rotate": 0}, {"name": "access_1", "bits": 8, "attr": ["rw"], "rotate": 0}, {"name": "access_2", "bits": 8, "attr": ["rw"], "rotate": 0}, {"name": "access_3", "bits": 8, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:24rw0x0access_3TPM_ACCESS
23:16rw0x0access_2TPM_ACCESS
15:8rw0x0access_1TPM_ACCESS
7:0rw0x0access_0TPM_ACCESS

TPM_ACCESS_1

TPM_ACCESS_x register.

  • Offset: 0x810
  • Reset default: 0x0
  • Reset mask: 0xff

Fields

{"reg": [{"name": "access_4", "bits": 8, "attr": ["rw"], "rotate": 0}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:8Reserved
7:0rw0x0access_4For TPM1

TPM_STS

TPM_STS_x register.

The register is mirrored to all Localities. The value is returned to the host system only when the activeLocality in the TPM_ACCESS_x is matched to the current received Locality.

  • Offset: 0x814
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "sts", "bits": 32, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0rw0x0stsTPM_STS_x

TPM_INTF_CAPABILITY

TPM_INTF_CAPABILITY register.

  • Offset: 0x818
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "intf_capability", "bits": 32, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0rw0x0intf_capabilityTPM_INTF_CAPABILITY

TPM_INT_ENABLE

TPM_INT_ENABLE register.

  • Offset: 0x81c
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "int_enable", "bits": 32, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0rw0x0int_enableTPM_INT_ENABLE

TPM_INT_VECTOR

TPM_INT_VECTOR register.

  • Offset: 0x820
  • Reset default: 0x0
  • Reset mask: 0xff

Fields

{"reg": [{"name": "int_vector", "bits": 8, "attr": ["rw"], "rotate": 0}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:8Reserved
7:0rw0x0int_vectorTPM_INT_VECTOR

TPM_INT_STATUS

TPM_INT_STATUS register.

  • Offset: 0x824
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "int_status", "bits": 32, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0rw0x0int_statusTPM_INT_STATUS

TPM_DID_VID

TPM_DID/ TPM_VID register.

  • Offset: 0x828
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "vid", "bits": 16, "attr": ["rw"], "rotate": 0}, {"name": "did", "bits": 16, "attr": ["rw"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:16rw0x0didTPM_DID
15:0rw0x0vidTPM_VID

TPM_RID

TPM_RID register.

  • Offset: 0x82c
  • Reset default: 0x0
  • Reset mask: 0xff

Fields

{"reg": [{"name": "rid", "bits": 8, "attr": ["rw"], "rotate": 0}, {"bits": 24}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:8Reserved
7:0rw0x0ridTPM_RID

TPM_CMD_ADDR

TPM Command and Address buffer.

The SW may get the received TPM command and address by reading this CSR.

  • Offset: 0x830
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "addr", "bits": 24, "attr": ["ro"], "rotate": 0}, {"name": "cmd", "bits": 8, "attr": ["ro"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:24roxcmdReceived command.
23:0roxaddrReceived address.

TPM_READ_FIFO

TPM Read command return data FIFO.

The write port of the read command FIFO.

  • Offset: 0x834
  • Reset default: 0x0
  • Reset mask: 0xffffffff

Fields

{"reg": [{"name": "value", "bits": 32, "attr": ["wo"], "rotate": 0}], "config": {"lanes": 1, "fontsize": 10, "vspace": 80}}
BitsTypeResetNameDescription
31:0woxvalueWrite port of the read FIFO.

egress_buffer

SPI internal egress buffer.

Offset (Words)Length (Words)Purpose
0512Flash mode Read buffer for emulated flash.
512256Flash mode Mailbox.
76864Flash mode SFDP configuration buffer.
83216TPM Read FIFO.
  • Word Aligned Offset Range: 0x1000to0x1d3c
  • Size (words): 848
  • Access: wo
  • Byte writes are not supported.

ingress_buffer

SPI internal ingress buffer.

Offset (Words)Length (Words)Purpose
064Flash mode Payload FIFO.
6416Flash mode uploaded command FIFO.
8016Flash mode uploaded address FIFO.
9616TPM Write FIFO.
  • Word Aligned Offset Range: 0x1e00to0x1fbc
  • Size (words): 112
  • Access: ro
  • Byte writes are not supported.