Merge tag 'vfio-v4.20-rc1.v2' of git://github.com/awilliam/linux-vfio
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 31 Oct 2018 18:01:38 +0000 (11:01 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 31 Oct 2018 18:01:38 +0000 (11:01 -0700)
Pull VFIO updates from Alex Williamson:

 - EDID interfaces for vfio devices supporting display extensions (Gerd
   Hoffmann)

 - Generically select Type-1 IOMMU model support on ARM/ARM64 (Geert
   Uytterhoeven)

 - Quirk for VFs reporting INTx pin (Alex Williamson)

 - Fix error path memory leak in MSI support (Li Qiang)

* tag 'vfio-v4.20-rc1.v2' of git://github.com/awilliam/linux-vfio:
  vfio: add edid support to mbochs sample driver
  vfio: add edid api for display (vgpu) devices.
  drivers/vfio: Allow type-1 IOMMU instantiation with all ARM/ARM64 IOMMUs
  vfio/pci: Mask buggy SR-IOV VF INTx support
  vfio/pci: Fix potential memory leak in vfio_msi_cap_len

1  2 
include/uapi/linux/vfio.h

index f378b9802d8b5d2276387406d57b084e3ebd3211,44b66b09c5feb96735f50810f8800b89831f5d97..813102810f53eaf37552d13f512b5d54ccff7aad
@@@ -200,7 -200,6 +200,7 @@@ struct vfio_device_info 
  #define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2)   /* vfio-platform device */
  #define VFIO_DEVICE_FLAGS_AMBA  (1 << 3)      /* vfio-amba device */
  #define VFIO_DEVICE_FLAGS_CCW (1 << 4)        /* vfio-ccw device */
 +#define VFIO_DEVICE_FLAGS_AP  (1 << 5)        /* vfio-ap device */
        __u32   num_regions;    /* Max region index + 1 */
        __u32   num_irqs;       /* Max IRQ index + 1 */
  };
  #define VFIO_DEVICE_API_PLATFORM_STRING               "vfio-platform"
  #define VFIO_DEVICE_API_AMBA_STRING           "vfio-amba"
  #define VFIO_DEVICE_API_CCW_STRING            "vfio-ccw"
 +#define VFIO_DEVICE_API_AP_STRING             "vfio-ap"
  
  /**
   * VFIO_DEVICE_GET_REGION_INFO - _IOWR(VFIO_TYPE, VFIO_BASE + 8,
@@@ -303,6 -301,56 +303,56 @@@ struct vfio_region_info_cap_type 
  #define VFIO_REGION_SUBTYPE_INTEL_IGD_HOST_CFG        (2)
  #define VFIO_REGION_SUBTYPE_INTEL_IGD_LPC_CFG (3)
  
+ #define VFIO_REGION_TYPE_GFX                    (1)
+ #define VFIO_REGION_SUBTYPE_GFX_EDID            (1)
+ /**
+  * struct vfio_region_gfx_edid - EDID region layout.
+  *
+  * Set display link state and EDID blob.
+  *
+  * The EDID blob has monitor information such as brand, name, serial
+  * number, physical size, supported video modes and more.
+  *
+  * This special region allows userspace (typically qemu) set a virtual
+  * EDID for the virtual monitor, which allows a flexible display
+  * configuration.
+  *
+  * For the edid blob spec look here:
+  *    https://en.wikipedia.org/wiki/Extended_Display_Identification_Data
+  *
+  * On linux systems you can find the EDID blob in sysfs:
+  *    /sys/class/drm/${card}/${connector}/edid
+  *
+  * You can use the edid-decode ulility (comes with xorg-x11-utils) to
+  * decode the EDID blob.
+  *
+  * @edid_offset: location of the edid blob, relative to the
+  *               start of the region (readonly).
+  * @edid_max_size: max size of the edid blob (readonly).
+  * @edid_size: actual edid size (read/write).
+  * @link_state: display link state (read/write).
+  * VFIO_DEVICE_GFX_LINK_STATE_UP: Monitor is turned on.
+  * VFIO_DEVICE_GFX_LINK_STATE_DOWN: Monitor is turned off.
+  * @max_xres: max display width (0 == no limitation, readonly).
+  * @max_yres: max display height (0 == no limitation, readonly).
+  *
+  * EDID update protocol:
+  *   (1) set link-state to down.
+  *   (2) update edid blob and size.
+  *   (3) set link-state to up.
+  */
+ struct vfio_region_gfx_edid {
+       __u32 edid_offset;
+       __u32 edid_max_size;
+       __u32 edid_size;
+       __u32 max_xres;
+       __u32 max_yres;
+       __u32 link_state;
+ #define VFIO_DEVICE_GFX_LINK_STATE_UP    1
+ #define VFIO_DEVICE_GFX_LINK_STATE_DOWN  2
+ };
  /*
   * The MSIX mappable capability informs that MSIX data of a BAR can be mmapped
   * which allows direct access to non-MSIX registers which happened to be within