Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb4a7cbf authored by John L. Burr's avatar John L. Burr Committed by Roland Dreier
Browse files

IB/mthca: Fix driver when sizeof (phys_addr_t) > sizeof (long)



Some systems have PCI addresses that don't fit in unsigned long (eg some
32-bit PowerPC 440 systems have 36-bit bus addresses).  Fix up the driver
by using phys_addr_t where appropriate, so we don't truncate any PCI
resource addresses before ioremapping them.

Signed-off-by: default avatarJohn L. Burr <jlburr@cadence.com>

[ Update to apply to current driver source.  - Roland ]

Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 4162cf64
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -146,7 +146,7 @@ static void poll_catas(unsigned long dev_ptr)


void mthca_start_catas_poll(struct mthca_dev *dev)
void mthca_start_catas_poll(struct mthca_dev *dev)
{
{
	unsigned long addr;
	phys_addr_t addr;


	init_timer(&dev->catas_err.timer);
	init_timer(&dev->catas_err.timer);
	dev->catas_err.map  = NULL;
	dev->catas_err.map  = NULL;
@@ -158,7 +158,8 @@ void mthca_start_catas_poll(struct mthca_dev *dev)
	dev->catas_err.map = ioremap(addr, dev->catas_err.size * 4);
	dev->catas_err.map = ioremap(addr, dev->catas_err.size * 4);
	if (!dev->catas_err.map) {
	if (!dev->catas_err.map) {
		mthca_warn(dev, "couldn't map catastrophic error region "
		mthca_warn(dev, "couldn't map catastrophic error region "
			   "at 0x%lx/0x%x\n", addr, dev->catas_err.size * 4);
			   "at 0x%llx/0x%x\n", (unsigned long long) addr,
			   dev->catas_err.size * 4);
		return;
		return;
	}
	}


+1 −1
Original line number Original line Diff line number Diff line
@@ -713,7 +713,7 @@ int mthca_RUN_FW(struct mthca_dev *dev, u8 *status)


static void mthca_setup_cmd_doorbells(struct mthca_dev *dev, u64 base)
static void mthca_setup_cmd_doorbells(struct mthca_dev *dev, u64 base)
{
{
	unsigned long addr;
	phys_addr_t addr;
	u16 max_off = 0;
	u16 max_off = 0;
	int i;
	int i;


+1 −1
Original line number Original line Diff line number Diff line
@@ -653,7 +653,7 @@ static int mthca_map_reg(struct mthca_dev *dev,
			 unsigned long offset, unsigned long size,
			 unsigned long offset, unsigned long size,
			 void __iomem **map)
			 void __iomem **map)
{
{
	unsigned long base = pci_resource_start(dev->pdev, 0);
	phys_addr_t base = pci_resource_start(dev->pdev, 0);


	*map = ioremap(base + offset, size);
	*map = ioremap(base + offset, size);
	if (!*map)
	if (!*map)
+1 −1
Original line number Original line Diff line number Diff line
@@ -790,7 +790,7 @@ static int mthca_setup_hca(struct mthca_dev *dev)
		goto err_uar_table_free;
		goto err_uar_table_free;
	}
	}


	dev->kar = ioremap(dev->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE);
	dev->kar = ioremap((phys_addr_t) dev->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE);
	if (!dev->kar) {
	if (!dev->kar) {
		mthca_err(dev, "Couldn't map kernel access region, "
		mthca_err(dev, "Couldn't map kernel access region, "
			  "aborting.\n");
			  "aborting.\n");
+1 −1
Original line number Original line Diff line number Diff line
@@ -853,7 +853,7 @@ void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)


int mthca_init_mr_table(struct mthca_dev *dev)
int mthca_init_mr_table(struct mthca_dev *dev)
{
{
	unsigned long addr;
	phys_addr_t addr;
	int mpts, mtts, err, i;
	int mpts, mtts, err, i;


	err = mthca_alloc_init(&dev->mr_table.mpt_alloc,
	err = mthca_alloc_init(&dev->mr_table.mpt_alloc,