diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-12-03 20:49:23 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2006-12-05 11:25:35 -0500 |
commit | 00769ec40074b753c9b218c2ccaba2bfbfffe056 (patch) | |
tree | b8a05cbdb85f7c4ca8e4368b74a66dfccc3a7b8d /drivers | |
parent | e42ebefee15894522f3a84045887573ebc9b764e (diff) |
[SCSI] megaraid: fix MMIO casts
megaraid's MMIO RD*/WR* macros directly call readl() and writel() with
an 'unsigned long' argument. This throws a warning, but is otherwise OK
because the 'unsigned long' is really the result of ioremap(). This
setup is also OK because the variable can hold an ioremap cookie /or/ a
PCI I/O port (PIO).
However, to fix the warning thrown when readl() and writel() are passed
an unsigned long cookie, I introduce 'void __iomem *mmio_base', holding
the same value as 'base'. This will silence the warnings, and also
cause an oops whenever these MMIO-only functions are ever accidentally
passed an I/O address.
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/megaraid.c | 13 | ||||
-rw-r--r-- | drivers/scsi/megaraid.h | 3 |
2 files changed, 10 insertions, 6 deletions
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c index 86099fde1b2a..77d9d3804ccf 100644 --- a/drivers/scsi/megaraid.c +++ b/drivers/scsi/megaraid.c | |||
@@ -73,10 +73,10 @@ static unsigned short int max_mbox_busy_wait = MBOX_BUSY_WAIT; | |||
73 | module_param(max_mbox_busy_wait, ushort, 0); | 73 | module_param(max_mbox_busy_wait, ushort, 0); |
74 | MODULE_PARM_DESC(max_mbox_busy_wait, "Maximum wait for mailbox in microseconds if busy (default=MBOX_BUSY_WAIT=10)"); | 74 | MODULE_PARM_DESC(max_mbox_busy_wait, "Maximum wait for mailbox in microseconds if busy (default=MBOX_BUSY_WAIT=10)"); |
75 | 75 | ||
76 | #define RDINDOOR(adapter) readl((adapter)->base + 0x20) | 76 | #define RDINDOOR(adapter) readl((adapter)->mmio_base + 0x20) |
77 | #define RDOUTDOOR(adapter) readl((adapter)->base + 0x2C) | 77 | #define RDOUTDOOR(adapter) readl((adapter)->mmio_base + 0x2C) |
78 | #define WRINDOOR(adapter,value) writel(value, (adapter)->base + 0x20) | 78 | #define WRINDOOR(adapter,value) writel(value, (adapter)->mmio_base + 0x20) |
79 | #define WROUTDOOR(adapter,value) writel(value, (adapter)->base + 0x2C) | 79 | #define WROUTDOOR(adapter,value) writel(value, (adapter)->mmio_base + 0x2C) |
80 | 80 | ||
81 | /* | 81 | /* |
82 | * Global variables | 82 | * Global variables |
@@ -1386,7 +1386,8 @@ megaraid_isr_memmapped(int irq, void *devp) | |||
1386 | 1386 | ||
1387 | handled = 1; | 1387 | handled = 1; |
1388 | 1388 | ||
1389 | while( RDINDOOR(adapter) & 0x02 ) cpu_relax(); | 1389 | while( RDINDOOR(adapter) & 0x02 ) |
1390 | cpu_relax(); | ||
1390 | 1391 | ||
1391 | mega_cmd_done(adapter, completed, nstatus, status); | 1392 | mega_cmd_done(adapter, completed, nstatus, status); |
1392 | 1393 | ||
@@ -4668,6 +4669,8 @@ megaraid_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
4668 | host->host_no, mega_baseport, irq); | 4669 | host->host_no, mega_baseport, irq); |
4669 | 4670 | ||
4670 | adapter->base = mega_baseport; | 4671 | adapter->base = mega_baseport; |
4672 | if (flag & BOARD_MEMMAP) | ||
4673 | adapter->mmio_base = (void __iomem *) mega_baseport; | ||
4671 | 4674 | ||
4672 | INIT_LIST_HEAD(&adapter->free_list); | 4675 | INIT_LIST_HEAD(&adapter->free_list); |
4673 | INIT_LIST_HEAD(&adapter->pending_list); | 4676 | INIT_LIST_HEAD(&adapter->pending_list); |
diff --git a/drivers/scsi/megaraid.h b/drivers/scsi/megaraid.h index 66529f11d23c..c6e74643abe2 100644 --- a/drivers/scsi/megaraid.h +++ b/drivers/scsi/megaraid.h | |||
@@ -801,7 +801,8 @@ typedef struct { | |||
801 | clustering is available */ | 801 | clustering is available */ |
802 | u32 flag; | 802 | u32 flag; |
803 | 803 | ||
804 | unsigned long base; | 804 | unsigned long base; |
805 | void __iomem *mmio_base; | ||
805 | 806 | ||
806 | /* mbox64 with mbox not aligned on 16-byte boundry */ | 807 | /* mbox64 with mbox not aligned on 16-byte boundry */ |
807 | mbox64_t *una_mbox64; | 808 | mbox64_t *una_mbox64; |