[PATCH] [PPC4xx] Fix device tree dts file for katmai board.

2009-11-17 Thread pbathija
From: Pravin Bathija 

   Set size cell value to 2 for 4GB memory support in katmai. Also set PCI-E
   node inbound DMA ranges size to 4GB for correct boot up of katmai.
Content-Type: text/plain; charset=utf-8

Signed-off-by: Pravin Bathija 
Acked-by: Feng Kan 
Acked-by: Prodyut Hazarika 
Acked-by: Loc Ho 
Acked-by: Tirumala Reddy Marri 
Acked-by: Victor Gallardo 
---
 arch/powerpc/boot/dts/katmai.dts |   20 ++--
 1 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/boot/dts/katmai.dts b/arch/powerpc/boot/dts/katmai.dts
index 077819b..8b40fd8 100644
--- a/arch/powerpc/boot/dts/katmai.dts
+++ b/arch/powerpc/boot/dts/katmai.dts
@@ -16,7 +16,7 @@
 
 / {
#address-cells = <2>;
-   #size-cells = <1>;
+   #size-cells = <2>;
model = "amcc,katmai";
compatible = "amcc,katmai";
dcr-parent = <&{/cpus/c...@0}>;
@@ -49,7 +49,7 @@
 
memory {
device_type = "memory";
-   reg = <0x 0x 0x>; /* Filled in by 
zImage */
+   reg = < 0x0 0x 0x0 0x>; /* Filled in by zImage 
*/
};
 
UIC0: interrupt-controller0 {
@@ -245,8 +245,8 @@
ranges = <0x0200 0x 0x8000 0x000d 
0x8000 0x 0x8000
  0x0100 0x 0x 0x000c 
0x0800 0x 0x0001>;
 
-   /* Inbound 2GB range starting at 0 */
-   dma-ranges = <0x4200 0x0 0x0 0x0 0x0 0x0 
0x8000>;
+   /* Inbound 4GB range starting at 0 */
+   dma-ranges = <0x4200 0x0 0x0 0x0 0x0 0x1 
0x>;
 
/* This drives busses 0 to 0xf */
bus-range = <0x0 0xf>;
@@ -289,8 +289,8 @@
ranges = <0x0200 0x 0x8000 0x000e 
0x 0x 0x8000
  0x0100 0x 0x 0x000f 
0x8000 0x 0x0001>;
 
-   /* Inbound 2GB range starting at 0 */
-   dma-ranges = <0x4200 0x0 0x0 0x0 0x0 0x0 
0x8000>;
+   /* Inbound 4GB range starting at 0 */
+   dma-ranges = <0x4200 0x0 0x0 0x0 0x0 0x1 
0x>;
 
/* This drives busses 10 to 0x1f */
bus-range = <0x10 0x1f>;
@@ -330,8 +330,8 @@
ranges = <0x0200 0x 0x8000 0x000e 
0x8000 0x 0x8000
  0x0100 0x 0x 0x000f 
0x8001 0x 0x0001>;
 
-   /* Inbound 2GB range starting at 0 */
-   dma-ranges = <0x4200 0x0 0x0 0x0 0x0 0x0 
0x8000>;
+   /* Inbound 4GB range starting at 0 */
+   dma-ranges = <0x4200 0x0 0x0 0x0 0x0 0x1 
0x>;
 
/* This drives busses 10 to 0x1f */
bus-range = <0x20 0x2f>;
@@ -371,8 +371,8 @@
ranges = <0x0200 0x 0x8000 0x000f 
0x 0x 0x8000
  0x0100 0x 0x 0x000f 
0x8002 0x 0x0001>;
 
-   /* Inbound 2GB range starting at 0 */
-   dma-ranges = <0x4200 0x0 0x0 0x0 0x0 0x0 
0x8000>;
+   /* Inbound 4GB range starting at 0 */
+   dma-ranges = <0x4200 0x0 0x0 0x0 0x0 0x1 
0x>;
 
/* This drives busses 10 to 0x1f */
bus-range = <0x30 0x3f>;
-- 
1.5.5

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH] [SCSI] mpt fusion: Fix 32 bit platforms with 64 bit resources.

2009-11-17 Thread pbathija
From: Pravin Bathija 

  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 "phys_addr_t" which is 64-bit. The
  driver has been tested, the disks get discovered correctly and can do IO. 
Removed
  ioremap and used hose->io_base_virt for IO space to make it platform 
independent.
Content-Type: text/plain; charset=utf-8

Signed-off-by: Pravin Bathija 
Acked-by: Feng Kan 
Acked-by: Prodyut Hazarika 
Acked-by: Loc Ho 
Acked-by: Tirumala Reddy Marri 
Acked-by: Victor Gallardo 
---
 drivers/message/fusion/mptbase.c |   38 --
 drivers/message/fusion/mptbase.h |5 +++--
 2 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index 5d496a9..9bca4bd 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1510,11 +1510,12 @@ static int
 mpt_mapresources(MPT_ADAPTER *ioc)
 {
u8  __iomem *mem;
+   u8  __iomem *port;
int  ii;
-   unsigned longmem_phys;
-   unsigned longport;
-   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;
@@ -1552,14 +1553,24 @@ 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);
+   struct pci_controller *hose =
+   pci_bus_to_host(pdev->bus);
+   port = hose->io_base_virt;
+   if (port == NULL) {
+   printk(MYIOC_s_ERR_FMT " : ERROR - Unable to"
+   "map adapter port !\n", ioc->name);
+   return -EINVAL;
+   }
+   ioc->pio_mem_phys = port_phys;
+   ioc->pio_chip = (SYSIF_REGS __iomem *)port;
} else {
if (msize)
continue;
@@ -1580,15 +1591,16 @@ 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;
-   ioc->pio_chip = (SYSIF_REGS __iomem *)port;
+   ioc->portmap = port;
+   dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "port=%p, port_phys=%llx\n",
+   ioc->name, port, (u64)port_phys));
 
