| From 775a1cb5ea9fcbde4b2a592697a8ef2040968f4b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 25 May 2023 10:40:55 -0700 |
| Subject: drm/msm/dpu: always clear every individual pending flush mask |
| |
| From: Kuogee Hsieh <quic_khsieh@quicinc.com> |
| |
| [ Upstream commit 625cbb077007698060b12d0ae5657a4d8411b153 ] |
| |
| There are two tiers of pending flush control, top level and |
| individual hardware block. Currently only the top level of |
| flush mask is reset to 0 but the individual pending flush masks |
| of particular hardware blocks are left at their previous values, |
| eventually accumulating all possible bit values and typically |
| flushing more than necessary. |
| Reset all individual hardware block flush masks to 0 to avoid |
| accidentally flushing them. |
| |
| Changes in V13: |
| -- rewording commit text |
| -- add an empty space line as suggested |
| |
| Changes in V14: |
| -- add Fixes tag |
| |
| Fixes: 73bfb790ac78 ("msm:disp:dpu1: setup display datapath for SC7180 target") |
| Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com> |
| Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> |
| Reviewed-by: Marijn Suijten <marijn.suijten@somainline.org> |
| Patchwork: https://patchwork.freedesktop.org/patch/539508/ |
| Link: https://lore.kernel.org/r/1685036458-22683-8-git-send-email-quic_khsieh@quicinc.com |
| Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c |
| index e57faf5906a8b..f6270b7a0b140 100644 |
| --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c |
| +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c |
| @@ -117,6 +117,9 @@ static inline void dpu_hw_ctl_clear_pending_flush(struct dpu_hw_ctl *ctx) |
| trace_dpu_hw_ctl_clear_pending_flush(ctx->pending_flush_mask, |
| dpu_hw_ctl_get_flush_register(ctx)); |
| ctx->pending_flush_mask = 0x0; |
| + ctx->pending_intf_flush_mask = 0; |
| + ctx->pending_wb_flush_mask = 0; |
| + ctx->pending_merge_3d_flush_mask = 0; |
| |
| memset(ctx->pending_dspp_flush_mask, 0, |
| sizeof(ctx->pending_dspp_flush_mask)); |
| -- |
| 2.39.2 |
| |