snd_hda works on i386, fails on amd64 (RELENG_7)
Rick C. Petty
rick-freebsd2008 at kiwi-computer.com
Sun Jun 14 06:21:59 UTC 2009
On Fri, Jun 05, 2009 at 11:30:20AM +0300, Alexander Motin wrote:
> Also you may try to change
> sc->support_64bit = HDA_FLAG_MATCH(gcap, HDAC_GCAP_64OK);
> line to
> sc->support_64bit = 0;
> , to strictly limit driver to 32bit addresses ignoring hardware
> capabilities.
Hmm, I looked at the place that queries support_64bit, in hdac_dma_alloc as
part of the lowaddr to the bus_dma_tag_create(9) call:
lowaddr = (sc->support_64bit) ? BUS_SPACE_MAXADDR :
BUS_SPACE_MAXADDR_32BIT;
...
On a whim, I tried manually setting lowaddr to BUS_SPACE_MAXADDR_24BIT and
it worked! A binary search revealed that it breaks for me when
lowaddr > 0x7FFFFFFF ... perhaps a 32-bit overflow bug related to DMA?
Out of curiosity, how come this same test (for support_64bit) isn't needed
before the bus_dma_tag_create() in hdac_attach?
-- Rick C. Petty
More information about the freebsd-multimedia
mailing list