Hi Andrey,

On 19/06/2019 08:27, Andrey Smirnov wrote:

@@ -748,22 +748,19 @@ static int tc_set_video_mode(struct tc_data *tc,
static int tc_wait_link_training(struct tc_data *tc)
-       u32 timeout = 1000;
        u32 value;
        int ret;
- do {
-               udelay(1);
-               tc_read(DP0_LTSTAT, &value);
-       } while ((!(value & LT_LOOPDONE)) && (--timeout));
-       if (timeout == 0) {
+       ret = tc_poll_timeout(tc, DP0_LTSTAT, LT_LOOPDONE,
+                             LT_LOOPDONE, 1, 1000);

This seems to break DP at least with some monitors for me. I think it's just a timeout problem, as increasing the values helps.

Using ktime, I can see that during link training, the first call takes ~2ms, the second ~7ms. I think this worked before, as udelay(1) takes much longer than 1 us.

We have 1000us limit in a few other places too, which I don't see causing issues, but might need increasing too.

Also, 1us sleep_us may be a bit too small to be sane. If the loops take milliseconds, probably 100us or even more would make sense.

This didn't cause any issues with your display?


Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki
dri-devel mailing list

Reply via email to