tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: bus_dmamap_sync() for uhci(4)
On Mon, Jun 16, 2008 at 08:54:37AM -0400, Michael Lorenz wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hello,
>
> On Jun 16, 2008, at 07:20, Manuel Bouyer wrote:
> >On Sat, Jun 14, 2008 at 10:13:42PM -0400, Michael Lorenz wrote:
> >>[...]
> >>>....................................................umass0: BBB
> >>>reset failed, TIMEOUT
> >>>umass0: BBB bulk-in clear stall failed, TIMEOUT
> >>>umass0: BBB bulk-out clear stall failed, TIMEOUT
> >>>umass0: Invalid CSW: tag 1674 should be 12675
> >>>umass0: BBB reset failed, TIMEOUT
> >>
> >>I saw similar errors on sgimips, Manuel's latest patch fixed them
> >>here, although I get different problems now ( which look a bit like
> >>missing wbflush()es after filling DMA buffers )
> >
> >But all DMA buffers should be mapped uncacheable ...
>
> Yes, but the CPU still has write buffers that need to be flushed.
>
> >I see that the sgimips bus_dmamap_sync() uses wmb(), which I assume
> >is a
> >write memory barrier. Does it also act as a barrier for reads ? Can a
> >read be reordered ahead of another read or write on this CPU ?
>
> At least this R5k reorders memory accesses all the time, I ran into
> that a few time when hacking crmfb and when writing the crime driver
> for XFree86. When we fill a DMA buffer to be sent to some device we
> will need to wbflush() ( or __asm("sync"); ) before doing anything
> with it. Same for register writes, if order is important you need to
> sprinkle barriers all over the place.
OK, there is a wbflush() in _bus_dmamap_sync_mips3() which is always called,
so this should be enough (unless I missed bus_dmamap_sync() calls in some
places).
--
Manuel Bouyer, LIP6, Universite Paris VI.
Manuel.Bouyer%lip6.fr@localhost
NetBSD: 26 ans d'experience feront toujours la difference
--
Home |
Main Index |
Thread Index |
Old Index