Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 17 May 2000 15:56:58 -0700 (PDT)
From:      Jin Guojun (FTG staff) <jin@george.lbl.gov>
To:        bright@wintelcom.net
Cc:        hackers@FreeBSD.ORG
Subject:   Re: How to make system Sync
Message-ID:  <200005172256.PAA25512@george.lbl.gov>

next in thread | raw e-mail | index | archive | help
Alfred Perlstein <bright@wintelcom.net> stated:
> > I had a couple of system out of sync problems.
> > 
> > (1) PCI sync problem:
> >       ATM adapter updates a buffer return pointer and generates intr, 
> >       but when driver pulls out the information that updated by adapter,
> >       some memory in the last piece of the pool is garbage.
> > e.g.
> >       head -> c0100000
> >       tail -> c0100400
> > 
> >       c0100000 -> buf0
> >       c0100004 -> buf1
> >       ...
> >       c0100100 -> bufn
> >       ...
> >       c0100160 -> bad address or 0
> >       ...
> > 
> > If I let driver tsleep() for a while, the problem can be improved.
> > So, it looks like that adapter pushed (DMA) the data into memory,
> > but not been seen by CPU right way due to the DMA sync issue.
> > How can we sync the DMA transaction in BSD?
> 
> I think the way you accomplish this is by telling the adapter to
> generate an interrupt when it's completed its DMA operation, you
> seem to be generating interupts at the start instead of the end.

I do not think I have control on when interrupt can be started.
The interrupts are generated when either the # of buffers below
the buffer threshold or the I/O packages greater than I/O threshold.

In Solaris driver, a ddi_dma_sync() routine is used for DMA sync in this case:

#define BCD_FLUSH_CACHE_FOR_HOST(dhandle, offset, length) \
        ddi_dma_sync(dhandle, offset, length, DDI_DMA_SYNC_FORKERNEL)

Only thing I am not clear is that reference manual says:

For this adapter, the SDRAM_CTRL register "should" have LB_64_ENB bit set to 1.

There is no further information on this register. I wonder this could cause
the problem since majority PC motherboards have a 32-bit PCI local bus (LB).

	-Jin


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200005172256.PAA25512>