diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2011-02-06 23:27:04 -0500 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2011-02-24 15:45:17 -0500 |
commit | d7117e0d4e21034202833088e51fc21f8c8271f9 (patch) | |
tree | 09e1b038a47385c16fd03722e704a5c8cdf8eed4 | |
parent | 1d3fac0c2ae3bb1b054df2f203fdaf08a1d42370 (diff) |
drm/nv50: enable page flipping
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_display.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_state.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nv50_graph.c | 7 |
3 files changed, 12 insertions, 8 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index 3a30d822dec1..d6da139155d6 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c | |||
@@ -297,6 +297,14 @@ nouveau_crtc_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, | |||
297 | mutex_lock(&chan->mutex); | 297 | mutex_lock(&chan->mutex); |
298 | 298 | ||
299 | /* Emit a page flip */ | 299 | /* Emit a page flip */ |
300 | if (dev_priv->card_type >= NV_50) { | ||
301 | ret = nv50_display_flip_next(crtc, fb, chan); | ||
302 | if (ret) { | ||
303 | nouveau_channel_put(&chan); | ||
304 | goto fail_unreserve; | ||
305 | } | ||
306 | } | ||
307 | |||
300 | ret = nouveau_page_flip_emit(chan, old_bo, new_bo, s, &fence); | 308 | ret = nouveau_page_flip_emit(chan, old_bo, new_bo, s, &fence); |
301 | nouveau_channel_put(&chan); | 309 | nouveau_channel_put(&chan); |
302 | if (ret) | 310 | if (ret) |
@@ -347,7 +355,8 @@ nouveau_finish_page_flip(struct nouveau_channel *chan, | |||
347 | } | 355 | } |
348 | 356 | ||
349 | list_del(&s->head); | 357 | list_del(&s->head); |
350 | *ps = *s; | 358 | if (ps) |
359 | *ps = *s; | ||
351 | kfree(s); | 360 | kfree(s); |
352 | 361 | ||
353 | spin_unlock_irqrestore(&dev->event_lock, flags); | 362 | spin_unlock_irqrestore(&dev->event_lock, flags); |
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c index 805c0b3fcdb7..e03cd3445466 100644 --- a/drivers/gpu/drm/nouveau/nouveau_state.c +++ b/drivers/gpu/drm/nouveau/nouveau_state.c | |||
@@ -1118,7 +1118,7 @@ int nouveau_ioctl_getparam(struct drm_device *dev, void *data, | |||
1118 | getparam->value = 1; | 1118 | getparam->value = 1; |
1119 | break; | 1119 | break; |
1120 | case NOUVEAU_GETPARAM_HAS_PAGEFLIP: | 1120 | case NOUVEAU_GETPARAM_HAS_PAGEFLIP: |
1121 | getparam->value = (dev_priv->card_type < NV_50); | 1121 | getparam->value = (dev_priv->card_type < NV_C0) ? 1 : 0; |
1122 | break; | 1122 | break; |
1123 | case NOUVEAU_GETPARAM_GRAPH_UNITS: | 1123 | case NOUVEAU_GETPARAM_GRAPH_UNITS: |
1124 | /* NV40 and NV50 versions are quite different, but register | 1124 | /* NV40 and NV50 versions are quite different, but register |
diff --git a/drivers/gpu/drm/nouveau/nv50_graph.c b/drivers/gpu/drm/nouveau/nv50_graph.c index 37e21d2be95b..7b7b5e77d99e 100644 --- a/drivers/gpu/drm/nouveau/nv50_graph.c +++ b/drivers/gpu/drm/nouveau/nv50_graph.c | |||
@@ -409,12 +409,7 @@ static int | |||
409 | nv50_graph_nvsw_mthd_page_flip(struct nouveau_channel *chan, | 409 | nv50_graph_nvsw_mthd_page_flip(struct nouveau_channel *chan, |
410 | u32 class, u32 mthd, u32 data) | 410 | u32 class, u32 mthd, u32 data) |
411 | { | 411 | { |
412 | struct nouveau_page_flip_state s; | 412 | nouveau_finish_page_flip(chan, NULL); |
413 | |||
414 | if (!nouveau_finish_page_flip(chan, &s)) { | ||
415 | /* XXX - Do something here */ | ||
416 | } | ||
417 | |||
418 | return 0; | 413 | return 0; |
419 | } | 414 | } |
420 | 415 | ||