Commit 4979d18f authored by Roland Dreier's avatar Roland Dreier

mlx4_{core, ib, en}: 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 mlx4 drivers
by using phys_addr_t where appropriate, so we don't truncate any PCI
resource addresses before ioremapping them.
Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 4162cf64
...@@ -1005,7 +1005,8 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) ...@@ -1005,7 +1005,8 @@ static void *mlx4_ib_add(struct mlx4_dev *dev)
if (mlx4_uar_alloc(dev, &ibdev->priv_uar)) if (mlx4_uar_alloc(dev, &ibdev->priv_uar))
goto err_pd; goto err_pd;
ibdev->uar_map = ioremap(ibdev->priv_uar.pfn << PAGE_SHIFT, PAGE_SIZE); ibdev->uar_map = ioremap((phys_addr_t) ibdev->priv_uar.pfn << PAGE_SHIFT,
PAGE_SIZE);
if (!ibdev->uar_map) if (!ibdev->uar_map)
goto err_uar; goto err_uar;
MLX4_INIT_DOORBELL_LOCK(&ibdev->uar_lock); MLX4_INIT_DOORBELL_LOCK(&ibdev->uar_lock);
......
...@@ -113,7 +113,7 @@ static void catas_reset(struct work_struct *work) ...@@ -113,7 +113,7 @@ static void catas_reset(struct work_struct *work)
void mlx4_start_catas_poll(struct mlx4_dev *dev) void mlx4_start_catas_poll(struct mlx4_dev *dev)
{ {
struct mlx4_priv *priv = mlx4_priv(dev); struct mlx4_priv *priv = mlx4_priv(dev);
unsigned long addr; phys_addr_t addr;
INIT_LIST_HEAD(&priv->catas_err.list); INIT_LIST_HEAD(&priv->catas_err.list);
init_timer(&priv->catas_err.timer); init_timer(&priv->catas_err.timer);
...@@ -124,8 +124,8 @@ void mlx4_start_catas_poll(struct mlx4_dev *dev) ...@@ -124,8 +124,8 @@ void mlx4_start_catas_poll(struct mlx4_dev *dev)
priv->catas_err.map = ioremap(addr, priv->fw.catas_size * 4); priv->catas_err.map = ioremap(addr, priv->fw.catas_size * 4);
if (!priv->catas_err.map) { if (!priv->catas_err.map) {
mlx4_warn(dev, "Failed to map internal error buffer at 0x%lx\n", mlx4_warn(dev, "Failed to map internal error buffer at 0x%llx\n",
addr); (unsigned long long) addr);
return; return;
} }
......
...@@ -202,7 +202,8 @@ static void *mlx4_en_add(struct mlx4_dev *dev) ...@@ -202,7 +202,8 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
if (mlx4_uar_alloc(dev, &mdev->priv_uar)) if (mlx4_uar_alloc(dev, &mdev->priv_uar))
goto err_pd; goto err_pd;
mdev->uar_map = ioremap(mdev->priv_uar.pfn << PAGE_SHIFT, PAGE_SIZE); mdev->uar_map = ioremap((phys_addr_t) mdev->priv_uar.pfn << PAGE_SHIFT,
PAGE_SIZE);
if (!mdev->uar_map) if (!mdev->uar_map)
goto err_uar; goto err_uar;
spin_lock_init(&mdev->uar_lock); spin_lock_init(&mdev->uar_lock);
......
...@@ -829,7 +829,7 @@ static int mlx4_setup_hca(struct mlx4_dev *dev) ...@@ -829,7 +829,7 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
goto err_uar_table_free; goto err_uar_table_free;
} }
priv->kar = ioremap(priv->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE); priv->kar = ioremap((phys_addr_t) priv->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE);
if (!priv->kar) { if (!priv->kar) {
mlx4_err(dev, "Couldn't map kernel access region, " mlx4_err(dev, "Couldn't map kernel access region, "
"aborting.\n"); "aborting.\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment