HomeFreeBSD

dwmmc: Multiple busdma fixes.

Description

dwmmc: Multiple busdma fixes.

  • limit maximum segment size to 2048 bytes. Although dwmmc supports a buffer fragment with a maximum length of 4095 bytes, use the nearest lower power of two as the maximum fragment size. Otherwise, busdma create excessive buffer fragments.
  • fix off by one error in computation of the maximum data transfer length.
  • in addition, reserve two DMA descriptors that can be used by busdma bouncing. The beginning or end of the buffer can be misaligned.
  • Don’t ignore errors passed to bus_dmamap_load() callback function.
  • In theory, a DMA engine may be running at time when next dma descriptor is constructed. Create a full DMA descriptor before OWN bit is set.

Approved by: re (gjb)

(cherry picked from commit 8727c174b0fe44766bb7ea765dac6d5f82818103)
(cherry picked from commit e8dfdf40bed9b016b4db2ed008d2d8333073f38c)

Details

Provenance
mmelAuthored on Jan 21 2021, 2:06 PM
Parents
rG72d3aeb1b229: arm32: Align arguments of sync_icache() syscall to cacheline size.
Branches
Unknown
Tags
Unknown