[PATCH 0/3] i3c: master: amd: Add IBI and hot-join support
Shubham Patil <[email protected]>
| Newsgroups | gmane.linux.drivers.devicetree,gmane.linux.kernel |
|---|---|
| Message-ID | <[email protected]> |
This series adds In-Band Interrupt (IBI) and Hot-Join support to the AMD AXI I3C master controller driver. An In-Band Interrupt (IBI) replaces the dedicated interrupt pin an I2C slave would otherwise need. When the bus is idle, a target wanting attention pulls SDA low to generate a START, then drives its own dynamic address with RnW=1 during the arbitrated address header. The controller either ACKs the request, accepting the interrupt and optionally reading a Mandatory Data Byte and payload, or NACKs it. The interrupt therefore travels in band on SDA/SCL, saving a wire per device. Hot-Join (HJ) lets a target that was not present at boot join a running bus, after being powered up later or physically attached. Having no dynamic address yet, it arbitrates using the reserved Hot-Join address; the controller ACKs that and runs dynamic address assignment to enumerate it. The same hardware arbitrates and ACKs it as an IBI. Both features are synthesis-time options in the IP, so patch 1 adds two boolean device tree properties, "xlnx,ibi-capable" and "xlnx,hj-capable", to describe what a design implements. Hot-Join requests are ACKed by the IBI machinery, so hj-capable depends on ibi-capable and the binding enforces that. The controller interrupt only carries IBI and Hot-Join events, so it is required only for ibi-capable designs. The driver assembles its ops at probe from the capability flags. Patch 2 adds IBI support. The IBI ACK enable and its interrupt mask are controller-wide rather than per-target, so they are armed on the first target to enable IBIs and disarmed on the last to disable them, with per-target control left on the bus via ENEC/DISEC. IBIs also share the response and read FIFOs with normal transfers and are distinguished only by the reserved TID 0x0F, so the transfer path identifies IBI responses by TID and discards them along with their payload. A raced IBI is dropped rather than deferred. Patch 3 adds Hot-Join. ENTDAA needs bus traffic and can sleep, so it cannot run in the hard IRQ handler; the Hot-Join event is therefore deferred to a work item that runs the re-enumeration. Shubham Patil (3): dt-bindings: i3c: xlnx: Add IBI and hot-join capability properties i3c: master: amd: Add support for in-band interrupts i3c: master: amd: Add hot-join support .../bindings/i3c/xlnx,axi-i3c-1.0.yaml | 23 + drivers/i3c/master/amd-i3c-master.c | 593 +++++++++++++++++- 2 files changed, 596 insertions(+), 20 deletions(-) base-commit: 320722812708d34c11c2d067a018fcbeec6b64aa -- 2.34.1