diff options
Diffstat (limited to 'drivers/gpu/drm/gma500/framebuffer.c')
| -rw-r--r-- | drivers/gpu/drm/gma500/framebuffer.c | 52 | 
1 files changed, 14 insertions, 38 deletions
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c index 321e416489a9..45df9de22007 100644 --- a/drivers/gpu/drm/gma500/framebuffer.c +++ b/drivers/gpu/drm/gma500/framebuffer.c @@ -25,7 +25,6 @@  #include "framebuffer.h"  #include "gem.h" -#include "gtt.h"  #include "psb_drv.h"  #include "psb_intel_drv.h"  #include "psb_intel_reg.h" @@ -82,14 +81,13 @@ static vm_fault_t psbfb_vm_fault(struct vm_fault *vmf)  	struct drm_framebuffer *fb = vma->vm_private_data;  	struct drm_device *dev = fb->dev;  	struct drm_psb_private *dev_priv = to_drm_psb_private(dev); -	struct gtt_range *gtt = to_gtt_range(fb->obj[0]); +	struct psb_gem_object *pobj = to_psb_gem_object(fb->obj[0]);  	int page_num;  	int i;  	unsigned long address;  	vm_fault_t ret = VM_FAULT_SIGBUS;  	unsigned long pfn; -	unsigned long phys_addr = (unsigned long)dev_priv->stolen_base + -				  gtt->offset; +	unsigned long phys_addr = (unsigned long)dev_priv->stolen_base + pobj->offset;  	page_num = vma_pages(vma);  	address = vmf->address - (vmf->pgoff << PAGE_SHIFT); @@ -226,31 +224,6 @@ static struct drm_framebuffer *psb_framebuffer_create  }  /** - *	psbfb_alloc		-	allocate frame buffer memory - *	@dev: the DRM device - *	@aligned_size: space needed - * - *	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 - *	we fail as we don't have the virtual mapping space to really vmap it - *	and the kernel console code can't handle non linear framebuffers. - * - *	Re-address this as and if the framebuffer layer grows this ability. - */ -static struct gtt_range *psbfb_alloc(struct drm_device *dev, int aligned_size) -{ -	struct gtt_range *backing; -	/* Begin by trying to use stolen memory backing */ -	backing = psb_gtt_alloc_range(dev, aligned_size, "fb", 1, PAGE_SIZE); -	if (backing) { -		backing->gem.funcs = &psb_gem_object_funcs; -		drm_gem_private_object_init(dev, &backing->gem, aligned_size); -		return backing; -	} -	return NULL; -} - -/**   *	psbfb_create		-	create a framebuffer   *	@fb_helper: the framebuffer helper   *	@sizes: specification of the layout @@ -268,7 +241,8 @@ static int psbfb_create(struct drm_fb_helper *fb_helper,  	struct drm_mode_fb_cmd2 mode_cmd;  	int size;  	int ret; -	struct gtt_range *backing; +	struct psb_gem_object *backing; +	struct drm_gem_object *obj;  	u32 bpp, depth;  	mode_cmd.width = sizes->surface_width; @@ -286,24 +260,25 @@ static int psbfb_create(struct drm_fb_helper *fb_helper,  	size = ALIGN(size, PAGE_SIZE);  	/* Allocate the framebuffer in the GTT with stolen page backing */ -	backing = psbfb_alloc(dev, size); -	if (backing == NULL) -		return -ENOMEM; +	backing = psb_gem_create(dev, size, "fb", true, PAGE_SIZE); +	if (IS_ERR(backing)) +		return PTR_ERR(backing); +	obj = &backing->base;  	memset(dev_priv->vram_addr + backing->offset, 0, size);  	info = drm_fb_helper_alloc_fbi(fb_helper);  	if (IS_ERR(info)) {  		ret = PTR_ERR(info); -		goto out; +		goto err_drm_gem_object_put;  	}  	mode_cmd.pixel_format = drm_mode_legacy_fb_format(bpp, depth); -	fb = psb_framebuffer_create(dev, &mode_cmd, &backing->gem); +	fb = psb_framebuffer_create(dev, &mode_cmd, obj);  	if (IS_ERR(fb)) {  		ret = PTR_ERR(fb); -		goto out; +		goto err_drm_gem_object_put;  	}  	fb_helper->fb = fb; @@ -334,8 +309,9 @@ static int psbfb_create(struct drm_fb_helper *fb_helper,  	dev_dbg(dev->dev, "allocated %dx%d fb\n", fb->width, fb->height);  	return 0; -out: -	psb_gtt_free_range(dev, backing); + +err_drm_gem_object_put: +	drm_gem_object_put(obj);  	return ret;  }  | 
