[Nouveau] [PATCH 1/3] drm/nouveau: change channel regs mapping to ioremap
Pekka Paalanen
pq at iki.fi
Thu Sep 17 12:08:48 PDT 2009
Use ioremap() for mapping the channel user regs (that are never exposed
to user space) instead of drm_addmap().
This removes the last use cases of drm_addmap/drm_rmmap from Nouveau.
Signed-off-by: Pekka Paalanen <pq at iki.fi>
---
drivers/gpu/drm/nouveau/nouveau_channel.c | 13 ++++++-------
drivers/gpu/drm/nouveau/nouveau_drv.h | 9 +++------
drivers/gpu/drm/nouveau/nv50_display.c | 13 ++++++-------
3 files changed, 15 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_channel.c b/drivers/gpu/drm/nouveau/nouveau_channel.c
index 65810d4..8661b68 100644
--- a/drivers/gpu/drm/nouveau/nouveau_channel.c
+++ b/drivers/gpu/drm/nouveau/nouveau_channel.c
@@ -167,13 +167,12 @@ nouveau_channel_alloc(struct drm_device *dev, struct nouveau_channel **chan_ret,
else
user = NV50_USER(channel);
- ret = drm_addmap(dev, drm_get_resource_start(dev, 0) + user,
- PAGE_SIZE, _DRM_REGISTERS, _DRM_DRIVER |
- _DRM_READ_ONLY, &chan->user);
- if (ret) {
- NV_ERROR(dev, "regs %d\n", ret);
+ chan->user = ioremap(pci_resource_start(dev->pdev, 0) + user,
+ PAGE_SIZE);
+ if (!chan->user) {
+ NV_ERROR(dev, "ioremap of regs failed.\n");
nouveau_channel_free(chan);
- return ret;
+ return -ENOMEM;
}
chan->user_put = 0x40;
chan->user_get = 0x44;
@@ -412,7 +411,7 @@ nouveau_channel_free(struct nouveau_channel *chan)
nouveau_notifier_takedown_channel(chan);
if (chan->user)
- drm_rmmap(dev, chan->user);
+ iounmap(chan->user);
dev_priv->fifos[chan->id] = NULL;
dev_priv->fifo_alloc_count--;
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
index 429c109..63cf483 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
@@ -169,7 +169,7 @@ struct nouveau_channel {
struct drm_local_map *map;
/* mapping of the regs controling the fifo */
- struct drm_local_map *user;
+ void __iomem *user;
uint32_t user_get;
uint32_t user_put;
@@ -1047,11 +1047,8 @@ extern int nouveau_gem_ioctl_info(struct drm_device *, void *,
#endif /* !ioread32_native */
/* channel control reg access */
-#define nvchan_wr32(reg, val) \
- iowrite32_native((val), \
- (void __force __iomem *)chan->user->handle + (reg))
-#define nvchan_rd32(reg) \
- ioread32_native((void __force __iomem *)chan->user->handle + (reg))
+#define nvchan_wr32(reg, val) iowrite32_native((val), chan->user + (reg))
+#define nvchan_rd32(reg) ioread32_native(chan->user + (reg))
/* register access */
static inline u32 nv_rd32(struct drm_device *dev, unsigned reg)
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 69bfd21..0cf9953 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -44,7 +44,7 @@ nv50_evo_channel_del(struct nouveau_channel **pchan)
nouveau_bo_ref(NULL, &chan->pushbuf_bo);
if (chan->user)
- drm_rmmap(chan->dev, chan->user);
+ iounmap(chan->user);
kfree(chan);
}
@@ -166,13 +166,12 @@ nv50_evo_channel_new(struct drm_device *dev, struct nouveau_channel **pchan)
return ret;
}
- ret = drm_addmap(dev, drm_get_resource_start(dev, 0) +
- NV50_PDISPLAY_USER(0), PAGE_SIZE, _DRM_REGISTERS,
- _DRM_DRIVER | _DRM_READ_ONLY, &chan->user);
- if (ret) {
- NV_ERROR(dev, "Error mapping EVO control regs: %d\n", ret);
+ chan->user = ioremap(pci_resource_start(dev->pdev, 0) +
+ NV50_PDISPLAY_USER(0), PAGE_SIZE);
+ if (!chan->user) {
+ NV_ERROR(dev, "Error mapping EVO control regs.\n");
nv50_evo_channel_del(pchan);
- return ret;
+ return -ENOMEM;
}
return 0;
--
1.6.3.3
More information about the Nouveau
mailing list