diff options
| author | Dave Airlie <airlied@redhat.com> | 2010-10-06 10:11:56 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2010-10-06 10:11:56 +1000 | 
| commit | 9a170caed6fce89da77852575a7eee7dbadee332 (patch) | |
| tree | 489082522869cb382a2dc464ccbd474846693a37 /drivers/gpu/drm/i915/intel_fb.c | |
| parent | 45ff46c54a31bf8924b61e3e3411654410a3b5c3 (diff) | |
| parent | 7b4f3990a22fbe800945f12001bc30db374d0af5 (diff) | |
| download | olio-linux-3.10-9a170caed6fce89da77852575a7eee7dbadee332.tar.xz olio-linux-3.10-9a170caed6fce89da77852575a7eee7dbadee332.zip  | |
Merge remote branch 'intel/drm-intel-next' of ../drm-next into drm-core-next
* 'intel/drm-intel-next' of ../drm-next: (266 commits)
  drm/i915: Avoid circular locking from intel_fbdev_fini()
  drm/i915: mark display port DPMS state as 'ON' when enabling output
  drm/i915: Skip pread/pwrite if size to copy is 0.
  drm/i915: avoid struct mutex output_poll mutex lock loop on unload
  drm/i915: Rephrase pwrite bounds checking to avoid any potential overflow
  drm/i915: Sanity check pread/pwrite
  drm/i915: Use pipe state to tell when pipe is off
  drm/i915: vblank status not valid while training display port
  drivers/gpu/drm/i915/i915_gem.c: Add missing error handling code
  drm/i915: Don't mask the return code whilst relocating.
  drm/i915: If the GPU hangs twice within 5 seconds, declare it wedged.
  drm/i915: Only print 'generating error event' if we actually are
  drm/i915: Try to reset gen2 devices.
  drm/i915: Clear fence registers on GPU reset
  drm/i915: Force the domain to CPU on unbinding whilst wedged.
  drm: Move the GTT accounting to i915
  drm/i915: Fix refleak during eviction.
  i915: Added function to initialize VBT settings
  drm/i915: Remove redundant deletion of obj->gpu_write_list
  drm/i915: Make get/put pages static
  ...
Diffstat (limited to 'drivers/gpu/drm/i915/intel_fb.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_fb.c | 29 | 
1 files changed, 7 insertions, 22 deletions
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c index 7bdc96256bf..7dc50acd65d 100644 --- a/drivers/gpu/drm/i915/intel_fb.c +++ b/drivers/gpu/drm/i915/intel_fb.c @@ -44,13 +44,6 @@  #include "i915_drm.h"  #include "i915_drv.h" -struct intel_fbdev { -	struct drm_fb_helper helper; -	struct intel_framebuffer ifb; -	struct list_head fbdev_list; -	struct drm_display_mode *our_mode; -}; -  static struct fb_ops intelfb_ops = {  	.owner = THIS_MODULE,  	.fb_check_var = drm_fb_helper_check_var, @@ -75,7 +68,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev,  	struct drm_gem_object *fbo = NULL;  	struct drm_i915_gem_object *obj_priv;  	struct device *device = &dev->pdev->dev; -	int size, ret, mmio_bar = IS_I9XX(dev) ? 0 : 1; +	int size, ret, mmio_bar = IS_GEN2(dev) ? 1 : 0;  	/* we don't do packed 24bpp */  	if (sizes->surface_bpp == 24) @@ -100,19 +93,13 @@ static int intelfb_create(struct intel_fbdev *ifbdev,  	mutex_lock(&dev->struct_mutex); -	ret = intel_pin_and_fence_fb_obj(dev, fbo); +	/* Flush everything out, we'll be doing GTT only from now on */ +	ret = intel_pin_and_fence_fb_obj(dev, fbo, false);  	if (ret) {  		DRM_ERROR("failed to pin fb: %d\n", ret);  		goto out_unref;  	} -	/* Flush everything out, we'll be doing GTT only from now on */ -	ret = i915_gem_object_set_to_gtt_domain(fbo, 1); -	if (ret) { -		DRM_ERROR("failed to bind fb: %d.\n", ret); -		goto out_unpin; -	} -  	info = framebuffer_alloc(0, device);  	if (!info) {  		ret = -ENOMEM; @@ -142,7 +129,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev,  		goto out_unpin;  	}  	info->apertures->ranges[0].base = dev->mode_config.fb_base; -	if (IS_I9XX(dev)) +	if (!IS_GEN2(dev))  		info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 2);  	else  		info->apertures->ranges[0].size = pci_resource_len(dev->pdev, 0); @@ -219,8 +206,8 @@ static struct drm_fb_helper_funcs intel_fb_helper_funcs = {  	.fb_probe = intel_fb_find_or_create_single,  }; -int intel_fbdev_destroy(struct drm_device *dev, -			struct intel_fbdev *ifbdev) +static void intel_fbdev_destroy(struct drm_device *dev, +				struct intel_fbdev *ifbdev)  {  	struct fb_info *info;  	struct intel_framebuffer *ifb = &ifbdev->ifb; @@ -238,9 +225,7 @@ int intel_fbdev_destroy(struct drm_device *dev,  	drm_framebuffer_cleanup(&ifb->base);  	if (ifb->obj) -		drm_gem_object_unreference(ifb->obj); - -	return 0; +		drm_gem_object_unreference_unlocked(ifb->obj);  }  int intel_fbdev_init(struct drm_device *dev)  |