[Nouveau] [PATCH 4/4] drm/nouveau: change FB map to simple ioremap

Pekka Paalanen pq at iki.fi
Sat Jul 25 05:29:07 PDT 2009


Remove the use of drm_local_map for the FB mapping and replace it with
the equivalent ioremap.

Macros nv_[rw]f32() are changed into inline functions and the 'dev'
argument is explicit.

Macros nv_[rw]v32() are removed as unused.

Signed-off-by: Pekka Paalanen <pq at iki.fi>
---
 drivers/gpu/drm/nouveau/nouveau_drv.h   |   17 ++++++++++++-----
 drivers/gpu/drm/nouveau/nouveau_hw.c    |   16 ++++++++--------
 drivers/gpu/drm/nouveau/nouveau_state.c |   12 +++++-------
 3 files changed, 25 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h b/drivers/gpu/drm/nouveau/nouveau_drv.h
index 4d53129..74f835f 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
@@ -448,7 +448,7 @@ struct drm_nouveau_private {
 	int flags;
 
 	void __iomem *mmio;
-	struct drm_local_map *fb;
+	void __iomem *fb;
 	struct drm_local_map *ramin;
 
 	struct work_struct irq_work;
@@ -998,10 +998,17 @@ static inline void nv_wr08(struct drm_device *dev, unsigned reg, u8 val)
 						 (mask), (val))
 
 /* VRAM access */
-#define nv_rf32(reg) nv_in32(fb, (reg))
-#define nv_wf32(reg,val) nv_out32(fb, (reg), (val))
-#define nv_rv32(reg) nv_rf32(reg)
-#define nv_wv32(reg,val) nv_wf32(reg, val)
+static inline u32 nv_rf32(struct drm_device *dev, unsigned reg)
+{
+	struct drm_nouveau_private *dev_priv = dev->dev_private;
+	return ioread32_native(dev_priv->fb + reg);
+}
+
+static inline void nv_wf32(struct drm_device *dev, unsigned reg, u32 val)
+{
+	struct drm_nouveau_private *dev_priv = dev->dev_private;
+	iowrite32_native(val, dev_priv->fb + reg);
+}
 
 /* PRAMIN access */
 #define nv_ri32(reg) nv_in32(ramin, (reg))
diff --git a/drivers/gpu/drm/nouveau/nouveau_hw.c b/drivers/gpu/drm/nouveau/nouveau_hw.c
index f3cd10d..295b876 100644
--- a/drivers/gpu/drm/nouveau/nouveau_hw.c
+++ b/drivers/gpu/drm/nouveau/nouveau_hw.c
@@ -578,36 +578,36 @@ nouveau_hw_save_vga_fonts(struct drm_device *dev, bool save)
 	NVWriteVgaGr(dev, 0, NV_VIO_GX_READ_MAP_INDEX, 0x0);
 	for (i = 0; i < 16384; i++)
 		if (save)
-			dev_priv->saved_vga_font[0][i] = nv_rf32(i * 4);
+			dev_priv->saved_vga_font[0][i] = nv_rf32(dev, i * 4);
 		else
-			nv_wf32(i * 4, dev_priv->saved_vga_font[0][i]);
+			nv_wf32(dev, i * 4, dev_priv->saved_vga_font[0][i]);
 
 	/* store font in plane 1 */
 	NVWriteVgaSeq(dev, 0, NV_VIO_SR_PLANE_MASK_INDEX, 0x2);
 	NVWriteVgaGr(dev, 0, NV_VIO_GX_READ_MAP_INDEX, 0x1);
 	for (i = 0; i < 16384; i++)
 		if (save)
-			dev_priv->saved_vga_font[1][i] = nv_rf32(i * 4);
+			dev_priv->saved_vga_font[1][i] = nv_rf32(dev, i * 4);
 		else
-			nv_wf32(i * 4, dev_priv->saved_vga_font[1][i]);
+			nv_wf32(dev, i * 4, dev_priv->saved_vga_font[1][i]);
 
 	/* store font in plane 2 */
 	NVWriteVgaSeq(dev, 0, NV_VIO_SR_PLANE_MASK_INDEX, 0x4);
 	NVWriteVgaGr(dev, 0, NV_VIO_GX_READ_MAP_INDEX, 0x2);
 	for (i = 0; i < 16384; i++)
 		if (save)
-			dev_priv->saved_vga_font[2][i] = nv_rf32(i * 4);
+			dev_priv->saved_vga_font[2][i] = nv_rf32(dev, i * 4);
 		else
-			nv_wf32(i * 4, dev_priv->saved_vga_font[2][i]);
+			nv_wf32(dev, i * 4, dev_priv->saved_vga_font[2][i]);
 
 	/* store font in plane 3 */
 	NVWriteVgaSeq(dev, 0, NV_VIO_SR_PLANE_MASK_INDEX, 0x8);
 	NVWriteVgaGr(dev, 0, NV_VIO_GX_READ_MAP_INDEX, 0x3);
 	for (i = 0; i < 16384; i++)
 		if (save)
-			dev_priv->saved_vga_font[3][i] = nv_rf32(i * 4);
+			dev_priv->saved_vga_font[3][i] = nv_rf32(dev, i * 4);
 		else
-			nv_wf32(i * 4, dev_priv->saved_vga_font[3][i]);
+			nv_wf32(dev, i * 4, dev_priv->saved_vga_font[3][i]);
 
 	/* restore control regs */
 	NVWritePRMVIO(dev, 0, NV_PRMVIO_MISC__WRITE, misc);
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c
index b70ec33..3a6cabf 100644
--- a/drivers/gpu/drm/nouveau/nouveau_state.c
+++ b/drivers/gpu/drm/nouveau/nouveau_state.c
@@ -579,12 +579,10 @@ int nouveau_load(struct drm_device *dev, unsigned long flags)
 	}
 
 	/* map first 64KiB of VRAM, holds VGA fonts etc */
-	ret = drm_addmap(dev, drm_get_resource_start(dev, 1), 65536,
-			 _DRM_REGISTERS, _DRM_READ_ONLY | _DRM_DRIVER,
-			 &dev_priv->fb);
-	if (ret) {
-		NV_ERROR(dev, "Failed to map FB BAR: %d\n", ret);
-		return ret;
+	dev_priv->fb = ioremap(pci_resource_start(dev->pdev, 1), 65536);
+	if (!dev_priv->fb) {
+		NV_ERROR(dev, "Failed to map FB BAR\n");
+		return -ENOMEM;
 	}
 
 #if defined(__powerpc__)
@@ -656,7 +654,7 @@ int nouveau_unload(struct drm_device *dev)
 
 	iounmap(dev_priv->mmio);
 	drm_rmmap(dev, dev_priv->ramin);
-	drm_rmmap(dev, dev_priv->fb);
+	iounmap(dev_priv->fb);
 
 	kfree(dev_priv);
 	dev->dev_private = NULL;
-- 
1.6.3.3



More information about the Nouveau mailing list