drm/i915: Add Intel opregion mailbox 5 structure
authorDeepak M <m.deepak@intel.com>
Mon, 14 Dec 2015 10:50:45 +0000 (12:50 +0200)
committerJani Nikula <jani.nikula@intel.com>
Wed, 16 Dec 2015 09:19:37 +0000 (11:19 +0200)
Mailbox 5 is BIOS to Driver Notification mailbox is intended
to support BIOS to Driver event notification or data storage
for BIOS to Driver data synchronization purpose. Mailbox 5 is
the extension of mailbox 3.

v4 by Jani:
 - don't add asle_ext to dev_priv as it's unused
 - use u8 for bddc and rsvd fields in asle ext struct
 - add BUILD_BUG_ON the asle ext struct size
 - debug logging for asle ext present

Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Deepak M <m.deepak@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/c2d4009659fca32280d9859ec34a62f45b86d895.1450089383.git.jani.nikula@intel.com
drivers/gpu/drm/i915/intel_opregion.c

index 64efedfad8797bff6779077ec48b30471f723e5f..cd97b9a5df57cc592b402fa1b823ae4cb6af5616 100644 (file)
@@ -46,6 +46,7 @@
 #define OPREGION_SWSCI_OFFSET  0x200
 #define OPREGION_ASLE_OFFSET   0x300
 #define OPREGION_VBT_OFFSET    0x400
+#define OPREGION_ASLE_EXT_OFFSET       0x1C00
 
 #define OPREGION_SIGNATURE "IntelGraphicsMem"
 #define MBOX_ACPI      (1<<0)
@@ -125,6 +126,13 @@ struct opregion_asle {
        u8 rsvd[58];
 } __packed;
 
+/* OpRegion mailbox #5: ASLE ext */
+struct opregion_asle_ext {
+       u32 phed;       /* Panel Header */
+       u8 bddc[256];   /* Panel EDID */
+       u8 rsvd[764];
+} __packed;
+
 /* Driver readiness indicator */
 #define ASLE_ARDY_READY                (1 << 0)
 #define ASLE_ARDY_NOT_READY    (0 << 0)
@@ -909,6 +917,7 @@ int intel_opregion_setup(struct drm_device *dev)
        BUILD_BUG_ON(sizeof(struct opregion_acpi) != 0x100);
        BUILD_BUG_ON(sizeof(struct opregion_swsci) != 0x100);
        BUILD_BUG_ON(sizeof(struct opregion_asle) != 0x100);
+       BUILD_BUG_ON(sizeof(struct opregion_asle_ext) != 0x400);
 
        pci_read_config_dword(dev->pdev, PCI_ASLS, &asls);
        DRM_DEBUG_DRIVER("graphic opregion physical addr: 0x%x\n", asls);
@@ -948,6 +957,7 @@ int intel_opregion_setup(struct drm_device *dev)
                opregion->swsci = base + OPREGION_SWSCI_OFFSET;
                swsci_setup(dev);
        }
+
        if (mboxes & MBOX_ASLE) {
                DRM_DEBUG_DRIVER("ASLE supported\n");
                opregion->asle = base + OPREGION_ASLE_OFFSET;
@@ -955,6 +965,9 @@ int intel_opregion_setup(struct drm_device *dev)
                opregion->asle->ardy = ASLE_ARDY_NOT_READY;
        }
 
+       if (mboxes & MBOX_ASLE_EXT)
+               DRM_DEBUG_DRIVER("ASLE extension supported\n");
+
        return 0;
 
 err_out: