On Mon, Aug 18, 2025 at 01:51:12PM +0200, Jorge Marques wrote: > I3C Controller is subset of the I3C-basic specification to interface > peripherals through I3C and I2C. The controller RTL is FPGA > synthesizable and documentation is provided at > https://analogdevicesinc.github.io/hdl/library/i3c_controller > > The main target for the I3C Controller IP is low-cost FPGAs. > In this version the driver supports IBI (only the MDB), I3C and I2C > transfers. > > The IP Core is versioned following ADI's open source HDL guidelines > for devicetree bindings and drivers described at > https://analogdevicesinc.github.io/hdl/user_guide/contributing.html#devicetree-bindings-drivers > in summary, follows Semantic Versioning 2.0.0, with the dt-binding suffixed > by -v<major>. > > If necessary, the contents of > https://analogdevicesinc.github.io/hdl/user_guide/contributing.html#devicetree-bindings-drivers > can be replicated to a file in a different series, similar to AMD Xilinx > at Documentation/devicetree/bindings/xilinx.txt, but as adi.txt or > similar. > > Depends on > https://lore.kernel.org/linux-i3c/[email protected]/T/#t
It is already in v6.17-rc1. You can remove this depends. commit 733b439375b494e8a6950ab47d18a4b615b73cb3 Author: Jorge Marques <[email protected]> Date: Tue Jun 24 11:06:04 2025 +0200 i3c: master: Add inline i3c_readl_fifo() and i3c_writel_fifo() The I3C abstraction expects u8 buffers, but some controllers operate with a 32-bit bus width FIFO and cannot flag valid bytes individually. To avoid reading or writing outside the buffer bounds, use 32-bit accesses where possible and apply memcpy for any remaining bytes Signed-off-by: Jorge Marques <[email protected]> Suggested-by: Wolfram Sang <[email protected]> Reviewed-by: Wolfram Sang <[email protected]> Tested-by: Wolfram Sang <[email protected]> Reviewed-by: Frank Li <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alexandre Belloni <[email protected]> > > Signed-off-by: Jorge Marques <[email protected]> > --- > Changes in v7: > - Edit cover linking guidelines to ADI IP Core versioning. > Documentation/devicetree/bindings/i3c/adi,i3c-master.yaml: > - Extend second clock description to explain relation to synthesized topology. > - Link to v6: > https://lore.kernel.org/r/[email protected] > > Changes in v6: > - Format 0x05C undercase > - Link to v5: > https://lore.kernel.org/r/[email protected] > > Changes in v5: > Documentation/devicetree/bindings/i3c/adi,i3c-master.yaml: > - Use semantic versioning major field for dt-binding compatible, with > the format adi,<ip-name>-v<major> > > adi-i3c-master.c: > - Rename MAX_DEVS to ADI_MAX_DEVS > - Encapsulate REG_CMD_FIFO_0_DEV_ADDR var > - Reorder struct adi_i3c_i2c_dev_data fields > - Start addr at 0 instead of 8 at adi_i3c_master_get_rr_slot > - Minor rework on adi_i3c_master_handle_ibi to most logic out of the > lock. Even if length is 0 (BCR[2]=0), the mdb field is extracted and > written to the slot buffer. Since the length is 0, the written data > doesn't matter. > In a future update with additional bytes support (e.g., bits 31-23), > len would be incremented and an IBI FIFO would be read. > - Version check against first stable release, major v1. > Driver+RTL features updates affect the minor field, therefore check > for major == 1. > - Link to v4: > https://lore.kernel.org/r/[email protected] > > Changes in v4: > Documentation/devicetree/bindings/i3c/adi,i3c-master.yaml: > - Add -1.00.a suffix where missing > - Extend clocks descriptions > - Add minItems to clock-names, to match clocks > - Use header in example > > adi-i3c-master.c: > - Regmap: > - Add new controller info registers (dyn_addr, dcr, bcr, pid) > - Always decreasing fields > - Add line break between registers > - Reformat REG_DEV_CHAR_BSCR_IBI to use easier to read FIELD_GET, > FIELD_PREP > - Read controller info from regmap with explanation comment > - Use linux/fpga/adi-axi-common.h macros > - Use __counter_by macro on ncmds > - Use __free macro > - Use new i3c_writel_fifo and i3c_readl_fifo macros > - Rename bytes to buf when nbytes is present > - Use scoped_guard instead of spin_lock, spin_unlock > - Reformat loops to read fifo status, use while single line alternative > - Drop adi_i3c_master.max_devs, use MAX_DEVS directly > - Use devm_clk_bulk_get_all_enabled, dropping clock name match (CHECK_DTB > does it) > - Init spin_lock > - Init list head > - Link to v3: > https://lore.kernel.org/r/[email protected] > > Changes in v3: > Documentation/devicetree/bindings/i3c/adi,i3c-master.yaml: > - Small reworking of the description > - Add -1.00.a suffix to compatible > > adi-i3c-master.c: > - Misspelling > - Remove REG_CMD_FIFO_0_LEN_MAX since it is a HDL parameter > - Use adapter timeout value for I2C transfers, as in > > https://lore.kernel.org/linux-i3c/aEBd%2FFIKADYr%2F631@lizhi-Precision-Tower-5810/T/#t > > - Link to v2: > https://lore.kernel.org/r/[email protected] > > Changes in v2: > Documentation/devicetree/bindings/i3c/adi,i3c-master.yaml: > - Move allof > - Rename clocks to axi, i3c > > adi-i3c-master.c: > - Update license year > - Rework regmap to use FIELD_GET, FIELD_PREP > - Reformat regmap to have FIELDS after REG, prefixed by reg name. > - Add overflow safeguards to cmd, tx fifos > - Fix macro related macros (mostly erroneous `| ~BITMASK` > - Use guard macros, remove goto. > - Simplify daa logic > - Replace devm_clk_get with devm_clk_get_enabled > - Solve 64bit->32bit warnings on x86_64 systems by casting to u32 > - Immediate clear irq request flags, then handle it. > > - Link to v1: > https://lore.kernel.org/r/[email protected] > > --- > Jorge Marques (2): > dt-bindings: i3c: Add adi-i3c-master > i3c: master: Add driver for Analog Devices I3C Controller IP > > .../devicetree/bindings/i3c/adi,i3c-master.yaml | 72 ++ > MAINTAINERS | 6 + > drivers/i3c/master/Kconfig | 11 + > drivers/i3c/master/Makefile | 1 + > drivers/i3c/master/adi-i3c-master.c | 1019 > ++++++++++++++++++++ > 5 files changed, 1109 insertions(+) > --- > base-commit: 51963783b876a2f493a3eac0ea9eba271cb6809a > change-id: 20250604-adi-i3c-master-2a5148c58c47 > prerequisite-message-id: > <[email protected]> > prerequisite-patch-id: 5443f14ca82fc08593960fafdb43488cce56f7d9 > prerequisite-patch-id: 647084f5fe09f4887f633b0b02b306912a156672 > prerequisite-patch-id: 6f582bb2ef1aafb66f26c515a19d5efa06ab8968 > > Best regards, > -- > Jorge Marques <[email protected]> >
