* How to disable DMA for compact-flash disk?
@ 2009-08-11 18:51 Ben Greear
2009-08-11 19:12 ` Alan Cox
2009-08-11 20:24 ` Krzysztof Halasa
0 siblings, 2 replies; 9+ messages in thread
From: Ben Greear @ 2009-08-11 18:51 UTC (permalink / raw)
To: linux-kernel
I'm trying to use Fedora 11 with default kernel on an old via system
that boots from compact flash. DMA is not supported on the CF for
whatever reason, and in previous kernels, I've always disabled
DMA, first with ide=nodma, and then later with
ide_core.nodma=0.0 ide_core.nodma=0.1 ...
However, this no longer works in the 2.6.29.6 kernel.
Fedora 11 32-bit
Kernel 2.6.29.6-217.2.3.fc11.i686.PAE
(I can't get a custom built & somewhat hacked 2.6.31-rc5 to find a ramdisk or root-disk, but the
errors about unknown boot option are the same).
From dmesg output:
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 255649
Kernel command line: ro root=UUID=6f65a5dd-7872-4715-be9c-3741bd6ac7d3
ide_core.nodma=0.0 ide_core.nodma=0.1 ide_core.nodma=1.0 ide_core.nodm
a=1.1 console=ttyS0,38400
Unknown boot option `ide_core.nodma=0.0': ignoring
Unknown boot option `ide_core.nodma=0.1': ignoring
Unknown boot option `ide_core.nodma=1.0': ignoring
Unknown boot option `ide_core.nodma=1.1': ignoring
....
Gscsi0 : pata_via
scsi1 : pata_via
ata1: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xe900 irq 14
ata2: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xe908 irq 15
input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input2
ata1.01: CFA: TRANSCEND, 20081024, max UDMA/66
ata1.01: 3980592 sectors, multi 0: LBA
ata1.01: limited to UDMA/33 due to 40-wire cable
ata1.01: configured for UDMA/33
scsi 0:0:1:0: Direct-Access ATA TRANSCEND 2008 PQ: 0 ANSI: 5
sd 0:0:1:0: [sda] 3980592 512-byte hardware sectors: (2.03 GB/1.89 GiB)
sd 0:0:1:0: [sda] Write Protect is off
sd 0:0:1:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
sd 0:0:1:0: [sda] 3980592 512-byte hardware sectors: (2.03 GB/1.89 GiB)
sd 0:0:1:0: [sda] Write Protect is off
sd 0:0:1:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
sda:<3>ata1.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
ata1.01: cmd c8/00:08:00:00:00/00:00:00:00:00/f0 tag 0 dma 4096 in
res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.01: status: { DRDY }
ata1: soft resetting link
ata1.01: configured for UDMA/33
ata1: EH complete
ata1.01: limiting speed to UDMA/25:PIO4
ata1.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
ata1.01: cmd c8/00:08:00:00:00/00:00:00:00:00/f0 tag 0 dma 4096 in
res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.01: status: { DRDY }
ata1: soft resetting link
ata1.01: configured for UDMA/25
ata1: EH complete
ata1.01: limiting speed to PIO4
ata1.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen
ata1.01: cmd c8/00:08:00:00:00/00:00:00:00:00/f0 tag 0 dma 4096 in
res 40/00:00:00:00:00/00:00:00:00:00/00 Emask 0x4 (timeout)
ata1.01: status: { DRDY }
ata1: soft resetting link
ata1.01: configured for PIO4
ata1: EH complete
sda1
sd 0:0:1:0: [sda] Attached SCSI disk
sd 0:0:1:0: Attached scsi generic sg0 type 0
kjournald starting. Commit interval 5 seconds
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: How to disable DMA for compact-flash disk? 2009-08-11 18:51 How to disable DMA for compact-flash disk? Ben Greear @ 2009-08-11 19:12 ` Alan Cox 2009-08-14 20:49 ` Ben Greear 2009-08-11 20:24 ` Krzysztof Halasa 1 sibling, 1 reply; 9+ messages in thread From: Alan Cox @ 2009-08-11 19:12 UTC (permalink / raw) To: Ben Greear; +Cc: linux-kernel On Tue, 11 Aug 2009 11:51:18 -0700 Ben Greear <greearb@candelatech.com> wrote: > I'm trying to use Fedora 11 with default kernel on an old via system > that boots from compact flash. DMA is not supported on the CF for > whatever reason, and in previous kernels, I've always disabled > DMA, first with ide=nodma, and then later with > ide_core.nodma=0.0 ide_core.nodma=0.1 ... Fedora switched to libata some releases ago so libata.dma=n 0 - off 1 - disk only + 2 disk/CD + 4 disk/CD/CFA (so you can turn DMA off just for CFA devices providing they admit they are CFA) ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: How to disable DMA for compact-flash disk? 2009-08-11 19:12 ` Alan Cox @ 2009-08-14 20:49 ` Ben Greear 2009-08-14 21:10 ` Alan Cox 0 siblings, 1 reply; 9+ messages in thread From: Ben Greear @ 2009-08-14 20:49 UTC (permalink / raw) To: Alan Cox; +Cc: linux-kernel On 08/11/2009 12:12 PM, Alan Cox wrote: > On Tue, 11 Aug 2009 11:51:18 -0700 > Ben Greear<greearb@candelatech.com> wrote: > >> I'm trying to use Fedora 11 with default kernel on an old via system >> that boots from compact flash. DMA is not supported on the CF for >> whatever reason, and in previous kernels, I've always disabled >> DMA, first with ide=nodma, and then later with >> ide_core.nodma=0.0 ide_core.nodma=0.1 ... > > Fedora switched to libata some releases ago so > > libata.dma=n > > 0 - off > 1 - disk only > > + 2 disk/CD > + 4 disk/CD/CFA > > (so you can turn DMA off just for CFA devices providing they admit they > are CFA) This worked fine, but now I'm having some more issues. Using libata is 1/2 as fast as using IDE mode. I *think* the problem might be that libsata may not be using 32-bit PIO mode, but I'm not certain of that. It seems that ide mode uses PIO2 v/s PIO4 for libsata too. I'm going to try configuring a .31 kernel with ide instead of libsata. In case it helps anyone, here are more more details: On Fedora 8, using a 2.6.29-6 kernel compiled for ide instead of libata, I get about 6MB/s read (according to hdparm -t). [root@lanforge-D0-20 lanforge]# hdparm -tT /dev/hdb1 /dev/hdb1: Timing cached reads: 460 MB in 2.00 seconds = 230.00 MB/sec Timing buffered disk reads: 18 MB in 3.24 seconds = 5.56 MB/sec [root@lanforge-D0-20 lanforge]# hdparm -tT /dev/hdb1 /dev/hdb1: Timing cached reads: 460 MB in 2.00 seconds = 229.78 MB/sec Timing buffered disk reads: 18 MB in 3.23 seconds = 5.57 MB/sec dmesg output: Uniform Multi-Platform E-IDE driver via82cxxx 0000:00:0f.1: VIA vt8237 (rev 00) IDE UDMA133 via82cxxx 0000:00:0f.1: IDE controller (0x1106:0x0571 rev 0x06) via82cxxx 0000:00:0f.1: not 100% native mode: will probe irqs later ide: disallowing DMA for hda ide: disallowing DMA for hdb ide0: BM-DMA at 0xe900-0xe907 ide1: BM-DMA at 0xe908-0xe90f Probing IDE interface ide0... hdb: Ridata CF, CFA DISK drive hdb: host max PIO5 wanted PIO255(auto-tune) selected PIO2 hdb: host max PIO5 wanted PIO255(auto-tune) selected PIO2 Probing IDE interface ide1... ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 ide1 at 0x170-0x177,0x376 on irq 15 ide_generic: please use "probe_mask=0x3f" module parameter for probing all legacy ISA IDE ports ide-gd driver 1.18 hdb: max request size: 128KiB hdb: 15662304 sectors (8019 MB) w/1KiB Cache, CHS=15538/16/63 hdb: hdb1 [root@lanforge-D0-20 lanforge]# hdparm /dev/hdb1 /dev/hdb1: multcount = 0 (off) IO_support = 1 (32-bit) unmaskirq = 1 (on) using_dma = 0 (off) keepsettings = 0 (off) readonly = 0 (off) readahead = 256 (on) geometry = 15538/16/63, sectors = 3887667, start = 63 On F11, using a kernel compiled for libata, I'm getting about 1/2 that speed. I get similar results for a 2.6.31-rc5 kernel and the official F11 2.6.29-6-ish kernel. I also get similar results on FC8 with the default FC8 2.6.26 kernel (using libsata). Gscsi0 : pata_via scsi1 : pata_via ata1: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xe900 irq 14 ata2: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xe908 irq 15 input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input2 ata1.01: CFA: Ridata CF, 20080820, max UDMA/133 ata1.01: 15662304 sectors, multi 0: LBA ata1.01: limited to UDMA/33 due to 40-wire cable ata1.01: configured for PIO4 scsi 0:0:1:0: Direct-Access ATA Ridata CF 2008 PQ: 0 ANSI: 5 sd 0:0:1:0: [sda] 15662304 512-byte hardware sectors: (8.01 GB/7.46 GiB) sd 0:0:1:0: [sda] Write Protect is off sd 0:0:1:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA sd 0:0:1:0: [sda] 15662304 512-byte hardware sectors: (8.01 GB/7.46 GiB) sd 0:0:1:0: [sda] Write Protect is off sd 0:0:1:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA sda: sda1 sd 0:0:1:0: [sda] Attached SCSI disk sd 0:0:1:0: Attached scsi generic sg0 type 0 [root@lanforge-D0-20 ~]# hdparm /dev/sda1 /dev/sda1: IO_support = 0 (default) readonly = 0 (off) readahead = 256 (on) geometry = 974/255/63, sectors = 14336000, start = 63 [root@lanforge-D0-20 ~]# hdparm -Tt /dev/sda1 /dev/sda1: Timing cached reads: 280 MB in 2.00 seconds = 139.98 MB/sec Timing buffered disk reads: 10 MB in 3.69 seconds = 2.71 MB/sec Thanks, Ben -- Ben Greear <greearb@candelatech.com> Candela Technologies Inc http://www.candelatech.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: How to disable DMA for compact-flash disk? 2009-08-14 20:49 ` Ben Greear @ 2009-08-14 21:10 ` Alan Cox 2009-08-14 21:18 ` Ben Greear 0 siblings, 1 reply; 9+ messages in thread From: Alan Cox @ 2009-08-14 21:10 UTC (permalink / raw) To: Ben Greear; +Cc: linux-kernel > This worked fine, but now I'm having some more issues. Using libata is 1/2 > as fast as using IDE mode. I *think* the problem might be that libsata > may not be using 32-bit PIO mode, but I'm not certain of that. It seems > that ide mode uses PIO2 v/s PIO4 for libsata too. As of 2.6.29 libata doesn't use 32bit PIO (it shouldn't make a difference for most chipsets but it does for some). 2.6.30 does for some and you can turn it on for others if you want to test by inheriting ata_bmdma32_port_ops instead of ata_bmdma_port_ops > hdb: Ridata CF, CFA DISK drive > hdb: host max PIO5 wanted PIO255(auto-tune) selected PIO2 > hdb: host max PIO5 wanted PIO255(auto-tune) selected PIO2 Very odd it picked PIO2, but the numbers you quote for hdparm doesn't sound like PIO2 so its hard to guess. > ata1.01: configured for PIO4 So libata picked a faster rate (PIO4 is the fastest the controller is properly specced for according to my docs - it probably can do PIO5 (CF specific)) > /dev/sda1: > Timing cached reads: 280 MB in 2.00 seconds = 139.98 MB/sec > Timing buffered disk reads: 10 MB in 3.69 seconds = 2.71 MB/sec Would be very interested to know if bmdma32_port_ops gives you the speed. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: How to disable DMA for compact-flash disk? 2009-08-14 21:10 ` Alan Cox @ 2009-08-14 21:18 ` Ben Greear 2009-08-14 21:32 ` Alan Cox 0 siblings, 1 reply; 9+ messages in thread From: Ben Greear @ 2009-08-14 21:18 UTC (permalink / raw) To: Alan Cox; +Cc: linux-kernel On 08/14/2009 02:10 PM, Alan Cox wrote: >> This worked fine, but now I'm having some more issues. Using libata is 1/2 >> as fast as using IDE mode. I *think* the problem might be that libsata >> may not be using 32-bit PIO mode, but I'm not certain of that. It seems >> that ide mode uses PIO2 v/s PIO4 for libsata too. > > As of 2.6.29 libata doesn't use 32bit PIO (it shouldn't make a difference > for most chipsets but it does for some). 2.6.30 does for some and you can > turn it on for others if you want to test by inheriting > ata_bmdma32_port_ops instead of ata_bmdma_port_ops Can you give me a clue as to what code needs poking? I'm working on the latest 31-rc5 tree, btw. PS. Can't get an ide based 2.6.31-rc5 kernel to boot in F11, though it doesn't seem to be related to ide. I probably have something wrong in my .config. Thanks, ben -- Ben Greear <greearb@candelatech.com> Candela Technologies Inc http://www.candelatech.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: How to disable DMA for compact-flash disk? 2009-08-14 21:18 ` Ben Greear @ 2009-08-14 21:32 ` Alan Cox 2009-08-14 21:37 ` Ben Greear 2009-08-14 21:51 ` Ben Greear 0 siblings, 2 replies; 9+ messages in thread From: Alan Cox @ 2009-08-14 21:32 UTC (permalink / raw) To: Ben Greear; +Cc: linux-kernel > Can you give me a clue as to what code needs poking? I'm working > on the latest 31-rc5 tree, btw. > > > PS. Can't get an ide based 2.6.31-rc5 kernel to boot in F11, though it doesn't seem > to be related to ide. I probably have something wrong in my .config. Tejun made it all very class based so you have inheriting operations structures thus in pata_via.c find static struct ata_port_operations via_port_ops = { .inherits = &ata_bmdma_port_ops, and change it to static struct ata_port_operations via_port_ops = { .inherits = &ata_bmdma32_port_ops, ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: How to disable DMA for compact-flash disk? 2009-08-14 21:32 ` Alan Cox @ 2009-08-14 21:37 ` Ben Greear 2009-08-14 21:51 ` Ben Greear 1 sibling, 0 replies; 9+ messages in thread From: Ben Greear @ 2009-08-14 21:37 UTC (permalink / raw) To: Alan Cox; +Cc: linux-kernel On 08/14/2009 02:32 PM, Alan Cox wrote: >> Can you give me a clue as to what code needs poking? I'm working >> on the latest 31-rc5 tree, btw. >> >> >> PS. Can't get an ide based 2.6.31-rc5 kernel to boot in F11, though it doesn't seem >> to be related to ide. I probably have something wrong in my .config. > > Tejun made it all very class based so you have inheriting operations > structures thus in pata_via.c find > > static struct ata_port_operations via_port_ops = { > .inherits =&ata_bmdma_port_ops, > > and change it to > > static struct ata_port_operations via_port_ops = { > .inherits =&ata_bmdma32_port_ops, Ok, I notice that my system has sata_via loaded as well, and it is also not using the 32-bit port ops. Should I change it as well? Thanks, Ben -- Ben Greear <greearb@candelatech.com> Candela Technologies Inc http://www.candelatech.com ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: How to disable DMA for compact-flash disk? 2009-08-14 21:32 ` Alan Cox 2009-08-14 21:37 ` Ben Greear @ 2009-08-14 21:51 ` Ben Greear 1 sibling, 0 replies; 9+ messages in thread From: Ben Greear @ 2009-08-14 21:51 UTC (permalink / raw) To: Alan Cox; +Cc: linux-kernel On 08/14/2009 02:32 PM, Alan Cox wrote: >> Can you give me a clue as to what code needs poking? I'm working >> on the latest 31-rc5 tree, btw. >> >> >> PS. Can't get an ide based 2.6.31-rc5 kernel to boot in F11, though it doesn't seem >> to be related to ide. I probably have something wrong in my .config. > > Tejun made it all very class based so you have inheriting operations > structures thus in pata_via.c find > > static struct ata_port_operations via_port_ops = { > .inherits =&ata_bmdma_port_ops, > > and change it to > > static struct ata_port_operations via_port_ops = { > .inherits =&ata_bmdma32_port_ops, > -- I can't see that it made any difference: pata_via 0000:00:0f.1: version 0.3.4 pata_via 0000:00:0f.1: PCI->APIC IRQ transform: INT A -> IRQ 20 scsi0 : pata_via scsi1 : pata_via ata1: PATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xe900 irq 14 ata2: PATA max UDMA/133 cmd 0x170 ctl 0x376 bmdma 0xe908 irq 15 ata1.01: CFA: Ridata CF, 20080820, max UDMA/133 ata1.01: 15662304 sectors, multi 0: LBA ata1.01: limited to UDMA/33 due to 40-wire cable ata1.01: configured for PIO4 scsi 0:0:1:0: Direct-Access ATA Ridata CF 2008 PQ: 0 ANSI: 5 sd 0:0:1:0: [sda] 15662304 512-byte logical blocks: (8.01 GB/7.46 GiB) sd 0:0:1:0: [sda] Write Protect is off sd 0:0:1:0: [sda] Mode Sense: 00 3a 00 00 sd 0:0:1:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA sda: sd 0:0:1:0: Attached scsi generic sg0 type 0 sda1 sd 0:0:1:0: [sda] Attached SCSI disk [root@lanforge-D0-20 lanforge]# hdparm /dev/sda1 /dev/sda1: IO_support = 0 (default) readonly = 0 (off) readahead = 256 (on) geometry = 974/255/63, sectors = 14336000, start = 63 (read speed is still just under 3MB/s) I used this patch: diff --git a/drivers/ata/pata_via.c b/drivers/ata/pata_via.c index 45657ca..0a1a3c9 100644 --- a/drivers/ata/pata_via.c +++ b/drivers/ata/pata_via.c @@ -420,7 +420,7 @@ static struct scsi_host_template via_sht = { }; static struct ata_port_operations via_port_ops = { - .inherits = &ata_bmdma_port_ops, + .inherits = &ata_bmdma32_port_ops, .cable_detect = via_cable_detect, .set_piomode = via_set_piomode, .set_dmamode = via_set_dmamode, diff --git a/drivers/ata/sata_via.c b/drivers/ata/sata_via.c index bdd43c7..0085d4a 100644 --- a/drivers/ata/sata_via.c +++ b/drivers/ata/sata_via.c @@ -114,7 +114,7 @@ static struct scsi_host_template svia_sht = { }; static struct ata_port_operations svia_base_ops = { - .inherits = &ata_bmdma_port_ops, + .inherits = &ata_bmdma32_port_ops, .sff_tf_load = svia_tf_load, }; Thanks, Ben -- Ben Greear <greearb@candelatech.com> Candela Technologies Inc http://www.candelatech.com ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: How to disable DMA for compact-flash disk? 2009-08-11 18:51 How to disable DMA for compact-flash disk? Ben Greear 2009-08-11 19:12 ` Alan Cox @ 2009-08-11 20:24 ` Krzysztof Halasa 1 sibling, 0 replies; 9+ messages in thread From: Krzysztof Halasa @ 2009-08-11 20:24 UTC (permalink / raw) To: Ben Greear; +Cc: linux-kernel Ben Greear <greearb@candelatech.com> writes: > I'm trying to use Fedora 11 with default kernel on an old via system > that boots from compact flash. DMA is not supported on the CF for > whatever reason, BTW if you are using a PATA-CF adapter... perhaps the DMA request and ack lines are not connected. Newer adapters may have them. A similar issue is 80-wire cable detection (DMA-66+). Adapters plugged directly into the PATA connector (no cable) need to connect one of the lines to GND. Never seen an adapter with this connection. Both issues can be easily fixed in hardware. DMA-66+ can also be forced in software. -- Krzysztof Halasa ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2009-08-14 21:51 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-08-11 18:51 How to disable DMA for compact-flash disk? Ben Greear 2009-08-11 19:12 ` Alan Cox 2009-08-14 20:49 ` Ben Greear 2009-08-14 21:10 ` Alan Cox 2009-08-14 21:18 ` Ben Greear 2009-08-14 21:32 ` Alan Cox 2009-08-14 21:37 ` Ben Greear 2009-08-14 21:51 ` Ben Greear 2009-08-11 20:24 ` Krzysztof Halasa
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox