Commit 247d36d7 authored by Andy Lutomirski's avatar Andy Lutomirski Committed by Dave Airlie

drm (ast, cirrus, mgag200, nouveau, savage, vmwgfx): Remove drm_mtrr_{add, del}

This replaces drm_mtrr_{add,del} with arch_phys_wc_{add,del}.  The
interface is simplified (because the base and size parameters to
drm_mtrr_del never did anything), and it no longer adds MTRRs on
systems that don't need them.
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarAndy Lutomirski <luto@amacapital.net>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent d0d98eed
...@@ -271,26 +271,19 @@ int ast_mm_init(struct ast_private *ast) ...@@ -271,26 +271,19 @@ int ast_mm_init(struct ast_private *ast)
return ret; return ret;
} }
ast->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 0), ast->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
pci_resource_len(dev->pdev, 0), pci_resource_len(dev->pdev, 0));
DRM_MTRR_WC);
return 0; return 0;
} }
void ast_mm_fini(struct ast_private *ast) void ast_mm_fini(struct ast_private *ast)
{ {
struct drm_device *dev = ast->dev;
ttm_bo_device_release(&ast->ttm.bdev); ttm_bo_device_release(&ast->ttm.bdev);
ast_ttm_global_release(ast); ast_ttm_global_release(ast);
if (ast->fb_mtrr >= 0) { arch_phys_wc_del(ast->fb_mtrr);
drm_mtrr_del(ast->fb_mtrr,
pci_resource_start(dev->pdev, 0),
pci_resource_len(dev->pdev, 0), DRM_MTRR_WC);
ast->fb_mtrr = -1;
}
} }
void ast_ttm_placement(struct ast_bo *bo, int domain) void ast_ttm_placement(struct ast_bo *bo, int domain)
......
...@@ -271,9 +271,8 @@ int cirrus_mm_init(struct cirrus_device *cirrus) ...@@ -271,9 +271,8 @@ int cirrus_mm_init(struct cirrus_device *cirrus)
return ret; return ret;
} }
cirrus->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 0), cirrus->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
pci_resource_len(dev->pdev, 0), pci_resource_len(dev->pdev, 0));
DRM_MTRR_WC);
cirrus->mm_inited = true; cirrus->mm_inited = true;
return 0; return 0;
...@@ -281,8 +280,6 @@ int cirrus_mm_init(struct cirrus_device *cirrus) ...@@ -281,8 +280,6 @@ int cirrus_mm_init(struct cirrus_device *cirrus)
void cirrus_mm_fini(struct cirrus_device *cirrus) void cirrus_mm_fini(struct cirrus_device *cirrus)
{ {
struct drm_device *dev = cirrus->dev;
if (!cirrus->mm_inited) if (!cirrus->mm_inited)
return; return;
...@@ -290,12 +287,8 @@ void cirrus_mm_fini(struct cirrus_device *cirrus) ...@@ -290,12 +287,8 @@ void cirrus_mm_fini(struct cirrus_device *cirrus)
cirrus_ttm_global_release(cirrus); cirrus_ttm_global_release(cirrus);
if (cirrus->fb_mtrr >= 0) { arch_phys_wc_del(cirrus->fb_mtrr);
drm_mtrr_del(cirrus->fb_mtrr, cirrus->fb_mtrr = 0;
pci_resource_start(dev->pdev, 0),
pci_resource_len(dev->pdev, 0), DRM_MTRR_WC);
cirrus->fb_mtrr = -1;
}
} }
void cirrus_ttm_placement(struct cirrus_bo *bo, int domain) void cirrus_ttm_placement(struct cirrus_bo *bo, int domain)
......
...@@ -270,26 +270,20 @@ int mgag200_mm_init(struct mga_device *mdev) ...@@ -270,26 +270,20 @@ int mgag200_mm_init(struct mga_device *mdev)
return ret; return ret;
} }
mdev->fb_mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 0), mdev->fb_mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 0),
pci_resource_len(dev->pdev, 0), pci_resource_len(dev->pdev, 0));
DRM_MTRR_WC);
return 0; return 0;
} }
void mgag200_mm_fini(struct mga_device *mdev) void mgag200_mm_fini(struct mga_device *mdev)
{ {
struct drm_device *dev = mdev->dev;
ttm_bo_device_release(&mdev->ttm.bdev); ttm_bo_device_release(&mdev->ttm.bdev);
mgag200_ttm_global_release(mdev); mgag200_ttm_global_release(mdev);
if (mdev->fb_mtrr >= 0) { arch_phys_wc_del(mdev->fb_mtrr);
drm_mtrr_del(mdev->fb_mtrr, mdev->fb_mtrr = 0;
pci_resource_start(dev->pdev, 0),
pci_resource_len(dev->pdev, 0), DRM_MTRR_WC);
mdev->fb_mtrr = -1;
}
} }
void mgag200_ttm_placement(struct mgag200_bo *bo, int domain) void mgag200_ttm_placement(struct mgag200_bo *bo, int domain)
......
...@@ -396,9 +396,8 @@ nouveau_ttm_init(struct nouveau_drm *drm) ...@@ -396,9 +396,8 @@ nouveau_ttm_init(struct nouveau_drm *drm)
return ret; return ret;
} }
drm->ttm.mtrr = drm_mtrr_add(pci_resource_start(dev->pdev, 1), drm->ttm.mtrr = arch_phys_wc_add(pci_resource_start(dev->pdev, 1),
pci_resource_len(dev->pdev, 1), pci_resource_len(dev->pdev, 1));
DRM_MTRR_WC);
/* GART init */ /* GART init */
if (drm->agp.stat != ENABLED) { if (drm->agp.stat != ENABLED) {
...@@ -433,10 +432,6 @@ nouveau_ttm_fini(struct nouveau_drm *drm) ...@@ -433,10 +432,6 @@ nouveau_ttm_fini(struct nouveau_drm *drm)
nouveau_ttm_global_release(drm); nouveau_ttm_global_release(drm);
if (drm->ttm.mtrr >= 0) { arch_phys_wc_del(drm->ttm.mtrr);
drm_mtrr_del(drm->ttm.mtrr, drm->ttm.mtrr = 0;
pci_resource_start(drm->dev->pdev, 1),
pci_resource_len(drm->dev->pdev, 1), DRM_MTRR_WC);
drm->ttm.mtrr = -1;
}
} }
...@@ -570,9 +570,6 @@ int savage_driver_firstopen(struct drm_device *dev) ...@@ -570,9 +570,6 @@ int savage_driver_firstopen(struct drm_device *dev)
unsigned int fb_rsrc, aper_rsrc; unsigned int fb_rsrc, aper_rsrc;
int ret = 0; int ret = 0;
dev_priv->mtrr[0].handle = -1;
dev_priv->mtrr[1].handle = -1;
dev_priv->mtrr[2].handle = -1;
if (S3_SAVAGE3D_SERIES(dev_priv->chipset)) { if (S3_SAVAGE3D_SERIES(dev_priv->chipset)) {
fb_rsrc = 0; fb_rsrc = 0;
fb_base = pci_resource_start(dev->pdev, 0); fb_base = pci_resource_start(dev->pdev, 0);
...@@ -584,21 +581,14 @@ int savage_driver_firstopen(struct drm_device *dev) ...@@ -584,21 +581,14 @@ int savage_driver_firstopen(struct drm_device *dev)
if (pci_resource_len(dev->pdev, 0) == 0x08000000) { if (pci_resource_len(dev->pdev, 0) == 0x08000000) {
/* Don't make MMIO write-cobining! We need 3 /* Don't make MMIO write-cobining! We need 3
* MTRRs. */ * MTRRs. */
dev_priv->mtrr[0].base = fb_base; dev_priv->mtrr_handles[0] =
dev_priv->mtrr[0].size = 0x01000000; arch_phys_wc_add(fb_base, 0x01000000);
dev_priv->mtrr[0].handle = dev_priv->mtrr_handles[1] =
drm_mtrr_add(dev_priv->mtrr[0].base, arch_phys_wc_add(fb_base + 0x02000000,
dev_priv->mtrr[0].size, DRM_MTRR_WC); 0x02000000);
dev_priv->mtrr[1].base = fb_base + 0x02000000; dev_priv->mtrr_handles[2] =
dev_priv->mtrr[1].size = 0x02000000; arch_phys_wc_add(fb_base + 0x04000000,
dev_priv->mtrr[1].handle = 0x04000000);
drm_mtrr_add(dev_priv->mtrr[1].base,
dev_priv->mtrr[1].size, DRM_MTRR_WC);
dev_priv->mtrr[2].base = fb_base + 0x04000000;
dev_priv->mtrr[2].size = 0x04000000;
dev_priv->mtrr[2].handle =
drm_mtrr_add(dev_priv->mtrr[2].base,
dev_priv->mtrr[2].size, DRM_MTRR_WC);
} else { } else {
DRM_ERROR("strange pci_resource_len %08llx\n", DRM_ERROR("strange pci_resource_len %08llx\n",
(unsigned long long) (unsigned long long)
...@@ -616,11 +606,9 @@ int savage_driver_firstopen(struct drm_device *dev) ...@@ -616,11 +606,9 @@ int savage_driver_firstopen(struct drm_device *dev)
if (pci_resource_len(dev->pdev, 1) == 0x08000000) { if (pci_resource_len(dev->pdev, 1) == 0x08000000) {
/* Can use one MTRR to cover both fb and /* Can use one MTRR to cover both fb and
* aperture. */ * aperture. */
dev_priv->mtrr[0].base = fb_base; dev_priv->mtrr_handles[0] =
dev_priv->mtrr[0].size = 0x08000000; arch_phys_wc_add(fb_base,
dev_priv->mtrr[0].handle = 0x08000000);
drm_mtrr_add(dev_priv->mtrr[0].base,
dev_priv->mtrr[0].size, DRM_MTRR_WC);
} else { } else {
DRM_ERROR("strange pci_resource_len %08llx\n", DRM_ERROR("strange pci_resource_len %08llx\n",
(unsigned long long) (unsigned long long)
...@@ -660,11 +648,10 @@ void savage_driver_lastclose(struct drm_device *dev) ...@@ -660,11 +648,10 @@ void savage_driver_lastclose(struct drm_device *dev)
drm_savage_private_t *dev_priv = dev->dev_private; drm_savage_private_t *dev_priv = dev->dev_private;
int i; int i;
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i) {
if (dev_priv->mtrr[i].handle >= 0) arch_phys_wc_del(dev_priv->mtrr_handles[i]);
drm_mtrr_del(dev_priv->mtrr[i].handle, dev_priv->mtrr_handles[i] = 0;
dev_priv->mtrr[i].base, }
dev_priv->mtrr[i].size, DRM_MTRR_WC);
} }
int savage_driver_unload(struct drm_device *dev) int savage_driver_unload(struct drm_device *dev)
......
...@@ -160,10 +160,7 @@ typedef struct drm_savage_private { ...@@ -160,10 +160,7 @@ typedef struct drm_savage_private {
drm_local_map_t *cmd_dma; drm_local_map_t *cmd_dma;
drm_local_map_t fake_dma; drm_local_map_t fake_dma;
struct { int mtrr_handles[3];
int handle;
unsigned long base, size;
} mtrr[3];
/* BCI and status-related stuff */ /* BCI and status-related stuff */
volatile uint32_t *status_ptr, *bci_ptr; volatile uint32_t *status_ptr, *bci_ptr;
......
...@@ -565,8 +565,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) ...@@ -565,8 +565,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
dev_priv->has_gmr = false; dev_priv->has_gmr = false;
} }
dev_priv->mmio_mtrr = drm_mtrr_add(dev_priv->mmio_start, dev_priv->mmio_mtrr = arch_phys_wc_add(dev_priv->mmio_start,
dev_priv->mmio_size, DRM_MTRR_WC); dev_priv->mmio_size);
dev_priv->mmio_virt = ioremap_wc(dev_priv->mmio_start, dev_priv->mmio_virt = ioremap_wc(dev_priv->mmio_start,
dev_priv->mmio_size); dev_priv->mmio_size);
...@@ -664,8 +664,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) ...@@ -664,8 +664,7 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
out_err4: out_err4:
iounmap(dev_priv->mmio_virt); iounmap(dev_priv->mmio_virt);
out_err3: out_err3:
drm_mtrr_del(dev_priv->mmio_mtrr, dev_priv->mmio_start, arch_phys_wc_del(dev_priv->mmio_mtrr);
dev_priv->mmio_size, DRM_MTRR_WC);
if (dev_priv->has_gmr) if (dev_priv->has_gmr)
(void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
(void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
...@@ -709,8 +708,7 @@ static int vmw_driver_unload(struct drm_device *dev) ...@@ -709,8 +708,7 @@ static int vmw_driver_unload(struct drm_device *dev)
ttm_object_device_release(&dev_priv->tdev); ttm_object_device_release(&dev_priv->tdev);
iounmap(dev_priv->mmio_virt); iounmap(dev_priv->mmio_virt);
drm_mtrr_del(dev_priv->mmio_mtrr, dev_priv->mmio_start, arch_phys_wc_del(dev_priv->mmio_mtrr);
dev_priv->mmio_size, DRM_MTRR_WC);
if (dev_priv->has_gmr) if (dev_priv->has_gmr)
(void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
(void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
......
...@@ -1250,37 +1250,8 @@ static inline int drm_core_has_MTRR(struct drm_device *dev) ...@@ -1250,37 +1250,8 @@ static inline int drm_core_has_MTRR(struct drm_device *dev)
{ {
return drm_core_check_feature(dev, DRIVER_USE_MTRR); return drm_core_check_feature(dev, DRIVER_USE_MTRR);
} }
#define DRM_MTRR_WC MTRR_TYPE_WRCOMB
static inline int drm_mtrr_add(unsigned long offset, unsigned long size,
unsigned int flags)
{
return mtrr_add(offset, size, flags, 1);
}
static inline int drm_mtrr_del(int handle, unsigned long offset,
unsigned long size, unsigned int flags)
{
return mtrr_del(handle, offset, size);
}
#else #else
#define drm_core_has_MTRR(dev) (0) #define drm_core_has_MTRR(dev) (0)
#define DRM_MTRR_WC 0
static inline int drm_mtrr_add(unsigned long offset, unsigned long size,
unsigned int flags)
{
return 0;
}
static inline int drm_mtrr_del(int handle, unsigned long offset,
unsigned long size, unsigned int flags)
{
return 0;
}
#endif #endif
static inline void drm_device_set_unplugged(struct drm_device *dev) static inline void drm_device_set_unplugged(struct drm_device *dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment