Loading drivers/gpu/drm/nouveau/nv50_crtc.c +4 −37 Original line number Original line Diff line number Diff line Loading @@ -38,39 +38,6 @@ #include "nouveau_connector.h" #include "nouveau_connector.h" #include "nv50_display.h" #include "nv50_display.h" static int nv50_crtc_wait_complete(struct drm_crtc *crtc) { struct drm_device *dev = crtc->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; struct nv50_display *disp = nv50_display(dev); struct nouveau_channel *evo = disp->master; u64 start; int ret; ret = RING_SPACE(evo, 6); if (ret) return ret; BEGIN_RING(evo, 0, 0x0084, 1); OUT_RING (evo, 0x80000000); BEGIN_RING(evo, 0, 0x0080, 1); OUT_RING (evo, 0); BEGIN_RING(evo, 0, 0x0084, 1); OUT_RING (evo, 0x00000000); nv_wo32(disp->ntfy, 0x000, 0x00000000); FIRE_RING (evo); start = ptimer->read(dev); do { if (nv_ro32(disp->ntfy, 0x000)) return 0; } while (ptimer->read(dev) - start < 2000000000ULL); return -EBUSY; } static void static void nv50_crtc_lut_load(struct drm_crtc *crtc) nv50_crtc_lut_load(struct drm_crtc *crtc) { { Loading Loading @@ -303,7 +270,7 @@ nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, int scaling_mode, bool update) if (update) { if (update) { nv50_display_flip_stop(crtc); nv50_display_flip_stop(crtc); nv50_crtc_wait_complete(crtc); nv50_display_sync(dev); nv50_display_flip_next(crtc, crtc->fb, NULL); nv50_display_flip_next(crtc, crtc->fb, NULL); } } Loading Loading @@ -515,7 +482,7 @@ nv50_crtc_commit(struct drm_crtc *crtc) nv50_crtc_blank(nv_crtc, false); nv50_crtc_blank(nv_crtc, false); drm_vblank_post_modeset(dev, nv_crtc->index); drm_vblank_post_modeset(dev, nv_crtc->index); nv50_crtc_wait_complete(crtc); nv50_display_sync(dev); nv50_display_flip_next(crtc, crtc->fb, NULL); nv50_display_flip_next(crtc, crtc->fb, NULL); } } Loading Loading @@ -710,7 +677,7 @@ nv50_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, if (ret) if (ret) return ret; return ret; ret = nv50_crtc_wait_complete(crtc); ret = nv50_display_sync(crtc->dev); if (ret) if (ret) return ret; return ret; Loading @@ -729,7 +696,7 @@ nv50_crtc_mode_set_base_atomic(struct drm_crtc *crtc, if (ret) if (ret) return ret; return ret; return nv50_crtc_wait_complete(crtc); return nv50_display_sync(crtc->dev); } } static const struct drm_crtc_helper_funcs nv50_crtc_helper_funcs = { static const struct drm_crtc_helper_funcs nv50_crtc_helper_funcs = { Loading drivers/gpu/drm/nouveau/nv50_display.c +32 −0 Original line number Original line Diff line number Diff line Loading @@ -61,6 +61,38 @@ nv50_display_late_takedown(struct drm_device *dev) { { } } int nv50_display_sync(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; struct nv50_display *disp = nv50_display(dev); struct nouveau_channel *evo = disp->master; u64 start; int ret; ret = RING_SPACE(evo, 6); if (ret == 0) { BEGIN_RING(evo, 0, 0x0084, 1); OUT_RING (evo, 0x80000000); BEGIN_RING(evo, 0, 0x0080, 1); OUT_RING (evo, 0); BEGIN_RING(evo, 0, 0x0084, 1); OUT_RING (evo, 0x00000000); nv_wo32(disp->ntfy, 0x000, 0x00000000); FIRE_RING (evo); start = ptimer->read(dev); do { if (nv_ro32(disp->ntfy, 0x000)) return 0; } while (ptimer->read(dev) - start < 2000000000ULL); } return -EBUSY; } int int nv50_display_init(struct drm_device *dev) nv50_display_init(struct drm_device *dev) { { Loading drivers/gpu/drm/nouveau/nv50_display.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -73,6 +73,7 @@ void nv50_display_destroy(struct drm_device *dev); int nv50_crtc_blank(struct nouveau_crtc *, bool blank); int nv50_crtc_blank(struct nouveau_crtc *, bool blank); int nv50_crtc_set_clock(struct drm_device *, int head, int pclk); int nv50_crtc_set_clock(struct drm_device *, int head, int pclk); int nv50_display_sync(struct drm_device *); int nv50_display_flip_next(struct drm_crtc *, struct drm_framebuffer *, int nv50_display_flip_next(struct drm_crtc *, struct drm_framebuffer *, struct nouveau_channel *chan); struct nouveau_channel *chan); void nv50_display_flip_stop(struct drm_crtc *); void nv50_display_flip_stop(struct drm_crtc *); Loading Loading
drivers/gpu/drm/nouveau/nv50_crtc.c +4 −37 Original line number Original line Diff line number Diff line Loading @@ -38,39 +38,6 @@ #include "nouveau_connector.h" #include "nouveau_connector.h" #include "nv50_display.h" #include "nv50_display.h" static int nv50_crtc_wait_complete(struct drm_crtc *crtc) { struct drm_device *dev = crtc->dev; struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; struct nv50_display *disp = nv50_display(dev); struct nouveau_channel *evo = disp->master; u64 start; int ret; ret = RING_SPACE(evo, 6); if (ret) return ret; BEGIN_RING(evo, 0, 0x0084, 1); OUT_RING (evo, 0x80000000); BEGIN_RING(evo, 0, 0x0080, 1); OUT_RING (evo, 0); BEGIN_RING(evo, 0, 0x0084, 1); OUT_RING (evo, 0x00000000); nv_wo32(disp->ntfy, 0x000, 0x00000000); FIRE_RING (evo); start = ptimer->read(dev); do { if (nv_ro32(disp->ntfy, 0x000)) return 0; } while (ptimer->read(dev) - start < 2000000000ULL); return -EBUSY; } static void static void nv50_crtc_lut_load(struct drm_crtc *crtc) nv50_crtc_lut_load(struct drm_crtc *crtc) { { Loading Loading @@ -303,7 +270,7 @@ nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, int scaling_mode, bool update) if (update) { if (update) { nv50_display_flip_stop(crtc); nv50_display_flip_stop(crtc); nv50_crtc_wait_complete(crtc); nv50_display_sync(dev); nv50_display_flip_next(crtc, crtc->fb, NULL); nv50_display_flip_next(crtc, crtc->fb, NULL); } } Loading Loading @@ -515,7 +482,7 @@ nv50_crtc_commit(struct drm_crtc *crtc) nv50_crtc_blank(nv_crtc, false); nv50_crtc_blank(nv_crtc, false); drm_vblank_post_modeset(dev, nv_crtc->index); drm_vblank_post_modeset(dev, nv_crtc->index); nv50_crtc_wait_complete(crtc); nv50_display_sync(dev); nv50_display_flip_next(crtc, crtc->fb, NULL); nv50_display_flip_next(crtc, crtc->fb, NULL); } } Loading Loading @@ -710,7 +677,7 @@ nv50_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y, if (ret) if (ret) return ret; return ret; ret = nv50_crtc_wait_complete(crtc); ret = nv50_display_sync(crtc->dev); if (ret) if (ret) return ret; return ret; Loading @@ -729,7 +696,7 @@ nv50_crtc_mode_set_base_atomic(struct drm_crtc *crtc, if (ret) if (ret) return ret; return ret; return nv50_crtc_wait_complete(crtc); return nv50_display_sync(crtc->dev); } } static const struct drm_crtc_helper_funcs nv50_crtc_helper_funcs = { static const struct drm_crtc_helper_funcs nv50_crtc_helper_funcs = { Loading
drivers/gpu/drm/nouveau/nv50_display.c +32 −0 Original line number Original line Diff line number Diff line Loading @@ -61,6 +61,38 @@ nv50_display_late_takedown(struct drm_device *dev) { { } } int nv50_display_sync(struct drm_device *dev) { struct drm_nouveau_private *dev_priv = dev->dev_private; struct nouveau_timer_engine *ptimer = &dev_priv->engine.timer; struct nv50_display *disp = nv50_display(dev); struct nouveau_channel *evo = disp->master; u64 start; int ret; ret = RING_SPACE(evo, 6); if (ret == 0) { BEGIN_RING(evo, 0, 0x0084, 1); OUT_RING (evo, 0x80000000); BEGIN_RING(evo, 0, 0x0080, 1); OUT_RING (evo, 0); BEGIN_RING(evo, 0, 0x0084, 1); OUT_RING (evo, 0x00000000); nv_wo32(disp->ntfy, 0x000, 0x00000000); FIRE_RING (evo); start = ptimer->read(dev); do { if (nv_ro32(disp->ntfy, 0x000)) return 0; } while (ptimer->read(dev) - start < 2000000000ULL); } return -EBUSY; } int int nv50_display_init(struct drm_device *dev) nv50_display_init(struct drm_device *dev) { { Loading
drivers/gpu/drm/nouveau/nv50_display.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -73,6 +73,7 @@ void nv50_display_destroy(struct drm_device *dev); int nv50_crtc_blank(struct nouveau_crtc *, bool blank); int nv50_crtc_blank(struct nouveau_crtc *, bool blank); int nv50_crtc_set_clock(struct drm_device *, int head, int pclk); int nv50_crtc_set_clock(struct drm_device *, int head, int pclk); int nv50_display_sync(struct drm_device *); int nv50_display_flip_next(struct drm_crtc *, struct drm_framebuffer *, int nv50_display_flip_next(struct drm_crtc *, struct drm_framebuffer *, struct nouveau_channel *chan); struct nouveau_channel *chan); void nv50_display_flip_stop(struct drm_crtc *); void nv50_display_flip_stop(struct drm_crtc *); Loading