Return to BSD News archive
Xref: sserve comp.os.os2.programmer:13316 comp.os.linux.development:115 comp.os.mach:3179 comp.os.minix:22564 comp.periphs:4137 comp.unix.bsd:12428 comp.unix.pc-clone.32bit:4083 comp.os.386bsd.development:1078
Newsgroups: comp.os.os2.programmer,comp.os.linux.development,comp.os.mach,comp.os.minix,comp.periphs,comp.unix.bsd,comp.unix.pc-clone.32bit,comp.os.386bsd.development
Path: sserve!newshost.anu.edu.au!munnari.oz.au!news.Hawaii.Edu!ames!agate!spool.mu.edu!umn.edu!csus.edu!netcom.com!jmonroy
From: jmonroy@netcom.com (Jesus Monroy Jr)
Subject: ^&#%$ DMA Problem Solved !
Message-ID: <jmonroyCBw006.DKz@netcom.com>
Keywords: DMA intel 8273 overrun fdc qic-40 qic
Organization: NETCOM On-line Communication Services (408 241-9760 guest)
Date: Tue, 17 Aug 1993 04:48:05 GMT
Lines: 100
^$#% DMA Problem Solved!!
-------------------------
After much disccussion (arguement) the DMA problem,
today may have a conclusion. This DMA problem was a major
stumbling block for 386bsd release 0.0. I won't go into
details on this now, I will write an article on this and give
all the details.
Basic problem: Basicly, (we think) the RAM refresh is colliding
with the FDC DREQ(DMA request). Actually any fast
DMA device can have initate this problem, it just
happens that the RAM refresh is a common demoninator
for this. The causes is that the DACK
(DMA Acknowledge) to falls late. Much dissucssion
ensued on this suggestion with many people insisting
that it was not likely or possible. Today I have the
conclusive evidence that this is the most likely problem.
Evidences and Ideas to date:
1) Evidence was presented, via a discussion with a
design engineer, that RAM refresh was the problem.
2) Evidence was presented, that masking the Interrupt
controller (i8259) did not solve the problem.
3) In the same article, evidence that masking off
the DMA controller (i8237) did not help.
4) Reprograming the DMA controller did not help.
5) Suggestions were made that the device driver was
written in error.
6) Suggestion was made that possiblely another DMA
device was the culpurit, discounted since the
386bsd SCSI card was a (SCSI) bus master.
7) Evidence was presented that with timing charts that
this was the most likely problem, but was not readily
accepted.
8) Finally, not presented, but e-mailed to me an
inspiration that maybe the compiler was using
the "LOCK" nuemonic for variables with the modifer
"volatile". This was discounted because of the
irrattic method that GNU C++ uses the "LOCK"
mechanism.
Solution to problem:
Irregular comments by many have spurred these
ideas and even though some things may have not
been done in a wholely profession nature,
none the less, the remarks were taken as positive,
when positive.
LAST BACK FLAME:
Have a nice day.
From the 1988:
"Intel Microprocessor and Peripheral Handbook,
Volume 2"
Application Note: AP-289
"Designing with the 82072 CHMOS Single-Chip
Floppy Disk Controller"
in
Chapter 3, Section 3.3
"Setting the FIFO Threshold"
"The transaction involved in bus acquisition and
release imply overhead resulting in losing system
clocks due to signal propagation delays and
arbitration time requirements. For many short DMA
bursts, up to 5 clocks are lost due to this switching.
On the other hand, long burst transfers imply that
other masters will experience long delays in bus
acquisition. An optimal FIFO thresold must be
selected that improves system performance and, at the
same time, ensures that OVERRUN and UNDERRUN errors
are avoided."
The i87072, FDC, is equiped with a 16 byte FIFO.
___________________________________________________________________________
Jesus Monroy Jr jmonroy@netcom.com
/386BSD/device-drivers /fd /qic /clock /documentation
___________________________________________________________________________