[Bug 274592] bus_dmamem_alloc()/bus_dmamap_load returns physical address outside the tag low/high bounds
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 19 Oct 2023 11:07:33 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=274592
Bug ID: 274592
Summary: bus_dmamem_alloc()/bus_dmamap_load returns physical
address outside the tag low/high bounds
Product: Base System
Version: 15.0-CURRENT
Hardware: arm64
OS: Any
Status: New
Severity: Affects Only Me
Priority: ---
Component: arm
Assignee: freebsd-arm@FreeBSD.org
Reporter: shafaisal.us@gmail.com
Hello Team,
We are using the below 3 routines to alloc DMA memory for one of our devices
connected through PCIe interface.
Out of 10 rebooted 4-5 times we get the address outside greated 32G range of
addresses, due to which our device functionality is effected and there is a
crash seen.
error = bus_dma_tag_create(bus_get_dma_tag(dev),
PAGE_SIZE,
0,
BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR,
NULL,
NULL,
128*1024*1024, 1,
128*1024*1024, BUS_DMA_COHERENT,
NULL, NULL,
&dma_tag);
error = bus_dmamem_alloc(dma_tag, &vaddr,
BUS_DMA_WAITOK | BUS_DMA_ZERO | BUS_DMA_COHERENT,
&dma_map);
error = bus_dmamap_load(dma_tag, dma_map, vaddr,
128*1024*1024, dma_mem_callback,
&dma_paddr, BUS_DMA_NOWAIT);
Below are the addresses we get for Working and non-working case
Working case vaddr and dma_paddr:
DMA phys addr with arm64_address_translate is 0xff000000cf000b80 for vaddr
0xffff00007ec00000
DMA phys addr with vtophys is 0xcf000000 for vaddr 0xffff00007ec00000
Non-Working case vaddr and dma_paddr:
DMA phys addr with arm64_address_translate is 0xff00000163000b80 for vaddr
0xffff00007ec00000
DMA phys addr with vtophys is 0x163000000 for vaddr 0xffff00007ec00000
--
You are receiving this mail because:
You are the assignee for the bug.