diff options
| author | Dave Airlie <airlied@redhat.com> | 2018-11-29 10:11:02 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2018-11-29 10:11:15 +1000 | 
| commit | ebcdcef30333660d3314158bac362425ade3d28c (patch) | |
| tree | 7421f06b313c30262b5d611ce158741eb4e84cfb /drivers/gpu/drm/meson/meson_crtc.c | |
| parent | 50c1877127012b6e8ccc0d8a1a3ad0e1b09e26dd (diff) | |
| parent | 9765635b30756eb74e05e260ac812659c296cd28 (diff) | |
Merge tag 'drm-misc-fixes-2018-11-28-1' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes
- mst: Don't try to validate ports while destroying them (Lyude)
- Revert: Don't try to validate ports while destroying them (Lyude)
- core: Don't set device to master unless set_master succeeds (Sergio)
- meson: Do vblank_on/off on enable/disable (Neil)
- meson: Use fast_io regmap option to avoid sleeping in irq ctx (Lyude)
- meson: Don't walk off the end of the OSD EOTF LUTs (Lyude)
Cc: Lyude Paul <lyude@redhat.com>
Cc: Sergio Correia <sergio@correia.cc>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Sean Paul <sean@poorly.run>
Link: https://patchwork.freedesktop.org/patch/msgid/20181128212936.GA21379@art_vandelay
Diffstat (limited to 'drivers/gpu/drm/meson/meson_crtc.c')
| -rw-r--r-- | drivers/gpu/drm/meson/meson_crtc.c | 27 | 
1 files changed, 25 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c index 05520202c967..191b314f9e9e 100644 --- a/drivers/gpu/drm/meson/meson_crtc.c +++ b/drivers/gpu/drm/meson/meson_crtc.c @@ -45,6 +45,7 @@ struct meson_crtc {  	struct drm_crtc base;  	struct drm_pending_vblank_event *event;  	struct meson_drm *priv; +	bool enabled;  };  #define to_meson_crtc(x) container_of(x, struct meson_crtc, base) @@ -80,8 +81,7 @@ static const struct drm_crtc_funcs meson_crtc_funcs = {  }; -static void meson_crtc_atomic_enable(struct drm_crtc *crtc, -				     struct drm_crtc_state *old_state) +static void meson_crtc_enable(struct drm_crtc *crtc)  {  	struct meson_crtc *meson_crtc = to_meson_crtc(crtc);  	struct drm_crtc_state *crtc_state = crtc->state; @@ -101,6 +101,22 @@ static void meson_crtc_atomic_enable(struct drm_crtc *crtc,  	writel_bits_relaxed(VPP_POSTBLEND_ENABLE, VPP_POSTBLEND_ENABLE,  			    priv->io_base + _REG(VPP_MISC)); +	drm_crtc_vblank_on(crtc); + +	meson_crtc->enabled = true; +} + +static void meson_crtc_atomic_enable(struct drm_crtc *crtc, +				     struct drm_crtc_state *old_state) +{ +	struct meson_crtc *meson_crtc = to_meson_crtc(crtc); +	struct meson_drm *priv = meson_crtc->priv; + +	DRM_DEBUG_DRIVER("\n"); + +	if (!meson_crtc->enabled) +		meson_crtc_enable(crtc); +  	priv->viu.osd1_enabled = true;  } @@ -110,6 +126,8 @@ static void meson_crtc_atomic_disable(struct drm_crtc *crtc,  	struct meson_crtc *meson_crtc = to_meson_crtc(crtc);  	struct meson_drm *priv = meson_crtc->priv; +	drm_crtc_vblank_off(crtc); +  	priv->viu.osd1_enabled = false;  	priv->viu.osd1_commit = false; @@ -124,6 +142,8 @@ static void meson_crtc_atomic_disable(struct drm_crtc *crtc,  		crtc->state->event = NULL;  	} + +	meson_crtc->enabled = false;  }  static void meson_crtc_atomic_begin(struct drm_crtc *crtc, @@ -132,6 +152,9 @@ static void meson_crtc_atomic_begin(struct drm_crtc *crtc,  	struct meson_crtc *meson_crtc = to_meson_crtc(crtc);  	unsigned long flags; +	if (crtc->state->enable && !meson_crtc->enabled) +		meson_crtc_enable(crtc); +  	if (crtc->state->event) {  		WARN_ON(drm_crtc_vblank_get(crtc) != 0); | 
