* [PATCH 00/07] sata_mv: ATAPI patchset @ 2009-01-30 23:45 Mark Lord 2009-01-30 23:46 ` [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS Mark Lord 2009-01-31 0:04 ` [PATCH 00/07] sata_mv: ATAPI patchset Mark Lord 0 siblings, 2 replies; 18+ messages in thread From: Mark Lord @ 2009-01-30 23:45 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list The following patchset adds ATAPI capability to sata_mv. These patches are all for #upstream. 01_sata_mv_cleanup_flags.patch 02_sata_mv_edma_cfg.patch 03_sata_mv_qc_issue.patch 04_sata_mv_get_active_qc.patch 05_sata_mv_fill_sg.patch 06_sata_mv_atapi_dma.patch 07_sata_mv_optimize_edma_cfg_use.patch Cheers ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS 2009-01-30 23:45 [PATCH 00/07] sata_mv: ATAPI patchset Mark Lord @ 2009-01-30 23:46 ` Mark Lord 2009-01-30 23:47 ` [PATCH 02/07] sata_mv: rearrange mv_start_dma() and friends Mark Lord 2009-02-03 4:12 ` [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS Jeff Garzik 2009-01-31 0:04 ` [PATCH 00/07] sata_mv: ATAPI patchset Mark Lord 1 sibling, 2 replies; 18+ messages in thread From: Mark Lord @ 2009-01-30 23:46 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list Clean up the chipset GENeration FLAGS, and rename them for consistency with other uses of GEN_XX within sata_mv. Signed-off-by: Mark Lord <mlord@pobox.com> --- old/drivers/ata/sata_mv.c 2009-01-30 16:09:07.000000000 -0500 +++ linux/drivers/ata/sata_mv.c 2009-01-30 16:27:13.000000000 -0500 @@ -120,14 +120,15 @@ MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | - ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | - ATA_FLAG_PIO_POLLING, + ATA_FLAG_MMIO | ATA_FLAG_PIO_POLLING, - MV_6XXX_FLAGS = MV_FLAG_IRQ_COALESCE, + MV_GEN_I_FLAGS = MV_COMMON_FLAGS | ATA_FLAG_NO_ATAPI, - MV_GENIIE_FLAGS = MV_COMMON_FLAGS | MV_6XXX_FLAGS | + MV_GEN_II_FLAGS = MV_COMMON_FLAGS | MV_FLAG_IRQ_COALESCE | ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA | - ATA_FLAG_NCQ | ATA_FLAG_AN, + ATA_FLAG_NCQ | ATA_FLAG_NO_ATAPI, + + MV_GEN_IIE_FLAGS = MV_GEN_II_FLAGS | ATA_FLAG_AN, CRQB_FLAG_READ = (1 << 0), CRQB_TAG_SHIFT = 1, @@ -603,53 +604,49 @@ static const struct ata_port_info mv_port_info[] = { { /* chip_504x */ - .flags = MV_COMMON_FLAGS, + .flags = MV_GEN_I_FLAGS, .pio_mask = 0x1f, /* pio0-4 */ .udma_mask = ATA_UDMA6, .port_ops = &mv5_ops, }, { /* chip_508x */ - .flags = MV_COMMON_FLAGS | MV_FLAG_DUAL_HC, + .flags = MV_GEN_I_FLAGS | MV_FLAG_DUAL_HC, .pio_mask = 0x1f, /* pio0-4 */ .udma_mask = ATA_UDMA6, .port_ops = &mv5_ops, }, { /* chip_5080 */ - .flags = MV_COMMON_FLAGS | MV_FLAG_DUAL_HC, + .flags = MV_GEN_I_FLAGS | MV_FLAG_DUAL_HC, .pio_mask = 0x1f, /* pio0-4 */ .udma_mask = ATA_UDMA6, .port_ops = &mv5_ops, }, { /* chip_604x */ - .flags = MV_COMMON_FLAGS | MV_6XXX_FLAGS | - ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA | - ATA_FLAG_NCQ, + .flags = MV_GEN_II_FLAGS, .pio_mask = 0x1f, /* pio0-4 */ .udma_mask = ATA_UDMA6, .port_ops = &mv6_ops, }, { /* chip_608x */ - .flags = MV_COMMON_FLAGS | MV_6XXX_FLAGS | - ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA | - ATA_FLAG_NCQ | MV_FLAG_DUAL_HC, + .flags = MV_GEN_II_FLAGS | MV_FLAG_DUAL_HC, .pio_mask = 0x1f, /* pio0-4 */ .udma_mask = ATA_UDMA6, .port_ops = &mv6_ops, }, { /* chip_6042 */ - .flags = MV_GENIIE_FLAGS, + .flags = MV_GEN_IIE_FLAGS, .pio_mask = 0x1f, /* pio0-4 */ .udma_mask = ATA_UDMA6, .port_ops = &mv_iie_ops, }, { /* chip_7042 */ - .flags = MV_GENIIE_FLAGS, + .flags = MV_GEN_IIE_FLAGS, .pio_mask = 0x1f, /* pio0-4 */ .udma_mask = ATA_UDMA6, .port_ops = &mv_iie_ops, }, { /* chip_soc */ - .flags = MV_GENIIE_FLAGS, + .flags = MV_GEN_IIE_FLAGS, .pio_mask = 0x1f, /* pio0-4 */ .udma_mask = ATA_UDMA6, .port_ops = &mv_iie_ops, ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 02/07] sata_mv: rearrange mv_start_dma() and friends 2009-01-30 23:46 ` [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS Mark Lord @ 2009-01-30 23:47 ` Mark Lord 2009-01-30 23:48 ` [PATCH 03/07] sata_mv: restructure mv_qc_issue Mark Lord 2009-02-03 4:12 ` [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS Jeff Garzik 1 sibling, 1 reply; 18+ messages in thread From: Mark Lord @ 2009-01-30 23:47 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list Rearrange mv_start_dma() and friends, in preparation for adding non-EDMA DMA modes, and non-EDMA interrupts, to the driver. Signed-off-by: Mark Lord <mlord@pobox.com> --- old/drivers/ata/sata_mv.c 2009-01-30 16:45:20.000000000 -0500 +++ linux/drivers/ata/sata_mv.c 2009-01-30 16:44:12.000000000 -0500 @@ -536,7 +536,7 @@ unsigned int port_no); static int mv_stop_edma(struct ata_port *ap); static int mv_stop_edma_engine(void __iomem *port_mmio); -static void mv_edma_cfg(struct ata_port *ap, int want_ncq); +static void mv_edma_cfg(struct ata_port *ap, int want_ncq, int want_edma); static void mv_pmp_select(struct ata_port *ap, int pmp); static int mv_pmp_hardreset(struct ata_link *link, unsigned int *class, @@ -849,8 +849,32 @@ mv_set_main_irq_mask(ap->host, disable_bits, enable_bits); } +static void mv_clear_and_enable_port_irqs(struct ata_port *ap, + void __iomem *port_mmio, + unsigned int port_irqs) +{ + struct mv_host_priv *hpriv = ap->host->private_data; + int hardport = mv_hardport_from_port(ap->port_no); + void __iomem *hc_mmio = mv_hc_base_from_port( + mv_host_base(ap->host), ap->port_no); + u32 hc_irq_cause; + + /* clear EDMA event indicators, if any */ + writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); + + /* clear pending irq events */ + hc_irq_cause = ~((DEV_IRQ | DMA_IRQ) << hardport); + writelfl(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS); + + /* clear FIS IRQ Cause */ + if (IS_GEN_IIE(hpriv)) + writelfl(0, port_mmio + SATA_FIS_IRQ_CAUSE_OFS); + + mv_enable_port_irqs(ap, port_irqs); +} + /** - * mv_start_dma - Enable eDMA engine + * mv_start_edma - Enable eDMA engine * @base: port base address * @pp: port private data * @@ -860,7 +884,7 @@ * LOCKING: * Inherited from caller. */ -static void mv_start_dma(struct ata_port *ap, void __iomem *port_mmio, +static void mv_start_edma(struct ata_port *ap, void __iomem *port_mmio, struct mv_port_priv *pp, u8 protocol) { int want_ncq = (protocol == ATA_PROT_NCQ); @@ -872,26 +896,11 @@ } if (!(pp->pp_flags & MV_PP_FLAG_EDMA_EN)) { struct mv_host_priv *hpriv = ap->host->private_data; - int hardport = mv_hardport_from_port(ap->port_no); - void __iomem *hc_mmio = mv_hc_base_from_port( - mv_host_base(ap->host), ap->port_no); - u32 hc_irq_cause; - - /* clear EDMA event indicators, if any */ - writelfl(0, port_mmio + EDMA_ERR_IRQ_CAUSE_OFS); - - /* clear pending irq events */ - hc_irq_cause = ~((DEV_IRQ | DMA_IRQ) << hardport); - writelfl(hc_irq_cause, hc_mmio + HC_IRQ_CAUSE_OFS); - mv_edma_cfg(ap, want_ncq); - - /* clear FIS IRQ Cause */ - if (IS_GEN_IIE(hpriv)) - writelfl(0, port_mmio + SATA_FIS_IRQ_CAUSE_OFS); + mv_edma_cfg(ap, want_ncq, 1); mv_set_edma_ptrs(port_mmio, hpriv, pp); - mv_enable_port_irqs(ap, DONE_IRQ|ERR_IRQ); + mv_clear_and_enable_port_irqs(ap, port_mmio, DONE_IRQ|ERR_IRQ); writelfl(EDMA_EN, port_mmio + EDMA_CMD_OFS); pp->pp_flags |= MV_PP_FLAG_EDMA_EN; @@ -1173,7 +1182,7 @@ writel(new, hpriv->base + MV_GPIO_PORT_CTL_OFS); } -static void mv_edma_cfg(struct ata_port *ap, int want_ncq) +static void mv_edma_cfg(struct ata_port *ap, int want_ncq, int want_edma) { u32 cfg; struct mv_port_priv *pp = ap->private_data; @@ -1182,7 +1191,7 @@ /* set up non-NCQ EDMA configuration */ cfg = EDMA_CFG_Q_DEPTH; /* always 0x1f for *all* chips */ - pp->pp_flags &= ~MV_PP_FLAG_FBS_EN; + pp->pp_flags &= ~(MV_PP_FLAG_FBS_EN | MV_PP_FLAG_NCQ_EN); if (IS_GEN_I(hpriv)) cfg |= (1 << 8); /* enab config burst size mask */ @@ -1211,9 +1220,11 @@ } cfg |= (1 << 23); /* do not mask PM field in rx'd FIS */ - cfg |= (1 << 22); /* enab 4-entry host queue cache */ - if (!IS_SOC(hpriv)) - cfg |= (1 << 18); /* enab early completion */ + if (want_edma) { + cfg |= (1 << 22); /* enab 4-entry host queue cache */ + if (!IS_SOC(hpriv)) + cfg |= (1 << 18); /* enab early completion */ + } if (hpriv->hp_flags & MV_HP_CUT_THROUGH) cfg |= (1 << 17); /* enab cut-thru (dis stor&forwrd) */ } @@ -1221,8 +1232,7 @@ if (want_ncq) { cfg |= EDMA_CFG_NCQ; pp->pp_flags |= MV_PP_FLAG_NCQ_EN; - } else - pp->pp_flags &= ~MV_PP_FLAG_NCQ_EN; + } writelfl(cfg, port_mmio + EDMA_CFG_OFS); } @@ -1591,7 +1601,7 @@ return ata_sff_qc_issue(qc); } - mv_start_dma(ap, port_mmio, pp, qc->tf.protocol); + mv_start_edma(ap, port_mmio, pp, qc->tf.protocol); pp->req_idx = (pp->req_idx + 1) & MV_MAX_Q_DEPTH_MASK; in_index = pp->req_idx << EDMA_REQ_Q_PTR_SHIFT; ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 03/07] sata_mv: restructure mv_qc_issue 2009-01-30 23:47 ` [PATCH 02/07] sata_mv: rearrange mv_start_dma() and friends Mark Lord @ 2009-01-30 23:48 ` Mark Lord 2009-01-30 23:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Mark Lord 2009-02-03 4:14 ` [PATCH 03/07] sata_mv: restructure mv_qc_issue Jeff Garzik 0 siblings, 2 replies; 18+ messages in thread From: Mark Lord @ 2009-01-30 23:48 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list Rearrange logic in mv_qc_issue() to handle protocols other than ATA_PROT_DMA, ATA_PROT_NCQ, and ATA_PROT_PIO. This is in preparation for later enabling ATAPI support. Signed-off-by: Mark Lord <mlord@pobox.com> --- old/drivers/ata/sata_mv.c 2009-01-30 18:21:49.000000000 -0500 +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:23:22.000000000 -0500 @@ -1565,14 +1565,26 @@ */ static unsigned int mv_qc_issue(struct ata_queued_cmd *qc) { + static int limit_warnings = 10; struct ata_port *ap = qc->ap; void __iomem *port_mmio = mv_ap_base(ap); struct mv_port_priv *pp = ap->private_data; u32 in_index; + unsigned int port_irqs = DONE_IRQ | ERR_IRQ; - if ((qc->tf.protocol != ATA_PROT_DMA) && - (qc->tf.protocol != ATA_PROT_NCQ)) { - static int limit_warnings = 10; + switch (qc->tf.protocol) { + case ATA_PROT_DMA: + case ATA_PROT_NCQ: + mv_start_edma(ap, port_mmio, pp, qc->tf.protocol); + pp->req_idx = (pp->req_idx + 1) & MV_MAX_Q_DEPTH_MASK; + in_index = pp->req_idx << EDMA_REQ_Q_PTR_SHIFT; + + /* Write the request in pointer to kick the EDMA to life */ + writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | in_index, + port_mmio + EDMA_REQ_Q_IN_PTR_OFS); + return 0; + + case ATA_PROT_PIO: /* * Errata SATA#16, SATA#24: warn if multiple DRQs expected. * @@ -1590,27 +1602,22 @@ ": attempting PIO w/multiple DRQ: " "this may fail due to h/w errata\n"); } + /* drop through */ + case ATAPI_PROT_PIO: + port_irqs = ERR_IRQ; /* leave DONE_IRQ masked for PIO */ + /* drop through */ + default: /* * We're about to send a non-EDMA capable command to the * port. Turn off EDMA so there won't be problems accessing * shadow block, etc registers. */ mv_stop_edma(ap); - mv_enable_port_irqs(ap, ERR_IRQ); + mv_edma_cfg(ap, 0, 0); + mv_clear_and_enable_port_irqs(ap, mv_ap_base(ap), port_irqs); mv_pmp_select(ap, qc->dev->link->pmp); return ata_sff_qc_issue(qc); } - - mv_start_edma(ap, port_mmio, pp, qc->tf.protocol); - - pp->req_idx = (pp->req_idx + 1) & MV_MAX_Q_DEPTH_MASK; - in_index = pp->req_idx << EDMA_REQ_Q_PTR_SHIFT; - - /* and write the request in pointer to kick the EDMA to life */ - writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | in_index, - port_mmio + EDMA_REQ_Q_IN_PTR_OFS); - - return 0; } static struct ata_queued_cmd *mv_get_active_qc(struct ata_port *ap) ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 04/07] sata_mv: update ata_qc_from_tag 2009-01-30 23:48 ` [PATCH 03/07] sata_mv: restructure mv_qc_issue Mark Lord @ 2009-01-30 23:49 ` Mark Lord 2009-01-30 23:50 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Mark Lord ` (2 more replies) 2009-02-03 4:14 ` [PATCH 03/07] sata_mv: restructure mv_qc_issue Jeff Garzik 1 sibling, 3 replies; 18+ messages in thread From: Mark Lord @ 2009-01-30 23:49 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list Update the logic in ata_qc_from_tag() to match that used in similar places elsewhere in libata. Signed-off-by: Mark Lord <mlord@pobox.com> --- old/drivers/ata/sata_mv.c 2009-01-30 18:23:22.000000000 -0500 +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:26:55.000000000 -0500 @@ -1628,6 +1628,12 @@ if (pp->pp_flags & MV_PP_FLAG_NCQ_EN) return NULL; qc = ata_qc_from_tag(ap, ap->link.active_tag); + if (qc) { + if (qc->tf.flags & ATA_TFLAG_POLLING) + qc = NULL; + else if (!(qc->flags & ATA_QCFLAG_ACTIVE)) + qc = NULL; + } if (qc && (qc->tf.flags & ATA_TFLAG_POLLING)) qc = NULL; return qc; ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 05/07] sata_mv: mv_fill_sg fixes 2009-01-30 23:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Mark Lord @ 2009-01-30 23:50 ` Mark Lord 2009-01-30 23:51 ` [PATCH 06/07] sata_mv: introduce support for ATAPI devices Mark Lord 2009-02-01 20:55 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Grant Grundler 2009-01-31 2:40 ` [PATCH 08/07] sata_mv: remove leftovers Mark Lord 2009-02-01 20:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Grant Grundler 2 siblings, 2 replies; 18+ messages in thread From: Mark Lord @ 2009-01-30 23:50 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list Fix mv_fill_sg() to zero out the reserved word (required for ATAPI), and to include a memory barrier. This may also help with problems reported by Jens on the PPC platform. Signed-off-by: Mark Lord <mlord@pobox.com> --- old/drivers/ata/sata_mv.c 2009-01-30 18:31:03.000000000 -0500 +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:32:08.000000000 -0500 @@ -1364,12 +1364,13 @@ u32 offset = addr & 0xffff; u32 len = sg_len; - if ((offset + sg_len > 0x10000)) + if ((offset + len > 0x10000)) len = 0x10000 - offset; mv_sg->addr = cpu_to_le32(addr & 0xffffffff); mv_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16); mv_sg->flags_size = cpu_to_le32(len & 0xffff); + mv_sg->reserved = 0; sg_len -= len; addr += len; @@ -1381,6 +1382,7 @@ if (likely(last_sg)) last_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL); + mb(); /* ensure data structure is visible to the chipset */ } static void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last) ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 06/07] sata_mv: introduce support for ATAPI devices 2009-01-30 23:50 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Mark Lord @ 2009-01-30 23:51 ` Mark Lord 2009-01-30 23:52 ` [PATCH 07/07] sata_mv: optimize use of mv_edma_cfg Mark Lord 2009-02-03 4:19 ` [PATCH 06/07] sata_mv: introduce support for ATAPI devices Jeff Garzik 2009-02-01 20:55 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Grant Grundler 1 sibling, 2 replies; 18+ messages in thread From: Mark Lord @ 2009-01-30 23:51 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list Add ATAPI support to sata_mv, using sff DMA for GEN_II chipsets, and plain old PIO for GEN_IIE. Signed-off-by: Mark Lord <mlord@pobox.com> --- old/drivers/ata/sata_mv.c 2009-01-30 18:32:08.000000000 -0500 +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:33:04.000000000 -0500 @@ -31,8 +31,6 @@ * * --> Complete a full errata audit for all chipsets to identify others. * - * --> ATAPI support (Marvell claims the 60xx/70xx chips can do it). - * * --> Develop a low-power-consumption strategy, and implement it. * * --> [Experiment, low priority] Investigate interrupt coalescing. @@ -68,7 +66,7 @@ #include <linux/libata.h> #define DRV_NAME "sata_mv" -#define DRV_VERSION "1.25" +#define DRV_VERSION "1.26" enum { /* BAR's are enumerated in terms of pci_resource_start() terms */ @@ -126,7 +124,7 @@ MV_GEN_II_FLAGS = MV_COMMON_FLAGS | MV_FLAG_IRQ_COALESCE | ATA_FLAG_PMP | ATA_FLAG_ACPI_SATA | - ATA_FLAG_NCQ | ATA_FLAG_NO_ATAPI, + ATA_FLAG_NCQ, MV_GEN_IIE_FLAGS = MV_GEN_II_FLAGS | ATA_FLAG_AN, @@ -348,6 +346,12 @@ EDMA_HALTCOND_OFS = 0x60, /* GenIIe halt conditions */ + + BMDMA_CMD_OFS = 0x224, /* bmdma command register */ + BMDMA_STATUS_OFS = 0x228, /* bmdma status register */ + BMDMA_PRD_LOW_OFS = 0x22c, /* bmdma PRD addr 31:0 */ + BMDMA_PRD_HIGH_OFS = 0x230, /* bmdma PRD addr 63:32 */ + /* Host private flags (hp_flags) */ MV_HP_FLAG_MSI = (1 << 0), MV_HP_ERRATA_50XXB0 = (1 << 1), @@ -547,6 +551,15 @@ static void mv_process_crpb_entries(struct ata_port *ap, struct mv_port_priv *pp); +static unsigned long mv_mode_filter(struct ata_device *dev, + unsigned long xfer_mask); +static void mv_sff_irq_clear(struct ata_port *ap); +static int mv_check_atapi_dma(struct ata_queued_cmd *qc); +static void mv_bmdma_setup(struct ata_queued_cmd *qc); +static void mv_bmdma_start(struct ata_queued_cmd *qc); +static void mv_bmdma_stop(struct ata_queued_cmd *qc); +static u8 mv_bmdma_status(struct ata_port *ap); + /* .sg_tablesize is (MV_MAX_SG_CT / 2) in the structures below * because we have to allow room for worst case splitting of * PRDs for 64K boundaries in mv_fill_sg(). @@ -594,6 +607,14 @@ .pmp_softreset = mv_softreset, .softreset = mv_softreset, .error_handler = mv_pmp_error_handler, + + .sff_irq_clear = mv_sff_irq_clear, + .check_atapi_dma = mv_check_atapi_dma, + .bmdma_setup = mv_bmdma_setup, + .bmdma_start = mv_bmdma_start, + .bmdma_stop = mv_bmdma_stop, + .bmdma_status = mv_bmdma_status, + .mode_filter = mv_mode_filter, }; static struct ata_port_operations mv_iie_ops = { @@ -1393,6 +1414,167 @@ } /** + * mv_mode_filter - Allow ATAPI DMA only on GenII chips. + * @dev: device whose xfer modes are being configured. + * + * Only the GenII hardware can use DMA with ATAPI drives. + */ +static unsigned long mv_mode_filter(struct ata_device *adev, + unsigned long xfer_mask) +{ + if (adev->class == ATA_DEV_ATAPI) { + struct mv_host_priv *hpriv = adev->link->ap->host->private_data; + if (!IS_GEN_II(hpriv)) { + xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA); + ata_dev_printk(adev, KERN_INFO, + "ATAPI DMA not supported on this chipset\n"); + } + } + return xfer_mask; +} + +/** + * mv_sff_irq_clear - Clear hardware interrupt after DMA. + * @ap: Port associated with this ATA transaction. + * + * We need this only for ATAPI bmdma transactions, + * as otherwise we experience spurious interrupts + * after libata-sff handles the bmdma interrupts. + */ +static void mv_sff_irq_clear(struct ata_port *ap) +{ + mv_clear_and_enable_port_irqs(ap, mv_ap_base(ap), ERR_IRQ); +} + +/** + * mv_check_atapi_dma - Filter ATAPI cmds which are unsuitable for DMA. + * @qc: queued command to check for chipset/DMA compatibility. + * + * The bmdma engines cannot handle speculative data sizes + * (bytecount under/over flow). So only allow DMA for + * data transfer commands with known data sizes. + * + * LOCKING: + * Inherited from caller. + */ +static int mv_check_atapi_dma(struct ata_queued_cmd *qc) +{ + struct scsi_cmnd *scmd = qc->scsicmd; + + if (scmd) { + switch (scmd->cmnd[0]) { + case READ_6: + case READ_10: + case READ_12: + case WRITE_6: + case WRITE_10: + case WRITE_12: + case GPCMD_READ_CD: + case GPCMD_SEND_DVD_STRUCTURE: + case GPCMD_SEND_CUE_SHEET: + return 0; /* DMA is safe */ + } + } + return -EOPNOTSUPP; /* use PIO instead */ +} + +/** + * mv_bmdma_setup - Set up BMDMA transaction + * @qc: queued command to prepare DMA for. + * + * LOCKING: + * Inherited from caller. + */ +static void mv_bmdma_setup(struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc->ap; + void __iomem *port_mmio = mv_ap_base(ap); + struct mv_port_priv *pp = ap->private_data; + + mv_fill_sg(qc); + + /* clear all DMA cmd bits */ + writel(0, port_mmio + BMDMA_CMD_OFS); + + /* load PRD table addr. */ + writel((pp->sg_tbl_dma[qc->tag] >> 16) >> 16, + port_mmio + BMDMA_PRD_HIGH_OFS); + writelfl(pp->sg_tbl_dma[qc->tag], + port_mmio + BMDMA_PRD_LOW_OFS); + + /* issue r/w command */ + ap->ops->sff_exec_command(ap, &qc->tf); +} + +/** + * mv_bmdma_start - Start a BMDMA transaction + * @qc: queued command to start DMA on. + * + * LOCKING: + * Inherited from caller. + */ +static void mv_bmdma_start(struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc->ap; + void __iomem *port_mmio = mv_ap_base(ap); + unsigned int rw = (qc->tf.flags & ATA_TFLAG_WRITE); + u32 cmd = (rw ? 0 : ATA_DMA_WR) | ATA_DMA_START; + + /* start host DMA transaction */ + writelfl(cmd, port_mmio + BMDMA_CMD_OFS); +} + +/** + * mv_bmdma_stop - Stop BMDMA transfer + * @qc: queued command to stop DMA on. + * + * Clears the ATA_DMA_START flag in the bmdma control register + * + * LOCKING: + * Inherited from caller. + */ +static void mv_bmdma_stop(struct ata_queued_cmd *qc) +{ + struct ata_port *ap = qc->ap; + void __iomem *port_mmio = mv_ap_base(ap); + u32 cmd; + + /* clear start/stop bit */ + cmd = readl(port_mmio + BMDMA_CMD_OFS); + cmd &= ~ATA_DMA_START; + writelfl(cmd, port_mmio + BMDMA_CMD_OFS); + + /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */ + ata_sff_dma_pause(ap); +} + +/** + * mv_bmdma_status - Read BMDMA status + * @ap: port for which to retrieve DMA status. + * + * Read and return equivalent of the sff BMDMA status register. + * + * LOCKING: + * Inherited from caller. + */ +static u8 mv_bmdma_status(struct ata_port *ap) +{ + void __iomem *port_mmio = mv_ap_base(ap); + u32 reg, status; + + /* + * Other bits are valid only if ATA_DMA_ACTIVE==0, + * and the ATA_DMA_INTR bit doesn't exist. + */ + reg = readl(port_mmio + BMDMA_STATUS_OFS); + if (reg & ATA_DMA_ACTIVE) + status = ATA_DMA_ACTIVE; + else + status = (reg & ATA_DMA_ERR) | ATA_DMA_INTR; + return status; +} + +/** * mv_qc_prep - Host specific command preparation. * @qc: queued command to prepare * ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 07/07] sata_mv: optimize use of mv_edma_cfg 2009-01-30 23:51 ` [PATCH 06/07] sata_mv: introduce support for ATAPI devices Mark Lord @ 2009-01-30 23:52 ` Mark Lord 2009-02-03 4:19 ` [PATCH 06/07] sata_mv: introduce support for ATAPI devices Jeff Garzik 1 sibling, 0 replies; 18+ messages in thread From: Mark Lord @ 2009-01-30 23:52 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list Try and avoid unnecessary reconfiguration of the EDMA config register on every single non-EDMA I/O operation, by moving the call to mv_edma_cfg() into mv_stop_edma(). It must then also be invoked from mv_hardreset() and from mv_port_start(). Signed-off-by: Mark Lord <mlord@pobox.com> --- old/drivers/ata/sata_mv.c 2009-01-30 18:33:04.000000000 -0500 +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:34:05.000000000 -0500 @@ -979,6 +979,7 @@ { void __iomem *port_mmio = mv_ap_base(ap); struct mv_port_priv *pp = ap->private_data; + int err = 0; if (!(pp->pp_flags & MV_PP_FLAG_EDMA_EN)) return 0; @@ -986,9 +987,10 @@ mv_wait_for_edma_empty_idle(ap); if (mv_stop_edma_engine(port_mmio)) { ata_port_printk(ap, KERN_ERR, "Unable to stop eDMA\n"); - return -EIO; + err = -EIO; } - return 0; + mv_edma_cfg(ap, 0, 0); + return err; } #ifdef ATA_DEBUG @@ -1337,6 +1339,7 @@ pp->sg_tbl_dma[tag] = pp->sg_tbl_dma[0]; } } + mv_edma_cfg(ap, 0, 0); return 0; out_port_free_dma_mem: @@ -1797,7 +1800,6 @@ * shadow block, etc registers. */ mv_stop_edma(ap); - mv_edma_cfg(ap, 0, 0); mv_clear_and_enable_port_irqs(ap, mv_ap_base(ap), port_irqs); mv_pmp_select(ap, qc->dev->link->pmp); return ata_sff_qc_issue(qc); @@ -2996,6 +2998,7 @@ extra = HZ; /* only extend it once, max */ } } while (sstatus != 0x0 && sstatus != 0x113 && sstatus != 0x123); + mv_edma_cfg(ap, 0, 0); return rc; } ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 06/07] sata_mv: introduce support for ATAPI devices 2009-01-30 23:51 ` [PATCH 06/07] sata_mv: introduce support for ATAPI devices Mark Lord 2009-01-30 23:52 ` [PATCH 07/07] sata_mv: optimize use of mv_edma_cfg Mark Lord @ 2009-02-03 4:19 ` Jeff Garzik 1 sibling, 0 replies; 18+ messages in thread From: Jeff Garzik @ 2009-02-03 4:19 UTC (permalink / raw) To: Mark Lord; +Cc: IDE/ATA development list Mark Lord wrote: > Add ATAPI support to sata_mv, using sff DMA for GEN_II chipsets, > and plain old PIO for GEN_IIE. > > Signed-off-by: Mark Lord <mlord@pobox.com> applied 5-8 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 05/07] sata_mv: mv_fill_sg fixes 2009-01-30 23:50 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Mark Lord 2009-01-30 23:51 ` [PATCH 06/07] sata_mv: introduce support for ATAPI devices Mark Lord @ 2009-02-01 20:55 ` Grant Grundler 2009-02-01 21:46 ` Mark Lord 2009-02-01 21:50 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes v2 Mark Lord 1 sibling, 2 replies; 18+ messages in thread From: Grant Grundler @ 2009-02-01 20:55 UTC (permalink / raw) To: Mark Lord; +Cc: Jeff Garzik, IDE/ATA development list On Fri, Jan 30, 2009 at 3:50 PM, Mark Lord <liml@rtr.ca> wrote: > Fix mv_fill_sg() to zero out the reserved word (required for ATAPI), > and to include a memory barrier. This may also help with problems > reported by Jens on the PPC platform. > > Signed-off-by: Mark Lord <mlord@pobox.com> > > --- old/drivers/ata/sata_mv.c 2009-01-30 18:31:03.000000000 -0500 > +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:32:08.000000000 -0500 > @@ -1364,12 +1364,13 @@ > u32 offset = addr & 0xffff; > u32 len = sg_len; > > - if ((offset + sg_len > 0x10000)) > + if ((offset + len > 0x10000)) Why the double parens? > len = 0x10000 - offset; > > mv_sg->addr = cpu_to_le32(addr & 0xffffffff); > mv_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16); > mv_sg->flags_size = cpu_to_le32(len & 0xffff); > + mv_sg->reserved = 0; > > sg_len -= len; > addr += len; > @@ -1381,6 +1382,7 @@ > > if (likely(last_sg)) > last_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL); > + mb(); /* ensure data structure is visible to the chipset */ It's not obvious to me what you are racing against here. Normally the mb() is to prevent the above store from getting executed *after* some MMIO read or write that would tell the chip to read the flags_size field (or anything recently stored in that data structure). I guess I'm asking for the comment to indicate which MMIO write it's racing with. thanks, grant > } > > static void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last) > -- > To unsubscribe from this list: send the line "unsubscribe linux-ide" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 05/07] sata_mv: mv_fill_sg fixes 2009-02-01 20:55 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Grant Grundler @ 2009-02-01 21:46 ` Mark Lord 2009-02-01 21:50 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes v2 Mark Lord 1 sibling, 0 replies; 18+ messages in thread From: Mark Lord @ 2009-02-01 21:46 UTC (permalink / raw) To: Grant Grundler; +Cc: Jeff Garzik, IDE/ATA development list Grant Grundler wrote: > On Fri, Jan 30, 2009 at 3:50 PM, Mark Lord <liml@rtr.ca> wrote: .. >> >> if (likely(last_sg)) >> last_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL); >> + mb(); /* ensure data structure is visible to the chipset */ > > It's not obvious to me what you are racing against here. > Normally the mb() is to prevent the above store from getting executed > *after* some MMIO read or write that would tell the chip to read the > flags_size field (or anything recently stored in that data structure). > > I guess I'm asking for the comment to indicate which MMIO write it's > racing with. .. It's exactly the same as the generic routine in libata-sff, which has a mb() in the same place for the same reason: To ensure the PRD table is visible to the chipset before we trigger the I/O operation. Pretty standard. ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 05/07] sata_mv: mv_fill_sg fixes v2 2009-02-01 20:55 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Grant Grundler 2009-02-01 21:46 ` Mark Lord @ 2009-02-01 21:50 ` Mark Lord 1 sibling, 0 replies; 18+ messages in thread From: Mark Lord @ 2009-02-01 21:50 UTC (permalink / raw) To: Grant Grundler; +Cc: Jeff Garzik, IDE/ATA development list Grant Grundler wrote: > On Fri, Jan 30, 2009 at 3:50 PM, Mark Lord <liml@rtr.ca> wrote: >> Fix mv_fill_sg() to zero out the reserved word (required for ATAPI), >> and to include a memory barrier. This may also help with problems >> reported by Jens on the PPC platform. >> >> Signed-off-by: Mark Lord <mlord@pobox.com> >> >> --- old/drivers/ata/sata_mv.c 2009-01-30 18:31:03.000000000 -0500 >> +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:32:08.000000000 -0500 >> @@ -1364,12 +1364,13 @@ >> u32 offset = addr & 0xffff; >> u32 len = sg_len; >> >> - if ((offset + sg_len > 0x10000)) >> + if ((offset + len > 0x10000)) > > Why the double parens? .. No reason, no harm -- they were there already. But if we're being pedantic, here it is again without them: (REPOST, without the redundant parenthesis) Fix mv_fill_sg() to zero out the reserved word (required for ATAPI), and to include a memory barrier. This may also help with problems reported by Jens on the PPC platform. Signed-off-by: Mark Lord <mlord@pobox.com> --- old/drivers/ata/sata_mv.c 2009-01-30 18:31:03.000000000 -0500 +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:32:08.000000000 -0500 @@ -1364,12 +1364,13 @@ u32 offset = addr & 0xffff; u32 len = sg_len; - if ((offset + sg_len > 0x10000)) + if (offset + len > 0x10000) len = 0x10000 - offset; mv_sg->addr = cpu_to_le32(addr & 0xffffffff); mv_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16); mv_sg->flags_size = cpu_to_le32(len & 0xffff); + mv_sg->reserved = 0; sg_len -= len; addr += len; @@ -1381,6 +1382,7 @@ if (likely(last_sg)) last_sg->flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL); + mb(); /* ensure data structure is visible to the chipset */ } static void mv_crqb_pack_cmd(__le16 *cmdw, u8 data, u8 addr, unsigned last) ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 08/07] sata_mv: remove leftovers 2009-01-30 23:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Mark Lord 2009-01-30 23:50 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Mark Lord @ 2009-01-31 2:40 ` Mark Lord 2009-02-01 20:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Grant Grundler 2 siblings, 0 replies; 18+ messages in thread From: Mark Lord @ 2009-01-31 2:40 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list Remove redundant code left over from the earlier patch 04/07. Signed-off-by: Mark Lord <mlord@pobox.com> --- Gets rid of a harmless artifact from an earlier patch. Posted as an addendum, rather than reworking the entire sequence. --- old/drivers/ata/sata_mv.c 2009-01-30 18:38:17.000000000 -0500 +++ linux/drivers/ata/sata_mv.c 2009-01-30 21:37:56.000000000 -0500 @@ -1820,8 +1820,6 @@ else if (!(qc->flags & ATA_QCFLAG_ACTIVE)) qc = NULL; } - if (qc && (qc->tf.flags & ATA_TFLAG_POLLING)) - qc = NULL; return qc; } ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 04/07] sata_mv: update ata_qc_from_tag 2009-01-30 23:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Mark Lord 2009-01-30 23:50 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Mark Lord 2009-01-31 2:40 ` [PATCH 08/07] sata_mv: remove leftovers Mark Lord @ 2009-02-01 20:49 ` Grant Grundler 2009-02-01 21:45 ` Mark Lord 2 siblings, 1 reply; 18+ messages in thread From: Grant Grundler @ 2009-02-01 20:49 UTC (permalink / raw) To: Mark Lord; +Cc: Jeff Garzik, IDE/ATA development list On Fri, Jan 30, 2009 at 3:49 PM, Mark Lord <liml@rtr.ca> wrote: > Update the logic in ata_qc_from_tag() to match that used > in similar places elsewhere in libata. > > Signed-off-by: Mark Lord <mlord@pobox.com> > > --- old/drivers/ata/sata_mv.c 2009-01-30 18:23:22.000000000 -0500 > +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:26:55.000000000 -0500 > @@ -1628,6 +1628,12 @@ > if (pp->pp_flags & MV_PP_FLAG_NCQ_EN) > return NULL; > qc = ata_qc_from_tag(ap, ap->link.active_tag); > + if (qc) { > + if (qc->tf.flags & ATA_TFLAG_POLLING) > + qc = NULL; > + else if (!(qc->flags & ATA_QCFLAG_ACTIVE)) > + qc = NULL; > + } > if (qc && (qc->tf.flags & ATA_TFLAG_POLLING)) > qc = NULL; Mark, isn't the second test redudant now and can be removed? (refering to the test immediately following the code you added). grant > return qc; > -- > To unsubscribe from this list: send the line "unsubscribe linux-ide" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 04/07] sata_mv: update ata_qc_from_tag 2009-02-01 20:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Grant Grundler @ 2009-02-01 21:45 ` Mark Lord 0 siblings, 0 replies; 18+ messages in thread From: Mark Lord @ 2009-02-01 21:45 UTC (permalink / raw) To: Grant Grundler; +Cc: Jeff Garzik, IDE/ATA development list Grant Grundler wrote: > On Fri, Jan 30, 2009 at 3:49 PM, Mark Lord <liml@rtr.ca> wrote: >> Update the logic in ata_qc_from_tag() to match that used >> in similar places elsewhere in libata. >> >> Signed-off-by: Mark Lord <mlord@pobox.com> >> >> --- old/drivers/ata/sata_mv.c 2009-01-30 18:23:22.000000000 -0500 >> +++ linux/drivers/ata/sata_mv.c 2009-01-30 18:26:55.000000000 -0500 >> @@ -1628,6 +1628,12 @@ >> if (pp->pp_flags & MV_PP_FLAG_NCQ_EN) >> return NULL; >> qc = ata_qc_from_tag(ap, ap->link.active_tag); >> + if (qc) { >> + if (qc->tf.flags & ATA_TFLAG_POLLING) >> + qc = NULL; >> + else if (!(qc->flags & ATA_QCFLAG_ACTIVE)) >> + qc = NULL; >> + } >> if (qc && (qc->tf.flags & ATA_TFLAG_POLLING)) >> qc = NULL; > > Mark, > isn't the second test redudant now and can be removed? .. Yes, and it has been. Keep reading. -ml ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 03/07] sata_mv: restructure mv_qc_issue 2009-01-30 23:48 ` [PATCH 03/07] sata_mv: restructure mv_qc_issue Mark Lord 2009-01-30 23:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Mark Lord @ 2009-02-03 4:14 ` Jeff Garzik 1 sibling, 0 replies; 18+ messages in thread From: Jeff Garzik @ 2009-02-03 4:14 UTC (permalink / raw) To: Mark Lord; +Cc: IDE/ATA development list Mark Lord wrote: > Rearrange logic in mv_qc_issue() to handle protocols > other than ATA_PROT_DMA, ATA_PROT_NCQ, and ATA_PROT_PIO. > This is in preparation for later enabling ATAPI support. > > Signed-off-by: Mark Lord <mlord@pobox.com> applied 3-4 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS 2009-01-30 23:46 ` [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS Mark Lord 2009-01-30 23:47 ` [PATCH 02/07] sata_mv: rearrange mv_start_dma() and friends Mark Lord @ 2009-02-03 4:12 ` Jeff Garzik 1 sibling, 0 replies; 18+ messages in thread From: Jeff Garzik @ 2009-02-03 4:12 UTC (permalink / raw) To: Mark Lord; +Cc: IDE/ATA development list Mark Lord wrote: > Clean up the chipset GENeration FLAGS, and rename them > for consistency with other uses of GEN_XX within sata_mv. > > Signed-off-by: Mark Lord <mlord@pobox.com> applied 1-2 ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 00/07] sata_mv: ATAPI patchset 2009-01-30 23:45 [PATCH 00/07] sata_mv: ATAPI patchset Mark Lord 2009-01-30 23:46 ` [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS Mark Lord @ 2009-01-31 0:04 ` Mark Lord 1 sibling, 0 replies; 18+ messages in thread From: Mark Lord @ 2009-01-31 0:04 UTC (permalink / raw) To: Jeff Garzik; +Cc: IDE/ATA development list Mark Lord wrote: > The following patchset adds ATAPI capability to sata_mv. > These patches are all for #upstream. > > 01_sata_mv_cleanup_flags.patch > 02_sata_mv_edma_cfg.patch > 03_sata_mv_qc_issue.patch > 04_sata_mv_get_active_qc.patch > 05_sata_mv_fill_sg.patch > 06_sata_mv_atapi_dma.patch > 07_sata_mv_optimize_edma_cfg_use.patch .. As you can see, I decided to do a little more cleanup in the driver prior to tacking on the actual ATAPI stuff. :) All of these are on top of the earlier submitted patch which corrects the chipset IDs for the Highpoint RocketRAID 174x cards. ATAPI DMA works for GEN_II chips, but not for GEN_IIE. Marvell may eventually find a way to make it work for those, as well. Patch 05 above could be a candidate for 2.6.29 as well as #upstream. Cheers ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2009-02-03 4:19 UTC | newest] Thread overview: 18+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-01-30 23:45 [PATCH 00/07] sata_mv: ATAPI patchset Mark Lord 2009-01-30 23:46 ` [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS Mark Lord 2009-01-30 23:47 ` [PATCH 02/07] sata_mv: rearrange mv_start_dma() and friends Mark Lord 2009-01-30 23:48 ` [PATCH 03/07] sata_mv: restructure mv_qc_issue Mark Lord 2009-01-30 23:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Mark Lord 2009-01-30 23:50 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Mark Lord 2009-01-30 23:51 ` [PATCH 06/07] sata_mv: introduce support for ATAPI devices Mark Lord 2009-01-30 23:52 ` [PATCH 07/07] sata_mv: optimize use of mv_edma_cfg Mark Lord 2009-02-03 4:19 ` [PATCH 06/07] sata_mv: introduce support for ATAPI devices Jeff Garzik 2009-02-01 20:55 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes Grant Grundler 2009-02-01 21:46 ` Mark Lord 2009-02-01 21:50 ` [PATCH 05/07] sata_mv: mv_fill_sg fixes v2 Mark Lord 2009-01-31 2:40 ` [PATCH 08/07] sata_mv: remove leftovers Mark Lord 2009-02-01 20:49 ` [PATCH 04/07] sata_mv: update ata_qc_from_tag Grant Grundler 2009-02-01 21:45 ` Mark Lord 2009-02-03 4:14 ` [PATCH 03/07] sata_mv: restructure mv_qc_issue Jeff Garzik 2009-02-03 4:12 ` [PATCH 01/07] sata_mv: cleanup chipset GENeration FLAGS Jeff Garzik 2009-01-31 0:04 ` [PATCH 00/07] sata_mv: ATAPI patchset Mark Lord
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).