return 0;
 }
@@ -1822,6 +1834,7 @@ mpt_attach(struct pci_dev *pdev, const struct 
pci_device_id *id)
if (ioc->alt_ioc)
ioc->alt_ioc->alt_ioc = NULL;
iounmap(ioc->memmap);
+   iounmap(ioc->portmap);
if (r != -5)
pci_release_selected_regions(pdev, ioc->bars);
 
@@ -2583,6 +2596,11 @@ mpt_adapter_dispose(MPT_ADAPTER *ioc)
ioc->memmap = NULL;
}
 
+   if (ioc->portmap != NULL) {
+   iounmap(ioc->portmap);
+   ioc->portmap = NULL;
+   }
+
pci_disable_device(ioc->pcidev);
pci_release_selected_regions(ioc->pcidev, ioc->bars);
 
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index b3e981d..7091f13 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;  /* == f402 (mmap) */
-   u32  pio_mem_phys;  /* Programmed IO (downloadboot) 
*/
+   re

[PATCH] [SCSI] mpt fusion: Fix 32 bit platforms with 64 bit resources.

2009-09-15 Thread pbathija
From: Pravin Bathija 

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 "phys_addr_t" which is 64-bit. The
driver has been tested, the disks get discovered correctly and can do IO. Also,
replaced phys_addr_t with resource_size_t as suggested by Ben.

Signed-off-by: Pravin Bathija 
Acked-by: Feng Kan 
Acked-by: Prodyut Hazarika 
Acked-by: Loc Ho 
Acked-by: Tirumala Reddy Marri 
Acked-by: Victor Gallardo 

