Skip to content
  • Jean-Philippe Brucker's avatar
    virtio/pci: Use port I/O for configuration registers by default · a508ea95
    Jean-Philippe Brucker authored
    Modern virtio PCI is allowed to use both memory and I/O BARs for the
    config space, but legacy devices must use I/O for BAR0, as specified by
    Virtio v1.0 cs04:
    
    4.1.5.1.1.1 Legacy Interface: A Note on Device Layout Detection
    "Transitional devices MUST expose the Legacy Interface in I/O space in
    BAR0."
    
    What virtio calls "I/O space" is most certainly port I/O, as hinted by the
    discussion in 4.1.4 Virtio Structure PCI Capabilities, where it
    distinguishes "memory BARs" from "I/O BARs". This is also the conclusion
    made by SeaBIOS [1], which only looks for port I/O in BAR0 when driving a
    transitional device.
    
    I think MMIO was made the default by a463650c ("kvm tools: pci: add
    MMIO interface to virtio-pci devices") to support ARM targets, but we
    support PIO as well as MMIO nowadays. So let's make the legacy virtio
    implementation comply with the specification and use port I/O for BAR0.
    
    [1] https://patchwork.kernel.org/patch/10038927/
    
    
    
    Signed-off-by: default avatarJean-Philippe Brucker <jean-philippe.brucker@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    a508ea95