From 025f281bbfe81960e8c60234f5eafd37cbe2d881 Mon Sep 17 00:00:00 2001 From: Stephane Marchesin Date: Fri, 5 Jan 2007 20:49:34 +0100 Subject: nouveau: Add an mtrr over the whole FB --- shared-core/nouveau_state.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'shared-core/nouveau_state.c') diff --git a/shared-core/nouveau_state.c b/shared-core/nouveau_state.c index c66ecd4e..2d0f7985 100644 --- a/shared-core/nouveau_state.c +++ b/shared-core/nouveau_state.c @@ -46,7 +46,7 @@ int nouveau_firstopen(struct drm_device *dev) /* resource 0 is mmio regs */ /* resource 1 is linear FB */ - /* resource 2 is ??? (mmio regs + 0x1000000) */ + /* resource 2 is RAMIN (mmio regs + 0x1000000) */ /* resource 6 is bios */ /* map the mmio regs */ @@ -71,6 +71,11 @@ int nouveau_firstopen(struct drm_device *dev) ret = nouveau_fifo_init(dev); if (ret) return ret; +#if __OS_HAS_MTRR + /* setup a mtrr over the FB */ + dev_priv->fb_mtrr=drm_mtrr_add(drm_get_resource_start(dev, 1),nouveau_mem_fb_amount(dev), DRM_MTRR_WC); +#endif + /* FIXME: doesn't belong here, and have no idea what it's for.. */ if (dev_priv->card_type >= NV_40) nv40_graph_init(dev); @@ -98,6 +103,15 @@ int nouveau_load(struct drm_device *dev, unsigned long flags) return 0; } +void nouveau_lastclose(struct drm_device *dev) +{ +#if __OS_HAS_MTRR + drm_nouveau_private_t *dev_priv = dev->dev_private; + if(dev_priv->fb_mtrr>0) + drm_mtrr_del(dev_priv->fb_mtrr, drm_get_resource_start(dev, 1),nouveau_mem_fb_amount(dev), DRM_MTRR_WC); +#endif +} + int nouveau_unload(struct drm_device *dev) { drm_free(dev->dev_private, sizeof(*dev->dev_private), DRM_MEM_DRIVER); -- cgit v1.2.3