[Nouveau] Only stereo sound with gtx570 over hdmi (regression)
Ben Skeggs
skeggsb at gmail.com
Tue Feb 17 14:45:51 PST 2015
On Tue, Feb 17, 2015 at 11:41 PM, Farid BENAMROUCHE <fariouche at yahoo.fr> wrote:
> Hello Ben,
>
> The working kernel code I based my investigation was a 1.3.17 + gentoo patch (so yes, pretty old)
>
> The new one below, not working is the vanilla 3.19 (from the gentoo repo, should be identical to the latest 3.19 stable)
>
> I've narrowed down the issue to the size of the eld.
> The new patch (that indeed uses drm_eld_size) (with this patch, I have a working 3.19 kernel):
> I will need to restart my computer with the non working kernel to check the eld output (by the way, what is the ELD?, is it the EDID?)
>
> Thanks
>
> --- drivers/gpu/drm/nouveau/nv50_display.c.orig 2015-02-15 20:04:10.583860698 +0100
> +++ drivers/gpu/drm/nouveau/nv50_display.c 2015-02-15 20:46:43.518148777 +0100
> @@ -1700,7 +1700,7 @@
> memcpy(args.data, nv_connector->base.eld, sizeof(args.data));
>
> nvif_mthd(disp->disp, 0, &args,
> - sizeof(args.base) + drm_eld_size(args.data));
> + sizeof(args.base));
That's... Odd. Can you boot with "nouveau.debug=drm=trace" both with
and without the patch and attach the results here?
Thanks,
Ben.
> }
>
> static void
>
> --------------------------------------------
> En date de : Mar 17.2.15, Ben Skeggs <skeggsb at gmail.com> a écrit :
>
> Objet: Re: [Nouveau] Only stereo sound with gtx570 over hdmi (regression)
> À: "Farid BENAMROUCHE" <fariouche at yahoo.fr>
> Cc: "nouveau at lists.freedesktop.org" <nouveau at lists.freedesktop.org>
> Date: Mardi 17 février 2015, 0h47
>
> On Mon, Feb 16, 2015 at
> 5:03 AM, Farid BENAMROUCHE <fariouche at yahoo.fr>
> wrote:
> > Hello all,
> >
> > I'm using gentoo,
> with kernel 3.17.0-p1-pf and at some point, a patch was
> included in this branch of the gentoo kernel that broke hdmi
> audio.
> >
> > I've
> checked with the latest 3.19 vanilla kernel, and I still
> have the same problem. I cannot output multichannel sound
> over hdmi.
> >
> > After
> some investigations, I've narrowed down the issue to the
> following lines in the file nv50_display.c:
> >
> > (the structure
> slightly changed and declared "packed". Reverting
> this change made the multichannel audio back)
> > I still do not known exactly when this
> modification was introoduced. If you need more details,
> please let me know.
> There were bugs in the
> implementation for a while that could've caused
> this problem. However, those should be fixed
> already by 3.19. What
> kernel version is
> your revert against? It's not the latest code,
> because that uses drm_eld_size().
>
> Testing on my TV at home
> (3.19.0-rc5), I see this in /proc/asound/card1/eld#0.0:
>
> monitor_present 1
> eld_valid 1
> monitor_name
> SAMSUNG
> connection_type HDMI
> eld_version [0x2] CEA-861D or below
> edid_version [0x3] CEA-861-B, C or D
> manufacture_id 0x2d4c
> product_id 0x69b
> port_id 0x0
> support_hdcp 0
> support_ai 1
> audio_sync_delay 0
> speakers
> [0xf] FL/FR LFE FC RL/RR
> sad_count 4
> sad0_coding_type [0x1] LPCM
> sad0_channels 2
> sad0_rates
> [0x6e0] 32000 44100 48000 88200 96000
> sad0_bits [0xe0000] 16 20 24
> sad1_coding_type [0x1] LPCM
> sad1_channels 6
> sad1_rates
> [0x6e0] 32000 44100 48000 88200 96000
> sad1_bits [0xe0000] 16 20 24
> sad2_coding_type [0x2] AC-3
> sad2_channels 6
> sad2_rates
> [0xe0] 32000 44100 48000
> sad2_max_bitrate
> 640000
> sad3_coding_type [0x7] DTS
> sad3_channels 6
> sad3_rates
> [0xe0] 32000 44100 48000
> sad3_max_bitrate
> 1536000
>
> Which looks
> correct, and like the code you mention is doing the right
> thing.
>
> Thanks,
> Ben.
>
>
> >
> > ---
> working_kernel/drivers/gpu/drm/nouveau/nv50_display.c
> > +++
> not_working_kernel/drivers/gpu/drm/nouveau/nv50_display.c
> > @@ -1653,15 +1653,17 @@
> > struct
> nouveau_encoder *nv_encoder = nouveau_encoder(encoder);
> > struct
> nouveau_connector *nv_connector;
> >
> struct nv50_disp *disp =
> nv50_disp(encoder->dev);
> > -
> struct {
> > -
> struct nv50_disp_mthd_v1 base;
> > - struct
> nv50_disp_sor_hda_eld_v0 eld;
> > +
> struct __packed {
> > +
> struct {
> > +
> struct
> nv50_disp_mthd_v1 mthd;
> > +
> struct nv50_disp_sor_hda_eld_v0
> eld;
> > + }
> base;
> >
> u8 data[sizeof(nv_connector->base.eld)];
> > } args = {
> > -
> .base.version = 1,
> > -
> .base.method =
> NV50_DISP_MTHD_V1_SOR_HDA_ELD,
> > -
> .base.hasht =
> nv_encoder->dcb->hasht,
> > -
> .base.hashm =
> nv_encoder->dcb->hashm,
> > +
> .base.mthd.version = 1,
> > +
> .base.mthd.method =
> NV50_DISP_MTHD_V1_SOR_HDA_ELD,
> > +
> .base.mthd.hasht =
> nv_encoder->dcb->hasht,
> > +
> .base.mthd.hashm =
> nv_encoder->dcb->hashm,
> >
> };
> >
> >
> nv_connector =
> nouveau_encoder_connector_get(nv_encoder);
> > @@ -1671,7 +1673,7 @@
> >
> drm_edid_to_eld(&nv_connector->base,
> nv_connector->edid);
> >
> memcpy(args.data, nv_connector->base.eld,
> sizeof(args.data));
> >
> > -
> nvif_mthd(disp->disp, 0, &args,
> sizeof(args));
> > +
> nvif_mthd(disp->disp, 0, &args,
> sizeof(args.base) + args.data[2] * 4);
> > }
> >
> > static void
> >
> >
> >
> _______________________________________________
> > Nouveau mailing list
> >
> Nouveau at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/nouveau
>
More information about the Nouveau
mailing list