On Sat, 6 Jan 2007 21:32:03 +0100 (MET), Mikael Pettersson wrote:Update: SATAPI works on first-generation chips, but only in PIO mode. To verify that DMA doesn't work I also tried Promise's pdc-ultra driver for their first-generation chips. It doesn't want to support ATAPI without an explicit option. Enabling that option makes it recognise ATAPI devices, but even a simple "eject" command triggers command timeouts and eventually a kernel oops due to the NMI watchdog. So I'm fairly sure that DMA simply doesn't work. This patch enables ATAPI on 20319 and 2037x chips, but forces SATA ports to always use PIO. As a side-effect, ATAPI support is now free of any dependencies on the #promise-sata-pata branch. Signed-off-by: Mikael Pettersson <mikpe@it.uu.se> --- linux-2.6.20-rc4/drivers/ata/sata_promise.c.~1~ 2007-01-07 22:58:01.000000000 +0100 +++ linux-2.6.20-rc4/drivers/ata/sata_promise.c 2007-01-07 23:06:22.000000000 +0100 @@ -197,7 +197,7 @@ static const struct ata_port_info pdc_po /* board_20319 */ { .sht = &pdc_ata_sht, - .flags = PDC_COMMON_FLAGS | ATA_FLAG_NO_ATAPI | ATA_FLAG_SATA, + .flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA, .pio_mask = 0x1f, /* pio0-4 */ .mwdma_mask = 0x07, /* mwdma0-2 */ .udma_mask = 0x7f, /* udma0-6 ; FIXME */ @@ -789,8 +789,14 @@ static void pdc_exec_command_mmio(struct static int pdc_check_atapi_dma(struct ata_queued_cmd *qc) { u8 *scsicmd = qc->scsicmd->cmnd; + struct ata_port *ap = qc->ap; + struct pdc_host_priv *hp = ap->host->private_data; int pio = 1; /* atapi dma off by default */ + /* First generation chips cannot use ATAPI DMA on SATA ports */ + if (!(hp->flags & PDC_FLAG_GEN_II) && sata_scr_valid(ap)) + return 1; + /* Whitelist commands that may use DMA. */ switch (scsicmd[0]) { case WRITE_12: @@ -996,10 +1002,6 @@ static int pdc_ata_init_one (struct pci_ probe_ent->n_ports = 2; probe_ent->_port_flags[0] = ATA_FLAG_SATA; probe_ent->_port_flags[1] = ATA_FLAG_SATA; - if (board_idx == board_2037x) { - probe_ent->_port_flags[0] |= ATA_FLAG_NO_ATAPI; - probe_ent->_port_flags[1] |= ATA_FLAG_NO_ATAPI; - } break; case board_20619: probe_ent->n_ports = 4; -
| Borislav Petkov | 2.6.23-rc1: no setup signature found... |
| Andrew Morton | Re: [PATCH] Memory management livelock |
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| Steven King | ti_usb_3410_5052 breakage in 2.6.24-rc1 |
git: | |
| Linus Torvalds | cleaner/better zlib sources? |
| Theodore Ts'o | [PATCH] Add --no-reuse-delta, --window, and --depth options to git-gc |
| Karl | Re: [PATCH] Add a birdview-on-the-source-code section to the user manual |
| Yossi Leybovich | corrupt object on git-gc |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| Richard Stallman | Re: Real men don't attack straw men |
| David Newman | setting dscp or tos bits |
| Stijn | Re: [i386/Thinkpad T41]USB mouse + Xorg obsd 4.1 |
| Quentin Garnier | [cube@cubidou.net: Re: Moving ethfoo in the main tree] |
| cube | Moving ethfoo in the main tree |
| Blair Sadewitz | PCI latency timer values |
| Oliver Gould | kqemu: driver(9)/filedesc(9) questions |
