atp870u: Fix incorrect writeb_io access to register 0x3a
authorOndrej Zary <linux@rainbow-software.org>
Tue, 17 Nov 2015 18:24:09 +0000 (19:24 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 26 Nov 2015 03:08:44 +0000 (22:08 -0500)
The ioport region is 0x20 bytes long so accessing 0x3a register using
writeb_io is incorrect. Use writeb_base instead.
There's no change in behavior as 870 chips have ioport = baseport.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Reviewed-by: Hannes Reinicke <hare@suse.de>
Acked-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/atp870u.c

index c4a59cc0821bd85441699c036454abd6b7bfd239..04b29d3e65d65cf2a92079b22a2d993e0f8bc3fc 100644 (file)
@@ -364,9 +364,9 @@ static irqreturn_t atp870u_intr_handle(int irq, void *dev_id)
                                        atp_writeb_base(dev, 0x3b, atp_readb_base(dev, 0x3b) & 0x3f);
                        } else {                                
                                if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
-                                       atp_writeb_io(dev, c, 0x3a, (atp_readb_io(dev, c, 0x3a) & 0xf3) | 0x08);
+                                       atp_writeb_base(dev, 0x3a, (atp_readb_base(dev, 0x3a) & 0xf3) | 0x08);
                                else
-                                       atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xf3);
+                                       atp_writeb_base(dev, 0x3a, atp_readb_base(dev, 0x3a) & 0xf3);
                        }       
                        j = 0;
                        id = 1;
@@ -889,9 +889,9 @@ static void send_s870(struct atp_unit *dev,unsigned char c)
                        atp_writeb_base(dev, 0x3b, atp_readb_base(dev, 0x3b) & 0x3f);
        } else {                
                if ((workreq->cmnd[0] == 0x08) || (workreq->cmnd[0] == 0x28) || (workreq->cmnd[0] == 0x0a) || (workreq->cmnd[0] == 0x2a))
-                       atp_writeb_io(dev, c, 0x3a, (atp_readb_io(dev, c, 0x3a) & 0xf3) | 0x08);
+                       atp_writeb_base(dev, 0x3a, (atp_readb_base(dev, 0x3a) & 0xf3) | 0x08);
                else
-                       atp_writeb_io(dev, c, 0x3a, atp_readb_io(dev, c, 0x3a) & 0xf3);
+                       atp_writeb_base(dev, 0x3a, atp_readb_base(dev, 0x3a) & 0xf3);
        }       
 
        if(workreq->sc_data_direction == DMA_TO_DEVICE) {