* [PATCH] mptbase: use resource_size_t instead of unsigned long and u32
@ 2008-11-13 8:33 Yuri Tikhonov
0 siblings, 0 replies; 2+ messages in thread
From: Yuri Tikhonov @ 2008-11-13 8:33 UTC (permalink / raw)
To: linux-scsi; +Cc: Wolfgang Denk, Detlev Zundel, Ilya Yanok
Hello,
The following patch adds using resource_size_t for the
pci_resource_start()/pci_resource_len() return values. This
makes mptbase driver work correctly on 32 bit systems with
64 bit resources (e.g. PPC440SPe).
Do some minor cleanups in mpt_mapresources() as well.
Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
Signed-off-by: Ilya Yanok <yanok@emcraft.com>
---
drivers/message/fusion/mptbase.c | 38 ++++++++++++++++++++++++++------------
drivers/message/fusion/mptbase.h | 5 +++--
2 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index d6a0074..9daf844 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1488,11 +1488,12 @@ static int
mpt_mapresources(MPT_ADAPTER *ioc)
{
u8 __iomem *mem;
+ u8 __iomem *port;
int ii;
- unsigned long mem_phys;
- unsigned long port;
- u32 msize;
- u32 psize;
+ resource_size_t mem_phys;
+ resource_size_t port_phys;
+ resource_size_t msize;
+ resource_size_t psize;
u8 revision;
int r = -ENODEV;
struct pci_dev *pdev;
@@ -1530,13 +1531,13 @@ mpt_mapresources(MPT_ADAPTER *ioc)
}
mem_phys = msize = 0;
- port = psize = 0;
+ port_phys = psize = 0;
for (ii = 0; ii < DEVICE_COUNT_RESOURCE; ii++) {
if (pci_resource_flags(pdev, ii) & PCI_BASE_ADDRESS_SPACE_IO) {
if (psize)
continue;
/* Get I/O space! */
- port = pci_resource_start(pdev, ii);
+ port_phys = pci_resource_start(pdev, ii);
psize = pci_resource_len(pdev, ii);
} else {
if (msize)
@@ -1546,11 +1547,8 @@ mpt_mapresources(MPT_ADAPTER *ioc)
msize = pci_resource_len(pdev, ii);
}
}
- ioc->mem_size = msize;
- mem = NULL;
/* Get logical ptr for PciMem0 space */
- /*mem = ioremap(mem_phys, msize);*/
mem = ioremap(mem_phys, msize);
if (mem == NULL) {
printk(MYIOC_s_ERR_FMT ": ERROR - Unable to map adapter"
@@ -1558,14 +1556,24 @@ mpt_mapresources(MPT_ADAPTER *ioc)
return -EINVAL;
}
ioc->memmap = mem;
- dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "mem = %p, mem_phys = %lx\n",
- ioc->name, mem, mem_phys));
+ dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "mem=%p, mem_phys=%llx\n",
+ ioc->name, mem, (u64)mem_phys));
ioc->mem_phys = mem_phys;
ioc->chip = (SYSIF_REGS __iomem *)mem;
/* Save Port IO values in case we need to do downloadboot */
- ioc->pio_mem_phys = port;
+ port = ioremap(port_phys, psize);
+ if (port == NULL) {
+ printk(MYIOC_s_ERR_FMT ": ERROR - Unable to map adapter"
+ " port!\n", ioc->name);
+ return -EINVAL;
+ }
+ ioc->portmap = port;
+ dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "port=%p, port_phys=%llx\n",
+ ioc->name, port, (u64)port_phys));
+
+ ioc->pio_mem_phys = port_phys;
ioc->pio_chip = (SYSIF_REGS __iomem *)port;
return 0;
@@ -1790,6 +1798,7 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
list_del(&ioc->list);
if (ioc->alt_ioc)
ioc->alt_ioc->alt_ioc = NULL;
+ iounmap(ioc->portmap);
iounmap(ioc->memmap);
if (r != -5)
pci_release_selected_regions(pdev, ioc->bars);
@@ -2547,6 +2556,11 @@ mpt_adapter_dispose(MPT_ADAPTER *ioc)
ioc->pci_irq = -1;
}
+ if (ioc->portmap != NULL) {
+ iounmap(ioc->portmap);
+ ioc->portmap = NULL;
+ }
+
if (ioc->memmap != NULL) {
iounmap(ioc->memmap);
ioc->memmap = NULL;
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index dff048c..17826b3 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -584,8 +584,8 @@ typedef struct _MPT_ADAPTER
SYSIF_REGS __iomem *chip; /* == c8817000 (mmap) */
SYSIF_REGS __iomem *pio_chip; /* Programmed IO (downloadboot) */
u8 bus_type;
- u32 mem_phys; /* == f4020000 (mmap) */
- u32 pio_mem_phys; /* Programmed IO (downloadboot) */
+ resource_size_t mem_phys; /* == f4020000 (mmap) */
+ resource_size_t pio_mem_phys; /* Programmed IO (downloadboot) */
int mem_size; /* mmap memory size */
int number_of_buses;
int devices_per_bus;
@@ -635,6 +635,7 @@ typedef struct _MPT_ADAPTER
int bars; /* bitmask of BAR's that must be configured */
int msi_enable;
u8 __iomem *memmap; /* mmap address */
+ u8 __iomem *portmap; /* mmap address */
struct Scsi_Host *sh; /* Scsi Host pointer */
SpiCfgData spi_data; /* Scsi config. data */
RaidCfgData raid_data; /* Raid config. data */
--
1.5.6.1
--
Yuri Tikhonov, Senior Software Engineer
Emcraft Systems, www.emcraft.com
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH] mptbase: use resource_size_t instead of unsigned long and u32
@ 2009-09-01 21:08 Vitaly Bordug
0 siblings, 0 replies; 2+ messages in thread
From: Vitaly Bordug @ 2009-09-01 21:08 UTC (permalink / raw)
To: Eric Moore; +Cc: DL-MPTFusionLinux, linux-scsi
From: Yuri Tikhonov <yur@emcraft.com>
Use resource_size_t for pci_resource_start()/pci_resource_len()
return values. This makes mptbase driver work correctly on 32
bit systems with 64 bit resources (e.g. PPC440SPe).
Do some minor cleanups in mpt_mapresources().
Signed-off-by: Yuri Tikhonov <yur@emcraft.com>
Signed-off-by: Ilya Yanok <yanok@emcraft.com>
Signed-off-by: Vitaly Bordug <vitb@kernel.crashing.org>
---
drivers/message/fusion/mptbase.c | 38
++++++++++++++++++++++++++------------
drivers/message/fusion/mptbase.h | 5 +++-- 2 files changed, 29
insertions(+), 14 deletions(-)
diff --git a/drivers/message/fusion/mptbase.c
b/drivers/message/fusion/mptbase.c index 5d0ba4f..d47bd46 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1590,11 +1590,12 @@ static int
mpt_mapresources(MPT_ADAPTER *ioc)
{
u8 __iomem *mem;
+ u8 __iomem *port;
int ii;
- unsigned long mem_phys;
- unsigned long port;
- u32 msize;
- u32 psize;
+ resource_size_t mem_phys;
+ resource_size_t port_phys;
+ resource_size_t msize;
+ resource_size_t psize;
u8 revision;
int r = -ENODEV;
struct pci_dev *pdev;
@@ -1653,13 +1654,13 @@ mpt_mapresources(MPT_ADAPTER *ioc)
}
mem_phys = msize = 0;
- port = psize = 0;
+ port_phys = psize = 0;
for (ii = 0; ii < DEVICE_COUNT_RESOURCE; ii++) {
if (pci_resource_flags(pdev, ii) &
PCI_BASE_ADDRESS_SPACE_IO) { if (psize)
continue;
/* Get I/O space! */
- port = pci_resource_start(pdev, ii);
+ port_phys = pci_resource_start(pdev, ii);
psize = pci_resource_len(pdev, ii);
} else {
if (msize)
@@ -1669,11 +1670,8 @@ mpt_mapresources(MPT_ADAPTER *ioc)
msize = pci_resource_len(pdev, ii);
}
}
- ioc->mem_size = msize;
- mem = NULL;
/* Get logical ptr for PciMem0 space */
- /*mem = ioremap(mem_phys, msize);*/
mem = ioremap(mem_phys, msize);
if (mem == NULL) {
printk(MYIOC_s_ERR_FMT ": ERROR - Unable to map
adapter" @@ -1681,14 +1679,24 @@ mpt_mapresources(MPT_ADAPTER *ioc)
return -EINVAL;
}
ioc->memmap = mem;
- dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "mem = %p, mem_phys =
%lx\n",
- ioc->name, mem, mem_phys));
+ dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "mem=%p,
mem_phys=%llx\n",
+ ioc->name, mem, (u64)mem_phys));
ioc->mem_phys = mem_phys;
ioc->chip = (SYSIF_REGS __iomem *)mem;
/* Save Port IO values in case we need to do downloadboot */
- ioc->pio_mem_phys = port;
+ port = ioremap(port_phys, psize);
+ if (port == NULL) {
+ printk(MYIOC_s_ERR_FMT ": ERROR - Unable to map
adapter"
+ " port!\n", ioc->name);
+ return -EINVAL;
+ }
+ ioc->portmap = port;
+ dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "port=%p,
port_phys=%llx\n",
+ ioc->name, port, (u64)port_phys));
+
+ ioc->pio_mem_phys = port_phys;
ioc->pio_chip = (SYSIF_REGS __iomem *)port;
return 0;
@@ -1949,6 +1957,7 @@ mpt_attach(struct pci_dev *pdev, const struct
pci_device_id *id) list_del(&ioc->list);
if (ioc->alt_ioc)
ioc->alt_ioc->alt_ioc = NULL;
+ iounmap(ioc->portmap);
iounmap(ioc->memmap);
if (r != -5)
pci_release_selected_regions(pdev, ioc->bars);
@@ -2792,6 +2801,11 @@ mpt_adapter_dispose(MPT_ADAPTER *ioc)
ioc->pci_irq = -1;
}
+ if (ioc->portmap != NULL) {
+ iounmap(ioc->portmap);
+ ioc->portmap = NULL;
+ }
+
if (ioc->memmap != NULL) {
iounmap(ioc->memmap);
ioc->memmap = NULL;
diff --git a/drivers/message/fusion/mptbase.h
b/drivers/message/fusion/mptbase.h index 1c8514d..66bf190 100644
--- a/drivers/message/fusion/mptbase.h
+++ b/drivers/message/fusion/mptbase.h
@@ -604,8 +604,8 @@ typedef struct _MPT_ADAPTER
SYSIF_REGS __iomem *chip; /* == c8817000
(mmap) */ SYSIF_REGS __iomem *pio_chip; /* Programmed IO
(downloadboot) */ u8 bus_type;
- u32 mem_phys; /* == f4020000
(mmap) */
- u32 pio_mem_phys; /* Programmed
IO (downloadboot) */
+ resource_size_t mem_phys; /* ==
f4020000 (mmap) */
+ resource_size_t pio_mem_phys; /*
Programmed IO (downloadboot) */ int
mem_size; /* mmap memory size */ int
number_of_buses; int devices_per_bus;
@@ -659,6 +659,7 @@ typedef struct _MPT_ADAPTER
int bars; /* bitmask of
BAR's that must be configured */ int msi_enable;
u8 __iomem *memmap; /* mmap
address */
+ u8 __iomem *portmap; /* mmap
address */ struct Scsi_Host *sh; /* Scsi Host
pointer */ SpiCfgData spi_data; /* Scsi config.
data */ RaidCfgData raid_data; /* Raid config.
data */
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-09-01 21:07 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-01 21:08 [PATCH] mptbase: use resource_size_t instead of unsigned long and u32 Vitaly Bordug
-- strict thread matches above, loose matches on Subject: below --
2008-11-13 8:33 Yuri Tikhonov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox