Package: src:linux Version: 3.16.7-ckt20-1+deb8u1 Hi!
Here are patches from linux-stable git repository (https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git) backported by my teammate Florian Gillot to support audio on a Skylake based machine. The first two are included in kernel v3.19 and the third is included in kernel v4.0. Regards Yann
From: Rafal Redzimski <[email protected]> Date: Fri, 19 Dec 2014 08:44:30 +0800 Subject: ALSA: hda_controller: Separate stream_tag for input and output streams. Implemented separate stream_tag assignment for input and output streams. According to hda specification stream tag must be unique throughout the input streams group, however an output stream might use a stream tag which is already in use by an input stream. This change is necessary to support HW which provides a total of more than 15 stream DMA engines which with legacy implementation causes an overflow on SDxCTL.STRM field (and the whole SDxCTL register) and as a result usage of Reserved value 0 in the SDxCTL.STRM field which confuses HDA controller. Signed-off-by: Rafal Redzimski <[email protected]> Signed-off-by: Jayachandran B <[email protected]> Signed-off-by: Libin Yang <[email protected]> Reviewed-by: Vinod Koul <[email protected]> Signed-off-by: Takashi Iwai <[email protected]> Origin: backport, https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=93e3423e6ba4b0ddaf056ecbdf5bc46f18f41deb Last-Update: 2016-01-07 --- --- a/sound/pci/hda/hda_controller.c +++ b/sound/pci/hda/hda_controller.c @@ -2000,11 +2000,18 @@ } EXPORT_SYMBOL_GPL(azx_mixer_create); +static bool is_input_stream(struct azx *chip, unsigned char index) +{ + return (index >= chip->capture_index_offset && + index < chip->capture_index_offset + chip->capture_streams); +} /* initialize SD streams */ int azx_init_stream(struct azx *chip) { int i; + int in_stream_tag = 0; + int out_stream_tag = 0; /* initialize each stream (aka device) * assign the starting bdl address to each stream (device) @@ -2017,9 +2024,21 @@ azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80); /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */ azx_dev->sd_int_sta_mask = 1 << i; - /* stream tag: must be non-zero and unique */ azx_dev->index = i; - azx_dev->stream_tag = i + 1; + + /* stream tag must be unique throughout + * the stream direction group, + * valid values 1...15 + * use separate stream tag if the flag + * AZX_DCAPS_SEPARATE_STREAM_TAG is used + */ + if (chip->driver_caps & AZX_DCAPS_SEPARATE_STREAM_TAG) + azx_dev->stream_tag = + is_input_stream(chip, i) ? + ++in_stream_tag : + ++out_stream_tag; + else + azx_dev->stream_tag = i + 1; } return 0; --- a/sound/pci/hda/hda_priv.h +++ b/sound/pci/hda/hda_priv.h @@ -192,6 +192,7 @@ #define AZX_DCAPS_I915_POWERWELL (1 << 27) /* HSW i915 powerwell support */ #define AZX_DCAPS_CORBRP_SELF_CLEAR (1 << 28) /* CORBRP clears itself after reset */ #define AZX_DCAPS_NO_MSI64 (1 << 29) /* Stick to 32-bit MSIs */ +#define AZX_DCAPS_SEPARATE_STREAM_TAG (1 << 30) /* capture and playback use separate stream tag */ /* position fix mode */ enum {
From: Libin Yang <[email protected]> Date: Fri, 19 Dec 2014 08:44:31 +0800 Subject: ALSA: hda_intel: apply the Seperate stream_tag for Skylake The total stream number of Skylake's input and output stream exceeds 15, which will cause some streams do not work because of the overflow on SDxCTL.STRM field if using the legacy stream tag allocation method. This patch uses the new stream tag allocation method by add the flag AZX_DCAPS_SEPARATE_STREAM_TAG for Skylake platform. Signed-off-by: Libin Yang <[email protected]> Reviewed-by: Vinod Koul <[email protected]> Signed-off-by: Takashi Iwai <[email protected]> Origin: backport, https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=d6795827bd79b28fef1abdaf7e525fcca506b831 Last-Update: 2016-01-07 --- --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -245,6 +245,9 @@ enum { AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_PM_RUNTIME | \ AZX_DCAPS_I915_POWERWELL) +#define AZX_DCAPS_INTEL_SKYLAKE \ + (AZX_DCAPS_INTEL_PCH | AZX_DCAPS_SEPARATE_STREAM_TAG) + /* quirks for ATI SB / AMD Hudson */ #define AZX_DCAPS_PRESET_ATI_SB \ (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \ @@ -1803,7 +1806,7 @@ static const struct pci_device_id azx_id .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, /* Sunrise Point-LP */ { PCI_DEVICE(0x8086, 0x9d70), - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, + .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, /* Haswell */ { PCI_DEVICE(0x8086, 0x0a0c), .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
From: Libin Yang <[email protected]> Date: Thu, 26 Mar 2015 13:28:39 +0800 Subject: ALSA: hda_intel: apply the Seperate stream_tag for Sunrise Point The total stream number of Sunrise Point's input and output stream exceeds 15, which will cause some streams do not work because of the overflow on SDxCTL.STRM field if using the legacy stream tag allocation method. This patch uses the new stream tag allocation method by add the flag AZX_DCAPS_SEPARATE_STREAM_TAG for Skylake platform. Signed-off-by: Libin Yang <[email protected]> Signed-off-by: Takashi Iwai <[email protected]> Origin: backport, https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=db48abf4367cb1f9e118defee0a37238638c2752 Last-Update: 2016-01-07 --- --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -1803,7 +1803,7 @@ static const struct pci_device_id azx_id .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, /* Sunrise Point */ { PCI_DEVICE(0x8086, 0xa170), - .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, + .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, /* Sunrise Point-LP */ { PCI_DEVICE(0x8086, 0x9d70), .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE },

