Hello! On Mon, 21 Nov 2016 10:18:51 +0200 Tomas Melin <tomas.me...@vaisala.com> wrote:
> This fixes the loop delay when using a hw watchdog. > > In case a watchdog is used that accesses CPU registers, > the defined delay of 20us in a tight loop will cause a > huge delay in the actual timeout seen. This is caused > by the fact that udelay will inheritantly call WATCHDOG_RESET. > Together with the omap wdt implementation, the seen timeout increases up to > around 30s. This makes the loop very slow and causes long > delays when using the modem. > > Instead, implement the 2 sec loop by using the timer interface to know > when to break out of the timeout loop. Watchdog kicking is taken care of > by getc(). > > Signed-off-by: Tomas Melin <tomas.me...@vaisala.com> This commit breaks YMODEM SPL->U-Boot boot on Beagle Bone, transfer is aborted (because of timeout) after 497kb (u-boot.img is around 570kb). Reverting the commit repairs YMODEM boot. > --- > common/xyzModem.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/common/xyzModem.c b/common/xyzModem.c > index 5656aac..e0d87db 100644 > --- a/common/xyzModem.c > +++ b/common/xyzModem.c > @@ -71,12 +71,12 @@ typedef int cyg_int32; > static int > CYGACC_COMM_IF_GETC_TIMEOUT (char chan, char *c) > { > -#define DELAY 20 > - unsigned long counter = 0; > - while (!tstc () && (counter < xyzModem_CHAR_TIMEOUT * 1000 / DELAY)) > + > + ulong now = get_timer(0); > + while (!tstc ()) > { > - udelay (DELAY); > - counter++; > + if (get_timer(now) > xyzModem_CHAR_TIMEOUT) > + break; > } > if (tstc ()) > { -- Alexander Sverdlin. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot