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=239341

--- Comment #1 from shamaz.mazum@gmail.com ---
Unfortunately, this quick&dirty fix works only for Fedora as a guest. And let
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 = bdl_cnt;

+       /* bdl_vaddr -= 4; */
+
+       bdle = (struct hda_bdle *)bdl_vaddr;
+       for (i = 0; i < bdl_cnt; i++, bdle++) {
+               bdle_sz = bdle->len;
+               assert(!(bdle_sz % HDA_DMA_ACCESS_LEN));
+
+               bdle_addrl = bdle->addrl;
+               bdle_addrh = bdle->addrh;
+
+               bdle_paddr = bdle_addrl | (bdle_addrh << 32);
+               DPRINTF("paddr: 0x%lx, len: 0x%x\n", bdle_paddr, bdle_sz);
+       }
+
        bdle = (struct hda_bdle *)bdl_vaddr;
        for (i = 0; i < bdl_cnt; i++, bdle++) {
                bdle_sz = 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 Fedora
guest. Other guests give no sound output or noise.

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

-- 
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>