diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-12 10:37:14 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-12 10:37:14 -0700 | 
| commit | c39ac49f23424086b43aceeace243f7a8bcc3ad8 (patch) | |
| tree | 133ec03bfe4f99e4f548ff056999b7c4418d3d2b | |
| parent | 6d9431a7496947cba54fa3b4940ba6041029d5c1 (diff) | |
| parent | 8698080ee092bdbd6ee2cd5e7f707ceea2812bd8 (diff) | |
| download | olio-linux-3.10-c39ac49f23424086b43aceeace243f7a8bcc3ad8.tar.xz olio-linux-3.10-c39ac49f23424086b43aceeace243f7a8bcc3ad8.zip  | |
Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux
Pull drm nouveau fixes from Dave Airlie:
 "This is just nouveau fixes from Ben, one fixes a nasty oops that some
  Fedora people have been seeing, so I'd like to get it out of the way."
* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
  drm/nv50: use correct tiling methods for m2mf buffer moves
  drm/nouveau: idle channel before releasing notify object
  drm/nouveau: fix regression in vblanking
  drm/nv50: encoder creation failure doesn't mean full init failure
| -rw-r--r-- | drivers/gpu/drm/nouveau/core/engine/disp/nv50.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_abi16.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_bo.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nv50_display.c | 1 | 
4 files changed, 10 insertions, 4 deletions
diff --git a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c index 5fa13267bd9..02e369f8044 100644 --- a/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c +++ b/drivers/gpu/drm/nouveau/core/engine/disp/nv50.c @@ -544,13 +544,13 @@ nv50_disp_curs_ofuncs = {  static void  nv50_disp_base_vblank_enable(struct nouveau_event *event, int head)  { -	nv_mask(event->priv, 0x61002c, (1 << head), (1 << head)); +	nv_mask(event->priv, 0x61002c, (4 << head), (4 << head));  }  static void  nv50_disp_base_vblank_disable(struct nouveau_event *event, int head)  { -	nv_mask(event->priv, 0x61002c, (1 << head), (0 << head)); +	nv_mask(event->priv, 0x61002c, (4 << head), 0);  }  static int diff --git a/drivers/gpu/drm/nouveau/nouveau_abi16.c b/drivers/gpu/drm/nouveau/nouveau_abi16.c index 41241922263..3b6dc883e15 100644 --- a/drivers/gpu/drm/nouveau/nouveau_abi16.c +++ b/drivers/gpu/drm/nouveau/nouveau_abi16.c @@ -116,6 +116,11 @@ nouveau_abi16_chan_fini(struct nouveau_abi16 *abi16,  {  	struct nouveau_abi16_ntfy *ntfy, *temp; +	/* wait for all activity to stop before releasing notify object, which +	 * may be still in use */ +	if (chan->chan && chan->ntfy) +		nouveau_channel_idle(chan->chan); +  	/* cleanup notifier state */  	list_for_each_entry_safe(ntfy, temp, &chan->notifiers, head) {  		nouveau_abi16_ntfy_fini(chan, ntfy); diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 11ca82148ed..7ff10711a4d 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -801,7 +801,7 @@ nv50_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo,  		stride  = 16 * 4;  		height  = amount / stride; -		if (new_mem->mem_type == TTM_PL_VRAM && +		if (old_mem->mem_type == TTM_PL_VRAM &&  		    nouveau_bo_tile_layout(nvbo)) {  			ret = RING_SPACE(chan, 8);  			if (ret) @@ -823,7 +823,7 @@ nv50_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo,  			BEGIN_NV04(chan, NvSubCopy, 0x0200, 1);  			OUT_RING  (chan, 1);  		} -		if (old_mem->mem_type == TTM_PL_VRAM && +		if (new_mem->mem_type == TTM_PL_VRAM &&  		    nouveau_bo_tile_layout(nvbo)) {  			ret = RING_SPACE(chan, 8);  			if (ret) diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c index 87a5a56ed35..2db57990f65 100644 --- a/drivers/gpu/drm/nouveau/nv50_display.c +++ b/drivers/gpu/drm/nouveau/nv50_display.c @@ -2276,6 +2276,7 @@ nv50_display_create(struct drm_device *dev)  			NV_WARN(drm, "failed to create encoder %d/%d/%d: %d\n",  				     dcbe->location, dcbe->type,  				     ffs(dcbe->or) - 1, ret); +			ret = 0;  		}  	}  |