Currently, the VFIO DSA driver test only supports the SPR DSA device ID.
Attempting to run the test on newer platforms like DMR or GNR-D results
in a "No driver found" error, causing the test to be skipped.

Refactor the 'dsa_probe' function to use a switch statement for
checking device IDs. This improves maintainability and makes it easier
to add new device IDs in the future.

Add the following DSA device IDs to the supported list:
PCI_DEVICE_ID_INTEL_DSA_DMR  (0x1212)
PCI_DEVICE_ID_INTEL_DSA_GNRD (0x11fb)

Signed-off-by: Yi Lai <[email protected]>
---
 .../selftests/vfio/lib/drivers/dsa/dsa.c        | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/vfio/lib/drivers/dsa/dsa.c 
b/tools/testing/selftests/vfio/lib/drivers/dsa/dsa.c
index c75045bcab79..0cbc7606d904 100644
--- a/tools/testing/selftests/vfio/lib/drivers/dsa/dsa.c
+++ b/tools/testing/selftests/vfio/lib/drivers/dsa/dsa.c
@@ -65,10 +65,23 @@ static bool dsa_int_handle_request_required(struct 
vfio_pci_device *device)
 
 static int dsa_probe(struct vfio_pci_device *device)
 {
-       if (!vfio_pci_device_match(device, PCI_VENDOR_ID_INTEL,
-                                  PCI_DEVICE_ID_INTEL_DSA_SPR0))
+       u16 vendor, device_id;
+
+       vendor = vfio_pci_config_readw(device, PCI_VENDOR_ID);
+       device_id = vfio_pci_config_readw(device, PCI_DEVICE_ID);
+
+       if (vendor != PCI_VENDOR_ID_INTEL)
                return -EINVAL;
 
+       switch (device_id) {
+       case PCI_DEVICE_ID_INTEL_DSA_SPR0:
+       case PCI_DEVICE_ID_INTEL_DSA_DMR:
+       case PCI_DEVICE_ID_INTEL_DSA_GNRD:
+               break;
+       default:
+               return -EINVAL;
+       }
+
        if (dsa_int_handle_request_required(device)) {
                dev_err(device, "Device requires requesting interrupt 
handles\n");
                return -EINVAL;
-- 
2.43.0


Reply via email to