On Tue, Dec 27, 2016 at 06:59:54PM +0530, Animesh Manna wrote: > _DSM is added to program HPD_CTL(0x1094) register > of PMC from i915 driver which will be called > based on driver feature flag. > > During S0ix display engine is completely powered down. Hot plug will be > missed by display HPD detection logic. GPIO unit detect any edge on HPD > pin and then triggers PMC->Punit to power up and restore display. > By programming PMC hpd control register we are enabling the manual > trigger from Punit which will be done by writing the PM interrupt register. > > Note: Display engine continue to get HPD interrupt even after DC9 but > the system is in S0 state (VNN will be on). > > v1: Initial version as RFC. > > v2: Modified the commit message. > > Signed-off-by: Animesh Manna <animesh.manna@xxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_acpi.c | 32 +++++++++++++++++++++++++++----- > 1 file changed, 27 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_acpi.c b/drivers/gpu/drm/i915/intel_acpi.c > index 5c49cef..47b8bbd 100644 > --- a/drivers/gpu/drm/i915/intel_acpi.c > +++ b/drivers/gpu/drm/i915/intel_acpi.c > @@ -10,6 +10,8 @@ > > #define INTEL_DSM_REVISION_ID 1 /* For Calpella anyway... */ > #define INTEL_DSM_FN_PLATFORM_MUX_INFO 1 /* No args */ > +#define INTEL_DSM_SET_HPD_WAKEUP 17 > +#define HPD_WAKEUP_EN_VAL 0xFCF0 > > static struct intel_dsm_priv { > acpi_handle dhandle; > @@ -118,6 +120,25 @@ static void intel_dsm_platform_mux_info(void) > ACPI_FREE(pkg); > } > > +static void intel_dsm_set_hpd_wakeup(const u8 *guid) > +{ > + union acpi_object *obj; > + union acpi_object argv4 = { > + .integer.type = ACPI_TYPE_INTEGER, > + .integer.value = HPD_WAKEUP_EN_VAL, > + }; > + > + obj = acpi_evaluate_dsm_typed(intel_dsm_priv.dhandle, guid, > + INTEL_DSM_REVISION_ID, INTEL_DSM_SET_HPD_WAKEUP, > + &argv4, ACPI_TYPE_INTEGER); Did this call succeed for you? For me on all platforms I tried it results in ACPI Warning: \_SB.PCI0.GFX0._DSM: Argument #4 type mismatch - Found [Integer], ACPI requires [Package] (20160930/nsarguments-95) and the above function returning NULL. > + > + if (!obj) > + DRM_DEBUG_DRIVER("failed to evaluate _DSM\n"); > + > + ACPI_FREE(obj); > +} > + > + > static bool intel_dsm_pci_probe(struct pci_dev *pdev) > { > acpi_handle dhandle; > @@ -131,11 +152,12 @@ static bool intel_dsm_pci_probe(struct pci_dev *pdev) > intel_dsm_priv.dhandle = dhandle; > > if (IS_BROXTON(dev_priv)) { > - union acpi_object *obj; > - > - obj = acpi_evaluate_dsm(dhandle, intel_dsm_guid_bxt, > - INTEL_DSM_REVISION_ID, 0, NULL); > - if (!obj) > + if (dev_priv->vbt.hpd_wakeup_enabled && > + acpi_check_dsm(dhandle, intel_dsm_guid_bxt, > + INTEL_DSM_REVISION_ID, > + 1 << INTEL_DSM_SET_HPD_WAKEUP)) > + intel_dsm_set_hpd_wakeup(intel_dsm_guid_bxt); > + else > return false; > } else { > if (acpi_check_dsm(dhandle, intel_dsm_guid, > -- > 2.7.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx