[Bug 239341] HDA support doesn't work for me
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sat Jul 20 17:38:24 UTC 2019
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=239341
--- Comment #1 from shamaz.mazum at 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.
More information about the freebsd-virtualization
mailing list