Browse Source
Mostly just fixes, cleanups all over the place. Some optimizations. More control over slot_reserved_mask. More feature bits supported for SVQ. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> -----BEGIN PGP SIGNATURE----- iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmRHQvAPHG1zdEByZWRo YXQuY29tAAoJECgfDbjSjVRpQc0H/RD+RXy7IAnmhkdCyjj0hM8pftPTwCJfrSCW DLHP4c5jiKO5ngUoAv3YJdM77TBCXlJn6gceeKBrzhGUTtJ7dTLC+Udeq/jW43EF /E2ldLLbTNFyUqW8yX7D+EVio7Jy4zXTHpczKCF5vO7MaVWS/b3QdCpmjXpEHLNb janv24vQHHgmRwK96uIdIauJJT8aqYW0arn1po8anxuFS8ok9Tf8LTEF5uBHokJP MriTwMaqMgRK+4rzh+b6wc7QC5GqIr44gFrsfFYuNOUY0+BizvGvUAtMt+B/XZwt OF4RSShUh2bhsQoYwgvShfEsR/vWwOl3yMAhcsB+wMgMzMG8MUQ= =e8DF -----END PGP SIGNATURE----- Merge tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging virtio,pc,pci: fixes, features, cleanups Mostly just fixes, cleanups all over the place. Some optimizations. More control over slot_reserved_mask. More feature bits supported for SVQ. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> # -----BEGIN PGP SIGNATURE----- # # iQFDBAABCAAtFiEEXQn9CHHI+FuUyooNKB8NuNKNVGkFAmRHQvAPHG1zdEByZWRo # YXQuY29tAAoJECgfDbjSjVRpQc0H/RD+RXy7IAnmhkdCyjj0hM8pftPTwCJfrSCW # DLHP4c5jiKO5ngUoAv3YJdM77TBCXlJn6gceeKBrzhGUTtJ7dTLC+Udeq/jW43EF # /E2ldLLbTNFyUqW8yX7D+EVio7Jy4zXTHpczKCF5vO7MaVWS/b3QdCpmjXpEHLNb # janv24vQHHgmRwK96uIdIauJJT8aqYW0arn1po8anxuFS8ok9Tf8LTEF5uBHokJP # MriTwMaqMgRK+4rzh+b6wc7QC5GqIr44gFrsfFYuNOUY0+BizvGvUAtMt+B/XZwt # OF4RSShUh2bhsQoYwgvShfEsR/vWwOl3yMAhcsB+wMgMzMG8MUQ= # =e8DF # -----END PGP SIGNATURE----- # gpg: Signature made Tue 25 Apr 2023 04:03:12 AM BST # gpg: using RSA key 5D09FD0871C8F85B94CA8A0D281F0DB8D28D5469 # gpg: issuer "mst@redhat.com" # gpg: Good signature from "Michael S. Tsirkin <mst@kernel.org>" [undefined] # gpg: aka "Michael S. Tsirkin <mst@redhat.com>" [undefined] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 0270 606B 6F3C DF3D 0B17 0970 C350 3912 AFBE 8E67 # Subkey fingerprint: 5D09 FD08 71C8 F85B 94CA 8A0D 281F 0DB8 D28D 5469 * tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu: (31 commits) hw/pci-bridge: Make PCIe and CXL PXB Devices inherit from TYPE_PXB_DEV hw/pci-bridge: pci_expander_bridge fix type in pxb_cxl_dev_reset() docs/specs: Convert pci-testdev.txt to rst docs/specs: Convert pci-serial.txt to rst docs/specs/pci-ids: Convert from txt to rST acpi: pcihp: allow repeating hot-unplug requests virtio: i2c: Check notifier helpers for VIRTIO_CONFIG_IRQ_IDX docs: Remove obsolete descriptions of SR-IOV support intel_iommu: refine iotlb hash calculation docs/cxl: Fix sentence MAINTAINERS: Add Eugenio Pérez as vhost-shadow-virtqueue reviewer tests: bios-tables-test: replace memset with initializer hw/acpi: limit warning on acpi table size to pc machines older than version 2.3 Add my old and new work email mapping and use work email to support acpi vhost-user-blk-server: notify client about disk resize pci: avoid accessing slot_reserved_mask directly outside of pci.c hw: Add compat machines for 8.1 hw/i386/amd_iommu: Factor amdvi_pci_realize out of amdvi_sysbus_realize hw/i386/amd_iommu: Set PCI static/const fields via PCIDeviceClass hw/i386/amd_iommu: Move capab_offset from AMDVIState to AMDVIPCIState ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>pull/235/head
48 changed files with 457 additions and 325 deletions
@ -0,0 +1,98 @@ |
|||
================ |
|||
PCI IDs for QEMU |
|||
================ |
|||
|
|||
Red Hat, Inc. donates a part of its device ID range to QEMU, to be used for |
|||
virtual devices. The vendor IDs are 1af4 (formerly Qumranet ID) and 1b36. |
|||
|
|||
Contact Gerd Hoffmann <kraxel@redhat.com> to get a device ID assigned |
|||
for your devices. |
|||
|
|||
1af4 vendor ID |
|||
-------------- |
|||
|
|||
The 1000 -> 10ff device ID range is used as follows for virtio-pci devices. |
|||
Note that this allocation is separate from the virtio device IDs, which are |
|||
maintained as part of the virtio specification. |
|||
|
|||
1af4:1000 |
|||
network device (legacy) |
|||
1af4:1001 |
|||
block device (legacy) |
|||
1af4:1002 |
|||
balloon device (legacy) |
|||
1af4:1003 |
|||
console device (legacy) |
|||
1af4:1004 |
|||
SCSI host bus adapter device (legacy) |
|||
1af4:1005 |
|||
entropy generator device (legacy) |
|||
1af4:1009 |
|||
9p filesystem device (legacy) |
|||
1af4:1012 |
|||
vsock device (bug compatibility) |
|||
|
|||
1af4:1040 to 1af4:10ef |
|||
ID range for modern virtio devices. The PCI device |
|||
ID is calculated from the virtio device ID by adding the |
|||
0x1040 offset. The virtio IDs are defined in the virtio |
|||
specification. The Linux kernel has a header file with |
|||
defines for all virtio IDs (``linux/virtio_ids.h``); QEMU has a |
|||
copy in ``include/standard-headers/``. |
|||
|
|||
1af4:10f0 to 1a4f:10ff |
|||
Available for experimental usage without registration. Must get |
|||
official ID when the code leaves the test lab (i.e. when seeking |
|||
upstream merge or shipping a distro/product) to avoid conflicts. |
|||
|
|||
1af4:1100 |
|||
Used as PCI Subsystem ID for existing hardware devices emulated |
|||
by QEMU. |
|||
|
|||
1af4:1110 |
|||
ivshmem device (shared memory, ``docs/specs/ivshmem-spec.txt``) |
|||
|
|||
All other device IDs are reserved. |
|||
|
|||
1b36 vendor ID |
|||
-------------- |
|||
|
|||
The 0000 -> 00ff device ID range is used as follows for QEMU-specific |
|||
PCI devices (other than virtio): |
|||
|
|||
1b36:0001 |
|||
PCI-PCI bridge |
|||
1b36:0002 |
|||
PCI serial port (16550A) adapter (:doc:`pci-serial`) |
|||
1b36:0003 |
|||
PCI Dual-port 16550A adapter (:doc:`pci-serial`) |
|||
1b36:0004 |
|||
PCI Quad-port 16550A adapter (:doc:`pci-serial`) |
|||
1b36:0005 |
|||
PCI test device (:doc:`pci-testdev`) |
|||
1b36:0006 |
|||
PCI Rocker Ethernet switch device |
|||
1b36:0007 |
|||
PCI SD Card Host Controller Interface (SDHCI) |
|||
1b36:0008 |
|||
PCIe host bridge |
|||
1b36:0009 |
|||
PCI Expander Bridge (-device pxb) |
|||
1b36:000a |
|||
PCI-PCI bridge (multiseat) |
|||
1b36:000b |
|||
PCIe Expander Bridge (-device pxb-pcie) |
|||
1b36:000d |
|||
PCI xhci usb host adapter |
|||
1b36:000f |
|||
mdpy (mdev sample device), ``linux/samples/vfio-mdev/mdpy.c`` |
|||
1b36:0010 |
|||
PCIe NVMe device (``-device nvme``) |
|||
1b36:0011 |
|||
PCI PVPanic device (``-device pvpanic-pci``) |
|||
1b36:0012 |
|||
PCI ACPI ERST device (``-device acpi-erst``) |
|||
|
|||
All these devices are documented in :doc:`index`. |
|||
|
|||
The 0100 device ID is used for the QXL video card device. |
|||
@ -1,70 +0,0 @@ |
|||
|
|||
PCI IDs for qemu |
|||
================ |
|||
|
|||
Red Hat, Inc. donates a part of its device ID range to qemu, to be used for |
|||
virtual devices. The vendor IDs are 1af4 (formerly Qumranet ID) and 1b36. |
|||
|
|||
Contact Gerd Hoffmann <kraxel@redhat.com> to get a device ID assigned |
|||
for your devices. |
|||
|
|||
1af4 vendor ID |
|||
-------------- |
|||
|
|||
The 1000 -> 10ff device ID range is used as follows for virtio-pci devices. |
|||
Note that this allocation separate from the virtio device IDs, which are |
|||
maintained as part of the virtio specification. |
|||
|
|||
1af4:1000 network device (legacy) |
|||
1af4:1001 block device (legacy) |
|||
1af4:1002 balloon device (legacy) |
|||
1af4:1003 console device (legacy) |
|||
1af4:1004 SCSI host bus adapter device (legacy) |
|||
1af4:1005 entropy generator device (legacy) |
|||
1af4:1009 9p filesystem device (legacy) |
|||
1af4:1012 vsock device (bug compatibility) |
|||
|
|||
1af4:1040 Start of ID range for modern virtio devices. The PCI device |
|||
to ID is calculated from the virtio device ID by adding the |
|||
1af4:10ef 0x1040 offset. The virtio IDs are defined in the virtio |
|||
specification. The Linux kernel has a header file with |
|||
defines for all virtio IDs (linux/virtio_ids.h), qemu has a |
|||
copy in include/standard-headers/. |
|||
|
|||
1af4:10f0 Available for experimental usage without registration. Must get |
|||
to official ID when the code leaves the test lab (i.e. when seeking |
|||
1af4:10ff upstream merge or shipping a distro/product) to avoid conflicts. |
|||
|
|||
1af4:1100 Used as PCI Subsystem ID for existing hardware devices emulated |
|||
by qemu. |
|||
|
|||
1af4:1110 ivshmem device (shared memory, docs/specs/ivshmem-spec.txt) |
|||
|
|||
All other device IDs are reserved. |
|||
|
|||
1b36 vendor ID |
|||
-------------- |
|||
|
|||
The 0000 -> 00ff device ID range is used as follows for QEMU-specific |
|||
PCI devices (other than virtio): |
|||
|
|||
1b36:0001 PCI-PCI bridge |
|||
1b36:0002 PCI serial port (16550A) adapter (docs/specs/pci-serial.txt) |
|||
1b36:0003 PCI Dual-port 16550A adapter (docs/specs/pci-serial.txt) |
|||
1b36:0004 PCI Quad-port 16550A adapter (docs/specs/pci-serial.txt) |
|||
1b36:0005 PCI test device (docs/specs/pci-testdev.txt) |
|||
1b36:0006 PCI Rocker Ethernet switch device |
|||
1b36:0007 PCI SD Card Host Controller Interface (SDHCI) |
|||
1b36:0008 PCIe host bridge |
|||
1b36:0009 PCI Expander Bridge (-device pxb) |
|||
1b36:000a PCI-PCI bridge (multiseat) |
|||
1b36:000b PCIe Expander Bridge (-device pxb-pcie) |
|||
1b36:000d PCI xhci usb host adapter |
|||
1b36:000f mdpy (mdev sample device), linux/samples/vfio-mdev/mdpy.c |
|||
1b36:0010 PCIe NVMe device (-device nvme) |
|||
1b36:0011 PCI PVPanic device (-device pvpanic-pci) |
|||
1b36:0012 PCI ACPI ERST device (-device acpi-erst) |
|||
|
|||
All these devices are documented in docs/specs. |
|||
|
|||
The 0100 device ID is used for the QXL video card device. |
|||
@ -0,0 +1,37 @@ |
|||
======================= |
|||
QEMU PCI serial devices |
|||
======================= |
|||
|
|||
QEMU implements some PCI serial devices which are simple PCI |
|||
wrappers around one or more 16550 UARTs. |
|||
|
|||
There is one single-port variant and two multiport-variants. Linux |
|||
guests work out-of-the box with all cards. There is a Windows inf file |
|||
(``docs/qemupciserial.inf``) to set up the cards in Windows guests. |
|||
|
|||
|
|||
Single-port card |
|||
---------------- |
|||
|
|||
Name: |
|||
``pci-serial`` |
|||
PCI ID: |
|||
1b36:0002 |
|||
PCI Region 0: |
|||
IO bar, 8 bytes long, with the 16550 UART mapped to it. |
|||
Interrupt: |
|||
Wired to pin A. |
|||
|
|||
|
|||
Multiport cards |
|||
--------------- |
|||
|
|||
Name: |
|||
``pci-serial-2x``, ``pci-serial-4x`` |
|||
PCI ID: |
|||
1b36:0003 (``-2x``) and 1b36:0004 (``-4x``) |
|||
PCI Region 0: |
|||
IO bar, with two or four 16550 UARTs mapped after each other. |
|||
The first is at offset 0, the second at offset 8, and so on. |
|||
Interrupt: |
|||
Wired to pin A. |
|||
@ -1,34 +0,0 @@ |
|||
|
|||
QEMU pci serial devices |
|||
======================= |
|||
|
|||
There is one single-port variant and two muliport-variants. Linux |
|||
guests out-of-the box with all cards. There is a Windows inf file |
|||
(docs/qemupciserial.inf) to setup the single-port card in Windows |
|||
guests. |
|||
|
|||
|
|||
single-port card |
|||
---------------- |
|||
|
|||
Name: pci-serial |
|||
PCI ID: 1b36:0002 |
|||
|
|||
PCI Region 0: |
|||
IO bar, 8 bytes long, with the 16550 uart mapped to it. |
|||
Interrupt is wired to pin A. |
|||
|
|||
|
|||
multiport cards |
|||
--------------- |
|||
|
|||
Name: pci-serial-2x |
|||
PCI ID: 1b36:0003 |
|||
|
|||
Name: pci-serial-4x |
|||
PCI ID: 1b36:0004 |
|||
|
|||
PCI Region 0: |
|||
IO bar, with two/four 16550 uart mapped after each other. |
|||
The first is at offset 0, second at offset 8, ... |
|||
Interrupt is wired to pin A. |
|||
@ -0,0 +1,39 @@ |
|||
==================== |
|||
QEMU PCI test device |
|||
==================== |
|||
|
|||
``pci-testdev`` is a device used for testing low level IO. |
|||
|
|||
The device implements up to three BARs: BAR0, BAR1 and BAR2. |
|||
Each of BAR 0+1 can be memory or IO. Guests must detect |
|||
BAR types and act accordingly. |
|||
|
|||
BAR 0+1 size is up to 4K bytes each. |
|||
BAR 0+1 starts with the following header: |
|||
|
|||
.. code-block:: c |
|||
|
|||
typedef struct PCITestDevHdr { |
|||
uint8_t test; /* write-only, starts a given test number */ |
|||
uint8_t width_type; /* |
|||
* read-only, type and width of access for a given test. |
|||
* 1,2,4 for byte,word or long write. |
|||
* any other value if test not supported on this BAR |
|||
*/ |
|||
uint8_t pad0[2]; |
|||
uint32_t offset; /* read-only, offset in this BAR for a given test */ |
|||
uint32_t data; /* read-only, data to use for a given test */ |
|||
uint32_t count; /* for debugging. number of writes detected. */ |
|||
uint8_t name[]; /* for debugging. 0-terminated ASCII string. */ |
|||
} PCITestDevHdr; |
|||
|
|||
All registers are little endian. |
|||
|
|||
The device is expected to always implement tests 0 to N on each BAR, and to add new |
|||
tests with higher numbers. In this way a guest can scan test numbers until it |
|||
detects an access type that it does not support on this BAR, then stop. |
|||
|
|||
BAR2 is a 64bit memory BAR, without backing storage. It is disabled |
|||
by default and can be enabled using the ``membar=<size>`` property. This |
|||
can be used to test whether guests handle PCI BARs of a specific |
|||
(possibly quite large) size correctly. |
|||
@ -1,31 +0,0 @@ |
|||
pci-test is a device used for testing low level IO |
|||
|
|||
device implements up to three BARs: BAR0, BAR1 and BAR2. |
|||
Each of BAR 0+1 can be memory or IO. Guests must detect |
|||
BAR types and act accordingly. |
|||
|
|||
BAR 0+1 size is up to 4K bytes each. |
|||
BAR 0+1 starts with the following header: |
|||
|
|||
typedef struct PCITestDevHdr { |
|||
uint8_t test; <- write-only, starts a given test number |
|||
uint8_t width_type; <- read-only, type and width of access for a given test. |
|||
1,2,4 for byte,word or long write. |
|||
any other value if test not supported on this BAR |
|||
uint8_t pad0[2]; |
|||
uint32_t offset; <- read-only, offset in this BAR for a given test |
|||
uint32_t data; <- read-only, data to use for a given test |
|||
uint32_t count; <- for debugging. number of writes detected. |
|||
uint8_t name[]; <- for debugging. 0-terminated ASCII string. |
|||
} PCITestDevHdr; |
|||
|
|||
All registers are little endian. |
|||
|
|||
device is expected to always implement tests 0 to N on each BAR, and to add new |
|||
tests with higher numbers. In this way a guest can scan test numbers until it |
|||
detects an access type that it does not support on this BAR, then stop. |
|||
|
|||
BAR2 is a 64bit memory bar, without backing storage. It is disabled |
|||
by default and can be enabled using the membar=<size> property. This |
|||
can be used to test whether guests handle pci bars of a specific |
|||
(possibly quite large) size correctly. |
|||
Loading…
Reference in new issue