[PATCH v2 0/5] Add RC-to-EP doorbell with platform MSI controller

From: Frank Li
Date: Mon Sep 11 2023 - 21:48:10 EST


┌────────────┐ ┌───────────────────────────────────┐ ┌────────────────┐
│ │ │ │ │ │
│ │ │ PCI Endpoint │ │ PCI Host │
│ │ │ │ │ │
│ │◄──┤ 1.platform_msi_domain_alloc_irqs()│ │ │
│ │ │ │ │ │
│ MSI ├──►│ 2.write_msi_msg() ├──►├─BAR<n> │
│ Controller │ │ update doorbell register address│ │ │
│ │ │ for BAR │ │ │
│ │ │ │ │ 3. Write BAR<n>│
│ │◄──┼───────────────────────────────────┼───┤ │
│ │ │ │ │ │
│ ├──►│ 4.Irq Handle │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
└────────────┘ └───────────────────────────────────┘ └────────────────┘

This patches based on old https://lore.kernel.org/imx/20221124055036.1630573-1-Frank.Li@xxxxxxx/

Original patch only target to vntb driver. But actually it is common
method.

This patches add new API to pci-epf-core, so any EP driver can use it.

The key point is comments from Thomas Gleixner, who suggest use new
PCI/IMS. But arm platform change still not be merged yet.

git://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git devmsi-v2-arm

So I still use existed method implement RC to EP doorbell.

If Thomas Gleixner want to continue work on devmsi-v2-arm, I can help test
and update this patch.

Change from v1 to v2
- Add missed patch for endpont/pci-epf-test.c
- Move alloc and free to epc driver from epf.
- Provide general help function for EPC driver to alloc platform msi irq.
- Fixed manivannan's comments.

Frank Li (5):
PCI: endpoint: Add RC-to-EP doorbell support using platform MSI
controller
PCI: dwc: add doorbell support by use MSI controller
PCI: endpoint: pci-epf-test: add doorbell test
misc: pci_endpoint_test: Add doorbell test case
tools: PCI: Add 'B' option for test doorbell

drivers/misc/pci_endpoint_test.c | 48 +++++
.../pci/controller/dwc/pcie-designware-ep.c | 2 +
drivers/pci/endpoint/functions/pci-epf-test.c | 59 +++++-
drivers/pci/endpoint/pci-epc-core.c | 192 ++++++++++++++++++
drivers/pci/endpoint/pci-epf-core.c | 44 ++++
include/linux/pci-epc.h | 6 +
include/linux/pci-epf.h | 7 +
include/uapi/linux/pcitest.h | 1 +
tools/pci/pcitest.c | 16 +-
9 files changed, 373 insertions(+), 2 deletions(-)

--
2.34.1