drm/msm/dpu: Delete bonkers code

dpu_crtc_atomic_flush() was directly poking it's attached planes in a
code path that ended up in dpu_plane_atomic_update(), even if the plane
was not involved in the current atomic update. While a bit dubious,
this worked before because plane->state would always point to something
valid. But now using drm_atomic_get_new_plane_state() we could get a
NULL state pointer instead, leading to:

[ 20.873273] Call trace:
[ 20.875740] dpu_plane_atomic_update+0x5c/0xed0
[ 20.880311] dpu_plane_restore+0x40/0x88
[ 20.884266] dpu_crtc_atomic_flush+0xf4/0x208
[ 20.888660] drm_atomic_helper_commit_planes+0x150/0x238
[ 20.894014] msm_atomic_commit_tail+0x1d4/0x7a0
[ 20.898579] commit_tail+0xa4/0x168
[ 20.902102] drm_atomic_helper_commit+0x164/0x178
[ 20.906841] drm_atomic_commit+0x54/0x60
[ 20.910798] drm_atomic_connector_commit_dpms+0x10c/0x118
[ 20.916236] drm_mode_obj_set_property_ioctl+0x1e4/0x440
[ 20.921588] drm_connector_property_set_ioctl+0x60/0x88
[ 20.926852] drm_ioctl_kernel+0xd0/0x120
[ 20.930807] drm_ioctl+0x21c/0x478
[ 20.934235] __arm64_sys_ioctl+0xa8/0xe0
[ 20.938193] invoke_syscall+0x64/0x130
[ 20.941977] el0_svc_common.constprop.3+0x5c/0xe0
[ 20.946716] do_el0_svc+0x80/0xa0
[ 20.950058] el0_svc+0x20/0x30
[ 20.953145] el0_sync_handler+0x88/0xb0
[ 20.957014] el0_sync+0x13c/0x140

The reason for the codepath seems dubious, the atomic suspend/resume
heplers should handle the power-collapse case. If not, the CRTC's
atomic_check() should be adding the planes to the atomic update.

Reported-by: Stephen Boyd <swboyd@chromium.org>
Reported-by: John Stultz <john.stultz@linaro.org>
Fixes: 37418bf14c13 ("drm: Use state helper instead of the plane state pointer")
Tested-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Rob Clark <robdclark@chromium.org>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20210430171744.1721408-1-robdclark@gmail.com

authored by Rob Clark and committed by Maxime Ripard a712b307 74deef03

-32
-10
drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
··· 566 566 if (unlikely(!cstate->num_mixers)) 567 567 return; 568 568 569 - /* 570 - * For planes without commit update, drm framework will not add 571 - * those planes to current state since hardware update is not 572 - * required. However, if those planes were power collapsed since 573 - * last commit cycle, driver has to restore the hardware state 574 - * of those planes explicitly here prior to plane flush. 575 - */ 576 - drm_atomic_crtc_for_each_plane(plane, crtc) 577 - dpu_plane_restore(plane, state); 578 - 579 569 /* update performance setting before crtc kickoff */ 580 570 dpu_core_perf_crtc_update(crtc, 1, false); 581 571
-16
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
··· 1258 1258 } 1259 1259 } 1260 1260 1261 - void dpu_plane_restore(struct drm_plane *plane, struct drm_atomic_state *state) 1262 - { 1263 - struct dpu_plane *pdpu; 1264 - 1265 - if (!plane || !plane->state) { 1266 - DPU_ERROR("invalid plane\n"); 1267 - return; 1268 - } 1269 - 1270 - pdpu = to_dpu_plane(plane); 1271 - 1272 - DPU_DEBUG_PLANE(pdpu, "\n"); 1273 - 1274 - dpu_plane_atomic_update(plane, state); 1275 - } 1276 - 1277 1261 static void dpu_plane_destroy(struct drm_plane *plane) 1278 1262 { 1279 1263 struct dpu_plane *pdpu = plane ? to_dpu_plane(plane) : NULL;
-6
drivers/gpu/drm/msm/disp/dpu1/dpu_plane.h
··· 85 85 u32 *flush_sspp); 86 86 87 87 /** 88 - * dpu_plane_restore - restore hw state if previously power collapsed 89 - * @plane: Pointer to drm plane structure 90 - */ 91 - void dpu_plane_restore(struct drm_plane *plane, struct drm_atomic_state *state); 92 - 93 - /** 94 88 * dpu_plane_flush - final plane operations before commit flush 95 89 * @plane: Pointer to drm plane structure 96 90 */