Commit dffc9ceb authored by Alan Cox's avatar Alan Cox Committed by Dave Airlie

gma500: kill virtual mapping support

This isn't actually usable - we simply don't have the vmap space on a 32bit
system to do this stunt. Instead we will rely on the low level drivers
limiting the console resolution as before.

The real fix is for someone to write a page table aware version of the
framebuffer console blit functions. Good university student project
perhaps..
Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 838fa588
...@@ -309,13 +309,10 @@ static struct drm_framebuffer *psb_framebuffer_create ...@@ -309,13 +309,10 @@ static struct drm_framebuffer *psb_framebuffer_create
* *
* Allocate the frame buffer. In the usual case we get a GTT range that * Allocate the frame buffer. In the usual case we get a GTT range that
* is stolen memory backed and life is simple. If there isn't sufficient * is stolen memory backed and life is simple. If there isn't sufficient
* stolen memory or the system has no stolen memory we allocate a range * we fail as we don't have the virtual mapping space to really vmap it
* and back it with a GEM object. * and the kernel console code can't handle non linear framebuffers.
* *
* In this case the GEM object has no handle. * Re-address this as and if the framebuffer layer grows this ability.
*
* FIXME: console speed up - allocate twice the space if room and use
* hardware scrolling for acceleration.
*/ */
static struct gtt_range *psbfb_alloc(struct drm_device *dev, int aligned_size) static struct gtt_range *psbfb_alloc(struct drm_device *dev, int aligned_size)
{ {
...@@ -328,17 +325,7 @@ static struct gtt_range *psbfb_alloc(struct drm_device *dev, int aligned_size) ...@@ -328,17 +325,7 @@ static struct gtt_range *psbfb_alloc(struct drm_device *dev, int aligned_size)
return backing; return backing;
psb_gtt_free_range(dev, backing); psb_gtt_free_range(dev, backing);
} }
/* Next try using GEM host memory */ return NULL;
backing = psb_gtt_alloc_range(dev, aligned_size, "fb(gem)", 0);
if (backing == NULL)
return NULL;
/* Now back it with an object */
if (drm_gem_object_init(dev, &backing->gem, aligned_size) != 0) {
psb_gtt_free_range(dev, backing);
return NULL;
}
return backing;
} }
/** /**
...@@ -422,22 +409,9 @@ static int psbfb_create(struct psb_fbdev *fbdev, ...@@ -422,22 +409,9 @@ static int psbfb_create(struct psb_fbdev *fbdev,
info->fix.smem_start = dev->mode_config.fb_base; info->fix.smem_start = dev->mode_config.fb_base;
info->fix.smem_len = size; info->fix.smem_len = size;
if (backing->stolen) { /* Accessed stolen memory directly */
/* Accessed stolen memory directly */ info->screen_base = (char *)dev_priv->vram_addr +
info->screen_base = (char *)dev_priv->vram_addr +
backing->offset; backing->offset;
} else {
/* Pin the pages into the GTT and create a mapping to them */
psb_gtt_pin(backing);
info->screen_base = vm_map_ram(backing->pages, backing->npage,
-1, PAGE_KERNEL);
if (info->screen_base == NULL) {
psb_gtt_unpin(backing);
ret = -ENOMEM;
goto out_unref;
}
psbfb->vm_map = 1;
}
info->screen_size = size; info->screen_size = size;
if (dev_priv->gtt.stolen_size) { if (dev_priv->gtt.stolen_size) {
...@@ -471,11 +445,8 @@ static int psbfb_create(struct psb_fbdev *fbdev, ...@@ -471,11 +445,8 @@ static int psbfb_create(struct psb_fbdev *fbdev,
out_unref: out_unref:
if (backing->stolen) if (backing->stolen)
psb_gtt_free_range(dev, backing); psb_gtt_free_range(dev, backing);
else { else
if (psbfb->vm_map)
vm_unmap_ram(info->screen_base, backing->npage);
drm_gem_object_unreference(&backing->gem); drm_gem_object_unreference(&backing->gem);
}
out_err1: out_err1:
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
psb_gtt_free_range(dev, backing); psb_gtt_free_range(dev, backing);
...@@ -549,13 +520,6 @@ int psb_fbdev_destroy(struct drm_device *dev, struct psb_fbdev *fbdev) ...@@ -549,13 +520,6 @@ int psb_fbdev_destroy(struct drm_device *dev, struct psb_fbdev *fbdev)
if (fbdev->psb_fb_helper.fbdev) { if (fbdev->psb_fb_helper.fbdev) {
info = fbdev->psb_fb_helper.fbdev; info = fbdev->psb_fb_helper.fbdev;
/* If this is our base framebuffer then kill any virtual map
for the framebuffer layer and unpin it */
if (psbfb->vm_map) {
vm_unmap_ram(info->screen_base, psbfb->gtt->npage);
psb_gtt_unpin(psbfb->gtt);
}
unregister_framebuffer(info); unregister_framebuffer(info);
if (info->cmap.len) if (info->cmap.len)
fb_dealloc_cmap(&info->cmap); fb_dealloc_cmap(&info->cmap);
...@@ -765,7 +729,7 @@ void psb_modeset_init(struct drm_device *dev) ...@@ -765,7 +729,7 @@ void psb_modeset_init(struct drm_device *dev)
dev->mode_config.funcs = (void *) &psb_mode_funcs; dev->mode_config.funcs = (void *) &psb_mode_funcs;
/* set memory base */ /* set memory base */
/* MRST and PSB should use BAR 2*/ /* Oaktrail and Poulsbo should use BAR 2*/
pci_read_config_dword(dev->pdev, PSB_BSM, (u32 *) pci_read_config_dword(dev->pdev, PSB_BSM, (u32 *)
&(dev->mode_config.fb_base)); &(dev->mode_config.fb_base));
......
...@@ -32,7 +32,6 @@ struct psb_framebuffer { ...@@ -32,7 +32,6 @@ struct psb_framebuffer {
struct address_space *addr_space; struct address_space *addr_space;
struct fb_info *fbdev; struct fb_info *fbdev;
struct gtt_range *gtt; struct gtt_range *gtt;
bool vm_map; /* True if we must undo a vm_map_ram */
}; };
struct psb_fbdev { struct psb_fbdev {
......
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