mptbase: use resource_size_t instead of unsigned long and u32
Subsystems (2)
PATCH 1/1 mptbase: use resource_size_t instead of unsigned long and u32
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 <[email protected]>
Signed-off-by Ilya Yanok <[email protected]>
--- drivers/message/fusion/mptbase.c | 38 ++++++++++++++++++++++++++------------ drivers/message/fusion/mptbase.h | 5 +++-- 2 files changed, 29 insertions(+), 14 deletions(-)
drivers/message/fusion/mptbase.c +26 -12
@@ -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 ;
drivers/message/fusion/mptbase.h +3 -2
@@ -584,8 +584,8 @@ typedef struct _MPT_ADAPTERSYSIF_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_ADAPTERint 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 */
Signature · 6 lines
1.5.6.1 -- Yuri Tikhonov, Senior Software Engineer Emcraft Systems, www.emcraft.com