APPLIED[Artful]: [SRU][Artful][OEM][PATCH] ALSA: hda - Force polling mode on CFL for fixing codec communication
Kleber Souza
kleber.souza at canonical.com
Thu Mar 29 16:18:07 UTC 2018
On 03/26/18 08:37, Hui Wang wrote:
> From: Takashi Iwai <tiwai at suse.de>
>
> BugLink: https://bugs.launchpad.net/bugs/1758800
>
> We've observed too long probe time with Coffee Lake (CFL) machines,
> and the likely cause is some communication problem between the
> HD-audio controller and the codec chips. While the controller expects
> an IRQ wakeup for each codec response, it seems sometimes missing, and
> it takes one second for the controller driver to time out and read the
> response in the polling mode.
>
> Although we aren't sure about the real culprit yet, in this patch, we
> put a workaround by forcing the polling mode as default for CFL
> machines; the polling mode itself isn't too heavy, and much better
> than other workarounds initially suggested (e.g. disabling
> power-save), at least.
>
> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=199007
> Fixes: e79b0006c45c ("ALSA: hda - Add Coffelake PCI ID")
> Reported-and-tested-by: Hui Wang <hui.wang at canonical.com>
> Cc: <stable at vger.kernel.org>
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
> (cherry picked from commit a8d7bde23e7130686b76624b099f3e22dd38aef7)
> Signed-off-by: Hui Wang <hui.wang at canonical.com>
> ---
> sound/pci/hda/hda_intel.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
> index 5ae8dda..f23db5f 100644
> --- a/sound/pci/hda/hda_intel.c
> +++ b/sound/pci/hda/hda_intel.c
> @@ -371,6 +371,7 @@ enum {
> ((pci)->device == 0x160c))
>
> #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98)
> +#define IS_CFL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa348)
>
> static char *driver_short_names[] = {
> [AZX_DRIVER_ICH] = "HDA Intel",
> @@ -1740,6 +1741,10 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci,
> else
> chip->bdl_pos_adj = bdl_pos_adj[dev];
>
> + /* Workaround for a communication error on CFL (bko#199007) */
> + if (IS_CFL(pci))
> + chip->polling_mode = 1;
> +
> err = azx_bus_init(chip, model[dev], &pci_hda_io_ops);
> if (err < 0) {
> kfree(hda);
>
Applied to artful/master-next branch.
Thanks,
Kleber
More information about the kernel-team
mailing list