<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 18, 2019 at 12:54 AM Christian Mauderer <<a href="mailto:list@c-mauderer.de">list@c-mauderer.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
> Hi,<br>
> I followed the error and figured out that the reason for the error was a<br>
> call to<br>
> `rtems_task_wake_after` which was coming from the `udelay()` call in bbb-i2c<br>
> in function `am335x_i2c_reset`. For now, commenting out the udelay calls<br>
> work<br>
> without error and I can also see the lvgl example working.<br>
> <br>
> What is the use of udelay there? Can it be removed? if not, what's the<br>
> better way<br>
> to make a delay at system initialization than `rtems_task_wake_after`?<br>
<br>
I agree that it is quite likely that udelay doesn't work correctly when<br>
the system isn't booted yet. Most likely that's the reason for the error.<br>
<br>
I'm not entirely sure whether the udelay has been there before I updated<br>
the driver or whether I took it over from the FreeBSD driver. But it's<br>
not really relevant. Most likely the times are either required by the<br>
manual or they had been necessary during some tests.<br>
<br>
The am335x_i2c_reset is only called during initialization (in that case<br>
during am335x_i2c_bus_register). So it shouldn't be a problem to replace<br>
them with a busy wait. You can use the rtems_counter_delay_nanoseconds()<br>
for that.<br>
<br><br></blockquote><div>This worked. I have posted a patch and started a discussion here:</div><div><a href="https://lists.rtems.org/pipermail/devel/2019-September/027748.html">https://lists.rtems.org/pipermail/devel/2019-September/027748.html</a> </div></div></div>