---
 drivers/message/fusion/mptbase.c |   34 +-
 drivers/message/fusion/mptbase.h |5 +++--
 2 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index 5d496a9..e296f2e 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1510,11 +1510,12 @@ static int
 mpt_mapresources(MPT_ADAPTER *ioc)
 {
u8  __iomem *mem;
+   u8  __iomem *port;
int  ii;
-   unsigned longmem_phys;
-   unsigned longport;
-   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;
@@ -1552,13 +1553,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)
@@ -1580,14 +1581,23 @@ 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;
@@ -1822,6 +1832,7 @@ mpt_attach(struct pci_dev *pdev, const struct 
pci_device_id *id)
if (ioc->alt_ioc)
ioc->alt_ioc->alt_ioc = NULL;
iounmap(ioc->memmap);
+   iounmap(ioc->portmap);
if (r != -5)
pci_release_selected_regions(pdev, ioc->bars);
 
@@ -2583,6 +2594,11 @@ mpt_adapter_dispose(MPT_ADAPTER *ioc)
ioc->memmap = NULL;
}
 
+   if (ioc->portmap != NULL) {
+   iounmap(ioc->portmap);
+   ioc->portmap = NULL;
+   }
+
pci_disable_device(ioc->pcidev);
pci_release_selected_regions(ioc->pcidev, ioc->bars);
 
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index b3e981d..7091f13 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;  /* == f402 (mmap) */
-   u32  pio_mem_phys;  /* Programmed IO (downloadboot) 
*/
+   resource_size_t  mem_phys;  /* == f402 (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 

[PATCH] [SCSI] mpt fusion: Fix 32 bit platforms with 64 bit resources

2009-09-08 Thread pbathija
From: Pravin Bathija 

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 "phys_addr_t" which is 64-bit. The
driver has been tested, the disks get discovered correctly and can do IO.

Signed-off-by: Pravin Bathija 
Acked-by: Feng Kan 
Acked-by: Prodyut Hazarika 
Acked-by: Loc Ho 
Acked-by: Tirumala Reddy Marri 
Acked-by: Victor Gallardo 
---
 drivers/message/fusion/mptbase.c |   34 +-
 drivers/message/fusion/mptbase.h |5 +++--
 2 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
index 5d496a9..d5b0f15 100644
--- a/drivers/message/fusion/mptbase.c
+++ b/drivers/message/fusion/mptbase.c
@@ -1510,11 +1510,12 @@ static int
 mpt_mapresources(MPT_ADAPTER *ioc)
 {
u8  __iomem *mem;
+   u8  __iomem *port;
int  ii;
-   unsigned longmem_phys;
-   unsigned longport;
-   u32  msize;
-   u32  psize;
+   phys_addr_t  mem_phys;
+   phys_addr_t  port_phys;
+   resource_size_t  msize;
+   resource_size_t  psize;
u8   revision;
int  r = -ENODEV;
struct pci_dev *pdev;
@@ -1552,13 +1553,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)
@@ -1580,14 +1581,23 @@ 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;
@@ -1822,6 +1832,7 @@ mpt_attach(struct pci_dev *pdev, const struct 
pci_device_id *id)
if (ioc->alt_ioc)
ioc->alt_ioc->alt_ioc = NULL;
iounmap(ioc->memmap);
+   iounmap(ioc->portmap);
if (r != -5)
pci_release_selected_regions(pdev, ioc->bars);
 
@@ -2583,6 +2594,11 @@ mpt_adapter_dispose(MPT_ADAPTER *ioc)
ioc->memmap = NULL;
}
 
+   if (ioc->portmap != NULL) {
+   iounmap(ioc->portmap);
+   ioc->portmap = NULL;
+   }
+
pci_disable_device(ioc->pcidev);
pci_release_selected_regions(ioc->pcidev, ioc->bars);
 
diff --git a/drivers/message/fusion/mptbase.h b/drivers/message/fusion/mptbase.h
index b3e981d..8e12bf8 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;  /* == f402 (mmap) */
-   u32  pio_mem_phys;  /* Programmed IO (downloadboot) 
*/
+   phys_addr_t  mem_phys;  /* == f402 (mmap) */
+   phys_addr_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 m