[SCSI] mpt fusion: Fix 32 bit platforms with 64 bit resources.
authorPravin Bathija <pbathija@amcc.com>
Thu, 3 Dec 2009 01:51:46 +0000 (17:51 -0800)
committerJames Bottomley <James.Bottomley@suse.de>
Thu, 10 Dec 2009 15:45:14 +0000 (09:45 -0600)
Powerpc 44x uses 36 bit real address while the real address defined in
MPT Fusion driver is of type 32 bit. This causes ioremap to fail and
driver fails to initialize. This fix changes the data types
representing the real address from unsigned long 32-bit types to
resource_size_t which is 64-bit. The driver has been tested, the disks
get discovered correctly and can do IO.

[jejb: added printk fix for resource_size_t object]
Signed-off-by: Pravin Bathija <pbathija@amcc.com>
Acked-by: "Desai, Kashyap" <Kashyap.Desai@lsi.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/message/fusion/mptbase.c

index 610e914abe6cfc92bd83b097455f8f2f2e3b5cef..85bc6a685e36297291e6e677ee818094f7c7020b 100644 (file)
@@ -1587,7 +1587,7 @@ mpt_mapresources(MPT_ADAPTER *ioc)
 {
        u8              __iomem *mem;
        int              ii;
-       unsigned long    mem_phys;
+       resource_size_t  mem_phys;
        unsigned long    port;
        u32              msize;
        u32              psize;
@@ -1677,8 +1677,8 @@ 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, (unsigned long long)mem_phys));
 
        ioc->mem_phys = mem_phys;
        ioc->chip = (SYSIF_REGS __iomem *)mem;