diff options
author | Dave Airlie <airlied@redhat.com> | 2013-03-10 23:53:58 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-03-10 23:53:58 -0400 |
commit | 8698080ee092bdbd6ee2cd5e7f707ceea2812bd8 (patch) | |
tree | c80db7505519929a30c87e4fb2c78d882cdcb862 /drivers/gpu/drm | |
parent | f6161aa153581da4a3867a2d1a7caf4be19b6ec9 (diff) | |
parent | c1b90df22595441d3a0ae86bd7c3bcc32787950a (diff) |
Merge branch 'drm-nouveau-fixes-3.9' of git://anongit.freedesktop.org/git/nouveau/linux-2.6 into drm-next
Regression fixes and oops fixes for nouveau.
* 'drm-nouveau-fixes-3.9' of git://anongit.freedesktop.org/git/nouveau/linux-2.6:
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
Diffstat (limited to 'drivers/gpu/drm')
-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 5fa13267bd9f..02e369f80449 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 = { | |||
544 | static void | 544 | static void |
545 | nv50_disp_base_vblank_enable(struct nouveau_event *event, int head) | 545 | nv50_disp_base_vblank_enable(struct nouveau_event *event, int head) |
546 | { | 546 | { |
547 | nv_mask(event->priv, 0x61002c, (1 << head), (1 << head)); | 547 | nv_mask(event->priv, 0x61002c, (4 << head), (4 << head)); |
548 | } | 548 | } |
549 | 549 | ||
550 | static void | 550 | static void |
551 | nv50_disp_base_vblank_disable(struct nouveau_event *event, int head) | 551 | nv50_disp_base_vblank_disable(struct nouveau_event *event, int head) |
552 | { | 552 | { |
553 | nv_mask(event->priv, 0x61002c, (1 << head), (0 << head)); | 553 | nv_mask(event->priv, 0x61002c, (4 << head), 0); |
554 | } | 554 | } |
555 | 555 | ||
556 | static int | 556 | static int |
diff --git a/drivers/gpu/drm/nouveau/nouveau_abi16.c b/drivers/gpu/drm/nouveau/nouveau_abi16.c index 41241922263f..3b6dc883e150 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, | |||
116 | { | 116 | { |
117 | struct nouveau_abi16_ntfy *ntfy, *temp; | 117 | struct nouveau_abi16_ntfy *ntfy, *temp; |
118 | 118 | ||
119 | /* wait for all activity to stop before releasing notify object, which | ||
120 | * may be still in use */ | ||
121 | if (chan->chan && chan->ntfy) | ||
122 | nouveau_channel_idle(chan->chan); | ||
123 | |||
119 | /* cleanup notifier state */ | 124 | /* cleanup notifier state */ |
120 | list_for_each_entry_safe(ntfy, temp, &chan->notifiers, head) { | 125 | list_for_each_entry_safe(ntfy, temp, &chan->notifiers, head) { |
121 | nouveau_abi16_ntfy_fini(chan, ntfy); | 126 | 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 11ca82148edc..7ff10711a4d0 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, | |||
801 | stride = 16 * 4; | 801 | stride = 16 * 4; |
802 | height = amount / stride; | 802 | height = amount / stride; |
803 | 803 | ||
804 | if (new_mem->mem_type == TTM_PL_VRAM && | 804 | if (old_mem->mem_type == TTM_PL_VRAM && |
805 | nouveau_bo_tile_layout(nvbo)) { | 805 | nouveau_bo_tile_layout(nvbo)) { |
806 | ret = RING_SPACE(chan, 8); | 806 | ret = RING_SPACE(chan, 8); |
807 | if (ret) | 807 | if (ret) |
@@ -823,7 +823,7 @@ nv50_bo_move_m2mf(struct nouveau_channel *chan, struct ttm_buffer_object *bo, | |||
823 | BEGIN_NV04(chan, NvSubCopy, 0x0200, 1); | 823 | BEGIN_NV04(chan, NvSubCopy, 0x0200, 1); |
824 | OUT_RING (chan, 1); | 824 | OUT_RING (chan, 1); |
825 | } | 825 | } |
826 | if (old_mem->mem_type == TTM_PL_VRAM && | 826 | if (new_mem->mem_type == TTM_PL_VRAM && |
827 | nouveau_bo_tile_layout(nvbo)) { | 827 | nouveau_bo_tile_layout(nvbo)) { |
828 | ret = RING_SPACE(chan, 8); | 828 | ret = RING_SPACE(chan, 8); |
829 | if (ret) | 829 | if (ret) |
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c index 87a5a56ed358..2db57990f65c 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) | |||
2276 | NV_WARN(drm, "failed to create encoder %d/%d/%d: %d\n", | 2276 | NV_WARN(drm, "failed to create encoder %d/%d/%d: %d\n", |
2277 | dcbe->location, dcbe->type, | 2277 | dcbe->location, dcbe->type, |
2278 | ffs(dcbe->or) - 1, ret); | 2278 | ffs(dcbe->or) - 1, ret); |
2279 | ret = 0; | ||
2279 | } | 2280 | } |
2280 | } | 2281 | } |
2281 | 2282 | ||