On Thu, May 16, 2019 at 05:19:13PM +0800, Weijie Gao wrote: > The initr_watchdog is currently placed before initr_serial. The > initr_watchdog calls printf and printf finally calls ops->putc of a serial > driver. > > However, gd->cur_serial_dev points to a udevice allocated in board_f. The > gd->cur_serial_dev->driver->ops->putc points the the code region before > relocation. > > Some serial drivers call WATCHDOG_RESET() in ops->putc. When DM is enabled > for watchdog, watchdog_reset() is called. watchdog_reset() calls get_timer > to get current timer. > > On some platforms the timer driver is also a DM driver. initr_watchdog is > placed right after initr_dm, which means the timer driver hasn't been > initialized. So dm_timer_init() is called. To create a new udevice, calloc > is called. > > However start from ops->putc, u-boot execution flow is redirected into the > memory region before relocation (board_f). In board_f, dlmalloc hasn't > been initialized. The call to calloc will fail, and this will cause DM to > print out an error message, and it will call printf again, causing > recursive error outputs. > > This patch places initr_watchdog after initr_serial to solve this issue. > > Cc: Stefan Roese <s...@denx.de> > Reviewed-by: Ryder Lee <ryder....@mediatek.com> > Signed-off-by: Weijie Gao <weijie....@mediatek.com> > Reviewed-by: Stefan Roese <s...@denx.de> > Tested-by: Frank Wunderlich <fran...@public-files.de> > Tested-by: Suniel Mahesh <suni...@techveda.org>
Applied to u-boot/master, thanks! -- Tom
signature.asc
Description: PGP signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot