| From 1b79cfd99ff5127e6a143767b51694a527b3ea38 Mon Sep 17 00:00:00 2001 |
| From: John Stultz <john.stultz@linaro.org> |
| Date: Tue, 3 Mar 2020 16:32:28 +0000 |
| Subject: drm: kirin: Revert "Fix for hikey620 display offset problem" |
| |
| From: John Stultz <john.stultz@linaro.org> |
| |
| commit 1b79cfd99ff5127e6a143767b51694a527b3ea38 upstream. |
| |
| This reverts commit ff57c6513820efe945b61863cf4a51b79f18b592. |
| |
| With the commit ff57c6513820 ("drm: kirin: Fix for hikey620 |
| display offset problem") we added support for handling LDI |
| overflows by resetting the hardware. |
| |
| However, its been observed that when we do hit the LDI overflow |
| condition, the irq seems to be screaming, and we do nothing but |
| stream: |
| [drm:ade_irq_handler [kirin_drm]] *ERROR* LDI underflow! |
| over and over to the screen |
| |
| I've tried a few appraoches to avoid this, but none has yet |
| been successful and the cure here is worse then the original |
| disease, so revert this for now. |
| |
| Cc: Xinliang Liu <xinliang.liu@linaro.org> |
| Cc: Rongrong Zou <zourongrong@gmail.com> |
| Cc: Xinwei Kong <kong.kongxinwei@hisilicon.com> |
| Cc: Chen Feng <puck.chen@hisilicon.com> |
| Cc: Sam Ravnborg <sam@ravnborg.org> |
| Cc: David Airlie <airlied@linux.ie> |
| Cc: Daniel Vetter <daniel@ffwll.ch> |
| Cc: dri-devel <dri-devel@lists.freedesktop.org> |
| Fixes: ff57c6513820 ("drm: kirin: Fix for hikey620 display offset problem") |
| Signed-off-by: John Stultz <john.stultz@linaro.org> |
| Acked-by: Xinliang Liu <xinliang.liu@linaro.org> |
| Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20200303163228.52741-1-john.stultz@linaro.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h | 1 - |
| drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 20 -------------------- |
| 2 files changed, 21 deletions(-) |
| |
| --- a/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h |
| +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h |
| @@ -83,7 +83,6 @@ |
| #define VSIZE_OFST 20 |
| #define LDI_INT_EN 0x741C |
| #define FRAME_END_INT_EN_OFST 1 |
| -#define UNDERFLOW_INT_EN_OFST 2 |
| #define LDI_CTRL 0x7420 |
| #define BPP_OFST 3 |
| #define DATA_GATE_EN BIT(2) |
| --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |
| +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c |
| @@ -46,7 +46,6 @@ struct ade_hw_ctx { |
| struct clk *media_noc_clk; |
| struct clk *ade_pix_clk; |
| struct reset_control *reset; |
| - struct work_struct display_reset_wq; |
| bool power_on; |
| int irq; |
| |
| @@ -136,7 +135,6 @@ static void ade_init(struct ade_hw_ctx * |
| */ |
| ade_update_bits(base + ADE_CTRL, FRM_END_START_OFST, |
| FRM_END_START_MASK, REG_EFFECTIVE_IN_ADEEN_FRMEND); |
| - ade_update_bits(base + LDI_INT_EN, UNDERFLOW_INT_EN_OFST, MASK(1), 1); |
| } |
| |
| static bool ade_crtc_mode_fixup(struct drm_crtc *crtc, |
| @@ -304,17 +302,6 @@ static void ade_crtc_disable_vblank(stru |
| MASK(1), 0); |
| } |
| |
| -static void drm_underflow_wq(struct work_struct *work) |
| -{ |
| - struct ade_hw_ctx *ctx = container_of(work, struct ade_hw_ctx, |
| - display_reset_wq); |
| - struct drm_device *drm_dev = ctx->crtc->dev; |
| - struct drm_atomic_state *state; |
| - |
| - state = drm_atomic_helper_suspend(drm_dev); |
| - drm_atomic_helper_resume(drm_dev, state); |
| -} |
| - |
| static irqreturn_t ade_irq_handler(int irq, void *data) |
| { |
| struct ade_hw_ctx *ctx = data; |
| @@ -331,12 +318,6 @@ static irqreturn_t ade_irq_handler(int i |
| MASK(1), 1); |
| drm_crtc_handle_vblank(crtc); |
| } |
| - if (status & BIT(UNDERFLOW_INT_EN_OFST)) { |
| - ade_update_bits(base + LDI_INT_CLR, UNDERFLOW_INT_EN_OFST, |
| - MASK(1), 1); |
| - DRM_ERROR("LDI underflow!"); |
| - schedule_work(&ctx->display_reset_wq); |
| - } |
| |
| return IRQ_HANDLED; |
| } |
| @@ -919,7 +900,6 @@ static void *ade_hw_ctx_alloc(struct pla |
| if (ret) |
| return ERR_PTR(-EIO); |
| |
| - INIT_WORK(&ctx->display_reset_wq, drm_underflow_wq); |
| ctx->crtc = crtc; |
| |
| return ctx; |