All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/8] selftests/vfio: igb: 82576 hardware compatibility
@ 2026-05-15 22:03 Alex Williamson
  2026-05-15 22:03 ` [PATCH 1/8] selftests/vfio: igb: Use PHY internal loopback on 82576 Alex Williamson
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Alex Williamson @ 2026-05-15 22:03 UTC (permalink / raw)
  To: jrhilke
  Cc: Alex Williamson, Alex Williamson, kvm, David Matlack,
	linux-kernel, Jason Gunthorpe

This series is based on Josh Hilke's initial igb selftest driver
posted as:

  https://lore.kernel.org/all/20260511211839.2781731-1-jrhilke@google.com/

That posting validated the driver against QEMU's emulated igb only; it
has not been tested on physical 82576 hardware.  Real 82576 silicon
rejects several of the shortcuts the submitted driver relies on (MAC
loopback, legacy TX descriptors, read-to-clear EICR, autoneg-based
link bring-up, and an unbounded fault-recovery story), and adding
real-hardware coverage is the goal here.

Two of the patches add accommodations specifically for QEMU's emulated
igb (which does not implement PHY-register-0 bit 14 and does not drive
STATUS.LU from CTRL.SLU) so that Josh's "run selftests without
hardware" workflow continues to work.  One of these (RCTL.LBM_MAC)
deviates from datasheet 8.10.1 guidance; empirically the bit has no
observable effect on real 82576 because MAC loopback is not
implemented (3.5.6.2).  See patch 1 for both rationales.

  1) selftests/vfio: igb: Use PHY internal loopback on 82576

     Replace MAC-loopback-via-RCTL.LBM_MAC and PHY autonegotiation with
     PHY internal loopback per datasheet 3.5.6.3.1.  Force the MAC link
     state via CTRL.FRCSPD/FRCDPX/SLU since the descriptor engine
     otherwise waits for a real negotiated link.  Keep RCTL.LBM_MAC
     (deviates from 8.10.1 guidance but empirically inert on real
     hardware per 3.5.6.2) and prefix the loopback setup with a
     one-shot autoneg-restart PHY write (the next PHY write clears
     autoneg-enable before autoneg can start, so this is a no-op on
     real silicon); both are required by QEMU's emulation.  Drop the
     dead igb_read_phy() and its now-unused macros.

  2) selftests/vfio: igb: Use advanced TX and RX descriptors

     Program SRRCTL.DESCTYPE for advanced one-buffer receive
     descriptors (datasheet 7.1.5.2, 8.10.2) and build advanced TX data
     descriptors with DEXT/DTYP/IFCS/EOP/PAYLEN (7.2.2.3) rather than
     the simplified legacy format the submitted driver used.  Drop the
     unused legacy TX descriptor macros.

  3) selftests/vfio: igb: Program MSI-X interrupt routing

     Configure GPIE.Multiple_MSIX and GPIE.EIAME (Table 7-47), EIAC
     and EIAM for vector 0 (8.8.5, 8.8.6), and switch EICR clearing
     from read-to-clear to write-to-clear (7.3.4.2 / 8.8.5 forbid
     reading EICR while EIAC is programmed).

  4) selftests/vfio: igb: Extend memcpy completion timeout for line-rate
     hardware

     The submitted 1 ms cap is well below the 32 ms line-rate floor for
     a 4 MB transfer at 1 Gb/s.  Bump to ~200 ms (6x margin).

  5) selftests/vfio: igb: Disable PCIe completion timeout retries

     Clear GCR.Completion_Timeout_Resend (datasheet 8.6.1) so the
     intentional unmapped-IOVA tests do not generate an unbounded
     stream of retried reads on real hardware.

  6) selftests/vfio: Add vfio_pci_irq_reenable() helper

     New libvfio helper that re-issues VFIO_DEVICE_SET_IRQS against
     existing eventfds, for drivers that recover from
     VFIO_DEVICE_RESET without disturbing user-side eventfds (and any
     fd a test fixture may have cached).

  7) selftests/vfio: igb: Factor hardware programming into igb_hw_init()

     Pure refactor splitting igb_init() into a one-shot outer
     (region-size check, BAR map, CTRL.RST, IMC, vfio_pci_msix_enable)
     and a reusable inner that programs the registers CTRL.RST clears.

  8) selftests/vfio: igb: Recover after DMA-read faults

     Add igb_error_reset_and_reinit() and call it from
     igb_memcpy_wait() on completion timeout.  Datasheet 4.2.1.6.1
     describes CTRL.RST as the recovery mechanism, but empirically
     CTRL.RST alone leaves the descriptor engine wedged after a
     DMA-read fault; the 82576 advertises PCIe FLR (datasheet
     4.2.1.5.1) and VFIO_DEVICE_RESET drives it.

Testing:

  - Selftest builds clean at every commit (verified bisect-buildable).
  - QEMU emulated igb via vng on a host kernel built with VFIO and
    Intel IOMMU enabled: vfio_pci_driver_test 35/35 pass across all
    four IOMMU mode permutations.
  - Physical 82576 on Intel Alderlake platform: vfio_pci_driver_test
    35/35 pass across all four IOMMU mode permutations.

Assisted:

  - Series developed primarily with Claude Opus 4.7 with additional
    assistance from GPT 5.5.  Spec references spot checked and cross
    checked against multiple models.

Alex Williamson (8):
  selftests/vfio: igb: Use PHY internal loopback on 82576
  selftests/vfio: igb: Use advanced TX and RX descriptors
  selftests/vfio: igb: Program MSI-X interrupt routing
  selftests/vfio: igb: Extend memcpy completion timeout for line-rate hardware
  selftests/vfio: igb: Disable PCIe completion timeout retries
  selftests/vfio: Add vfio_pci_irq_reenable() helper
  selftests/vfio: igb: Factor hardware programming into igb_hw_init()
  selftests/vfio: igb: Recover after DMA-read faults

 .../selftests/vfio/lib/drivers/igb/igb.c      | 318 +++++++++++++-----
 .../vfio/lib/drivers/igb/registers.h          |  58 +++-
 .../lib/include/libvfio/vfio_pci_device.h     |   2 +
 .../selftests/vfio/lib/vfio_pci_device.c      |  22 ++
 4 files changed, 302 insertions(+), 98 deletions(-)

-- 
2.51.0

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-05-15 22:04 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-15 22:03 [PATCH 0/8] selftests/vfio: igb: 82576 hardware compatibility Alex Williamson
2026-05-15 22:03 ` [PATCH 1/8] selftests/vfio: igb: Use PHY internal loopback on 82576 Alex Williamson
2026-05-15 22:03 ` [PATCH 2/8] selftests/vfio: igb: Use advanced TX and RX descriptors Alex Williamson
2026-05-15 22:03 ` [PATCH 3/8] selftests/vfio: igb: Program MSI-X interrupt routing Alex Williamson
2026-05-15 22:03 ` [PATCH 4/8] selftests/vfio: igb: Extend memcpy completion timeout for line-rate hardware Alex Williamson
2026-05-15 22:03 ` [PATCH 5/8] selftests/vfio: igb: Disable PCIe completion timeout retries Alex Williamson
2026-05-15 22:03 ` [PATCH 6/8] selftests/vfio: Add vfio_pci_irq_reenable() helper Alex Williamson
2026-05-15 22:03 ` [PATCH 7/8] selftests/vfio: igb: Factor hardware programming into igb_hw_init() Alex Williamson
2026-05-15 22:03 ` [PATCH 8/8] selftests/vfio: igb: Recover after DMA-read faults Alex Williamson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.