[alsa-devel] [BUG] [REGRESSION] [BISECTED] -rc1 breaks audio over HDMI for i915

Martin Kepplinger martink at posteo.de
Mon Feb 22 22:37:28 CET 2016


Am 2016-02-22 um 20:10 schrieb Takashi Iwai:
> On Mon, 22 Feb 2016 19:58:18 +0100,
> Martin Kepplinger wrote:
>>
>> Am 2016-02-22 um 15:12 schrieb Takashi Iwai:
>>> On Mon, 22 Feb 2016 15:02:56 +0100,
>>> Martin Kepplinger wrote:
>>>>> And how about my questions in the previous mail?  Does
>>>>> i915_audio_component_get_eld() is called and returns 0?
>>>>> And is monitor_present set true or false?
>>>>
>>>> i915_audio_component_get_eld() returns 0 and monitor_present is 0.
>>>>>
>>>>> If i915_audio_component_get_eld() is called but returns zero, track
>>>>> the code flow there.  It means either intel_encoder is NULL or
>>>>> intel_dig_port->audio_connector is NULL.
>>>>
>>>> intel_dig_port->audio_connector is NULL!
>>>>
>>>> (when called during boot and during HDMI plugin)
>>>
>>> Interesting.  The relevant code flow should be like:
>>>
>>>   intel_audio_codec_enable()
>>>   -> acomp->audio_ops->pin_eld_notify()
>>>     -> intel_pin_eld_notify()
>>>       -> check_presence_and_report()
>>>         -> hdmi_present_sense()
>>> 	  -> sync_eld_via_acomp()
>>> 	    -> snd_hdac_acomp_get_eld()
>>> 	      -> i915_audio_component_get_eld()
>>>
>>> So, at first, check whether intel_dig_port in both
>>> intel_audio_codec_enable() and i915_audio_component_get_eld() points
>>> to the same object address.  The audio_connector must be set in
>>> intel_audio_codec_enable(), thus basically it must be non-NULL at
>>> i915_audio_component_get_eld(), too.
>>>
>>
>> intel_dig_port is *not* the same object in these 2 places. During
>> plugin, see:
>>
>> [  146.934091] in intel_audio_codec_enable: intel_dig_port is
>> ffff8800a1f54000
>> [  146.934121] in i915_audio_component_get_eld: intel_dig_port is
>> ffff880244f7d000
>>
>> sorry for the slow responses. I'll try to go back that direction unless
>> again someone comes up with other suggestions.
> 
> Thanks, this makes sense.  It implies that the digital port mapping is
> somehow wrong.  There are three places setting dig_port_map[], one in
> intel_ddi_init(), one in intel_dp_init() and another in
> intel_hdmi_init().  Try to check which function creates which object
> assigned to which port number, together with drm.debug=0x0e debug
> messages.
> 
without using drm.debug=0x0e, but by printing the kmalloc'ed objects in
those 3 functions with ports, I found:

2 of them are running, only during boot:

[    2.322865] intel_hdmi_init: intel_dig_port is ffff880242564000  port 1
[    2.322999] intel_dp_init: intel_dig_port is ffff880242f30000  port 1

is is correct for them to have both port 1? Any more ideas?


More information about the Alsa-devel mailing list