Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: msk(4) require to sync status buffer
Hi! tsutsui-san,
From: Izumi Tsutsui <tsutsui%ceres.dti.ne.jp@localhost>
Date: Tue, 26 Feb 2008 07:56:36 +0900
> kiyohara%kk.iij4u.or.jp@localhost wrote:
>
> > > Then why do you think PREREAD/PREWRITE ops are requied here?
> >
> > The reason is that the msk driver clears SK_Y2_STOPC_OWN, and the DMA
> > buffer is returned to LSI. And, LSI writes status reading that
> > SK_Y2_STOPC_OWN is clear.
>
> That doesn't mean PREREAD/PREWRITE are required there.
> PREREAD/PREWRITE don't mean cache flush, as I said before.
> You should call bus_dmamap_sync(9) as API.
Yes. I call bus_dmamap_sync(9). macro MSK_CDSTSYNC() call bus_dmamap_sync().
I look like MSK_CDSTSYNC(sc, x, PREREAD|PREWRITE) is call
bus_dmamap_sync(..., PREREAD/PREWRITE).
> > > As noted in the previous mail, if there is no WRITE op
> > > (DMA xfer from CPU to device), POSTWRITE is not needed here.
> > > (though POSTWRITE is no-op on most implemetation)
> >
> > I think that it should do POSTREAD/POSTWRITE here because we are doing
> > PREREAD/PREWRITE beforehand.
>
> Then is PREWRITE actually required there?
I think require.
Do we tell to have cleared bit SK_Y2_STOPC_OWN to LSI?
> > > Strictly speaking, PREREAD or PREWRITE don't imply cache ops.
> > > We should call bus_dmamap_sync(9) ops as defined in its API,
> > > i.e. PREREAD/PREWRITE should be called before DMA started
> > > and POSTREAD/POSTWRITE should be called after DMA xfer.
> >
> > The DMA transfer of the status buffer that we had read at the end was not
> > completed. And status is sure to be written to this buffer at next.
>
> If DMA is still being processed, we should call POSTREAD/POSTWRITE
> just before CPU fetch and do PREREAD/PREWRITE right after CPU fetch
> as per API.
>
> > And, this buffer might be cached on the memory. In a word, it is
> > necessary to invalidate.
>
> Again, PREREAD/PREWRITE doesn't mean invalidate/writeback cache.
> It's opaque op and implementation dependent.
hmm.
You see "An example of using bus_dmamap_sync()," of man bus_dma(9).
It describe "flush write buffers and writeback". X-<
> Furthermore, on some architecbure invalidate can't be done
> without writeback. Even if your architecbure supports
> invalidate without writeback, you can't use invalidate
> (and have to use invalidate and writeback) if buffer isn't
> cacheline aligned. In that case, if you defer PREREAD calls
> (which might do writeback and invalidate), you might lost
> some DMA'ed data by CPU writeback.
If it is so, we will not be told clearly of the bit SK_Y2_STOPC_OWN to LSI.
And, such a machine will not be able to support msk(4).
Thanks,
--
kiyohara
Home |
Main Index |
Thread Index |
Old Index