diff options
| author | Roland Dreier <rolandd@cisco.com> | 2011-01-12 12:50:36 -0500 |
|---|---|---|
| committer | Roland Dreier <rolandd@cisco.com> | 2011-01-12 12:50:36 -0500 |
| commit | 4979d18fe105297f8f065743f31f8f735da8df2d (patch) | |
| tree | 36776f85b2bee47c5a671db498939305589d23aa | |
| parent | 4162cf64973df51fc885825bc9ca4d055891c49f (diff) | |
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: Roland Dreier <rolandd@cisco.com>
| -rw-r--r-- | drivers/infiniband/hw/mlx4/main.c | 3 | ||||
| -rw-r--r-- | drivers/net/mlx4/catas.c | 6 | ||||
| -rw-r--r-- | drivers/net/mlx4/en_main.c | 3 | ||||
| -rw-r--r-- | drivers/net/mlx4/main.c | 2 |
4 files changed, 8 insertions, 6 deletions
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index 4c85224aeaa7..d68d849ab866 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c | |||
| @@ -1005,7 +1005,8 @@ static void *mlx4_ib_add(struct mlx4_dev *dev) | |||
| 1005 | if (mlx4_uar_alloc(dev, &ibdev->priv_uar)) | 1005 | if (mlx4_uar_alloc(dev, &ibdev->priv_uar)) |
| 1006 | goto err_pd; | 1006 | goto err_pd; |
| 1007 | 1007 | ||
| 1008 | ibdev->uar_map = ioremap(ibdev->priv_uar.pfn << PAGE_SHIFT, PAGE_SIZE); | 1008 | ibdev->uar_map = ioremap((phys_addr_t) ibdev->priv_uar.pfn << PAGE_SHIFT, |
| 1009 | PAGE_SIZE); | ||
| 1009 | if (!ibdev->uar_map) | 1010 | if (!ibdev->uar_map) |
| 1010 | goto err_uar; | 1011 | goto err_uar; |
| 1011 | MLX4_INIT_DOORBELL_LOCK(&ibdev->uar_lock); | 1012 | MLX4_INIT_DOORBELL_LOCK(&ibdev->uar_lock); |
diff --git a/drivers/net/mlx4/catas.c b/drivers/net/mlx4/catas.c index 68aaa42d0ced..32f947154c33 100644 --- a/drivers/net/mlx4/catas.c +++ b/drivers/net/mlx4/catas.c | |||
| @@ -113,7 +113,7 @@ static void catas_reset(struct work_struct *work) | |||
| 113 | void mlx4_start_catas_poll(struct mlx4_dev *dev) | 113 | void mlx4_start_catas_poll(struct mlx4_dev *dev) |
| 114 | { | 114 | { |
| 115 | struct mlx4_priv *priv = mlx4_priv(dev); | 115 | struct mlx4_priv *priv = mlx4_priv(dev); |
| 116 | unsigned long addr; | 116 | phys_addr_t addr; |
| 117 | 117 | ||
| 118 | INIT_LIST_HEAD(&priv->catas_err.list); | 118 | INIT_LIST_HEAD(&priv->catas_err.list); |
| 119 | init_timer(&priv->catas_err.timer); | 119 | init_timer(&priv->catas_err.timer); |
| @@ -124,8 +124,8 @@ void mlx4_start_catas_poll(struct mlx4_dev *dev) | |||
| 124 | 124 | ||
| 125 | priv->catas_err.map = ioremap(addr, priv->fw.catas_size * 4); | 125 | priv->catas_err.map = ioremap(addr, priv->fw.catas_size * 4); |
| 126 | if (!priv->catas_err.map) { | 126 | if (!priv->catas_err.map) { |
| 127 | mlx4_warn(dev, "Failed to map internal error buffer at 0x%lx\n", | 127 | mlx4_warn(dev, "Failed to map internal error buffer at 0x%llx\n", |
| 128 | addr); | 128 | (unsigned long long) addr); |
| 129 | return; | 129 | return; |
| 130 | } | 130 | } |
| 131 | 131 | ||
diff --git a/drivers/net/mlx4/en_main.c b/drivers/net/mlx4/en_main.c index f6e0d40cd876..1ff6ca6466ed 100644 --- a/drivers/net/mlx4/en_main.c +++ b/drivers/net/mlx4/en_main.c | |||
| @@ -202,7 +202,8 @@ static void *mlx4_en_add(struct mlx4_dev *dev) | |||
| 202 | if (mlx4_uar_alloc(dev, &mdev->priv_uar)) | 202 | if (mlx4_uar_alloc(dev, &mdev->priv_uar)) |
| 203 | goto err_pd; | 203 | goto err_pd; |
| 204 | 204 | ||
| 205 | mdev->uar_map = ioremap(mdev->priv_uar.pfn << PAGE_SHIFT, PAGE_SIZE); | 205 | mdev->uar_map = ioremap((phys_addr_t) mdev->priv_uar.pfn << PAGE_SHIFT, |
| 206 | PAGE_SIZE); | ||
| 206 | if (!mdev->uar_map) | 207 | if (!mdev->uar_map) |
| 207 | goto err_uar; | 208 | goto err_uar; |
| 208 | spin_lock_init(&mdev->uar_lock); | 209 | spin_lock_init(&mdev->uar_lock); |
diff --git a/drivers/net/mlx4/main.c b/drivers/net/mlx4/main.c index 782f11d8fa71..4ffdc18fcb8a 100644 --- a/drivers/net/mlx4/main.c +++ b/drivers/net/mlx4/main.c | |||
| @@ -829,7 +829,7 @@ static int mlx4_setup_hca(struct mlx4_dev *dev) | |||
| 829 | goto err_uar_table_free; | 829 | goto err_uar_table_free; |
| 830 | } | 830 | } |
| 831 | 831 | ||
| 832 | priv->kar = ioremap(priv->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE); | 832 | priv->kar = ioremap((phys_addr_t) priv->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE); |
| 833 | if (!priv->kar) { | 833 | if (!priv->kar) { |
| 834 | mlx4_err(dev, "Couldn't map kernel access region, " | 834 | mlx4_err(dev, "Couldn't map kernel access region, " |
| 835 | "aborting.\n"); | 835 | "aborting.\n"); |
