aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/mmc/mmc_block.c1
-rw-r--r--drivers/mmc/wbsd.c15
-rw-r--r--drivers/scsi/ahci.c31
-rw-r--r--drivers/scsi/libata-core.c129
-rw-r--r--drivers/scsi/libata-scsi.c14
-rw-r--r--drivers/scsi/pdc_adma.c8
-rw-r--r--drivers/scsi/sata_mv.c48
-rw-r--r--drivers/scsi/sata_qstor.c8
-rw-r--r--drivers/scsi/sata_sil24.c48
-rw-r--r--drivers/scsi/sata_sx4.c13
-rw-r--r--include/linux/libata.h52
11 files changed, 284 insertions, 83 deletions
diff --git a/drivers/mmc/mmc_block.c b/drivers/mmc/mmc_block.c
index 9b629856c735..d91fcf7c3178 100644
--- a/drivers/mmc/mmc_block.c
+++ b/drivers/mmc/mmc_block.c
@@ -203,7 +203,6 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
203 brq.data.flags |= MMC_DATA_READ; 203 brq.data.flags |= MMC_DATA_READ;
204 } else { 204 } else {
205 brq.cmd.opcode = MMC_WRITE_BLOCK; 205 brq.cmd.opcode = MMC_WRITE_BLOCK;
206 brq.cmd.flags = MMC_RSP_R1B;
207 brq.data.flags |= MMC_DATA_WRITE; 206 brq.data.flags |= MMC_DATA_WRITE;
208 brq.data.blocks = 1; 207 brq.data.blocks = 1;
209 } 208 }
diff --git a/drivers/mmc/wbsd.c b/drivers/mmc/wbsd.c
index 942668e93a74..4ff67e7363d9 100644
--- a/drivers/mmc/wbsd.c
+++ b/drivers/mmc/wbsd.c
@@ -201,7 +201,7 @@ static void wbsd_reset(struct wbsd_host* host)
201{ 201{
202 u8 setup; 202 u8 setup;
203 203
204 printk(KERN_ERR DRIVER_NAME ": Resetting chip\n"); 204 printk(KERN_ERR "%s: Resetting chip\n", mmc_hostname(host->mmc));
205 205
206 /* 206 /*
207 * Soft reset of chip (SD/MMC part). 207 * Soft reset of chip (SD/MMC part).
@@ -880,8 +880,9 @@ static void wbsd_finish_data(struct wbsd_host* host, struct mmc_data* data)
880 */ 880 */
881 if (count) 881 if (count)
882 { 882 {
883 printk(KERN_ERR DRIVER_NAME ": Incomplete DMA " 883 printk(KERN_ERR "%s: Incomplete DMA transfer. "
884 "transfer. %d bytes left.\n", count); 884 "%d bytes left.\n",
885 mmc_hostname(host->mmc), count);
885 886
886 data->error = MMC_ERR_FAILED; 887 data->error = MMC_ERR_FAILED;
887 } 888 }
@@ -1169,8 +1170,8 @@ static void wbsd_tasklet_card(unsigned long param)
1169 1170
1170 if (host->mrq) 1171 if (host->mrq)
1171 { 1172 {
1172 printk(KERN_ERR DRIVER_NAME 1173 printk(KERN_ERR "%s: Card removed during transfer!\n",
1173 ": Card removed during transfer!\n"); 1174 mmc_hostname(host->mmc));
1174 wbsd_reset(host); 1175 wbsd_reset(host);
1175 1176
1176 host->mrq->cmd->error = MMC_ERR_FAILED; 1177 host->mrq->cmd->error = MMC_ERR_FAILED;
@@ -1852,9 +1853,9 @@ static int __devinit wbsd_init(struct device* dev, int base, int irq, int dma,
1852 /* 1853 /*
1853 * See if chip needs to be configured. 1854 * See if chip needs to be configured.
1854 */ 1855 */
1855 if (pnp && (host->config != 0)) 1856 if (pnp)
1856 { 1857 {
1857 if (!wbsd_chip_validate(host)) 1858 if ((host->config != 0) && !wbsd_chip_validate(host))
1858 { 1859 {
1859 printk(KERN_WARNING DRIVER_NAME 1860 printk(KERN_WARNING DRIVER_NAME
1860 ": PnP active but chip not configured! " 1861 ": PnP active but chip not configured! "
diff --git a/drivers/scsi/ahci.c b/drivers/scsi/ahci.c
index e2a5657d5fdb..4612312c0c2d 100644
--- a/drivers/scsi/ahci.c
+++ b/drivers/scsi/ahci.c
@@ -307,14 +307,22 @@ static int ahci_port_start(struct ata_port *ap)
307 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no); 307 void __iomem *port_mmio = ahci_port_base(mmio, ap->port_no);
308 void *mem; 308 void *mem;
309 dma_addr_t mem_dma; 309 dma_addr_t mem_dma;
310 int rc;
310 311
311 pp = kmalloc(sizeof(*pp), GFP_KERNEL); 312 pp = kmalloc(sizeof(*pp), GFP_KERNEL);
312 if (!pp) 313 if (!pp)
313 return -ENOMEM; 314 return -ENOMEM;
314 memset(pp, 0, sizeof(*pp)); 315 memset(pp, 0, sizeof(*pp));
315 316
317 rc = ata_pad_alloc(ap, dev);
318 if (rc) {
319 kfree(pp);
320 return rc;
321 }
322
316 mem = dma_alloc_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, &mem_dma, GFP_KERNEL); 323 mem = dma_alloc_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, &mem_dma, GFP_KERNEL);
317 if (!mem) { 324 if (!mem) {
325 ata_pad_free(ap, dev);
318 kfree(pp); 326 kfree(pp);
319 return -ENOMEM; 327 return -ENOMEM;
320 } 328 }
@@ -390,6 +398,7 @@ static void ahci_port_stop(struct ata_port *ap)
390 ap->private_data = NULL; 398 ap->private_data = NULL;
391 dma_free_coherent(dev, AHCI_PORT_PRIV_DMA_SZ, 399 dma_free_coherent(dev, AHCI_PORT_PRIV_DMA_SZ,
392 pp->cmd_slot, pp->cmd_slot_dma); 400 pp->cmd_slot, pp->cmd_slot_dma);
401 ata_pad_free(ap, dev);
393 kfree(pp); 402 kfree(pp);
394} 403}
395 404
@@ -468,23 +477,23 @@ static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
468static void ahci_fill_sg(struct ata_queued_cmd *qc) 477static void ahci_fill_sg(struct ata_queued_cmd *qc)
469{ 478{
470 struct ahci_port_priv *pp = qc->ap->private_data; 479 struct ahci_port_priv *pp = qc->ap->private_data;
471 unsigned int i; 480 struct scatterlist *sg;
481 struct ahci_sg *ahci_sg;
472 482
473 VPRINTK("ENTER\n"); 483 VPRINTK("ENTER\n");
474 484
475 /* 485 /*
476 * Next, the S/G list. 486 * Next, the S/G list.
477 */ 487 */
478 for (i = 0; i < qc->n_elem; i++) { 488 ahci_sg = pp->cmd_tbl_sg;
479 u32 sg_len; 489 ata_for_each_sg(sg, qc) {
480 dma_addr_t addr; 490 dma_addr_t addr = sg_dma_address(sg);
481 491 u32 sg_len = sg_dma_len(sg);
482 addr = sg_dma_address(&qc->sg[i]); 492
483 sg_len = sg_dma_len(&qc->sg[i]); 493 ahci_sg->addr = cpu_to_le32(addr & 0xffffffff);
484 494 ahci_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16);
485 pp->cmd_tbl_sg[i].addr = cpu_to_le32(addr & 0xffffffff); 495 ahci_sg->flags_size = cpu_to_le32(sg_len - 1);
486 pp->cmd_tbl_sg[i].addr_hi = cpu_to_le32((addr >> 16) >> 16); 496 ahci_sg++;
487 pp->cmd_tbl_sg[i].flags_size = cpu_to_le32(sg_len - 1);
488 } 497 }
489} 498}
490 499
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index ff18fa7044c5..e1346cddd37f 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -2390,8 +2390,9 @@ static void ata_dev_init_params(struct ata_port *ap, struct ata_device *dev)
2390static void ata_sg_clean(struct ata_queued_cmd *qc) 2390static void ata_sg_clean(struct ata_queued_cmd *qc)
2391{ 2391{
2392 struct ata_port *ap = qc->ap; 2392 struct ata_port *ap = qc->ap;
2393 struct scatterlist *sg = qc->sg; 2393 struct scatterlist *sg = qc->__sg;
2394 int dir = qc->dma_dir; 2394 int dir = qc->dma_dir;
2395 void *pad_buf = NULL;
2395 2396
2396 assert(qc->flags & ATA_QCFLAG_DMAMAP); 2397 assert(qc->flags & ATA_QCFLAG_DMAMAP);
2397 assert(sg != NULL); 2398 assert(sg != NULL);
@@ -2401,14 +2402,35 @@ static void ata_sg_clean(struct ata_queued_cmd *qc)
2401 2402
2402 DPRINTK("unmapping %u sg elements\n", qc->n_elem); 2403 DPRINTK("unmapping %u sg elements\n", qc->n_elem);
2403 2404
2404 if (qc->flags & ATA_QCFLAG_SG) 2405 /* if we padded the buffer out to 32-bit bound, and data
2406 * xfer direction is from-device, we must copy from the
2407 * pad buffer back into the supplied buffer
2408 */
2409 if (qc->pad_len && !(qc->tf.flags & ATA_TFLAG_WRITE))
2410 pad_buf = ap->pad + (qc->tag * ATA_DMA_PAD_SZ);
2411
2412 if (qc->flags & ATA_QCFLAG_SG) {
2405 dma_unmap_sg(ap->host_set->dev, sg, qc->n_elem, dir); 2413 dma_unmap_sg(ap->host_set->dev, sg, qc->n_elem, dir);
2406 else 2414 /* restore last sg */
2415 sg[qc->orig_n_elem - 1].length += qc->pad_len;
2416 if (pad_buf) {
2417 struct scatterlist *psg = &qc->pad_sgent;
2418 void *addr = kmap_atomic(psg->page, KM_IRQ0);
2419 memcpy(addr + psg->offset, pad_buf, qc->pad_len);
2420 kunmap_atomic(psg->page, KM_IRQ0);
2421 }
2422 } else {
2407 dma_unmap_single(ap->host_set->dev, sg_dma_address(&sg[0]), 2423 dma_unmap_single(ap->host_set->dev, sg_dma_address(&sg[0]),
2408 sg_dma_len(&sg[0]), dir); 2424 sg_dma_len(&sg[0]), dir);
2425 /* restore sg */
2426 sg->length += qc->pad_len;
2427 if (pad_buf)
2428 memcpy(qc->buf_virt + sg->length - qc->pad_len,
2429 pad_buf, qc->pad_len);
2430 }
2409 2431
2410 qc->flags &= ~ATA_QCFLAG_DMAMAP; 2432 qc->flags &= ~ATA_QCFLAG_DMAMAP;
2411 qc->sg = NULL; 2433 qc->__sg = NULL;
2412} 2434}
2413 2435
2414/** 2436/**
@@ -2424,15 +2446,15 @@ static void ata_sg_clean(struct ata_queued_cmd *qc)
2424 */ 2446 */
2425static void ata_fill_sg(struct ata_queued_cmd *qc) 2447static void ata_fill_sg(struct ata_queued_cmd *qc)
2426{ 2448{
2427 struct scatterlist *sg = qc->sg;
2428 struct ata_port *ap = qc->ap; 2449 struct ata_port *ap = qc->ap;
2429 unsigned int idx, nelem; 2450 struct scatterlist *sg;
2451 unsigned int idx;
2430 2452
2431 assert(sg != NULL); 2453 assert(qc->__sg != NULL);
2432 assert(qc->n_elem > 0); 2454 assert(qc->n_elem > 0);
2433 2455
2434 idx = 0; 2456 idx = 0;
2435 for (nelem = qc->n_elem; nelem; nelem--,sg++) { 2457 ata_for_each_sg(sg, qc) {
2436 u32 addr, offset; 2458 u32 addr, offset;
2437 u32 sg_len, len; 2459 u32 sg_len, len;
2438 2460
@@ -2518,12 +2540,18 @@ void ata_qc_prep(struct ata_queued_cmd *qc)
2518 2540
2519void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf, unsigned int buflen) 2541void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf, unsigned int buflen)
2520{ 2542{
2543 struct scatterlist *sg;
2544
2521 qc->flags |= ATA_QCFLAG_SINGLE; 2545 qc->flags |= ATA_QCFLAG_SINGLE;
2522 2546
2523 qc->sg = &qc->sgent; 2547 memset(&qc->sgent, 0, sizeof(qc->sgent));
2548 qc->__sg = &qc->sgent;
2524 qc->n_elem = 1; 2549 qc->n_elem = 1;
2550 qc->orig_n_elem = 1;
2525 qc->buf_virt = buf; 2551 qc->buf_virt = buf;
2526 sg_init_one(qc->sg, buf, buflen); 2552
2553 sg = qc->__sg;
2554 sg_init_one(sg, buf, buflen);
2527} 2555}
2528 2556
2529/** 2557/**
@@ -2544,8 +2572,9 @@ void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
2544 unsigned int n_elem) 2572 unsigned int n_elem)
2545{ 2573{
2546 qc->flags |= ATA_QCFLAG_SG; 2574 qc->flags |= ATA_QCFLAG_SG;
2547 qc->sg = sg; 2575 qc->__sg = sg;
2548 qc->n_elem = n_elem; 2576 qc->n_elem = n_elem;
2577 qc->orig_n_elem = n_elem;
2549} 2578}
2550 2579
2551/** 2580/**
@@ -2565,9 +2594,32 @@ static int ata_sg_setup_one(struct ata_queued_cmd *qc)
2565{ 2594{
2566 struct ata_port *ap = qc->ap; 2595 struct ata_port *ap = qc->ap;
2567 int dir = qc->dma_dir; 2596 int dir = qc->dma_dir;
2568 struct scatterlist *sg = qc->sg; 2597 struct scatterlist *sg = qc->__sg;
2569 dma_addr_t dma_address; 2598 dma_addr_t dma_address;
2570 2599
2600 /* we must lengthen transfers to end on a 32-bit boundary */
2601 qc->pad_len = sg->length & 3;
2602 if (qc->pad_len) {
2603 void *pad_buf = ap->pad + (qc->tag * ATA_DMA_PAD_SZ);
2604 struct scatterlist *psg = &qc->pad_sgent;
2605
2606 assert(qc->dev->class == ATA_DEV_ATAPI);
2607
2608 memset(pad_buf, 0, ATA_DMA_PAD_SZ);
2609
2610 if (qc->tf.flags & ATA_TFLAG_WRITE)
2611 memcpy(pad_buf, qc->buf_virt + sg->length - qc->pad_len,
2612 qc->pad_len);
2613
2614 sg_dma_address(psg) = ap->pad_dma + (qc->tag * ATA_DMA_PAD_SZ);
2615 sg_dma_len(psg) = ATA_DMA_PAD_SZ;
2616 /* trim sg */
2617 sg->length -= qc->pad_len;
2618
2619 DPRINTK("padding done, sg->length=%u pad_len=%u\n",
2620 sg->length, qc->pad_len);
2621 }
2622
2571 dma_address = dma_map_single(ap->host_set->dev, qc->buf_virt, 2623 dma_address = dma_map_single(ap->host_set->dev, qc->buf_virt,
2572 sg->length, dir); 2624 sg->length, dir);
2573 if (dma_mapping_error(dma_address)) 2625 if (dma_mapping_error(dma_address))
@@ -2599,12 +2651,47 @@ static int ata_sg_setup_one(struct ata_queued_cmd *qc)
2599static int ata_sg_setup(struct ata_queued_cmd *qc) 2651static int ata_sg_setup(struct ata_queued_cmd *qc)
2600{ 2652{
2601 struct ata_port *ap = qc->ap; 2653 struct ata_port *ap = qc->ap;
2602 struct scatterlist *sg = qc->sg; 2654 struct scatterlist *sg = qc->__sg;
2655 struct scatterlist *lsg = &sg[qc->n_elem - 1];
2603 int n_elem, dir; 2656 int n_elem, dir;
2604 2657
2605 VPRINTK("ENTER, ata%u\n", ap->id); 2658 VPRINTK("ENTER, ata%u\n", ap->id);
2606 assert(qc->flags & ATA_QCFLAG_SG); 2659 assert(qc->flags & ATA_QCFLAG_SG);
2607 2660
2661 /* we must lengthen transfers to end on a 32-bit boundary */
2662 qc->pad_len = lsg->length & 3;
2663 if (qc->pad_len) {
2664 void *pad_buf = ap->pad + (qc->tag * ATA_DMA_PAD_SZ);
2665 struct scatterlist *psg = &qc->pad_sgent;
2666 unsigned int offset;
2667
2668 assert(qc->dev->class == ATA_DEV_ATAPI);
2669
2670 memset(pad_buf, 0, ATA_DMA_PAD_SZ);
2671
2672 /*
2673 * psg->page/offset are used to copy to-be-written
2674 * data in this function or read data in ata_sg_clean.
2675 */
2676 offset = lsg->offset + lsg->length - qc->pad_len;
2677 psg->page = nth_page(lsg->page, offset >> PAGE_SHIFT);
2678 psg->offset = offset_in_page(offset);
2679
2680 if (qc->tf.flags & ATA_TFLAG_WRITE) {
2681 void *addr = kmap_atomic(psg->page, KM_IRQ0);
2682 memcpy(pad_buf, addr + psg->offset, qc->pad_len);
2683 kunmap_atomic(psg->page, KM_IRQ0);
2684 }
2685
2686 sg_dma_address(psg) = ap->pad_dma + (qc->tag * ATA_DMA_PAD_SZ);
2687 sg_dma_len(psg) = ATA_DMA_PAD_SZ;
2688 /* trim last sg */
2689 lsg->length -= qc->pad_len;
2690
2691 DPRINTK("padding done, sg[%d].length=%u pad_len=%u\n",
2692 qc->n_elem - 1, lsg->length, qc->pad_len);
2693 }
2694
2608 dir = qc->dma_dir; 2695 dir = qc->dma_dir;
2609 n_elem = dma_map_sg(ap->host_set->dev, sg, qc->n_elem, dir); 2696 n_elem = dma_map_sg(ap->host_set->dev, sg, qc->n_elem, dir);
2610 if (n_elem < 1) 2697 if (n_elem < 1)
@@ -2880,7 +2967,7 @@ static void ata_data_xfer(struct ata_port *ap, unsigned char *buf,
2880static void ata_pio_sector(struct ata_queued_cmd *qc) 2967static void ata_pio_sector(struct ata_queued_cmd *qc)
2881{ 2968{
2882 int do_write = (qc->tf.flags & ATA_TFLAG_WRITE); 2969 int do_write = (qc->tf.flags & ATA_TFLAG_WRITE);
2883 struct scatterlist *sg = qc->sg; 2970 struct scatterlist *sg = qc->__sg;
2884 struct ata_port *ap = qc->ap; 2971 struct ata_port *ap = qc->ap;
2885 struct page *page; 2972 struct page *page;
2886 unsigned int offset; 2973 unsigned int offset;
@@ -2930,7 +3017,7 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
2930static void __atapi_pio_bytes(struct ata_queued_cmd *qc, unsigned int bytes) 3017static void __atapi_pio_bytes(struct ata_queued_cmd *qc, unsigned int bytes)
2931{ 3018{
2932 int do_write = (qc->tf.flags & ATA_TFLAG_WRITE); 3019 int do_write = (qc->tf.flags & ATA_TFLAG_WRITE);
2933 struct scatterlist *sg = qc->sg; 3020 struct scatterlist *sg = qc->__sg;
2934 struct ata_port *ap = qc->ap; 3021 struct ata_port *ap = qc->ap;
2935 struct page *page; 3022 struct page *page;
2936 unsigned char *buf; 3023 unsigned char *buf;
@@ -2963,7 +3050,7 @@ next_sg:
2963 return; 3050 return;
2964 } 3051 }
2965 3052
2966 sg = &qc->sg[qc->cursg]; 3053 sg = &qc->__sg[qc->cursg];
2967 3054
2968 page = sg->page; 3055 page = sg->page;
2969 offset = sg->offset + qc->cursg_ofs; 3056 offset = sg->offset + qc->cursg_ofs;
@@ -3320,7 +3407,7 @@ struct ata_queued_cmd *ata_qc_new_init(struct ata_port *ap,
3320 3407
3321 qc = ata_qc_new(ap); 3408 qc = ata_qc_new(ap);
3322 if (qc) { 3409 if (qc) {
3323 qc->sg = NULL; 3410 qc->__sg = NULL;
3324 qc->flags = 0; 3411 qc->flags = 0;
3325 qc->scsicmd = NULL; 3412 qc->scsicmd = NULL;
3326 qc->ap = ap; 3413 qc->ap = ap;
@@ -4004,11 +4091,18 @@ err_out:
4004int ata_port_start (struct ata_port *ap) 4091int ata_port_start (struct ata_port *ap)
4005{ 4092{
4006 struct device *dev = ap->host_set->dev; 4093 struct device *dev = ap->host_set->dev;
4094 int rc;
4007 4095
4008 ap->prd = dma_alloc_coherent(dev, ATA_PRD_TBL_SZ, &ap->prd_dma, GFP_KERNEL); 4096 ap->prd = dma_alloc_coherent(dev, ATA_PRD_TBL_SZ, &ap->prd_dma, GFP_KERNEL);
4009 if (!ap->prd) 4097 if (!ap->prd)
4010 return -ENOMEM; 4098 return -ENOMEM;
4011 4099
4100 rc = ata_pad_alloc(ap, dev);
4101 if (rc) {
4102 dma_free_coherent(dev, ATA_PRD_TBL_SZ, ap->prd, ap->prd_dma);
4103 return rc;
4104 }
4105
4012 DPRINTK("prd alloc, virt %p, dma %llx\n", ap->prd, (unsigned long long) ap->prd_dma); 4106 DPRINTK("prd alloc, virt %p, dma %llx\n", ap->prd, (unsigned long long) ap->prd_dma);
4013 4107
4014 return 0; 4108 return 0;
@@ -4032,6 +4126,7 @@ void ata_port_stop (struct ata_port *ap)
4032 struct device *dev = ap->host_set->dev; 4126 struct device *dev = ap->host_set->dev;
4033 4127
4034 dma_free_coherent(dev, ATA_PRD_TBL_SZ, ap->prd, ap->prd_dma); 4128 dma_free_coherent(dev, ATA_PRD_TBL_SZ, ap->prd, ap->prd_dma);
4129 ata_pad_free(ap, dev);
4035} 4130}
4036 4131
4037void ata_host_stop (struct ata_host_set *host_set) 4132void ata_host_stop (struct ata_host_set *host_set)
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c
index 248baae96486..eb604b0a8990 100644
--- a/drivers/scsi/libata-scsi.c
+++ b/drivers/scsi/libata-scsi.c
@@ -355,10 +355,10 @@ struct ata_queued_cmd *ata_scsi_qc_new(struct ata_port *ap,
355 qc->scsidone = done; 355 qc->scsidone = done;
356 356
357 if (cmd->use_sg) { 357 if (cmd->use_sg) {
358 qc->sg = (struct scatterlist *) cmd->request_buffer; 358 qc->__sg = (struct scatterlist *) cmd->request_buffer;
359 qc->n_elem = cmd->use_sg; 359 qc->n_elem = cmd->use_sg;
360 } else { 360 } else {
361 qc->sg = &qc->sgent; 361 qc->__sg = &qc->sgent;
362 qc->n_elem = 1; 362 qc->n_elem = 1;
363 } 363 }
364 } else { 364 } else {
@@ -702,6 +702,16 @@ int ata_scsi_slave_config(struct scsi_device *sdev)
702 */ 702 */
703 blk_queue_max_sectors(sdev->request_queue, 2048); 703 blk_queue_max_sectors(sdev->request_queue, 2048);
704 } 704 }
705
706 /*
707 * SATA DMA transfers must be multiples of 4 byte, so
708 * we need to pad ATAPI transfers using an extra sg.
709 * Decrement max hw segments accordingly.
710 */
711 if (dev->class == ATA_DEV_ATAPI) {
712 request_queue_t *q = sdev->request_queue;
713 blk_queue_max_hw_segments(q, q->max_hw_segments - 1);
714 }
705 } 715 }
706 716
707 return 0; /* scsi layer doesn't check return value, sigh */ 717 return 0; /* scsi layer doesn't check return value, sigh */
diff --git a/drivers/scsi/pdc_adma.c b/drivers/scsi/pdc_adma.c
index 665017eda8a6..a50588c60fab 100644
--- a/drivers/scsi/pdc_adma.c
+++ b/drivers/scsi/pdc_adma.c
@@ -293,14 +293,14 @@ static void adma_eng_timeout(struct ata_port *ap)
293 293
294static int adma_fill_sg(struct ata_queued_cmd *qc) 294static int adma_fill_sg(struct ata_queued_cmd *qc)
295{ 295{
296 struct scatterlist *sg = qc->sg; 296 struct scatterlist *sg;
297 struct ata_port *ap = qc->ap; 297 struct ata_port *ap = qc->ap;
298 struct adma_port_priv *pp = ap->private_data; 298 struct adma_port_priv *pp = ap->private_data;
299 u8 *buf = pp->pkt; 299 u8 *buf = pp->pkt;
300 int nelem, i = (2 + buf[3]) * 8; 300 int i = (2 + buf[3]) * 8;
301 u8 pFLAGS = pORD | ((qc->tf.flags & ATA_TFLAG_WRITE) ? pDIRO : 0); 301 u8 pFLAGS = pORD | ((qc->tf.flags & ATA_TFLAG_WRITE) ? pDIRO : 0);
302 302
303 for (nelem = 0; nelem < qc->n_elem; nelem++,sg++) { 303 ata_for_each_sg(sg, qc) {
304 u32 addr; 304 u32 addr;
305 u32 len; 305 u32 len;
306 306
@@ -312,7 +312,7 @@ static int adma_fill_sg(struct ata_queued_cmd *qc)
312 *(__le32 *)(buf + i) = cpu_to_le32(len); 312 *(__le32 *)(buf + i) = cpu_to_le32(len);
313 i += 4; 313 i += 4;
314 314
315 if ((nelem + 1) == qc->n_elem) 315 if (ata_sg_is_last(sg, qc))
316 pFLAGS |= pEND; 316 pFLAGS |= pEND;
317 buf[i++] = pFLAGS; 317 buf[i++] = pFLAGS;
318 buf[i++] = qc->dev->dma_mode & 0xf; 318 buf[i++] = qc->dev->dma_mode & 0xf;
diff --git a/drivers/scsi/sata_mv.c b/drivers/scsi/sata_mv.c
index 46dbdee79f77..0f469e3dabe2 100644
--- a/drivers/scsi/sata_mv.c
+++ b/drivers/scsi/sata_mv.c
@@ -670,6 +670,11 @@ static void mv_host_stop(struct ata_host_set *host_set)
670 ata_host_stop(host_set); 670 ata_host_stop(host_set);
671} 671}
672 672
673static inline void mv_priv_free(struct mv_port_priv *pp, struct device *dev)
674{
675 dma_free_coherent(dev, MV_PORT_PRIV_DMA_SZ, pp->crpb, pp->crpb_dma);
676}
677
673/** 678/**
674 * mv_port_start - Port specific init/start routine. 679 * mv_port_start - Port specific init/start routine.
675 * @ap: ATA channel to manipulate 680 * @ap: ATA channel to manipulate
@@ -687,21 +692,23 @@ static int mv_port_start(struct ata_port *ap)
687 void __iomem *port_mmio = mv_ap_base(ap); 692 void __iomem *port_mmio = mv_ap_base(ap);
688 void *mem; 693 void *mem;
689 dma_addr_t mem_dma; 694 dma_addr_t mem_dma;
695 int rc = -ENOMEM;
690 696
691 pp = kmalloc(sizeof(*pp), GFP_KERNEL); 697 pp = kmalloc(sizeof(*pp), GFP_KERNEL);
692 if (!pp) { 698 if (!pp)
693 return -ENOMEM; 699 goto err_out;
694 }
695 memset(pp, 0, sizeof(*pp)); 700 memset(pp, 0, sizeof(*pp));
696 701
697 mem = dma_alloc_coherent(dev, MV_PORT_PRIV_DMA_SZ, &mem_dma, 702 mem = dma_alloc_coherent(dev, MV_PORT_PRIV_DMA_SZ, &mem_dma,
698 GFP_KERNEL); 703 GFP_KERNEL);
699 if (!mem) { 704 if (!mem)
700 kfree(pp); 705 goto err_out_pp;
701 return -ENOMEM;
702 }
703 memset(mem, 0, MV_PORT_PRIV_DMA_SZ); 706 memset(mem, 0, MV_PORT_PRIV_DMA_SZ);
704 707
708 rc = ata_pad_alloc(ap, dev);
709 if (rc)
710 goto err_out_priv;
711
705 /* First item in chunk of DMA memory: 712 /* First item in chunk of DMA memory:
706 * 32-slot command request table (CRQB), 32 bytes each in size 713 * 32-slot command request table (CRQB), 32 bytes each in size
707 */ 714 */
@@ -746,6 +753,13 @@ static int mv_port_start(struct ata_port *ap)
746 */ 753 */
747 ap->private_data = pp; 754 ap->private_data = pp;
748 return 0; 755 return 0;
756
757err_out_priv:
758 mv_priv_free(pp, dev);
759err_out_pp:
760 kfree(pp);
761err_out:
762 return rc;
749} 763}
750 764
751/** 765/**
@@ -768,7 +782,8 @@ static void mv_port_stop(struct ata_port *ap)
768 spin_unlock_irqrestore(&ap->host_set->lock, flags); 782 spin_unlock_irqrestore(&ap->host_set->lock, flags);
769 783
770 ap->private_data = NULL; 784 ap->private_data = NULL;
771 dma_free_coherent(dev, MV_PORT_PRIV_DMA_SZ, pp->crpb, pp->crpb_dma); 785 ata_pad_free(ap, dev);
786 mv_priv_free(pp, dev);
772 kfree(pp); 787 kfree(pp);
773} 788}
774 789
@@ -784,23 +799,24 @@ static void mv_port_stop(struct ata_port *ap)
784static void mv_fill_sg(struct ata_queued_cmd *qc) 799static void mv_fill_sg(struct ata_queued_cmd *qc)
785{ 800{
786 struct mv_port_priv *pp = qc->ap->private_data; 801 struct mv_port_priv *pp = qc->ap->private_data;
787 unsigned int i; 802 unsigned int i = 0;
803 struct scatterlist *sg;
788 804
789 for (i = 0; i < qc->n_elem; i++) { 805 ata_for_each_sg(sg, qc) {
790 u32 sg_len; 806 u32 sg_len;
791 dma_addr_t addr; 807 dma_addr_t addr;
792 808
793 addr = sg_dma_address(&qc->sg[i]); 809 addr = sg_dma_address(sg);
794 sg_len = sg_dma_len(&qc->sg[i]); 810 sg_len = sg_dma_len(sg);
795 811
796 pp->sg_tbl[i].addr = cpu_to_le32(addr & 0xffffffff); 812 pp->sg_tbl[i].addr = cpu_to_le32(addr & 0xffffffff);
797 pp->sg_tbl[i].addr_hi = cpu_to_le32((addr >> 16) >> 16); 813 pp->sg_tbl[i].addr_hi = cpu_to_le32((addr >> 16) >> 16);
798 assert(0 == (sg_len & ~MV_DMA_BOUNDARY)); 814 assert(0 == (sg_len & ~MV_DMA_BOUNDARY));
799 pp->sg_tbl[i].flags_size = cpu_to_le32(sg_len); 815 pp->sg_tbl[i].flags_size = cpu_to_le32(sg_len);
800 } 816 if (ata_sg_is_last(sg, qc))
801 if (0 < qc->n_elem) { 817 pp->sg_tbl[i].flags_size |= cpu_to_le32(EPRD_FLAG_END_OF_TBL);
802 pp->sg_tbl[qc->n_elem - 1].flags_size |= 818
803 cpu_to_le32(EPRD_FLAG_END_OF_TBL); 819 i++;
804 } 820 }
805} 821}
806 822
diff --git a/drivers/scsi/sata_qstor.c b/drivers/scsi/sata_qstor.c
index 9938dae782b6..65502c157a54 100644
--- a/drivers/scsi/sata_qstor.c
+++ b/drivers/scsi/sata_qstor.c
@@ -271,16 +271,17 @@ static void qs_scr_write (struct ata_port *ap, unsigned int sc_reg, u32 val)
271 271
272static void qs_fill_sg(struct ata_queued_cmd *qc) 272static void qs_fill_sg(struct ata_queued_cmd *qc)
273{ 273{
274 struct scatterlist *sg = qc->sg; 274 struct scatterlist *sg;
275 struct ata_port *ap = qc->ap; 275 struct ata_port *ap = qc->ap;
276 struct qs_port_priv *pp = ap->private_data; 276 struct qs_port_priv *pp = ap->private_data;
277 unsigned int nelem; 277 unsigned int nelem;
278 u8 *prd = pp->pkt + QS_CPB_BYTES; 278 u8 *prd = pp->pkt + QS_CPB_BYTES;
279 279
280 assert(sg != NULL); 280 assert(qc->__sg != NULL);
281 assert(qc->n_elem > 0); 281 assert(qc->n_elem > 0);
282 282
283 for (nelem = 0; nelem < qc->n_elem; nelem++,sg++) { 283 nelem = 0;
284 ata_for_each_sg(sg, qc) {
284 u64 addr; 285 u64 addr;
285 u32 len; 286 u32 len;
286 287
@@ -294,6 +295,7 @@ static void qs_fill_sg(struct ata_queued_cmd *qc)
294 295
295 VPRINTK("PRD[%u] = (0x%llX, 0x%X)\n", nelem, 296 VPRINTK("PRD[%u] = (0x%llX, 0x%X)\n", nelem,
296 (unsigned long long)addr, len); 297 (unsigned long long)addr, len);
298 nelem++;
297 } 299 }
298} 300}
299 301
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c
index c66548025657..e6c8e89c226f 100644
--- a/drivers/scsi/sata_sil24.c
+++ b/drivers/scsi/sata_sil24.c
@@ -411,15 +411,20 @@ static void sil24_phy_reset(struct ata_port *ap)
411static inline void sil24_fill_sg(struct ata_queued_cmd *qc, 411static inline void sil24_fill_sg(struct ata_queued_cmd *qc,
412 struct sil24_cmd_block *cb) 412 struct sil24_cmd_block *cb)
413{ 413{
414 struct scatterlist *sg = qc->sg;
415 struct sil24_sge *sge = cb->sge; 414 struct sil24_sge *sge = cb->sge;
416 unsigned i; 415 struct scatterlist *sg;
416 unsigned int idx = 0;
417 417
418 for (i = 0; i < qc->n_elem; i++, sg++, sge++) { 418 ata_for_each_sg(sg, qc) {
419 sge->addr = cpu_to_le64(sg_dma_address(sg)); 419 sge->addr = cpu_to_le64(sg_dma_address(sg));
420 sge->cnt = cpu_to_le32(sg_dma_len(sg)); 420 sge->cnt = cpu_to_le32(sg_dma_len(sg));
421 sge->flags = 0; 421 if (ata_sg_is_last(sg, qc))
422 sge->flags = i < qc->n_elem - 1 ? 0 : cpu_to_le32(SGE_TRM); 422 sge->flags = cpu_to_le32(SGE_TRM);
423 else
424 sge->flags = 0;
425
426 sge++;
427 idx++;
423 } 428 }
424} 429}
425 430
@@ -630,6 +635,13 @@ static irqreturn_t sil24_interrupt(int irq, void *dev_instance, struct pt_regs *
630 return IRQ_RETVAL(handled); 635 return IRQ_RETVAL(handled);
631} 636}
632 637
638static inline void sil24_cblk_free(struct sil24_port_priv *pp, struct device *dev)
639{
640 const size_t cb_size = sizeof(*pp->cmd_block);
641
642 dma_free_coherent(dev, cb_size, pp->cmd_block, pp->cmd_block_dma);
643}
644
633static int sil24_port_start(struct ata_port *ap) 645static int sil24_port_start(struct ata_port *ap)
634{ 646{
635 struct device *dev = ap->host_set->dev; 647 struct device *dev = ap->host_set->dev;
@@ -637,36 +649,44 @@ static int sil24_port_start(struct ata_port *ap)
637 struct sil24_cmd_block *cb; 649 struct sil24_cmd_block *cb;
638 size_t cb_size = sizeof(*cb); 650 size_t cb_size = sizeof(*cb);
639 dma_addr_t cb_dma; 651 dma_addr_t cb_dma;
652 int rc = -ENOMEM;
640 653
641 pp = kmalloc(sizeof(*pp), GFP_KERNEL); 654 pp = kzalloc(sizeof(*pp), GFP_KERNEL);
642 if (!pp) 655 if (!pp)
643 return -ENOMEM; 656 goto err_out;
644 memset(pp, 0, sizeof(*pp));
645 657
646 pp->tf.command = ATA_DRDY; 658 pp->tf.command = ATA_DRDY;
647 659
648 cb = dma_alloc_coherent(dev, cb_size, &cb_dma, GFP_KERNEL); 660 cb = dma_alloc_coherent(dev, cb_size, &cb_dma, GFP_KERNEL);
649 if (!cb) { 661 if (!cb)
650 kfree(pp); 662 goto err_out_pp;
651 return -ENOMEM;
652 }
653 memset(cb, 0, cb_size); 663 memset(cb, 0, cb_size);
654 664
665 rc = ata_pad_alloc(ap, dev);
666 if (rc)
667 goto err_out_pad;
668
655 pp->cmd_block = cb; 669 pp->cmd_block = cb;
656 pp->cmd_block_dma = cb_dma; 670 pp->cmd_block_dma = cb_dma;
657 671
658 ap->private_data = pp; 672 ap->private_data = pp;
659 673
660 return 0; 674 return 0;
675
676err_out_pad:
677 sil24_cblk_free(pp, dev);
678err_out_pp:
679 kfree(pp);
680err_out:
681 return rc;
661} 682}
662 683
663static void sil24_port_stop(struct ata_port *ap) 684static void sil24_port_stop(struct ata_port *ap)
664{ 685{
665 struct device *dev = ap->host_set->dev; 686 struct device *dev = ap->host_set->dev;
666 struct sil24_port_priv *pp = ap->private_data; 687 struct sil24_port_priv *pp = ap->private_data;
667 size_t cb_size = sizeof(*pp->cmd_block);
668 688
669 dma_free_coherent(dev, cb_size, pp->cmd_block, pp->cmd_block_dma); 689 sil24_cblk_free(pp, dev);
670 kfree(pp); 690 kfree(pp);
671} 691}
672 692
diff --git a/drivers/scsi/sata_sx4.c b/drivers/scsi/sata_sx4.c
index 0ec21e09f5d8..f859bbd681ed 100644
--- a/drivers/scsi/sata_sx4.c
+++ b/drivers/scsi/sata_sx4.c
@@ -450,14 +450,14 @@ static inline void pdc20621_host_pkt(struct ata_taskfile *tf, u8 *buf,
450 450
451static void pdc20621_dma_prep(struct ata_queued_cmd *qc) 451static void pdc20621_dma_prep(struct ata_queued_cmd *qc)
452{ 452{
453 struct scatterlist *sg = qc->sg; 453 struct scatterlist *sg;
454 struct ata_port *ap = qc->ap; 454 struct ata_port *ap = qc->ap;
455 struct pdc_port_priv *pp = ap->private_data; 455 struct pdc_port_priv *pp = ap->private_data;
456 void __iomem *mmio = ap->host_set->mmio_base; 456 void __iomem *mmio = ap->host_set->mmio_base;
457 struct pdc_host_priv *hpriv = ap->host_set->private_data; 457 struct pdc_host_priv *hpriv = ap->host_set->private_data;
458 void __iomem *dimm_mmio = hpriv->dimm_mmio; 458 void __iomem *dimm_mmio = hpriv->dimm_mmio;
459 unsigned int portno = ap->port_no; 459 unsigned int portno = ap->port_no;
460 unsigned int i, last, idx, total_len = 0, sgt_len; 460 unsigned int i, idx, total_len = 0, sgt_len;
461 u32 *buf = (u32 *) &pp->dimm_buf[PDC_DIMM_HEADER_SZ]; 461 u32 *buf = (u32 *) &pp->dimm_buf[PDC_DIMM_HEADER_SZ];
462 462
463 assert(qc->flags & ATA_QCFLAG_DMAMAP); 463 assert(qc->flags & ATA_QCFLAG_DMAMAP);
@@ -470,12 +470,11 @@ static void pdc20621_dma_prep(struct ata_queued_cmd *qc)
470 /* 470 /*
471 * Build S/G table 471 * Build S/G table
472 */ 472 */
473 last = qc->n_elem;
474 idx = 0; 473 idx = 0;
475 for (i = 0; i < last; i++) { 474 ata_for_each_sg(sg, qc) {
476 buf[idx++] = cpu_to_le32(sg_dma_address(&sg[i])); 475 buf[idx++] = cpu_to_le32(sg_dma_address(sg));
477 buf[idx++] = cpu_to_le32(sg_dma_len(&sg[i])); 476 buf[idx++] = cpu_to_le32(sg_dma_len(sg));
478 total_len += sg_dma_len(&sg[i]); 477 total_len += sg_dma_len(sg);
479 } 478 }
480 buf[idx - 1] |= cpu_to_le32(ATA_PRD_EOT); 479 buf[idx - 1] |= cpu_to_le32(ATA_PRD_EOT);
481 sgt_len = idx * 4; 480 sgt_len = idx * 4;
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 0ba3af7a1236..dcd17e7458ab 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -155,6 +155,10 @@ enum {
155 ATA_SHIFT_UDMA = 0, 155 ATA_SHIFT_UDMA = 0,
156 ATA_SHIFT_MWDMA = 8, 156 ATA_SHIFT_MWDMA = 8,
157 ATA_SHIFT_PIO = 11, 157 ATA_SHIFT_PIO = 11,
158
159 /* size of buffer to pad xfers ending on unaligned boundaries */
160 ATA_DMA_PAD_SZ = 4,
161 ATA_DMA_PAD_BUF_SZ = ATA_DMA_PAD_SZ * ATA_MAX_QUEUE,
158 162
159 /* Masks for port functions */ 163 /* Masks for port functions */
160 ATA_PORT_PRIMARY = (1 << 0), 164 ATA_PORT_PRIMARY = (1 << 0),
@@ -249,9 +253,12 @@ struct ata_queued_cmd {
249 unsigned long flags; /* ATA_QCFLAG_xxx */ 253 unsigned long flags; /* ATA_QCFLAG_xxx */
250 unsigned int tag; 254 unsigned int tag;
251 unsigned int n_elem; 255 unsigned int n_elem;
256 unsigned int orig_n_elem;
252 257
253 int dma_dir; 258 int dma_dir;
254 259
260 unsigned int pad_len;
261
255 unsigned int nsect; 262 unsigned int nsect;
256 unsigned int cursect; 263 unsigned int cursect;
257 264
@@ -262,9 +269,11 @@ struct ata_queued_cmd {
262 unsigned int cursg_ofs; 269 unsigned int cursg_ofs;
263 270
264 struct scatterlist sgent; 271 struct scatterlist sgent;
272 struct scatterlist pad_sgent;
265 void *buf_virt; 273 void *buf_virt;
266 274
267 struct scatterlist *sg; 275 /* DO NOT iterate over __sg manually, use ata_for_each_sg() */
276 struct scatterlist *__sg;
268 277
269 ata_qc_cb_t complete_fn; 278 ata_qc_cb_t complete_fn;
270 279
@@ -310,6 +319,9 @@ struct ata_port {
310 struct ata_prd *prd; /* our SG list */ 319 struct ata_prd *prd; /* our SG list */
311 dma_addr_t prd_dma; /* and its DMA mapping */ 320 dma_addr_t prd_dma; /* and its DMA mapping */
312 321
322 void *pad; /* array of DMA pad buffers */
323 dma_addr_t pad_dma;
324
313 struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */ 325 struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
314 326
315 u8 ctl; /* cache of ATA control register */ 327 u8 ctl; /* cache of ATA control register */
@@ -512,6 +524,31 @@ extern int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bit
512#endif /* CONFIG_PCI */ 524#endif /* CONFIG_PCI */
513 525
514 526
527static inline int
528ata_sg_is_last(struct scatterlist *sg, struct ata_queued_cmd *qc)
529{
530 if (sg == &qc->pad_sgent)
531 return 1;
532 if (qc->pad_len)
533 return 0;
534 if (((sg - qc->__sg) + 1) == qc->n_elem)
535 return 1;
536 return 0;
537}
538
539static inline struct scatterlist *
540ata_qc_next_sg(struct scatterlist *sg, struct ata_queued_cmd *qc)
541{
542 if (sg == &qc->pad_sgent)
543 return NULL;
544 if (++sg - qc->__sg < qc->n_elem)
545 return sg;
546 return qc->pad_len ? &qc->pad_sgent : NULL;
547}
548
549#define ata_for_each_sg(sg, qc) \
550 for (sg = qc->__sg; sg; sg = ata_qc_next_sg(sg, qc))
551
515static inline unsigned int ata_tag_valid(unsigned int tag) 552static inline unsigned int ata_tag_valid(unsigned int tag)
516{ 553{
517 return (tag < ATA_MAX_QUEUE) ? 1 : 0; 554 return (tag < ATA_MAX_QUEUE) ? 1 : 0;
@@ -740,4 +777,17 @@ static inline unsigned int __ac_err_mask(u8 status)
740 return mask; 777 return mask;
741} 778}
742 779
780static inline int ata_pad_alloc(struct ata_port *ap, struct device *dev)
781{
782 ap->pad_dma = 0;
783 ap->pad = dma_alloc_coherent(dev, ATA_DMA_PAD_BUF_SZ,
784 &ap->pad_dma, GFP_KERNEL);
785 return (ap->pad == NULL) ? -ENOMEM : 0;
786}
787
788static inline void ata_pad_free(struct ata_port *ap, struct device *dev)
789{
790 dma_free_coherent(dev, ATA_DMA_PAD_BUF_SZ, ap->pad, ap->pad_dma);
791}
792
743#endif /* __LINUX_LIBATA_H__ */ 793#endif /* __LINUX_LIBATA_H__ */