xref: /qemu/docs/system/s390x/pcidevices.rst (revision 387b2b52558bbb44ad74634415e1ab488d3c62a7)
1*e59a59a4SSebastian MitterlePCI devices on s390x
2*e59a59a4SSebastian Mitterle====================
3*e59a59a4SSebastian Mitterle
4*e59a59a4SSebastian MitterlePCI devices on s390x work differently than on other architectures and need to
5*e59a59a4SSebastian Mitterlebe configured in a slightly different way.
6*e59a59a4SSebastian Mitterle
7*e59a59a4SSebastian MitterleEvery PCI device is linked with an additional ``zpci`` device.
8*e59a59a4SSebastian MitterleWhile the ``zpci`` device will be autogenerated if not specified, it is
9*e59a59a4SSebastian Mitterlerecommended to specify it explicitly so that you can pass s390-specific
10*e59a59a4SSebastian MitterlePCI configuration.
11*e59a59a4SSebastian Mitterle
12*e59a59a4SSebastian MitterleFor example, in order to pass a PCI device ``0000:00:00.0`` through to the
13*e59a59a4SSebastian Mitterleguest, you would specify::
14*e59a59a4SSebastian Mitterle
15*e59a59a4SSebastian Mitterle qemu-system-s390x ... \
16*e59a59a4SSebastian Mitterle                   -device zpci,uid=1,fid=0,target=hostdev0,id=zpci1 \
17*e59a59a4SSebastian Mitterle                   -device vfio-pci,host=0000:00:00.0,id=hostdev0
18*e59a59a4SSebastian Mitterle
19*e59a59a4SSebastian MitterleHere, the zpci device is joined with the PCI device via the ``target`` property.
20*e59a59a4SSebastian Mitterle
21*e59a59a4SSebastian MitterleNote that we don't set bus, slot or function here for the guest as is common in
22*e59a59a4SSebastian Mitterleother PCI implementations. Topology information is not available on s390x, and
23*e59a59a4SSebastian Mitterlethe guest will not see any of the bus, slot or function information specified
24*e59a59a4SSebastian Mitterleon the command line.
25*e59a59a4SSebastian Mitterle
26*e59a59a4SSebastian MitterleInstead, ``uid`` and ``fid`` determine how the device is presented to the guest
27*e59a59a4SSebastian Mitterleoperating system.
28*e59a59a4SSebastian Mitterle
29*e59a59a4SSebastian MitterleIn case of Linux, ``uid`` will be used in the ``domain`` part of the PCI
30*e59a59a4SSebastian Mitterleidentifier, and ``fid`` identifies the physical slot, i.e.::
31*e59a59a4SSebastian Mitterle
32*e59a59a4SSebastian Mitterle qemu-system-s390x ... \
33*e59a59a4SSebastian Mitterle                   -device zpci,uid=7,fid=8,target=hostdev0,id=zpci1 \
34*e59a59a4SSebastian Mitterle                   ...
35*e59a59a4SSebastian Mitterle
36*e59a59a4SSebastian Mitterlewill be presented in the guest as::
37*e59a59a4SSebastian Mitterle
38*e59a59a4SSebastian Mitterle # lspci -v
39*e59a59a4SSebastian Mitterle 0007:00:00.0 ...
40*e59a59a4SSebastian Mitterle Physical Slot: 00000008
41*e59a59a4SSebastian Mitterle ...
42