diff mbox

[1/1] drm/i915/audio: apply SKL codec wake up patch to BXT

Message ID 1447922919-27077-1-git-send-email-han.lu@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

han.lu@intel.com Nov. 19, 2015, 8:48 a.m. UTC
From: "Lu, Han" <han.lu@intel.com>

Signed-off-by: Lu, Han <han.lu@intel.com>

Comments

Jani Nikula Nov. 19, 2015, 9:08 a.m. UTC | #1
On Thu, 19 Nov 2015, han.lu@intel.com wrote:
> From: "Lu, Han" <han.lu@intel.com>
>
> Signed-off-by: Lu, Han <han.lu@intel.com>
>
> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> index 63d4706..8310bf3 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -591,7 +591,8 @@ static void i915_audio_component_codec_wake_override(struct device *dev,
>  	struct drm_i915_private *dev_priv = dev_to_i915(dev);
>  	u32 tmp;
>  
> -	if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv))
> +	if (!IS_SKYLAKE(dev_priv) && !IS_BROXTON(dev_priv) &&
> +			!IS_KABYLAKE(dev_priv))

How about if (INTEL_INFO(dev_priv)->gen < 9)?

BR,
Jani.

>  		return;
>  
>  	/*
Jani Nikula Nov. 19, 2015, 9:09 a.m. UTC | #2
On Thu, 19 Nov 2015, Jani Nikula <jani.nikula@intel.com> wrote:
> On Thu, 19 Nov 2015, han.lu@intel.com wrote:
>> From: "Lu, Han" <han.lu@intel.com>
>>
>> Signed-off-by: Lu, Han <han.lu@intel.com>
>>
>> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
>> index 63d4706..8310bf3 100644
>> --- a/drivers/gpu/drm/i915/intel_audio.c
>> +++ b/drivers/gpu/drm/i915/intel_audio.c
>> @@ -591,7 +591,8 @@ static void i915_audio_component_codec_wake_override(struct device *dev,
>>  	struct drm_i915_private *dev_priv = dev_to_i915(dev);
>>  	u32 tmp;
>>  
>> -	if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv))
>> +	if (!IS_SKYLAKE(dev_priv) && !IS_BROXTON(dev_priv) &&
>> +			!IS_KABYLAKE(dev_priv))
>
> How about if (INTEL_INFO(dev_priv)->gen < 9)?

Oh, and I guess we also wonder why this is only relevant for the latest
platforms?

>
> BR,
> Jani.
>
>>  		return;
>>  
>>  	/*
Takashi Iwai Nov. 19, 2015, 10:29 a.m. UTC | #3
On Thu, 19 Nov 2015 10:09:01 +0100,
Jani Nikula wrote:
> 
> On Thu, 19 Nov 2015, Jani Nikula <jani.nikula@intel.com> wrote:
> > On Thu, 19 Nov 2015, han.lu@intel.com wrote:
> >> From: "Lu, Han" <han.lu@intel.com>
> >>
> >> Signed-off-by: Lu, Han <han.lu@intel.com>
> >>
> >> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> >> index 63d4706..8310bf3 100644
> >> --- a/drivers/gpu/drm/i915/intel_audio.c
> >> +++ b/drivers/gpu/drm/i915/intel_audio.c
> >> @@ -591,7 +591,8 @@ static void i915_audio_component_codec_wake_override(struct device *dev,
> >>  	struct drm_i915_private *dev_priv = dev_to_i915(dev);
> >>  	u32 tmp;
> >>  
> >> -	if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv))
> >> +	if (!IS_SKYLAKE(dev_priv) && !IS_BROXTON(dev_priv) &&
> >> +			!IS_KABYLAKE(dev_priv))
> >
> > How about if (INTEL_INFO(dev_priv)->gen < 9)?
> 
> Oh, and I guess we also wonder why this is only relevant for the latest
> platforms?

My understanding is that it's a workaround specific to HSW/BDW.
It's issued only during the audio controller initialization and at the
resume.  But I never know why it's needed, it's a black magic :)


Takashi
han.lu@intel.com Nov. 19, 2015, 2:28 p.m. UTC | #4
> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai@suse.de]
> Sent: Thursday, November 19, 2015 6:29 PM
> To: Nikula, Jani
> Cc: Lu, Han; daniel.vetter@ffwll.ch; intel-gfx@lists.freedesktop.org;
> libin.yang@linux.intel.com; mengdong.lin@linux.intel.com;
> han.lu@linux.intel.com; alsa-devel@alsa-project.org
> Subject: Re: [PATCH 1/1] drm/i915/audio: apply SKL codec wake up patch to
> BXT
> 
> On Thu, 19 Nov 2015 10:09:01 +0100,
> Jani Nikula wrote:
> >
> > On Thu, 19 Nov 2015, Jani Nikula <jani.nikula@intel.com> wrote:
> > > On Thu, 19 Nov 2015, han.lu@intel.com wrote:
> > >> From: "Lu, Han" <han.lu@intel.com>
> > >>
> > >> Signed-off-by: Lu, Han <han.lu@intel.com>
> > >>
> > >> diff --git a/drivers/gpu/drm/i915/intel_audio.c
> > >> b/drivers/gpu/drm/i915/intel_audio.c
> > >> index 63d4706..8310bf3 100644
> > >> --- a/drivers/gpu/drm/i915/intel_audio.c
> > >> +++ b/drivers/gpu/drm/i915/intel_audio.c
> > >> @@ -591,7 +591,8 @@ static void
> i915_audio_component_codec_wake_override(struct device *dev,
> > >>  	struct drm_i915_private *dev_priv = dev_to_i915(dev);
> > >>  	u32 tmp;
> > >>
> > >> -	if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv))
> > >> +	if (!IS_SKYLAKE(dev_priv) && !IS_BROXTON(dev_priv) &&
> > >> +			!IS_KABYLAKE(dev_priv))
> > >
> > > How about if (INTEL_INFO(dev_priv)->gen < 9)?
> >
> > Oh, and I guess we also wonder why this is only relevant for the
> > latest platforms?
> 
> My understanding is that it's a workaround specific to HSW/BDW.
> It's issued only during the audio controller initialization and at the resume.
> But I never know why it's needed, it's a black magic :)
> 
> 
> Takashi

Sorry, I should have made it more clear.
For SKL we added a patch (commit 632f3ab95fe2ffebf09969a57ab21), in order
to enable codec wakeup override signal, to allow re-enumeration of the
controller on SKL after resume from low power state.
In SKL, HDMI/DP codec and PCH HD Audio Controller are in different power
wells, so it's necessary to reset display audio codecs when power well on,
otherwise display audio codecs will disappear when resume from low power
state.
Reset steps when power on:
    enable codec wakeup -> azx_init_chip() -> disable codec wakeup
Since the power well design didn't change from SKL to BXT, we need to apply
the workaround to BXT also.
I'll re-submit the patch with these info added on.

Regards,
Han Lu
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 63d4706..8310bf3 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -591,7 +591,8 @@  static void i915_audio_component_codec_wake_override(struct device *dev,
 	struct drm_i915_private *dev_priv = dev_to_i915(dev);
 	u32 tmp;
 
-	if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv))
+	if (!IS_SKYLAKE(dev_priv) && !IS_BROXTON(dev_priv) &&
+			!IS_KABYLAKE(dev_priv))
 		return;
 
 	/*