arch/arm64/boot/dts/freescale/imx95.dtsi | 1 + drivers/misc/pci_endpoint_test.c | 82 ++++++++++++ drivers/pci/controller/dwc/pci-imx6.c | 25 ++-- drivers/pci/endpoint/Makefile | 1 + drivers/pci/endpoint/functions/pci-epf-test.c | 142 +++++++++++++++++++++ drivers/pci/endpoint/pci-ep-msi.c | 90 +++++++++++++ drivers/pci/endpoint/pci-epf-core.c | 48 +++++++ include/linux/pci-ep-msi.h | 28 ++++ include/linux/pci-epf.h | 21 +++ include/uapi/linux/pcitest.h | 1 + .../selftests/pci_endpoint/pci_endpoint_test.c | 28 ++++ 11 files changed, 459 insertions(+), 8 deletions(-)
┌────────────┐ ┌───────────────────────────────────┐ ┌────────────────┐ │ │ │ │ │ │ │ │ │ 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@nxp.com/ 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. Previous v2 discussion here. https://lore.kernel.org/imx/20230911220920.1817033-1-Frank.Li@nxp.com/ Changes in v19: - irq part already in v6.16-rc1, only missed pcie/dts part - rebase to v6.16-rc1 - update commit message for patch IMMUTABLE check. - Link to v18: https://lore.kernel.org/r/20250414-ep-msi-v18-0-f69b49917464@nxp.com Changes in v18: - pci-ep.yaml: sort property order, fix maxvalue to 0x7ffff for msi-map-mask and iommu-map-mask - Link to v17: https://lore.kernel.org/r/20250407-ep-msi-v17-0-633ab45a31d0@nxp.com Changes in v17: - move document part to pci-ep.yaml - Link to v16: https://lore.kernel.org/r/20250404-ep-msi-v16-0-d4919d68c0d0@nxp.com Changes in v16: - remove arm64: dts: imx95-19x19-evk: Add PCIe1 endpoint function overlay file because there are better patches, which under review. - Add document for pcie-ep msi-map usage - other change to see each patch's change log About IMMUTABLE (No change for this part, tglx provide feedback) > - This IMMUTABLE thing serves no purpose, because you don't randomly > plug this end-point block on any MSI controller. They come as part > of an SoC. "Yes and no. The problem is that the EP implementation is meant to be a generic library and while GIC-ITS guarantees immutability of the address/data pair after setup, there are architectures (x86, loongson, riscv) where the base MSI controller does not and immutability is only achieved when interrupt remapping is enabled. The latter can be disabled at boot-time and then the EP implementation becomes a lottery across affinity changes. That was my concern about this library implementation and that's why I asked for a mechanism to ensure that the underlying irqdomain provides a immutable address/data pair. So it does not matter for GIC-ITS, but in the larger picture it matters. Thanks, tglx " So it does not matter for GIC-ITS, but in the larger picture it matters. - Link to v15: https://lore.kernel.org/r/20250211-ep-msi-v15-0-bcacc1f2b1a9@nxp.com Changes in v15: - rebase to v6.14-rc1 - fix build issue find by kernel test robot - Link to v14: https://lore.kernel.org/r/20250207-ep-msi-v14-0-9671b136f2b8@nxp.com Changes in v14: Marc Zyngier raised concerns about adding DOMAIN_BUS_DEVICE_PCI_EP_MSI. As a result, the approach has been reverted to the v9 method. However, there are several improvements: MSI now supports msi-map in addition to msi-parent. - The struct device: id is used as the endpoint function (EPF) device identity to map to the stream ID (sideband information). - The EPC device tree source (DTS) utilizes msi-map to provide such information. - The EPF device's of_node is set to the EPC controller’s node. This approach is commonly used for multi-function device (MFD) platform child devices, allowing them to inherit properties from the MFD device’s DTS, such as reset-cells and gpio-cells. This method is well-suited for the current case, as the EPF is inherently created/binded to the EPC and should inherit the EPC’s DTS node properties. Additionally: Since the basic IMX95 LUT support has already been merged into the mainline, a DTS and driver increment patch is added to complete the solution. The patch is rebased onto the latest linux-next tree and aligned with the new pcitest framework. - Link to v13: https://lore.kernel.org/r/20241218-ep-msi-v13-0-646e2192dc24@nxp.com Changes in v13: - Change to use DOMAIN_BUS_PCI_DEVICE_EP_MSI - Change request id as func | vfunc << 3 - Remove IRQ_DOMAIN_MSI_IMMUTABLE Thomas Gleixner: I hope capture all your points in review comments. If missed, let me know. - Link to v12: https://lore.kernel.org/r/20241211-ep-msi-v12-0-33d4532fa520@nxp.com Changes in v12: - Change to use IRQ_DOMAIN_MSI_IMMUTABLE and add help function irq_domain_msi_is_immuatble(). - split PCI: endpoint: pci-ep-msi: Add MSI address/data pair mutable check to 3 patches - Link to v11: https://lore.kernel.org/r/20241209-ep-msi-v11-0-7434fa8397bd@nxp.com Changes in v11: - Change to use MSI_FLAG_MSG_IMMUTABLE - Link to v10: https://lore.kernel.org/r/20241204-ep-msi-v10-0-87c378dbcd6d@nxp.com Changes in v10: Thomas Gleixner: There are big change in pci-ep-msi.c. I am sure if go on the corrent path. The key improvement is remove only 1 function devices's limitation. I use new patch for imutable check, which relative additional feature compared to base enablement patch. - Remove patch Add msi_remove_device_irq_domain() in platform_device_msi_free_irqs_all() - Add new patch irqchip/gic-v3-its: Avoid overwriting msi_prepare callback if provided by msi_domain_info - Remove only support 1 endpoint function limiation. - Create one MSI domain for each endpoint function devices. - Use "msi-map" in pci ep controler node, instead of of msi-parent. first argument is (func_no << 8 | vfunc_no) - Link to v9: https://lore.kernel.org/r/20241203-ep-msi-v9-0-a60dbc3f15dd@nxp.com Changes in v9 - Add patch platform-msi: Add msi_remove_device_irq_domain() in platform_device_msi_free_irqs_all() - Remove patch PCI: endpoint: Add pci_epc_get_fn() API for customizable filtering - Remove API pci_epf_align_inbound_addr_lo_hi - Move doorbell_alloc in to doorbell_enable function. - Link to v8: https://lore.kernel.org/r/20241116-ep-msi-v8-0-6f1f68ffd1bb@nxp.com Changes in v8: - update helper function name to pci_epf_align_inbound_addr() - Link to v7: https://lore.kernel.org/r/20241114-ep-msi-v7-0-d4ac7aafbd2c@nxp.com Changes in v7: - Add helper function pci_epf_align_addr(); - Link to v6: https://lore.kernel.org/r/20241112-ep-msi-v6-0-45f9722e3c2a@nxp.com Changes in v6: - change doorbell_addr to doorbell_offset - use round_down() - add Niklas's test by tag - rebase to pci/endpoint - Link to v5: https://lore.kernel.org/r/20241108-ep-msi-v5-0-a14951c0d007@nxp.com Changes in v5: - Move request_irq to epf test function driver for more flexiable user case - Add fixed size bar handler - Some minor improvememtn to see each patches's changelog. - Link to v4: https://lore.kernel.org/r/20241031-ep-msi-v4-0-717da2d99b28@nxp.com Changes in v4: - Remove patch genirq/msi: Add cleanup guard define for msi_lock_descs()/msi_unlock_descs() - Use new method to avoid compatible problem. Add new command DOORBELL_ENABLE and DOORBELL_DISABLE. pcitest -B send DOORBELL_ENABLE first, EP test function driver try to remap one of BAR_N (except test register bar) to ITS MSI MMIO space. Old driver don't support new command, so failure return, not side effect. After test, DOORBELL_DISABLE command send out to recover original map, so pcitest bar test can pass as normal. - Other detail change see each patches's change log - Link to v3: https://lore.kernel.org/r/20241015-ep-msi-v3-0-cedc89a16c1a@nxp.com Change from v2 to v3 - Fixed manivannan's comments - Move common part to pci-ep-msi.c and pci-ep-msi.h - rebase to 6.12-rc1 - use RevID to distingiush old version mkdir /sys/kernel/config/pci_ep/functions/pci_epf_test/func1 echo 16 > /sys/kernel/config/pci_ep/functions/pci_epf_test/func1/msi_interrupts echo 0x080c > /sys/kernel/config/pci_ep/functions/pci_epf_test/func1/deviceid echo 0x1957 > /sys/kernel/config/pci_ep/functions/pci_epf_test/func1/vendorid echo 1 > /sys/kernel/config/pci_ep/functions/pci_epf_test/func1/revid ^^^^^^ to enable platform msi support. ln -s /sys/kernel/config/pci_ep/functions/pci_epf_test/func1 /sys/kernel/config/pci_ep/controllers/4c380000.pcie-ep - use new device ID, which identify support doorbell to avoid broken compatility. Enable doorbell support only for PCI_DEVICE_ID_IMX8_DB, while other devices keep the same behavior as before. EP side RC with old driver RC with new driver PCI_DEVICE_ID_IMX8_DB no probe doorbell enabled Other device ID doorbell disabled* doorbell disabled* * Behavior remains unchanged. 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. Signed-off-by: Frank Li <Frank.Li@nxp.com> --- Frank Li (10): PCI: endpoint: Set ID and of_node for function driver PCI: endpoint: Add RC-to-EP doorbell support using platform MSI controller PCI: endpoint: pci-ep-msi: Add MSI address/data pair mutable check PCI: endpoint: Add pci_epf_align_inbound_addr() helper for address alignment PCI: endpoint: pci-epf-test: Add doorbell test support misc: pci_endpoint_test: Add doorbell test case selftests: pci_endpoint: Add doorbell test case pci: imx6: Add helper function imx_pcie_add_lut_by_rid() pci: imx6: Add LUT setting for MSI/IOMMU in Endpoint mode arm64: dts: imx95: Add msi-map for pci-ep device arch/arm64/boot/dts/freescale/imx95.dtsi | 1 + drivers/misc/pci_endpoint_test.c | 82 ++++++++++++ drivers/pci/controller/dwc/pci-imx6.c | 25 ++-- drivers/pci/endpoint/Makefile | 1 + drivers/pci/endpoint/functions/pci-epf-test.c | 142 +++++++++++++++++++++ drivers/pci/endpoint/pci-ep-msi.c | 90 +++++++++++++ drivers/pci/endpoint/pci-epf-core.c | 48 +++++++ include/linux/pci-ep-msi.h | 28 ++++ include/linux/pci-epf.h | 21 +++ include/uapi/linux/pcitest.h | 1 + .../selftests/pci_endpoint/pci_endpoint_test.c | 28 ++++ 11 files changed, 459 insertions(+), 8 deletions(-) --- base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 change-id: 20241010-ep-msi-8b4cab33b1be Best regards, --- Frank Li <Frank.Li@nxp.com>
On Mon, Jun 09, 2025 at 12:34:12PM GMT, Frank Li wrote: > ┌────────────┐ ┌───────────────────────────────────┐ ┌────────────────┐ > │ │ │ │ │ │ > │ │ │ 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@nxp.com/ > > 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. > Frank, thanks for your persistence in pushing this series, really appreciated! I've left some comments, but no real blocker. Unfortunately, I don't have access to my endpoint setup right now. So I'll go ahead with the Tested-by tag from Niklas once my comments are addressed. - Mani > Previous v2 discussion here. > https://lore.kernel.org/imx/20230911220920.1817033-1-Frank.Li@nxp.com/ > > Changes in v19: > - irq part already in v6.16-rc1, only missed pcie/dts part > - rebase to v6.16-rc1 > - update commit message for patch IMMUTABLE check. > - Link to v18: https://lore.kernel.org/r/20250414-ep-msi-v18-0-f69b49917464@nxp.com > > Changes in v18: > - pci-ep.yaml: sort property order, fix maxvalue to 0x7ffff for msi-map-mask and > iommu-map-mask > - Link to v17: https://lore.kernel.org/r/20250407-ep-msi-v17-0-633ab45a31d0@nxp.com > > Changes in v17: > - move document part to pci-ep.yaml > - Link to v16: https://lore.kernel.org/r/20250404-ep-msi-v16-0-d4919d68c0d0@nxp.com > > Changes in v16: > - remove arm64: dts: imx95-19x19-evk: Add PCIe1 endpoint function overlay file > because there are better patches, which under review. > - Add document for pcie-ep msi-map usage > - other change to see each patch's change log > About IMMUTABLE (No change for this part, tglx provide feedback) > > - This IMMUTABLE thing serves no purpose, because you don't randomly > > plug this end-point block on any MSI controller. They come as part > > of an SoC. > > "Yes and no. The problem is that the EP implementation is meant to be a > generic library and while GIC-ITS guarantees immutability of the > address/data pair after setup, there are architectures (x86, loongson, > riscv) where the base MSI controller does not and immutability is only > achieved when interrupt remapping is enabled. The latter can be disabled > at boot-time and then the EP implementation becomes a lottery across > affinity changes. > > That was my concern about this library implementation and that's why I > asked for a mechanism to ensure that the underlying irqdomain provides a > immutable address/data pair. > > So it does not matter for GIC-ITS, but in the larger picture it matters. > > Thanks, > > tglx > " > > So it does not matter for GIC-ITS, but in the larger picture it matters. > > - Link to v15: https://lore.kernel.org/r/20250211-ep-msi-v15-0-bcacc1f2b1a9@nxp.com > > Changes in v15: > - rebase to v6.14-rc1 > - fix build issue find by kernel test robot > - Link to v14: https://lore.kernel.org/r/20250207-ep-msi-v14-0-9671b136f2b8@nxp.com > > Changes in v14: > Marc Zyngier raised concerns about adding DOMAIN_BUS_DEVICE_PCI_EP_MSI. As > a result, the approach has been reverted to the v9 method. However, there > are several improvements: > > MSI now supports msi-map in addition to msi-parent. > - The struct device: id is used as the endpoint function (EPF) device > identity to map to the stream ID (sideband information). > - The EPC device tree source (DTS) utilizes msi-map to provide such > information. > - The EPF device's of_node is set to the EPC controller’s node. This > approach is commonly used for multi-function device (MFD) platform child > devices, allowing them to inherit properties from the MFD device’s DTS, > such as reset-cells and gpio-cells. This method is well-suited for the > current case, as the EPF is inherently created/binded to the EPC and > should inherit the EPC’s DTS node properties. > > Additionally: > > Since the basic IMX95 LUT support has already been merged into the > mainline, a DTS and driver increment patch is added to complete the > solution. The patch is rebased onto the latest linux-next tree and > aligned with the new pcitest framework. > > - Link to v13: https://lore.kernel.org/r/20241218-ep-msi-v13-0-646e2192dc24@nxp.com > > Changes in v13: > - Change to use DOMAIN_BUS_PCI_DEVICE_EP_MSI > - Change request id as func | vfunc << 3 > - Remove IRQ_DOMAIN_MSI_IMMUTABLE > > Thomas Gleixner: > > I hope capture all your points in review comments. If missed, let me know. > > - Link to v12: https://lore.kernel.org/r/20241211-ep-msi-v12-0-33d4532fa520@nxp.com > > Changes in v12: > - Change to use IRQ_DOMAIN_MSI_IMMUTABLE and add help function > irq_domain_msi_is_immuatble(). > - split PCI: endpoint: pci-ep-msi: Add MSI address/data pair mutable check to 3 patches > - Link to v11: https://lore.kernel.org/r/20241209-ep-msi-v11-0-7434fa8397bd@nxp.com > > Changes in v11: > - Change to use MSI_FLAG_MSG_IMMUTABLE > - Link to v10: https://lore.kernel.org/r/20241204-ep-msi-v10-0-87c378dbcd6d@nxp.com > > Changes in v10: > > Thomas Gleixner: > There are big change in pci-ep-msi.c. I am sure if go on the > corrent path. The key improvement is remove only 1 function devices's > limitation. > > I use new patch for imutable check, which relative additional > feature compared to base enablement patch. > > - Remove patch Add msi_remove_device_irq_domain() in platform_device_msi_free_irqs_all() > - Add new patch irqchip/gic-v3-its: Avoid overwriting msi_prepare callback if provided by msi_domain_info > - Remove only support 1 endpoint function limiation. > - Create one MSI domain for each endpoint function devices. > - Use "msi-map" in pci ep controler node, instead of of msi-parent. first > argument is > (func_no << 8 | vfunc_no) > > - Link to v9: https://lore.kernel.org/r/20241203-ep-msi-v9-0-a60dbc3f15dd@nxp.com > > Changes in v9 > - Add patch platform-msi: Add msi_remove_device_irq_domain() in platform_device_msi_free_irqs_all() > - Remove patch PCI: endpoint: Add pci_epc_get_fn() API for customizable filtering > - Remove API pci_epf_align_inbound_addr_lo_hi > - Move doorbell_alloc in to doorbell_enable function. > - Link to v8: https://lore.kernel.org/r/20241116-ep-msi-v8-0-6f1f68ffd1bb@nxp.com > > Changes in v8: > - update helper function name to pci_epf_align_inbound_addr() > - Link to v7: https://lore.kernel.org/r/20241114-ep-msi-v7-0-d4ac7aafbd2c@nxp.com > > Changes in v7: > - Add helper function pci_epf_align_addr(); > - Link to v6: https://lore.kernel.org/r/20241112-ep-msi-v6-0-45f9722e3c2a@nxp.com > > Changes in v6: > - change doorbell_addr to doorbell_offset > - use round_down() > - add Niklas's test by tag > - rebase to pci/endpoint > - Link to v5: https://lore.kernel.org/r/20241108-ep-msi-v5-0-a14951c0d007@nxp.com > > Changes in v5: > - Move request_irq to epf test function driver for more flexiable user case > - Add fixed size bar handler > - Some minor improvememtn to see each patches's changelog. > - Link to v4: https://lore.kernel.org/r/20241031-ep-msi-v4-0-717da2d99b28@nxp.com > > Changes in v4: > - Remove patch genirq/msi: Add cleanup guard define for msi_lock_descs()/msi_unlock_descs() > - Use new method to avoid compatible problem. > Add new command DOORBELL_ENABLE and DOORBELL_DISABLE. > pcitest -B send DOORBELL_ENABLE first, EP test function driver try to > remap one of BAR_N (except test register bar) to ITS MSI MMIO space. Old > driver don't support new command, so failure return, not side effect. > After test, DOORBELL_DISABLE command send out to recover original map, so > pcitest bar test can pass as normal. > - Other detail change see each patches's change log > - Link to v3: https://lore.kernel.org/r/20241015-ep-msi-v3-0-cedc89a16c1a@nxp.com > > Change from v2 to v3 > - Fixed manivannan's comments > - Move common part to pci-ep-msi.c and pci-ep-msi.h > - rebase to 6.12-rc1 > - use RevID to distingiush old version > > mkdir /sys/kernel/config/pci_ep/functions/pci_epf_test/func1 > echo 16 > /sys/kernel/config/pci_ep/functions/pci_epf_test/func1/msi_interrupts > echo 0x080c > /sys/kernel/config/pci_ep/functions/pci_epf_test/func1/deviceid > echo 0x1957 > /sys/kernel/config/pci_ep/functions/pci_epf_test/func1/vendorid > echo 1 > /sys/kernel/config/pci_ep/functions/pci_epf_test/func1/revid > ^^^^^^ to enable platform msi support. > ln -s /sys/kernel/config/pci_ep/functions/pci_epf_test/func1 /sys/kernel/config/pci_ep/controllers/4c380000.pcie-ep > > - use new device ID, which identify support doorbell to avoid broken > compatility. > > Enable doorbell support only for PCI_DEVICE_ID_IMX8_DB, while other devices > keep the same behavior as before. > > EP side RC with old driver RC with new driver > PCI_DEVICE_ID_IMX8_DB no probe doorbell enabled > Other device ID doorbell disabled* doorbell disabled* > > * Behavior remains unchanged. > > 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. > > Signed-off-by: Frank Li <Frank.Li@nxp.com> > --- > Frank Li (10): > PCI: endpoint: Set ID and of_node for function driver > PCI: endpoint: Add RC-to-EP doorbell support using platform MSI controller > PCI: endpoint: pci-ep-msi: Add MSI address/data pair mutable check > PCI: endpoint: Add pci_epf_align_inbound_addr() helper for address alignment > PCI: endpoint: pci-epf-test: Add doorbell test support > misc: pci_endpoint_test: Add doorbell test case > selftests: pci_endpoint: Add doorbell test case > pci: imx6: Add helper function imx_pcie_add_lut_by_rid() > pci: imx6: Add LUT setting for MSI/IOMMU in Endpoint mode > arm64: dts: imx95: Add msi-map for pci-ep device > > arch/arm64/boot/dts/freescale/imx95.dtsi | 1 + > drivers/misc/pci_endpoint_test.c | 82 ++++++++++++ > drivers/pci/controller/dwc/pci-imx6.c | 25 ++-- > drivers/pci/endpoint/Makefile | 1 + > drivers/pci/endpoint/functions/pci-epf-test.c | 142 +++++++++++++++++++++ > drivers/pci/endpoint/pci-ep-msi.c | 90 +++++++++++++ > drivers/pci/endpoint/pci-epf-core.c | 48 +++++++ > include/linux/pci-ep-msi.h | 28 ++++ > include/linux/pci-epf.h | 21 +++ > include/uapi/linux/pcitest.h | 1 + > .../selftests/pci_endpoint/pci_endpoint_test.c | 28 ++++ > 11 files changed, 459 insertions(+), 8 deletions(-) > --- > base-commit: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494 > change-id: 20241010-ep-msi-8b4cab33b1be > > Best regards, > --- > Frank Li <Frank.Li@nxp.com> > -- மணிவண்ணன் சதாசிவம்
On Wed, Jul 02, 2025 at 06:57:23PM +0530, Manivannan Sadhasivam wrote: > On Mon, Jun 09, 2025 at 12:34:12PM GMT, Frank Li wrote: > > Frank, thanks for your persistence in pushing this series, really appreciated! > I've left some comments, but no real blocker. > > Unfortunately, I don't have access to my endpoint setup right now. So I'll go > ahead with the Tested-by tag from Niklas once my comments are addressed. (snip) > > Changes in v6: > > - add Niklas's test by tag My Tested-by tag was added on v6, now it is v19 :) To be comfortable of still having my Tested-by tag here, I decided to test v19. However I got this: [ 3255.257047] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000040 [ 3255.257824] Mem abort info: [ 3255.258069] ESR = 0x0000000096000004 [ 3255.258398] EC = 0x25: DABT (current EL), IL = 32 bits [ 3255.258862] SET = 0, FnV = 0 [ 3255.259147] EA = 0, S1PTW = 0 [ 3255.259423] FSC = 0x04: level 0 translation fault [ 3255.259849] Data abort info: [ 3255.260102] ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000 [ 3255.260580] CM = 0, WnR = 0, TnD = 0, TagAccess = 0 [ 3255.261020] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 [ 3255.261483] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000100a03000 [ 3255.262045] [0000000000000040] pgd=0000000000000000, p4d=0000000000000000 [ 3255.262639] Internal error: Oops: 0000000096000004 [#1] SMP [ 3255.263132] Modules linked in: rk805_pwrkey hantro_vpu v4l2_jpeg v4l2_vp9 v4l2_h264 v4l2_mem2mem videobuf2_v4l2 videobuf2_dma_contig videobuf2_memops videobuf2_common vidf [ 3255.265357] CPU: 5 UID: 0 PID: 213 Comm: ln Not tainted 6.16.0-rc1+ #233 PREEMPT [ 3255.266009] Hardware name: Radxa ROCK 5B (DT) [ 3255.266388] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 3255.266995] pc : pci_epf_bind+0x160/0x240 [ 3255.267350] lr : pci_epf_bind+0x40/0x240 [ 3255.267694] sp : ffff800081593c30 [ 3255.267983] x29: ffff800081593c30 x28: ffff0001024b2300 x27: ffff000102fc2800 [ 3255.268606] x26: ffff00010191e000 x25: ffff000100504098 x24: ffff000107b8ec80 [ 3255.269228] x23: ffff000104cf3578 x22: 0000000000000000 x21: 0000000000000000 [ 3255.269850] x20: ffff000104cf3000 x19: ffff000104cf3578 x18: 0000000000000000 [ 3255.270472] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 [ 3255.271093] x14: 0000000000000000 x13: ffff00010245c037 x12: ffff800081593b94 [ 3255.271715] x11: 0000000528aa6179 x10: 0000000000000002 x9 : ffffa2593ce92b30 [ 3255.272336] x8 : 00000031636e7566 x7 : 00000000ffffbe12 x6 : 0000000000000003 [ 3255.272958] x5 : ffff000102413f78 x4 : ffff000102413f08 x3 : 0000000000000000 [ 3255.273580] x2 : ffff0001024b2300 x1 : 0000000000000000 x0 : ffff000104cf3000 [ 3255.274201] Call trace: [ 3255.274416] pci_epf_bind+0x160/0x240 (P) [ 3255.274767] pci_epc_epf_link+0x54/0xb0 [ 3255.275104] configfs_symlink+0x208/0x540 [ 3255.275457] vfs_symlink+0x158/0x1e0 [ 3255.275770] do_symlinkat+0x8c/0x138 [ 3255.276083] __arm64_sys_symlinkat+0x7c/0xc8 [ 3255.276455] invoke_syscall.constprop.0+0x48/0x100 [ 3255.276874] el0_svc_common.constprop.0+0x40/0xe8 [ 3255.277285] do_el0_svc+0x24/0x38 [ 3255.277575] el0_svc+0x34/0x100 [ 3255.277852] el0t_64_sync_handler+0x10c/0x140 [ 3255.278233] el0t_64_sync+0x198/0x1a0 [ 3255.278554] Code: a9446bf9 394ff280 b902aa80 aa1403e0 (f94022a1) [ 3255.279085] ---[ end trace 0000000000000000 ]--- Seems to be from patch 1/10: (gdb) l *(pci_epf_bind+0x160) 0xffff800080892c50 is in pci_epf_bind (drivers/pci/endpoint/pci-epf-core.c:132). 127 goto ret; 128 epf_vf->is_bound = true; 129 } 130 131 epf->dev.id = PCI_EPF_DEVID(epf->func_no, 0); 132 device_set_of_node_from_dev(&epf->dev, epc->dev.parent); 133 ret = epf->driver->ops->bind(epf); 134 if (ret) 135 goto ret; 136 epf->is_bound = true; I can see that there is a lot of discussion on patch 1/10 already, but please drop my Tested-by tag until this has been fixed. Feel free to CC me on v20 of this series, if the problem is fixed, I will provide my Tested-by tag once again. Kind regards, Niklas
On Tue, Jul 08, 2025 at 01:12:02PM GMT, Niklas Cassel wrote: > On Wed, Jul 02, 2025 at 06:57:23PM +0530, Manivannan Sadhasivam wrote: > > On Mon, Jun 09, 2025 at 12:34:12PM GMT, Frank Li wrote: > > > > Frank, thanks for your persistence in pushing this series, really appreciated! > > I've left some comments, but no real blocker. > > > > Unfortunately, I don't have access to my endpoint setup right now. So I'll go > > ahead with the Tested-by tag from Niklas once my comments are addressed. > > (snip) > > > > Changes in v6: > > > - add Niklas's test by tag > > My Tested-by tag was added on v6, now it is v19 :) > Ouch! > To be comfortable of still having my Tested-by tag here, > I decided to test v19. > > However I got this: > > [ 3255.257047] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000040 Very well... thanks for testing it. I will also try to get hold of the device in the meantime. - Mani > [ 3255.257824] Mem abort info: > [ 3255.258069] ESR = 0x0000000096000004 > [ 3255.258398] EC = 0x25: DABT (current EL), IL = 32 bits > [ 3255.258862] SET = 0, FnV = 0 > [ 3255.259147] EA = 0, S1PTW = 0 > [ 3255.259423] FSC = 0x04: level 0 translation fault > [ 3255.259849] Data abort info: > [ 3255.260102] ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000 > [ 3255.260580] CM = 0, WnR = 0, TnD = 0, TagAccess = 0 > [ 3255.261020] GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0 > [ 3255.261483] user pgtable: 4k pages, 48-bit VAs, pgdp=0000000100a03000 > [ 3255.262045] [0000000000000040] pgd=0000000000000000, p4d=0000000000000000 > [ 3255.262639] Internal error: Oops: 0000000096000004 [#1] SMP > [ 3255.263132] Modules linked in: rk805_pwrkey hantro_vpu v4l2_jpeg v4l2_vp9 v4l2_h264 v4l2_mem2mem videobuf2_v4l2 videobuf2_dma_contig videobuf2_memops videobuf2_common vidf > [ 3255.265357] CPU: 5 UID: 0 PID: 213 Comm: ln Not tainted 6.16.0-rc1+ #233 PREEMPT > [ 3255.266009] Hardware name: Radxa ROCK 5B (DT) > [ 3255.266388] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) > [ 3255.266995] pc : pci_epf_bind+0x160/0x240 > [ 3255.267350] lr : pci_epf_bind+0x40/0x240 > [ 3255.267694] sp : ffff800081593c30 > [ 3255.267983] x29: ffff800081593c30 x28: ffff0001024b2300 x27: ffff000102fc2800 > [ 3255.268606] x26: ffff00010191e000 x25: ffff000100504098 x24: ffff000107b8ec80 > [ 3255.269228] x23: ffff000104cf3578 x22: 0000000000000000 x21: 0000000000000000 > [ 3255.269850] x20: ffff000104cf3000 x19: ffff000104cf3578 x18: 0000000000000000 > [ 3255.270472] x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000 > [ 3255.271093] x14: 0000000000000000 x13: ffff00010245c037 x12: ffff800081593b94 > [ 3255.271715] x11: 0000000528aa6179 x10: 0000000000000002 x9 : ffffa2593ce92b30 > [ 3255.272336] x8 : 00000031636e7566 x7 : 00000000ffffbe12 x6 : 0000000000000003 > [ 3255.272958] x5 : ffff000102413f78 x4 : ffff000102413f08 x3 : 0000000000000000 > [ 3255.273580] x2 : ffff0001024b2300 x1 : 0000000000000000 x0 : ffff000104cf3000 > [ 3255.274201] Call trace: > [ 3255.274416] pci_epf_bind+0x160/0x240 (P) > [ 3255.274767] pci_epc_epf_link+0x54/0xb0 > [ 3255.275104] configfs_symlink+0x208/0x540 > [ 3255.275457] vfs_symlink+0x158/0x1e0 > [ 3255.275770] do_symlinkat+0x8c/0x138 > [ 3255.276083] __arm64_sys_symlinkat+0x7c/0xc8 > [ 3255.276455] invoke_syscall.constprop.0+0x48/0x100 > [ 3255.276874] el0_svc_common.constprop.0+0x40/0xe8 > [ 3255.277285] do_el0_svc+0x24/0x38 > [ 3255.277575] el0_svc+0x34/0x100 > [ 3255.277852] el0t_64_sync_handler+0x10c/0x140 > [ 3255.278233] el0t_64_sync+0x198/0x1a0 > [ 3255.278554] Code: a9446bf9 394ff280 b902aa80 aa1403e0 (f94022a1) > [ 3255.279085] ---[ end trace 0000000000000000 ]--- > > > Seems to be from patch 1/10: > > (gdb) l *(pci_epf_bind+0x160) > 0xffff800080892c50 is in pci_epf_bind (drivers/pci/endpoint/pci-epf-core.c:132). > 127 goto ret; > 128 epf_vf->is_bound = true; > 129 } > 130 > 131 epf->dev.id = PCI_EPF_DEVID(epf->func_no, 0); > 132 device_set_of_node_from_dev(&epf->dev, epc->dev.parent); > 133 ret = epf->driver->ops->bind(epf); > 134 if (ret) > 135 goto ret; > 136 epf->is_bound = true; > > > I can see that there is a lot of discussion on patch 1/10 already, > but please drop my Tested-by tag until this has been fixed. > > Feel free to CC me on v20 of this series, if the problem is fixed, > I will provide my Tested-by tag once again. > > > Kind regards, > Niklas -- மணிவண்ணன் சதாசிவம்
© 2016 - 2025 Red Hat, Inc.