On Thu, 17 Jan 2019 21:47:05 +0100, Pierre-Louis Bossart wrote: > > > >> I tried to narrow down the issue further and my current understanding > >> is that the Skylake driver performs link reset operations without the > >> display power turned on - which does not look like a very smart thing > >> to do in hindsight. > >> > >> In other words, it's not really when snd_hdac_i915_init() is called > >> that matters as I assumed initially, but more when > >> snd_hdac_display_power() is invoked. There are two cases where this > >> happens, and for each of them turning the display power on results in > >> HDMI detection. The attached diffs split the initialization from the > >> power on, which provides a better understanding of the issue. > > OK, this makes some sense, and that's the very reason we have > > HDA_CODEC_IDX_CONTROLLER for snd_hdac_display_power(). IIRC, we > > needed to power on the display for probing of the legacy HDA, too. > > Once after that, for the normal operation, the display power is needed > > only when you output the HDMI stream. > > > > > >> What would be really useful at this point is a confirmation that > >> snd_hdac_i915_init() cannot be called in the initial probe but does > >> need to be executed in a work queue. That would really impact the way > >> the initialization sequence is reworked on the Skylake side as well as > >> modify the way the SOF driver deals with i915 initialization. > > It's needed to be called in a work queue, yes. > > > > Basically you shouldn't call request_module() in the driver's probe > > callback. When the probe callback is called from the module loading, > > it blocks the module loading itself, hence loading yet another module > > can't work. A situation might be easier than the past (which > > deadlocked), but still it's advised to use either the > > request_module_nowait() with the callback or call request_module() > > asynchronously from probe. > > Thanks Takashi, this is very useful. I guess that will require a > complete rework of the Skylake initialization sequence then, my simple > code translation isn't enough indeed and the current partition between > probe/work queue can't comply with both requirements (request module > asynchronously from probe, display turned on before mucking with > links). > > We also need this changed for SOF, the i915_init is done in the probe. Well, snd_hdac_i915_init() itself also calls already request_module() if i915 is missing, so this should be done in the async code, too... The complication comes from the fact that HD-audio driver doesn't necessarily bind with i915 graphics. Otherwise we could have a fixed hard dependency that assures more or less i915 probing before HD-audio (though, i915 probing became async, so it's now harder). thanks, Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel