diff options
author | Ondrej Zary <linux@rainbow-software.org> | 2016-01-03 16:06:14 +1100 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2016-01-06 21:43:10 -0500 |
commit | f03946210d67be9a33ad63f6a0eed7cdf8c28334 (patch) | |
tree | 2ddf4785f0e09ce9109a1f0f4d2821c3a8bab60a /drivers/scsi/g_NCR5380.c | |
parent | 3d07d22b3d475ba9b0adfe083c537ee1ada034c8 (diff) |
ncr5380: Fix pseudo DMA transfers on 53C400
Pseudo-DMA (PDMA) has been broken for ages, resulting in hangs on
53C400-based cards.
According to 53C400 datasheet, PDMA transfer length must be a multiple
of 128. Check if that's true and use PIO if it's not.
This makes PDMA work on 53C400 (Canon FG2-5202).
Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/g_NCR5380.c')
-rw-r--r-- | drivers/scsi/g_NCR5380.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/g_NCR5380.c b/drivers/scsi/g_NCR5380.c index cd79ef402d7a..454b565c0417 100644 --- a/drivers/scsi/g_NCR5380.c +++ b/drivers/scsi/g_NCR5380.c @@ -702,6 +702,10 @@ static int generic_NCR5380_dma_xfer_len(struct scsi_cmnd *cmd) !(cmd->SCp.this_residual % transfersize)) transfersize = 32 * 1024; + /* 53C400 datasheet: non-modulo-128-byte transfers should use PIO */ + if (transfersize % 128) + transfersize = 0; + return transfersize; } |