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 ___________________________________________________________________________