Quoting Kuogee Hsieh (2021-07-13 08:54:02) > diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c b/drivers/gpu/drm/msm/dp/dp_ctrl.c > index 27fb0f0..92cf331 100644 > --- a/drivers/gpu/drm/msm/dp/dp_ctrl.c > +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c > @@ -1634,6 +1617,24 @@ void dp_ctrl_handle_sink_request(struct dp_ctrl *dp_ctrl) > } > } > > +static bool dp_ctrl_clock_recovery_any_ok( > + const u8 link_status[DP_LINK_STATUS_SIZE], > + int lane_count) > +{ > + int lane_cnt; > + > + /* > + * only interested in the lane number after reduced > + * lane_cnt = 4, then only interested in 2 lanes > + * lane_cnt = 2, then only interested in 1 lane > + */ > + lane_cnt = lane_count >> 1; > + if (lane_cnt == 0) > + return false; > + > + return drm_dp_clock_recovery_ok(link_status, lane_count); This doesn't work? Because drm_dp_clock_recovery_ok() requires every lane to be OK whereas this function wants any lane to be OK? It may make sense to have drm_dp_clock_recovery_ok() return false if lane_count == 0 too. > +} > + > int dp_ctrl_on_link(struct dp_ctrl *dp_ctrl) > { > int rc = 0;