Re: iwx 64-bit dma
Chris Cappuccio <[email protected]> Thu, 30 Jul 2026 18:33:49 -0700
| Newsgroups | gmane.os.openbsd.tech |
|---|---|
| Message-ID | <[email protected]> |
Theo de Raadt [[email protected]] wrote: > > The diff in question which adds BUS_DMA_64BIT is a declaration to > the higher-level code that _all_ chipsets supported by this driver can > work with 64 bit-addressable memory if the higher levels provide it. > Linux iwlwifi has a 36-bit dma limit for older hardware. For the AX200/201 and the AX210/211 it's 64-bit all the way. So iwx is doing the right thing. However, there is a bug with the AX200/201 dma engine crossing 32-bit boundaries: https://code.opensuse.org/kernel/kernel-source/blob/5377a688dcc5c526f0a5df6d91df22d8b4f2dce6/f/patches.suse/iwlwifi-pcie-extend-hardware-workaround-to-context-i.patch To avoid triggering it, we'd need to do something like this with any post-IOMMU addresses: iwx_crosses_4g_boundary(struct iwx_softc *sc, bus_addr_t addr, bus_size_t len) { if (sc->sc_device_family != IWX_DEVICE_FAMILY_22000) return 0; return (addr >> 32) != ((addr + len) >> 32); } ... for (i = 0; i < map->dm_nsegs; i++) { if (iwx_crosses_4g_boundary(sc, map->dm_segs[i].ds_addr, map->dm_segs[i].ds_len)) { /* remap */ } }