Date: Wed, 27 May 2009 13:55:26 -0400 From: John Baldwin <jhb@freebsd.org> To: freebsd-current@freebsd.org Cc: Piotr =?utf-8?q?Zi=C4=99cik?= <kosmo@semihalf.com> Subject: Re: Generic ATA driver DMA coherency issues Message-ID: <200905271355.28791.jhb@freebsd.org> In-Reply-To: <200905271253.06693.kosmo@semihalf.com> References: <200905271253.06693.kosmo@semihalf.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 27 May 2009 6:53:06 am Piotr Zięcik wrote: > While working on bring-up SATA on ARM SoC I had issues with DMA memory > coherency. After tracing, I have found problem in generic ATA code behaviour. > > The ATA generic driver allocates 64k DMA workspace memory which can be > optionally used by ATA chipset drivers. Currently only ata-ahci, ata-marvell, > ata-promise and ata-siliconimage relies on this feature. In general, the > drivers use preallocated DMA workspace to hold small request descriptors, > consumed by hardware. > > All of these drivers do not synchronize workspace with bus_dmamap_sync(). They > assumes that DMA workspace is coherent. However ATA driver neither enforces > coherency by using BUS_DMA_COHERENT flag nor synchronizes the workspace with > bus_dmamap_sync(). > > I have fixed my problem by adding BUS_DMA_COHERENT flag to workspace > allocation code: > > diff --git a/sys/dev/ata/ata-dma.c b/sys/dev/ata/ata-dma.c > index ab4c3c8..71ee41b 100644 > --- a/sys/dev/ata/ata-dma.c > +++ b/sys/dev/ata/ata-dma.c > @@ -95,8 +95,8 @@ ata_dmainit(device_t dev) > 0, NULL, NULL, &ch->dma.work_tag)) > goto error; > > - if (bus_dmamem_alloc(ch->dma.work_tag, (void **)&ch->dma.work, 0, > - &ch->dma.work_map)) > + if (bus_dmamem_alloc(ch->dma.work_tag, (void **)&ch->dma.work, > + BUS_DMA_COHERENT, &ch->dma.work_map)) > goto error; > > if (bus_dmamap_load(ch->dma.work_tag, ch->dma.work_map, ch->dma.work, > > The question is about multiplatform impact of this change. Especially I am > curious how everything works without any problems on i386. The flag has no effect on x86. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200905271355.28791.jhb>
