summaryrefslogtreecommitdiff
path: root/drivers/misc
diff options
context:
space:
mode:
authorKoichiro Den <den@valinux.co.jp>2026-02-16 00:03:33 +0900
committerManivannan Sadhasivam <mani@kernel.org>2026-02-24 16:00:50 +0530
commit51fba4aa66192fa65a31f213218167d9af326f1e (patch)
tree9bbe318c6a06f02bebc8f7b70eb5e97fc465f91d /drivers/misc
parent9a940a3d08b25cf8e864785ee06b65756d6e4573 (diff)
downloadlinux-next-51fba4aa66192fa65a31f213218167d9af326f1e.tar.gz
linux-next-51fba4aa66192fa65a31f213218167d9af326f1e.zip
misc: pci_endpoint_test: Gate doorbell test on dynamic inbound mapping
The doorbell test relies on the endpoint being able to update inbound translations at runtime so the host can reach the doorbell target through a BAR mapping. If the endpoint does not advertise CAP_DYNAMIC_INBOUND_MAPPING, return -EOPNOTSUPP from PCITEST_DOORBELL. This avoids confusing failures in user space and kselftests when the required capability is not available. Suggested-by: Niklas Cassel <cassel@kernel.org> Signed-off-by: Koichiro Den <den@valinux.co.jp> Signed-off-by: Manivannan Sadhasivam <mani@kernel.org> Reviewed-by: Niklas Cassel <cassel@kernel.org> Link: https://patch.msgid.link/20260215150334.3391943-3-den@valinux.co.jp
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/pci_endpoint_test.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c
index 74ab5b5b9011..93cd57d20881 100644
--- a/drivers/misc/pci_endpoint_test.c
+++ b/drivers/misc/pci_endpoint_test.c
@@ -84,6 +84,7 @@
#define CAP_MSIX BIT(2)
#define CAP_INTX BIT(3)
#define CAP_SUBRANGE_MAPPING BIT(4)
+#define CAP_DYNAMIC_INBOUND_MAPPING BIT(5)
#define PCI_ENDPOINT_TEST_DB_BAR 0x34
#define PCI_ENDPOINT_TEST_DB_OFFSET 0x38
@@ -1060,6 +1061,9 @@ static int pci_endpoint_test_doorbell(struct pci_endpoint_test *test)
u32 addr;
int left;
+ if (!(test->ep_caps & CAP_DYNAMIC_INBOUND_MAPPING))
+ return -EOPNOTSUPP;
+
if (irq_type < PCITEST_IRQ_TYPE_INTX ||
irq_type > PCITEST_IRQ_TYPE_MSIX) {
dev_err(dev, "Invalid IRQ type\n");