i3c: mipi-i3c-hci: Add Intel specific quirk to ring resuming
PATCH 1/2 i3c: mipi-i3c-hci: Add Intel specific quirk to ring resuming
MIPI I3C HCI on Intel hardware requires a quirk where ring needs to stop and set to run again after resuming the halted controller. This is not expected from the MIPI I3C HCI specification and is Intel specific.
Add this quirk to generic aborted transfer handling and execute it only when ring is not in running state after a transfer error and attempted controller resume. This is the case on Intel hardware.
It is not fully clear to me what is the ring running state in generic hardware in such case. I would expect if ring is not running, then stop request is a no-op and run request is either required or does the same what controller resume would do.
--- drivers/i3c/master/mipi-i3c-hci/dma.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
drivers/i3c/master/mipi-i3c-hci/dma.c +17 -0
@@ -758,9 +758,26 @@ static bool hci_dma_irq_handler(struct i3c_hci *hci)complete (&rh->op_done);if (status &INTR_TRANSFER_ABORT ) { +u32 ring_status; +dev_notice_ratelimited (&hci->master.dev,"ring %d: Transfer Aborted\n" , i);mipi_i3c_hci_resume (hci); + ring_status =rh_reg_read (RING_STATUS ); +if (!(ring_status &RING_STATUS_RUNNING ) && + status &INTR_TRANSFER_COMPLETION && + status &INTR_TRANSFER_ERR ) { +/* +* Ring stop followed by run is an Intel +* specific required quirk after resuming the +* halted controller. Do it only when the ring +* is not in running state after a transfer +* error. +*/ +rh_reg_write (RING_CONTROL ,RING_CTRL_ENABLE ); +rh_reg_write (RING_CONTROL ,RING_CTRL_ENABLE | +RING_CTRL_RUN_STOP ); + } }if (status &INTR_WARN_INS_STOP_MODE ) dev_warn_ratelimited(&hci->master.dev,
Signature · 7 lines
2.45.2 -- linux-i3c mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-i3c
PATCH 2/2 i3c: mipi-i3c-hci: Add support for MIPI I3C HCI on PCI bus
Add a glue code for the MIPI I3C HCI on PCI bus with Intel Panther Lake I3C controller PCI IDs.
MIPI I3C HCI on Intel platforms has additional logic around the MIPI I3C HCI core logic. Those together create so called I3C slice on PCI bus. Intel specific initialization code does a reset cycle to the I3C slice before probing the MIPI I3C HCI part.
--- drivers/i3c/master/Kconfig | 11 ++ drivers/i3c/master/mipi-i3c-hci/Makefile | 1 + .../master/mipi-i3c-hci/mipi-i3c-hci-pci.c | 148 ++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c
drivers/i3c/master/Kconfig +11 -0
@@ -57,3 +57,14 @@ config MIPI_I3C_HCI This driver can also be built as a module. If so, the module will be called mipi-i3c-hci. + +config MIPI_I3C_HCI_PCI + tristate "MIPI I3C Host Controller Interface PCI support" + depends on MIPI_I3C_HCI + depends on PCI + help + Support for MIPI I3C Host Controller Interface compatible hardware + on the PCI bus. + + This driver can also be built as a module. If so, the module will be + called mipi-i3c-hci-pci.
drivers/i3c/master/mipi-i3c-hci/Makefile +1 -0
@@ -5,3 +5,4 @@ mipi-i3c-hci-y := core.o ext_caps.o pio.o dma.o \ cmd_v1.o cmd_v2.o \ dat_v1.o dct_v1.o \ hci_quirks.o +obj-$(CONFIG_MIPI_I3C_HCI_PCI) += mipi-i3c-hci-pci.o
drivers/i3c/master/mipi-i3c-hci/mipi-i3c-hci-pci.c new file +148 -0
148 lines not on this page · raw message
Signature · 7 lines
2.45.2 -- linux-i3c mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-i3c
Quoted 9 lines · Jarkko Nikula
MIPI I3C HCI on Intel hardware requires a quirk where ring needs to stop and set to run again after resuming the halted controller. This is not expected from the MIPI I3C HCI specification and is Intel specific.
Add this quirk to generic aborted transfer handling and execute it only when ring is not in running state after a transfer error and attempted controller resume. This is the case on Intel hardware.
[...]
Applied, thanks!
[1/2] i3c: mipi-i3c-hci: Add Intel specific quirk to ring resuming
https://git.kernel.org/abelloni/c/ccdb2e0e3b00 [2/2] i3c: mipi-i3c-hci: Add support for MIPI I3C HCI on PCI bus https://git.kernel.org/abelloni/c/30bb1ce71215
Best regards,
Signature · 8 lines
Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com -- linux-i3c mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-i3c