pluto_hdl_adi/docs/regmap/adi_regmap_i3c_controller.txt

646 lines
13 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

TITLE
I3C Controller (i3c_controller_host_interface)
i3c_controller_host_interface
ENDTITLE
############################################################################################
############################################################################################
REG
0x00
VERSION
Version of the peripheral. Follows semantic versioning. Current version 0.01.00
ENDREG
FIELD
[31:16] 0x00
VERSION_MAJOR
RO
ENDFIELD
FIELD
[15:8] 0x01
VERSION_MINOR
RO
ENDFIELD
FIELD
[7:0] 0x00
VERSION_PATCH
RO
ENDFIELD
############################################################################################
############################################################################################
REG
0x01
DEVICE_ID
ENDREG
FIELD
[31:0] ''ID''
DEVICE_ID
RO
Value of the ID configuration parameter.
ENDFIELD
############################################################################################
############################################################################################
REG
0x02
SCRATCH
ENDREG
FIELD
[31:0] 0x00000000
SCRATCH
RW
Scratch register useful for debug.
ENDFIELD
############################################################################################
############################################################################################
REG
0x10
ENABLE
ENDREG
FIELD
[0] 0x1
ENABLE
RW
Enable register. If the enable bit is set to 1 the internal state of the peripheral is reset.
For proper operation, the bit needs to be set to 0.
ENDFIELD
############################################################################################
############################################################################################
REG
0x20
IRQ_MASK
ENDREG
FIELD
[7] 0x0
DAA_PENDING
RW
If set to 0 the DAA_PENDING interrupt is masked.
ENDFIELD
FIELD
[6] 0x0
IBI_PENDING
RW
If set to 0 the IBI_PENDING interrupt is masked.
ENDFIELD
FIELD
[5] 0x0
CMDR_PENDING
RW
If set to 0 the CMDR_PENDING interrupt is masked.
ENDFIELD
FIELD
[4] 0x0
IBI_ALMOST_FULL
RW
If set to 0 the IBI_ALMOST_FULL interrupt is masked.
ENDFIELD
FIELD
[3] 0x0
SDI_ALMOST_FULL
RW
If set to 0 the SDI_ALMOST_FULL interrupt is masked.
ENDFIELD
FIELD
[2] 0x0
SDO_ALMOST_EMPTY
RW
If set to 0 the SDO_ALMOST_EMPTY interrupt is masked.
ENDFIELD
FIELD
[1] 0x0
CMDR_ALMOST_FULL
RW
If set to 0 the CMDR_ALMOST_FULL interrupt is masked.
ENDFIELD
FIELD
[0] 0x0
CMD_ALMOST_EMPTY
RW
If set to 0 the CMD_ALMOST_EMPTY interrupt is masked.
ENDFIELD
############################################################################################
############################################################################################
REG
0x21
IRQ_PENDING
ENDREG
FIELD
[31:0] 0x00000000
IRQ_PENDING
RW
Pending IRQs with mask.
Write 1 at the CMDR_PENDING bit to clear it.
For CMDR_PENDING and IBI_PENDING, will be cleared if the FIFOs are also empty.
For DAA_PENDING, will be cleared if the SDO FIFO is not empty, that means, got dynamic
address in the pipeline.
ENDFIELD
############################################################################################
############################################################################################
REG
0x22
IRQ_SOURCE
ENDREG
FIELD
[31:0] 0x00000000
IRQ_SOURCE
RO
Pending IRQs without mask.
ENDFIELD
############################################################################################
############################################################################################
REG
0x30
CMD_FIFO_ROOM
ENDREG
FIELD
[31:0] 0xXXXXXXXX
CMD_FIFO_ROOM
RO
Number of free entries in the CMD FIFO.
ENDFIELD
############################################################################################
############################################################################################
REG
0x31
CMDR_FIFO_LEVEL
ENDREG
FIELD
[31:0] 0x00000000
CMDR_FIFO_LEVEL
RO
Number of valid entries in the CMDR FIFO.
ENDFIELD
############################################################################################
############################################################################################
REG
0x32
SDO_FIFO_ROOM
ENDREG
FIELD
[31:0] 0xXXXXXXXX
SDO_FIFO_ROOM
RO
Number of free entries in the SDO FIFO.
ENDFIELD
############################################################################################
############################################################################################
REG
0x33
SDI_FIFO_LEVEL
ENDREG
FIELD
[31:0] 0x00000000
SDI_FIFO_LEVEL
RO
Number of valid entries in the serial-data-in FIFO.
ENDFIELD
############################################################################################
############################################################################################
REG
0x34
IBI_FIFO_LEVEL
ENDREG
FIELD
[31:0] 0x00000000
IBI_FIFO_LEVEL
RO
Number of valid entries in the in-bus-interrupt FIFO.
ENDFIELD
############################################################################################
############################################################################################
REG
0x35
CMD_FIFO
Command FIFO register. Writing to this register inserts an entry into the CMD FIFO.
Writing to this register when the CMD FIFO is full has no effect and the written entry
is discarded. Reading from this register always returns 0x00000000.
The Software is responsive for a valid sequence of commands.
If the peripheral does not ACK when required during a command, the procedure exits and the
next command in the FIFO is interpreted.
See :ref:`i3c_controller instruction-format` for the structure of the command.
ENDREG
FIELD
[22] 0xX
CMD_IS_CCC
WO
Indicate if it is a CCC transfer (1) or not (0).
ENDFIELD
FIELD
[21] 0xX
CMD_BCAST_HEADER
WO
Include broadcast header in private transfer (1) or not (0).
ENDFIELD
FIELD
[20] 0xX
CMD_SR
WO
Repeated start flag, yield a Sr (1) or P (0) at the end of the transfer.
ENDFIELD
FIELD
[19:8] 0xXXX
CMD_BUFFER_LENGHT
WO
Unsigned 12-bits payload length, direction depends on RNW value.
ENDFIELD
FIELD
[7:1] 0xXX
CMD_DA
WO
7-bit device address (dont care in broadcast mode).
ENDFIELD
FIELD
[0] 0xX
CMD_RNW
WO
If should retrieve data from device (1) or not (0).
ENDFIELD
############################################################################################
############################################################################################
REG
0x36
CMDR_FIFO
CMDR FIFO register. Reading from this register removes the first entry from the CMDR FIFO.
Reading this register when the CMDR FIFO is empty will return undefined data.
Writing to it has no effect.
ENDREG
FIELD
[23:0] 0x??
CMDR_FIFO_ERROR
RO
If an error occurred during the transfer.
ENDFIELD
FIELD
[19:8] 0x??
CMDR_FIFO_BUFFER_LENGTH
RO
Unsigned 12-bits transferred payload length.
ENDFIELD
FIELD
[7:0] 0x??
CMDR_FIFO_SYNC
RO
Command synchronization.
ENDFIELD
############################################################################################
############################################################################################
REG
0x37
SDO_FIFO
SDO FIFO register. Writing to this register inserts an entry into the SDO FIFO.
Writing to this register when the SDO FIFO is full has no effect and the written entry
is discarded. Reading from this register always returns 0x00000000.
ENDREG
FIELD
[31:24] 0xXX
SDO_FIFO_BYTE_3
RO
ENDFIELD
FIELD
[23:16] 0xXX
SDO_FIFO_BYTE_2
RO
ENDFIELD
FIELD
[15:8] 0xXX
SDO_FIFO_BYTE_1
RO
ENDFIELD
FIELD
[7:0] 0xXX
SDO_FIFO_BYTE_0
RO
ENDFIELD
############################################################################################
############################################################################################
REG
0x38
SDI_FIFO
SDI FIFO register. Reading from this register removes the first entry from the SDI FIFO.
Reading this register when the SDI FIFO is empty will return undefined data.
Writing to it has no effect.
ENDREG
FIELD
[31:0] 0xXXXXXXXX
SDI_FIFO
RO
ENDFIELD
############################################################################################
############################################################################################
REG
0x39
IBI_FIFO
IBI FIFO register. Reading from this register removes the first entry from the IBI FIFO.
Reading this register when the IBI FIFO is empty will return undefined data.
Writing to it has no effect.
ENDREG
FIELD
[23:17] 0xXX
IBI_FIFO_DA
RO
IBI Dynamic address.
ENDFIELD
FIELD
[15:8] 0xXX
IBI_FIFO_MDB
RO
IBI MDB, if the peripheral's BCR[2] is Low, the field is ignored.
ENDFIELD
FIELD
[7:0] 0xXX
IBI_FIFO_SYNC
RO
Synchronization number.
ENDFIELD
############################################################################################
############################################################################################
REG
0x3a
FIFO_STATUS
ENDREG
FIELD
[2] 0x1
SDI_EMPTY
RO
If there is no element to be read in the SDI FIFO.
ENDFIELD
FIELD
[1] 0x1
IBI_EMPTY
RO
If there is no element to be read in the IBI FIFO.
ENDFIELD
FIELD
[0] 0x1
CMDR_EMPTY
RO
If there is no element to be read in the CMDR FIFO.
ENDFIELD
############################################################################################
############################################################################################
REG
0x40
OPS
Configure the operation of the controller.
ENDREG
FIELD
[7] 0x0
OPS_STATUS_NOP
RO
This bit is set to 1 when the bus is not executing any procedure.
It is not idle bus condition since it set right after the Stop.
ENDFIELD
FIELD
[6:5] 0x0
OPS_SPEED_GRADE
RW
Sets the speed grade in push-pull mode.
Speed with 100MHz driver clock are:
00: 1.56MHz (default)
01: 3.12MHz
10: 6.25MHz
11: 12.50MHz
ENDFIELD
FIELD
[4:1] 0x0
OPS_OFFLOAD_LENGTH
RW
Offload commands length.
ENDFIELD
FIELD
[0] 0x0
OPS_MODE
RW
Set 0 to direct transfers, 1 to offload operation.
ENDFIELD
############################################################################################
############################################################################################
REG
0x50
IBI_CONFIG
Configure the In-Band Interrupt (IBI) feature.
ENDREG
FIELD
[1] 0x0
IBI_CONFIG_LISTEN
WO
Set this bit to listen for IBI requests (when a peripheral pulls SDA Low during bus available).
After the IBI request is resolved, the controller returns to idle, since it is was not doing
a cmd transfer.
This should be set to 1 during normal operation, even if IBI_CONFIG_ENABLE is disabled.
ENDFIELD
FIELD
[0] 0x0
IBI_CONFIG_ENABLE
WO
Set this bit to accept (ACK) IBI requests.
If disabled, the controller will NACK IBI requests.
If enabled, the controller will ACK the IBI request and receive the MDB.
In both cases, the controller will proceed with the cmd transfer after resolving the IBI
request, if any.
Accepted IBIs fill the IBI_FIFO and generate an interrupt to the PS.
IBI_CONFIG_LISTEN set to 1 and IBI_CONFIG_ENABLE set to 0 ensures that incoming IBIs are
rejected as they come.
ENDFIELD
############################################################################################
############################################################################################
REG
0x60
DEV_CHAR
Holds devices characteristics that are looked-up during execution.
The content is written only by software.
To read an address, write the address with DEV_CHAR_0_WEN 0 and then read.
ENDREG
FIELD
[15:9] 0x00
DEV_CHAR_ADDR
RW
Device address to apply DEV_CHAR[3:0].
ENDFIELD
FIELD
[8] 0xX
DEV_CHAR_WEN
W
Enable write of the fields.
ENDFIELD
FIELD
[3] 0x0
DEV_CHAR_HAS_IBI_PAYLOAD
RW
Indicates if the device sends at least MDB during the IBI.
0 does not, 1 does.
ENDFIELD
FIELD
[2] 0x0
DEV_CHAR_IS_IBI_CAPABLE
RW
Indicates if the device can send IBI.
0 does not, 1 does.
ENDFIELD
FIELD
[1] 0x0
DEV_CHAR_IS_ATTACHED
RW
Indicate if the device is attached.
ENDFIELD
[0] 0x0
DEV_CHAR_IS_I2C
RW
Indicates if the device is I²C.
0 is I3C device, 1 is I²C device.
ENDFIELD
############################################################################################
############################################################################################
REG
0xb0 + 0x01*n
WHERE n IS FROM 0 TO 15
OFFLOAD_CMD_n
Offload command memory. Write commands in sequence to these addresses and update the
OFFLOAD_CMD_LENGTH register.
ENDREG
FIELD
[31:0] 0x00
OFFLOAD_CMD
RW
The command to the I3C controller to execute.
ENDFIELD
############################################################################################
############################################################################################
REG
0xc0 + 0x01*n
WHERE n IS FROM 0 TO 15
OFFLOAD_SDO_n
Offload SDO memory.
Dual access memory sector used to store the SDO payload for the offload execution.
The SDO is read by the parsing the OFFLOAD_CMD commands.
For example, if the first command on OFFLOAD_CMD is a write with length 3 and the next with
length 2, 3 bytes from OFFLOAD_SDO_0 are sent, then 2 bytes from OFFLOAD_SDO_1 are sent.
If OPS_OFFLOAD_LENGTH is 2, then the burst concludes and the "pointer" resets to
OFFLOAD_SDO_0, otherwise, the execution continues until all commands are resolved, always
bounded by OPS_OFFLOAD_LENGTH.
ENDREG
FIELD
[31:24] 0x00
OFFLOAD_SDO_BYTE_3
RO
ENDFIELD
FIELD
[23:16] 0x00
OFFLOAD_SDO_BYTE_2
RO
ENDFIELD
FIELD
[15:8] 0x00
OFFLOAD_SDO_BYTE_1
RO
ENDFIELD
FIELD
[7:0] 0x00
OFFLOAD_SDO_BYTE_0
RO
ENDFIELD
############################################################################################
############################################################################################