Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 9 Mar 2003 22:06:55 -0800 (PST)
From:      "Bruce R. Montague" <brucem@cruzio.com>
To:        freebsd-current@FreeBSD.ORG
Cc:        sos@FreeBSD.ORG
Subject:   Re: ATA CS5530 (cyrix) driver panic (ata_cyrix_setmode())
Message-ID:  <200303100606.h2A66tn01508@cruzio.com>

next in thread | raw e-mail | index | archive | help


Hi, regarding the CS5530 driver initialization
(ata cyrix) panic, the problem of channel "dma"
and "r_bmio" fields being 0 is due to the hardware
PCI config cmd register not having the expected
value. In "ata-pci.c / ata_pci_attach()" the code
fragment:

/* is busmastering supported ? */
if ((cmd & (PCIM_CMD_PORTEN | PCIM_CMD_BUSMASTEREN)) ==
(PCIM_CMD_PORTEN | PCIM_CMD_BUSMASTEREN)) {

failed because "cmd" was 0x01 instead of 0x05 (the
PORTEN | BUSMASTEREN is 0x05). The 5530 datasheet
(well, SC1200 datasheet) says cmd bit 2 (Bus
Master) must be set to 1...  why isnt it?

Changing the code at the top of ata_pci_attach()
from:
 cmd = pci_read_config(dev, PCIR_COMMAND, 2);

to:
 pci_write_config(dev, PCIR_COMMAND, 0x05, 2 );
 cmd = pci_read_config(dev, PCIR_COMMAND, 2);

causes the driver to not to panic on "ata_cyrix_setmode()";
it appears to complete both the probe and attach boot
operations.

Now the driver is dying (the system is hanging)
at the first attempt to use dma, that is, after
the first call to "ata_dmastart()".  The
"ata_dmastart()" completes ok, but the system
immediatly hangs (it appears up, but spinning at
interrupt level or somesuch, I can sometimes break
into ddb or scroll the console a bit before things
totally freeze). I'll see what else I can find.


Replacing use of the TSC by the 8254 appears to
have nothing to do with this problem (although
it's necessary for anything even close to accurate
sleep'ing). 



The older version of -current doesn't have this
problem. I'll see if I can find why. It's the
same hardware, I can boot either system and the
old ata driver works ok. I'm debugging the new
-current under the old working -current. Did
something change in the PCI initialization that's
likely a cause?


 - bruce



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




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