mirror of
https://github.com/opnsense/src.git
synced 2026-04-23 15:19:31 -04:00
MFC r196380
Fix USB cache sync operations for platforms with non-coherent DMA. - usb_pc_cpu_invalidate() is called between [consecutive] reads from a device, so a sequence of BUS_DMASYNC_POSTREAD and _PREREAD should be used. Note we cannot use or'ed shorthand ( _POSTREAD | _PREREAD) for BUS_DMASYNC flags, as the low level bus dma sync operation is implementation dependent and we cannot assume the required order of operations to be guaranteed. - usb_pc_cpu_flush() is called before writing to a device, so BUS_DMASYNC_PREWRITE should be used. Submitted by: Grzegorz Bernacki Reviewed by: HPS, arm@, usb@ ML Tested by: HPS, Mike Tancsa Approved by: re (kib) Obtained from: Semihalf
This commit is contained in:
parent
e047c5fbb6
commit
49d96dc6dd
1 changed files with 3 additions and 4 deletions
|
|
@ -679,8 +679,8 @@ usb_pc_cpu_invalidate(struct usb_page_cache *pc)
|
|||
/* nothing has been loaded into this page cache! */
|
||||
return;
|
||||
}
|
||||
bus_dmamap_sync(pc->tag, pc->map,
|
||||
BUS_DMASYNC_POSTWRITE | BUS_DMASYNC_POSTREAD);
|
||||
bus_dmamap_sync(pc->tag, pc->map, BUS_DMASYNC_POSTREAD);
|
||||
bus_dmamap_sync(pc->tag, pc->map, BUS_DMASYNC_PREREAD);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------*
|
||||
|
|
@ -693,8 +693,7 @@ usb_pc_cpu_flush(struct usb_page_cache *pc)
|
|||
/* nothing has been loaded into this page cache! */
|
||||
return;
|
||||
}
|
||||
bus_dmamap_sync(pc->tag, pc->map,
|
||||
BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD);
|
||||
bus_dmamap_sync(pc->tag, pc->map, BUS_DMASYNC_PREWRITE);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------*
|
||||
|
|
|
|||
Loading…
Reference in a new issue