diff options
author | Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> | 2013-05-27 18:43:23 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2013-05-27 20:18:08 -0400 |
commit | 333279c82b984f3eac61feff2b76a8b79e3db6c8 (patch) | |
tree | 46b7cfd948671f77e729867c93e70c9ee125c6b3 /drivers/ata | |
parent | 5c23341ff66c9280c2e76dc9795cd14497ea780f (diff) |
sata_rcar: kill superfluous code in sata_rcar_bmdma_fill_sg()
I've modified sata_rcar_bmdma_fill_sg() to take care of splitting long
scatter/ gather segments due to the descriptor table transfer counter
being only 28 bits wide (bit 1 to bit 28) but that was in vain as even
if 'sata_rcar_sht' specified a correct 'dma_boundary' field, the DMA
and block layers would have split the S/G segments on the necassary
boundaries. Since the driver uses ATA_BMDMA_SHT() to initilaize
'sata_rcar_sht', the boundary is much smaller, only 0xFFFF, so the
code I've added is even more useless, and it's better to just remove
it.
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/sata_rcar.c | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c index 889c25a6337e..629b07c452c5 100644 --- a/drivers/ata/sata_rcar.c +++ b/drivers/ata/sata_rcar.c | |||
@@ -474,11 +474,10 @@ static void sata_rcar_bmdma_fill_sg(struct ata_queued_cmd *qc) | |||
474 | struct ata_port *ap = qc->ap; | 474 | struct ata_port *ap = qc->ap; |
475 | struct ata_bmdma_prd *prd = ap->bmdma_prd; | 475 | struct ata_bmdma_prd *prd = ap->bmdma_prd; |
476 | struct scatterlist *sg; | 476 | struct scatterlist *sg; |
477 | unsigned int si, pi; | 477 | unsigned int si; |
478 | 478 | ||
479 | pi = 0; | ||
480 | for_each_sg(qc->sg, sg, qc->n_elem, si) { | 479 | for_each_sg(qc->sg, sg, qc->n_elem, si) { |
481 | u32 addr, sg_len, len; | 480 | u32 addr, sg_len; |
482 | 481 | ||
483 | /* | 482 | /* |
484 | * Note: h/w doesn't support 64-bit, so we unconditionally | 483 | * Note: h/w doesn't support 64-bit, so we unconditionally |
@@ -487,24 +486,13 @@ static void sata_rcar_bmdma_fill_sg(struct ata_queued_cmd *qc) | |||
487 | addr = (u32)sg_dma_address(sg); | 486 | addr = (u32)sg_dma_address(sg); |
488 | sg_len = sg_dma_len(sg); | 487 | sg_len = sg_dma_len(sg); |
489 | 488 | ||
490 | /* H/w transfer count is only 29 bits long, let's be careful */ | 489 | prd[si].addr = cpu_to_le32(addr); |
491 | while (sg_len) { | 490 | prd[si].flags_len = cpu_to_le32(sg_len); |
492 | len = sg_len; | 491 | VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", si, addr, sg_len); |
493 | if (len > 0x1ffffffe) | ||
494 | len = 0x1ffffffe; | ||
495 | |||
496 | prd[pi].addr = cpu_to_le32(addr); | ||
497 | prd[pi].flags_len = cpu_to_le32(len); | ||
498 | VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", pi, addr, len); | ||
499 | |||
500 | pi++; | ||
501 | sg_len -= len; | ||
502 | addr += len; | ||
503 | } | ||
504 | } | 492 | } |
505 | 493 | ||
506 | /* end-of-table flag */ | 494 | /* end-of-table flag */ |
507 | prd[pi - 1].addr |= cpu_to_le32(SATA_RCAR_DTEND); | 495 | prd[si - 1].addr |= cpu_to_le32(SATA_RCAR_DTEND); |
508 | } | 496 | } |
509 | 497 | ||
510 | static void sata_rcar_qc_prep(struct ata_queued_cmd *qc) | 498 | static void sata_rcar_qc_prep(struct ata_queued_cmd *qc) |