Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Jul 2019 17:38:23 +0000
From:      bugzilla-noreply@freebsd.org
To:        virtualization@FreeBSD.org
Subject:   [Bug 239341] HDA support doesn't work for me
Message-ID:  <bug-239341-27103-ye4Cbh5bvZ@https.bugs.freebsd.org/bugzilla/>
In-Reply-To: <bug-239341-27103@https.bugs.freebsd.org/bugzilla/>
References:  <bug-239341-27103@https.bugs.freebsd.org/bugzilla/>

next in thread | previous in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D239341

--- Comment #1 from shamaz.mazum@gmail.com ---
Unfortunately, this quick&dirty fix works only for Fedora as a guest. And l=
et
me clarify myself a bit about that 4 byte shift.

I've added some additional debug code into hda_stream_start

diff --git a/usr.sbin/bhyve/pci_hda.c b/usr.sbin/bhyve/pci_hda.c
index 99f8aec31c6..9d19e2ec504 100644
--- a/usr.sbin/bhyve/pci_hda.c
+++ b/usr.sbin/bhyve/pci_hda.c
@@ -678,6 +678,20 @@ hda_stream_start(struct hda_softc *sc, uint8_t stream_=
ind)

        st->bdl_cnt =3D bdl_cnt;

+       /* bdl_vaddr -=3D 4; */
+
+       bdle =3D (struct hda_bdle *)bdl_vaddr;
+       for (i =3D 0; i < bdl_cnt; i++, bdle++) {
+               bdle_sz =3D bdle->len;
+               assert(!(bdle_sz % HDA_DMA_ACCESS_LEN));
+
+               bdle_addrl =3D bdle->addrl;
+               bdle_addrh =3D bdle->addrh;
+
+               bdle_paddr =3D bdle_addrl | (bdle_addrh << 32);
+               DPRINTF("paddr: 0x%lx, len: 0x%x\n", bdle_paddr, bdle_sz);
+       }
+
        bdle =3D (struct hda_bdle *)bdl_vaddr;
        for (i =3D 0; i < bdl_cnt; i++, bdle++) {
                bdle_sz =3D bdle->len;


This is what I get in bhyve_hda.log when booting Fedora.

hda_stream_start-677: stream: 0x4 bdl_cnt: 0x2 bdl_paddr: 0x75a09000
hda_stream_start-692: paddr: 0x79f0000000000000, len: 0x0
hda_stream_start-692: paddr: 0x79f2b11000000000, len: 0x0
hda_stream_start-706: Fail to get the guest virtual address

I have gussed that bdl_vaddr is incorrect and bdle->addrh actualy contains
bdle->addrl, and bdle->ioc is actually bdle->len. So I subtracted 4 from
bdl_vaddr and got sound worked. But, unfortunatelly, it works only with Fed=
ora
guest. Other guests give no sound output or noise.

Waiting reply from users of CURRENT. Do you have the same trouble?

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-239341-27103-ye4Cbh5bvZ>