On Fri, 15 Sept 2023 at 21:30, Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx> wrote: > > dsi_wait4video_done() API wait for the DSI video mode engine to > become idle so that we can transmit the DCS commands in the > beginning of BLLP. However, with the current sequence, the MDP > timing engine is turned on after the panel's pre_enable() callback > which can send out the DCS commands needed to power up the panel. > > During those cases, this API will always timeout and print out the > error spam leading to long bootup times and log flooding. > > Fix this by checking if the DSI video engine was actually busy before > waiting for it to become idle otherwise this is a redundant wait. > > Fixes: a689554ba6ed ("drm/msm: Initial add DSI connector support") > Signed-off-by: Abhinav Kumar <quic_abhinavk@xxxxxxxxxxx> > --- > drivers/gpu/drm/msm/dsi/dsi_host.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c > index 0c4ec0530efc..31495e423c56 100644 > --- a/drivers/gpu/drm/msm/dsi/dsi_host.c > +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c > @@ -1075,9 +1075,21 @@ static void dsi_wait4video_done(struct msm_dsi_host *msm_host) > > static void dsi_wait4video_eng_busy(struct msm_dsi_host *msm_host) > { > + u32 data; > + > + data = dsi_read(msm_host, REG_DSI_STATUS0); > + > if (!(msm_host->mode_flags & MIPI_DSI_MODE_VIDEO)) > return; We can probably skip reading REG_DSI_STATUS0 if the host is in CMD mode. LGTM otherwise. > > + /* if video mode engine is not busy, its because > + * either timing engine was not turned on or the > + * DSI controller has finished transmitting the video > + * data already, so no need to wait in those cases > + */ > + if (!(data & DSI_STATUS0_VIDEO_MODE_ENGINE_BUSY)) > + return; > + > if (msm_host->power_on && msm_host->enabled) { > dsi_wait4video_done(msm_host); > /* delay 4 ms to skip BLLP */ > -- > 2.40.1 > -- With best wishes Dmitry