On Sat, Jul 25, 2009 at 10:29 PM, Pekka Paalanen<[email protected]> wrote: > Remove the use of drm_local_map for the FB mapping and replace it with > the equivalent ioremap.
I don't think FBs are ioremapped normally with addmap, unless nouveau does something different here. Generally ioremapping the whole framebuffer is considered a bad idea as ioremap on 32-bit x86 is limited. Dave. > > 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 <[email protected]> > --- > 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 > > _______________________________________________ > Nouveau mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/nouveau > _______________________________________________ Nouveau mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/nouveau
