Message ID | 20191119084710.29267-5-nmahale@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ALSA: hda - Add DP-MST support for NVIDIA codecs | expand |
Hi there, since i updated to kernel 5.5 i have no sound over hdmi anymore (GeForce RTX 2070). With the previous kernel 5.4.14 everything is fine. Although i got sound with speaker-test -D hdmi:CARD=NVidia,DEV=2 -c 2 -r 44100, pavucontrol shows all hdmi sound devices as unplugged. I bisected it down to this commit (5398e94fb753d022301825ebfa5f7cf8a660d8eb) and changed the line HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi) to HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi_legacy) Now it's working again. I'm not sure if this is a problem with pulseaudio or if the RTX 2070 does not support the mentioned codec. Thanks in advance Martin
On Sat, 01 Feb 2020 16:28:08 +0100, Martin Regner wrote: > > Hi there, > > since i updated to kernel 5.5 i have no sound over hdmi anymore (GeForce RTX > 2070). > > With the previous kernel 5.4.14 everything is fine. > > Although i got sound with speaker-test -D hdmi:CARD=NVidia,DEV=2 -c 2 -r > 44100, pavucontrol shows all hdmi sound devices as unplugged. > > I bisected it down to this commit (5398e94fb753d022301825ebfa5f7cf8a660d8eb) > and changed the line > > HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi) > > to > > HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi_legacy) > > Now it's working again. I'm not sure if this is a problem with pulseaudio or > if the RTX 2070 does not support the mentioned codec. The runtime PM turns off the link, so the hotplug notification won't be delivered as default. Please try reading the corresponding proc file, /proc/asound/card*/codec* file. This may power up the codec and trigger the hotplug detection if that's the cause. Takashi
Hi Takashi, thanks for your reply. I tried that with cat /proc/asound/card0/codec#0 but that doesn't help. I'm digging me through the kernel config right now. May have to change something else. I simply could create a patch on my gentoo system switching from patch_nvhdmi to patch_nvhdmi_legacy for every new kernel, but that won't work forever. If you have other thinks i could try i'd appreciate to hear them. kind regards Martin On 02.02.20 09:37, Takashi Iwai wrote: > On Sat, 01 Feb 2020 16:28:08 +0100, > Martin Regner wrote: >> Hi there, >> >> since i updated to kernel 5.5 i have no sound over hdmi anymore (GeForce RTX >> 2070). >> >> With the previous kernel 5.4.14 everything is fine. >> >> Although i got sound with speaker-test -D hdmi:CARD=NVidia,DEV=2 -c 2 -r >> 44100, pavucontrol shows all hdmi sound devices as unplugged. >> >> I bisected it down to this commit (5398e94fb753d022301825ebfa5f7cf8a660d8eb) >> and changed the line >> >> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi) >> >> to >> >> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi_legacy) >> >> Now it's working again. I'm not sure if this is a problem with pulseaudio or >> if the RTX 2070 does not support the mentioned codec. > The runtime PM turns off the link, so the hotplug notification won't > be delivered as default. Please try reading the corresponding proc > file, /proc/asound/card*/codec* file. This may power up the codec and > trigger the hotplug detection if that's the cause. > > > Takashi
Dne 02. 02. 20 v 15:18 Martin Regner napsal(a): > Hi Takashi, > > thanks for your reply. I tried that with > > cat /proc/asound/card0/codec#0 > > but that doesn't help. I'm digging me through the kernel config right > now. May have to change something else. > > I simply could create a patch on my gentoo system switching from > patch_nvhdmi to patch_nvhdmi_legacy for every new kernel, but that won't > work forever. > > If you have other thinks i could try i'd appreciate to hear them. You may try to disable PM: echo on > /sys/bus/pci/devices/0000\:01\:00.1/power/control Jaroslav > > kind regards > Martin > > On 02.02.20 09:37, Takashi Iwai wrote: >> On Sat, 01 Feb 2020 16:28:08 +0100, >> Martin Regner wrote: >>> Hi there, >>> >>> since i updated to kernel 5.5 i have no sound over hdmi anymore (GeForce RTX >>> 2070). >>> >>> With the previous kernel 5.4.14 everything is fine. >>> >>> Although i got sound with speaker-test -D hdmi:CARD=NVidia,DEV=2 -c 2 -r >>> 44100, pavucontrol shows all hdmi sound devices as unplugged. >>> >>> I bisected it down to this commit (5398e94fb753d022301825ebfa5f7cf8a660d8eb) >>> and changed the line >>> >>> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi) >>> >>> to >>> >>> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi_legacy) >>> >>> Now it's working again. I'm not sure if this is a problem with pulseaudio or >>> if the RTX 2070 does not support the mentioned codec. >> The runtime PM turns off the link, so the hotplug notification won't >> be delivered as default. Please try reading the corresponding proc >> file, /proc/asound/card*/codec* file. This may power up the codec and >> trigger the hotplug detection if that's the cause. >> >> >> Takashi > > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > https://mailman.alsa-project.org/mailman/listinfo/alsa-devel >
Hi Jaroslav, thanks for the tip. I tried this (in my case echo on > /sys/bus/pci/devices/0000\:09\:00.1/power/control) but that didn't help. If i comment out the line spec->dyn_pcm_assign = true; in patch_nvhdmi sound is working again. Curiously nobody else seems to have this problem. This makes me think the problem lies elsewhere but i have no more ideas at the moment. On 03.02.20 00:00, Jaroslav Kysela wrote: > Dne 02. 02. 20 v 15:18 Martin Regner napsal(a): >> Hi Takashi, >> >> thanks for your reply. I tried that with >> >> cat /proc/asound/card0/codec#0 >> >> but that doesn't help. I'm digging me through the kernel config right >> now. May have to change something else. >> >> I simply could create a patch on my gentoo system switching from >> patch_nvhdmi to patch_nvhdmi_legacy for every new kernel, but that won't >> work forever. >> >> If you have other thinks i could try i'd appreciate to hear them. > > You may try to disable PM: > > echo on > /sys/bus/pci/devices/0000\:01\:00.1/power/control > > Jaroslav > > >> >> kind regards >> Martin >> >> On 02.02.20 09:37, Takashi Iwai wrote: >>> On Sat, 01 Feb 2020 16:28:08 +0100, >>> Martin Regner wrote: >>>> Hi there, >>>> >>>> since i updated to kernel 5.5 i have no sound over hdmi anymore >>>> (GeForce RTX >>>> 2070). >>>> >>>> With the previous kernel 5.4.14 everything is fine. >>>> >>>> Although i got sound with speaker-test -D hdmi:CARD=NVidia,DEV=2 -c >>>> 2 -r >>>> 44100, pavucontrol shows all hdmi sound devices as unplugged. >>>> >>>> I bisected it down to this commit >>>> (5398e94fb753d022301825ebfa5f7cf8a660d8eb) >>>> and changed the line >>>> >>>> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi) >>>> >>>> to >>>> >>>> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi_legacy) >>>> >>>> Now it's working again. I'm not sure if this is a problem with >>>> pulseaudio or >>>> if the RTX 2070 does not support the mentioned codec. >>> The runtime PM turns off the link, so the hotplug notification won't >>> be delivered as default. Please try reading the corresponding proc >>> file, /proc/asound/card*/codec* file. This may power up the codec and >>> trigger the hotplug detection if that's the cause. >>> >>> >>> Takashi >> >> >> _______________________________________________ >> Alsa-devel mailing list >> Alsa-devel@alsa-project.org >> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel >> > >
Dne 03. 02. 20 v 0:50 Martin Regner napsal(a): > Hi Jaroslav, > > thanks for the tip. I tried this (in my case echo on > > /sys/bus/pci/devices/0000\:09\:00.1/power/control) but that didn't help. > > If i comment out the line > > spec->dyn_pcm_assign = true; > > in patch_nvhdmi sound is working again. Could you show us (upload it to the alsa server and post only URLs) the output from alsa-info.sh for both variants (spec->dyn_pcm_assign = true and false) ? Thanks, Jaroslav > > Curiously nobody else seems to have this problem. This makes me think > the problem lies elsewhere but i have no more ideas at the moment. > > On 03.02.20 00:00, Jaroslav Kysela wrote: >> Dne 02. 02. 20 v 15:18 Martin Regner napsal(a): >>> Hi Takashi, >>> >>> thanks for your reply. I tried that with >>> >>> cat /proc/asound/card0/codec#0 >>> >>> but that doesn't help. I'm digging me through the kernel config right >>> now. May have to change something else. >>> >>> I simply could create a patch on my gentoo system switching from >>> patch_nvhdmi to patch_nvhdmi_legacy for every new kernel, but that won't >>> work forever. >>> >>> If you have other thinks i could try i'd appreciate to hear them. >> >> You may try to disable PM: >> >> echo on > /sys/bus/pci/devices/0000\:01\:00.1/power/control >> >> Jaroslav >> >> >>> >>> kind regards >>> Martin >>> >>> On 02.02.20 09:37, Takashi Iwai wrote: >>>> On Sat, 01 Feb 2020 16:28:08 +0100, >>>> Martin Regner wrote: >>>>> Hi there, >>>>> >>>>> since i updated to kernel 5.5 i have no sound over hdmi anymore >>>>> (GeForce RTX >>>>> 2070). >>>>> >>>>> With the previous kernel 5.4.14 everything is fine. >>>>> >>>>> Although i got sound with speaker-test -D hdmi:CARD=NVidia,DEV=2 -c >>>>> 2 -r >>>>> 44100, pavucontrol shows all hdmi sound devices as unplugged. >>>>> >>>>> I bisected it down to this commit >>>>> (5398e94fb753d022301825ebfa5f7cf8a660d8eb) >>>>> and changed the line >>>>> >>>>> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi) >>>>> >>>>> to >>>>> >>>>> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi_legacy) >>>>> >>>>> Now it's working again. I'm not sure if this is a problem with >>>>> pulseaudio or >>>>> if the RTX 2070 does not support the mentioned codec. >>>> The runtime PM turns off the link, so the hotplug notification won't >>>> be delivered as default. Please try reading the corresponding proc >>>> file, /proc/asound/card*/codec* file. This may power up the codec and >>>> trigger the hotplug detection if that's the cause. >>>> >>>> >>>> Takashi >>> >>> >>> _______________________________________________ >>> Alsa-devel mailing list >>> Alsa-devel@alsa-project.org >>> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel >>> >> >> >
hdmi_present_sense() |-> hdmi_present_sense_via_verbs() code path need to query PCM jack using pin_idx_to_jack() function and update its status, just like sync_eld_via_acomp(). Sending patch to get it fixed. Thanks, Nikhil Mahale On 2/3/20 1:07 PM, Jaroslav Kysela wrote: > External email: Use caution opening links or attachments > > > Dne 03. 02. 20 v 0:50 Martin Regner napsal(a): >> Hi Jaroslav, >> >> thanks for the tip. I tried this (in my case echo on > >> /sys/bus/pci/devices/0000\:09\:00.1/power/control) but that didn't help. >> >> If i comment out the line >> >> spec->dyn_pcm_assign = true; >> >> in patch_nvhdmi sound is working again. > > Could you show us (upload it to the alsa server and post only URLs) the output > from alsa-info.sh for both variants (spec->dyn_pcm_assign = true and false) ? > > Thanks, > Jaroslav > >> >> Curiously nobody else seems to have this problem. This makes me think >> the problem lies elsewhere but i have no more ideas at the moment. >> >> On 03.02.20 00:00, Jaroslav Kysela wrote: >>> Dne 02. 02. 20 v 15:18 Martin Regner napsal(a): >>>> Hi Takashi, >>>> >>>> thanks for your reply. I tried that with >>>> >>>> cat /proc/asound/card0/codec#0 >>>> >>>> but that doesn't help. I'm digging me through the kernel config right >>>> now. May have to change something else. >>>> >>>> I simply could create a patch on my gentoo system switching from >>>> patch_nvhdmi to patch_nvhdmi_legacy for every new kernel, but that won't >>>> work forever. >>>> >>>> If you have other thinks i could try i'd appreciate to hear them. >>> >>> You may try to disable PM: >>> >>> echo on > /sys/bus/pci/devices/0000\:01\:00.1/power/control >>> >>> Jaroslav >>> >>> >>>> >>>> kind regards >>>> Martin >>>> >>>> On 02.02.20 09:37, Takashi Iwai wrote: >>>>> On Sat, 01 Feb 2020 16:28:08 +0100, >>>>> Martin Regner wrote: >>>>>> Hi there, >>>>>> >>>>>> since i updated to kernel 5.5 i have no sound over hdmi anymore >>>>>> (GeForce RTX >>>>>> 2070). >>>>>> >>>>>> With the previous kernel 5.4.14 everything is fine. >>>>>> >>>>>> Although i got sound with speaker-test -D hdmi:CARD=NVidia,DEV=2 -c >>>>>> 2 -r >>>>>> 44100, pavucontrol shows all hdmi sound devices as unplugged. >>>>>> >>>>>> I bisected it down to this commit >>>>>> (5398e94fb753d022301825ebfa5f7cf8a660d8eb) >>>>>> and changed the line >>>>>> >>>>>> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi) >>>>>> >>>>>> to >>>>>> >>>>>> HDA_CODEC_ENTRY(0x10de0093, "GPU 93 HDMI/DP", patch_nvhdmi_legacy) >>>>>> >>>>>> Now it's working again. I'm not sure if this is a problem with >>>>>> pulseaudio or >>>>>> if the RTX 2070 does not support the mentioned codec. >>>>> The runtime PM turns off the link, so the hotplug notification won't >>>>> be delivered as default. Please try reading the corresponding proc >>>>> file, /proc/asound/card*/codec* file. This may power up the codec and >>>>> trigger the hotplug detection if that's the cause. >>>>> >>>>> >>>>> Takashi >>>> >>>> >>>> _______________________________________________ >>>> Alsa-devel mailing list >>>> Alsa-devel@alsa-project.org >>>> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel >>>> >>> >>> >> > > > -- > Jaroslav Kysela <perex@perex.cz> > Linux Sound Maintainer; ALSA Project; Red Hat, Inc.
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index 1ba485da17c0..7c2b251e96c5 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -1337,15 +1337,32 @@ static int hdmi_read_pin_conn(struct hda_codec *codec, int pin_idx) } static int hdmi_find_pcm_slot(struct hdmi_spec *spec, - struct hdmi_spec_per_pin *per_pin) + struct hdmi_spec_per_pin *per_pin) { int i; - /* try the prefer PCM */ - if (!test_bit(per_pin->pin_nid_idx, &spec->pcm_bitmap)) + /* + * generic_hdmi_build_pcms() allocates (num_nids + dev_num - 1) + * number of pcms. + * + * The per_pin of pin_nid_idx=n and dev_id=m prefers to get pcm-n + * if m==0. This guarantees that dynamic pcm assignments are compatible + * with the legacy static per_pin-pmc assignment that existed in the + * days before DP-MST. + * + * per_pin of m!=0 prefers to get pcm=(num_nids + (m - 1)). + */ + if (per_pin->dev_id == 0 && + !test_bit(per_pin->pin_nid_idx, &spec->pcm_bitmap)) return per_pin->pin_nid_idx; - /* have a second try; check the "reserved area" over num_pins */ + if (per_pin->dev_id != 0 && + !(test_bit(spec->num_nids + (per_pin->dev_id - 1), + &spec->pcm_bitmap))) { + return spec->num_nids + (per_pin->dev_id - 1); + } + + /* have a second try; check the area over num_nids */ for (i = spec->num_nids; i < spec->pcm_used; i++) { if (!test_bit(i, &spec->pcm_bitmap)) return i; @@ -3519,6 +3536,40 @@ static int patch_nvhdmi(struct hda_codec *codec) struct hdmi_spec *spec; int err; + err = alloc_generic_hdmi(codec); + if (err < 0) + return err; + codec->dp_mst = true; + + spec = codec->spec; + spec->dyn_pcm_assign = true; + + err = hdmi_parse_codec(codec); + if (err < 0) { + generic_spec_free(codec); + return err; + } + + generic_hdmi_init_per_pins(codec); + + spec->dyn_pin_out = true; + + spec->chmap.ops.chmap_cea_alloc_validate_get_type = + nvhdmi_chmap_cea_alloc_validate_get_type; + spec->chmap.ops.chmap_validate = nvhdmi_chmap_validate; + + codec->link_down_at_suspend = 1; + + generic_acomp_init(codec, &nvhdmi_audio_ops, nvhdmi_port2pin); + + return 0; +} + +static int patch_nvhdmi_legacy(struct hda_codec *codec) +{ + struct hdmi_spec *spec; + int err; + err = patch_generic_hdmi(codec); if (err) return err; @@ -4127,25 +4178,25 @@ HDA_CODEC_ENTRY(0x10de0004, "GPU 04 HDMI", patch_nvhdmi_8ch_7x), HDA_CODEC_ENTRY(0x10de0005, "MCP77/78 HDMI", patch_nvhdmi_8ch_7x), HDA_CODEC_ENTRY(0x10de0006, "MCP77/78 HDMI", patch_nvhdmi_8ch_7x), HDA_CODEC_ENTRY(0x10de0007, "MCP79/7A HDMI", patch_nvhdmi_8ch_7x), -HDA_CODEC_ENTRY(0x10de0008, "GPU 08 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de0009, "GPU 09 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de000a, "GPU 0a HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de000b, "GPU 0b HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de000c, "MCP89 HDMI", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de000d, "GPU 0d HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de0010, "GPU 10 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de0011, "GPU 11 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de0012, "GPU 12 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de0013, "GPU 13 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de0014, "GPU 14 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de0015, "GPU 15 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de0016, "GPU 16 HDMI/DP", patch_nvhdmi), +HDA_CODEC_ENTRY(0x10de0008, "GPU 08 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de0009, "GPU 09 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de000a, "GPU 0a HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de000b, "GPU 0b HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de000c, "MCP89 HDMI", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de000d, "GPU 0d HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de0010, "GPU 10 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de0011, "GPU 11 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de0012, "GPU 12 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de0013, "GPU 13 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de0014, "GPU 14 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de0015, "GPU 15 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de0016, "GPU 16 HDMI/DP", patch_nvhdmi_legacy), /* 17 is known to be absent */ -HDA_CODEC_ENTRY(0x10de0018, "GPU 18 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de0019, "GPU 19 HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de001a, "GPU 1a HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de001b, "GPU 1b HDMI/DP", patch_nvhdmi), -HDA_CODEC_ENTRY(0x10de001c, "GPU 1c HDMI/DP", patch_nvhdmi), +HDA_CODEC_ENTRY(0x10de0018, "GPU 18 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de0019, "GPU 19 HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de001a, "GPU 1a HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de001b, "GPU 1b HDMI/DP", patch_nvhdmi_legacy), +HDA_CODEC_ENTRY(0x10de001c, "GPU 1c HDMI/DP", patch_nvhdmi_legacy), HDA_CODEC_ENTRY(0x10de0020, "Tegra30 HDMI", patch_tegra_hdmi), HDA_CODEC_ENTRY(0x10de0022, "Tegra114 HDMI", patch_tegra_hdmi), HDA_CODEC_ENTRY(0x10de0028, "Tegra124 HDMI", patch_tegra_hdmi),