On Fri, 10 Jun 2022, Jouni Högander <jouni.hogander@xxxxxxxxx> wrote: > Export headless sku bit (bit 13) from opregion->header->pcon as an > interface to check if our device is headless configuration. > > This is mainly targeted for hybrid gfx systems. E.g. when display > is not supposed to be connected discrete graphics card it's > opregion can inform this is headless graphics card. > > v2: Check also opregion version > > Bspec: 53441 > Signed-off-by: Jouni Högander <jouni.hogander@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_opregion.c | 14 ++++++++++++++ > drivers/gpu/drm/i915/display/intel_opregion.h | 7 +++++++ > 2 files changed, 21 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_opregion.c b/drivers/gpu/drm/i915/display/intel_opregion.c > index f31e8c3f8ce0..6876ba30d5a9 100644 > --- a/drivers/gpu/drm/i915/display/intel_opregion.c > +++ b/drivers/gpu/drm/i915/display/intel_opregion.c > @@ -53,6 +53,8 @@ > #define MBOX_ASLE_EXT BIT(4) /* Mailbox #5 */ > #define MBOX_BACKLIGHT BIT(5) /* Mailbox #2 (valid from v3.x) */ > > +#define PCON_HEADLESS_SKU BIT(13) > + > struct opregion_header { > u8 signature[16]; > u32 size; > @@ -1135,6 +1137,18 @@ struct edid *intel_opregion_get_edid(struct intel_connector *intel_connector) > return new_edid; > } > > +bool intel_opregion_headless_sku(struct drm_i915_private *i915) > +{ > + struct intel_opregion *opregion = &i915->opregion; > + struct opregion_header *header = opregion->header; > + > + if (!header || header->over.major < 2 || > + (header->over.major == 2 && header->over.minor < 3)) > + return false; > + > + return opregion->header->pcon & PCON_HEADLESS_SKU; > +} > + > void intel_opregion_register(struct drm_i915_private *i915) > { > struct intel_opregion *opregion = &i915->opregion; > diff --git a/drivers/gpu/drm/i915/display/intel_opregion.h b/drivers/gpu/drm/i915/display/intel_opregion.h > index 82cc0ba34af7..5ad96e1d8278 100644 > --- a/drivers/gpu/drm/i915/display/intel_opregion.h > +++ b/drivers/gpu/drm/i915/display/intel_opregion.h > @@ -76,6 +76,8 @@ int intel_opregion_notify_adapter(struct drm_i915_private *dev_priv, > int intel_opregion_get_panel_type(struct drm_i915_private *dev_priv); > struct edid *intel_opregion_get_edid(struct intel_connector *connector); > > +bool intel_opregion_headless_sku(struct drm_i915_private *i915); > + > #else /* CONFIG_ACPI*/ > > static inline int intel_opregion_setup(struct drm_i915_private *dev_priv) > @@ -127,6 +129,11 @@ intel_opregion_get_edid(struct intel_connector *connector) > return NULL; > } > > +bool intel_opregion_headless_sku(struct drm_i915_private *i915) This needs to be static inline. With that fixed, the series is Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx> > +{ > + return false; > +} > + > #endif /* CONFIG_ACPI */ > > #endif -- Jani Nikula, Intel Open Source Graphics Center