Anything stronger than hw.ata.ata_dma="0"?

John Murphy sub02 at freeode.co.uk
Wed Aug 30 14:48:26 UTC 2006


I'm trying to get a Kingston 1GB 50x 'elite pro' Compact Flash working
as ad1 initially, and then move it to ad0 to install FreeBSD-6.1 on it.

The hardware is an Soekris net4801 and it's known that CF cards usually
only work in PIO mode.  A line in /boot/loader.conf saying:
hw.ata.ata_dma="0" is usually enough, but not in this case.  It seems,
from the output of a verbose boot (see below), that the controller is
successfully setting PIO4 mode, but then it sets UDMA33 again, eventually
failing with:

ad1: FAILURE - READ_DMA timed out LBA=0

Using 'atacontrol mode ad1 PIO4' works and I can then fdisk, label and
mount it without error.  So what can I do that would be more effective
than the hw.ata.ata_dma sysctl.  I'm willing to patch the kernel source
and build a custom kernel if necessary.

> uname -a
FreeBSD mail.freeode.co.uk 6.0-RELEASE FreeBSD 6.0-RELEASE #9: Sun May  7
22:51:56 BST 2006     xxxx at mail.freeode.co.uk:/usr/src/sys/i386/compile/
SOEKRIS  i386

Soekris comBIOS detects:
Pri Sla  CF300  (LBA Xlt 999-32-63  1007 Mbyte)

ata parts of verbose boot output:

atapci0: <National Geode SC1100 ATA33 controller> port 0x1f0-0x1f7,0x3f6,0x170-0
x177,0x376,0xe000-0xe00f at device 18.2 on pci0
atapci0: Reserved 0x10 bytes for rid 0x20 type 4 at 0xe000
ata0: <ATA channel 0> on atapci0
atapci0: Reserved 0x8 bytes for rid 0x10 type 4 at 0x1f0
atapci0: Reserved 0x1 bytes for rid 0x14 type 4 at 0x3f6
ata0: reset tp1 mask=03 ostat0=50 ostat1=50
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ata0: [MPSAFE]
ata1: <ATA channel 1> on atapci0
atapci0: Reserved 0x8 bytes for rid 0x18 type 4 at 0x170
atapci0: Reserved 0x1 bytes for rid 0x1c type 4 at 0x376
ata1: reset tp1 mask=00 ostat0=ff ostat1=ff
ata1: [MPSAFE]
Geode CBA@ 0x6000
Geode rev: 06 03
Timecounter "Geode" frequency 27000000 Hz quality 1000
pci0: <bridge> at device 18.5 (no driver attached)
pci0: <serial bus, USB> at device 19.0 (no driver attached)
ata: ata0 already exists; skipping it
ata: ata1 already exists; skipping it
[...]
ata0-slave: pio=PIO4 wdma=WDMA2 udma=UDMA33 cable=40 wire
ata0-master: pio=PIO4 wdma=WDMA2 udma=UDMA100 cable=80 wire
ad0: success setting PIO4 on National chip
ad0: 38154MB <FUJITSU MHT2040AT 0022> at ata0-master PIO4
ad0: 78140160 sectors [77520C/16H/63S] 16 sectors/interrupt 1 depth queue
GEOM: new disk ad0
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ad1: 983MB <CF300 Ver1.27> at ata0-slave UDMA33
ad1: 2014992 sectors [1999C/16H/63S] 1 sectors/interrupt 1 depth queue
GEOM: new disk ad1
ata0: reiniting channel ..
ata0: reset stray irq7
tp1 mask=03 ostat0=50 ostat1=58
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ad0: success setting PIO4 on National chip
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ata0: reinit done ..
ad1: TIMEOUT - READ_DMA retrying (1 retry left) LBA=0
ata0: reiniting channel ..
ata0: reset tp1 mask=03 ostat0=50 ostat1=58
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ad0: success setting PIO4 on National chip
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ata0: reinit done ..
ad1: TIMEOUT - READ_DMA retrying (0 retries left) LBA=0
ata0: reiniting channel ..
ata0: reset tp1 mask=03 ostat0=50 ostat1=58
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ad0: success setting PIO4 on National chip
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ata0: reinit done ..
ad1: FAILURE - READ_DMA timed out LBA=0
ata0: reiniting channel ..
ata0: reset tp1 mask=03 ostat0=50 ostat1=58
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ad0: success setting PIO4 on National chip
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ata0: reinit done ..
ad1: TIMEOUT - READ_DMA retrying (1 retry left) LBA=1
ata0: reiniting channel ..
ata0: reset tp1 mask=03 ostat0=50 ostat1=58
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ad0: success setting PIO4 on National chip
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ata0: reinit done ..
ad1: TIMEOUT - READ_DMA retrying (0 retries left) LBA=1
ata0: reiniting channel ..
ata0: reset tp1 mask=03 ostat0=50 ostat1=58
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ad0: success setting PIO4 on National chip
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ata0: reinit done ..
ad1: FAILURE - READ_DMA timed out LBA=1
ata0: reiniting channel ..
ata0: reset tp1 mask=03 ostat0=50 ostat1=58
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ad0: success setting PIO4 on National chip
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ata0: reinit done ..
ad1: TIMEOUT - READ_DMA retrying (1 retry left) LBA=0
ata0: reiniting channel ..
ata0: reset tp1 mask=03 ostat0=50 ostat1=58
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ad0: success setting PIO4 on National chip
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ata0: reinit done ..
ad1: TIMEOUT - READ_DMA retrying (0 retries left) LBA=0
ata0: reiniting channel ..
ata0: reset tp1 mask=03 ostat0=50 ostat1=58
ata0: stat0=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: stat1=0x50 err=0x01 lsb=0x00 msb=0x00
ata0: reset tp2 stat0=50 stat1=50 devices=0x3<ATA_SLAVE,ATA_MASTER>
ad0: success setting PIO4 on National chip
ad1: success setting PIO4 on National chip
ad1: success setting UDMA33 on National chip
ata0: reinit done ..
ad1: FAILURE - READ_DMA timed out LBA=0
Trying to mount root from ufs:/dev/ad0s1a

-- 
Thanks, John.


More information about the freebsd-questions mailing list