On 11.01.21 08:48, Stefan Roese wrote: > > > On 11.01.21 08:17, Heinrich Schuchardt wrote: >> Am 11. Januar 2021 08:02:12 MEZ schrieb Stefan Roese <[email protected]>: >>> Added Heinrich to Cc. >>> >>> On 10.01.21 19:44, Matthias Brugger wrote: >>>> On 09/01/2021 15:57, Stefan Roese wrote: >>>>> On 09.01.21 03:32, Matthias Brugger wrote: >>>>>> On 08/01/2021 08:39, Stefan Roese wrote: >>>>>>> On 07.01.21 16:36, [email protected] wrote: >>>>>>>> From: Matthias Brugger <[email protected]> >>>>>>>> >>>>>>>> Watchdog timeout comes in before we are able to load the >>>>>>>> kernel and reset the watchdog. Disable the watchdog late in the >>> boot >>>>>>>> process to be able to boot the board. >>>>>>> >>>>>>> Can't you change the WDT reset timeout instead to a higher value? >>>>>>> >>>>>> >>>>>> I tried that, but the HW has a max timeout of 15984 ms. >>> Unfortunately that's not >>>>>> enough. >>>>> >>>>> Nearly 16 seconds is not enough to boot into Linux so that the Linux >>>>> watchdog daemon can take control? >>>>> >>>> >>>> Exactly. I'm using a standard distro image. I think the main problem >>> is, that it >>>> needs 14 seconds for the EFI stub to actually boot the kernel.
Hello Matthias, I observed that on some recent version Linux before 5.10 booting seemed to be delayed by dozens of seconds on many boards. On which Linux version did you see the problem? >>> >>> I've not much experience (yet) with the "EFI stub". But if it takes >>> this >>> long, wouldn't it make sense that this stub also supports the WDT? >> >> efi_timer_check() calls WATCHDOG_RESET() trying to avoid that the >> hardware watchdog is triggered. > > So efi_timer_check() is called quite frequently and should be enough > to reset the U-Boot WDT while residing in EFI? Not sure, why the reset > occurs in Matthias's case then. efi_timer_check() is only invoked, if the UEFI API is invoked. Especially if the problem occurs after ExitBootServices() it is not called anymore. > >> There is a software watchdog >> defaulting to 5 minutes in efi_watchdog.c which can be modified >> via the EFI API. >> >> Is there a U-Boot API to disable the hardware watchdog? > > Yes: > > /* > * Stop the timer, thus disabling the Watchdog. Use wdt_start to start > it again. > * > * @dev: WDT Device > * @return: 0 if OK, -ve on error > */ > int wdt_stop(struct udevice *dev); It would be interesting to understand if your problem occurs before or after efi_exit_boot_services() is called. You could you add printf() statements after EFI_ENTRY() and before EFI_EXIT() to see if it is reached. Could you further, please, test if adding wdt_stop() to the start of do_bootefi() in cmd/bootefi.c solves your problem. Best regards Heinrich > > Thanks, > Stefan > >> Best regards >> >> Heinrich >> >> >>> >>> Thanks, >>> Stefan >>> >>>> I've already the >>>> watchdog timer as build-in (which is not the best to do, taking into >>> account >>>> that we don't want to bloat our distro kernel with random board >>> specific drivers >>>> build-in. If we I had the watchdog driver as kernel module it would >>> take forever >>>> to get that loaded. >>>> >>>> You can find a serial log with timestamp from the moment U-Boot got >>> loaded until >>>> the kernel actually boots here: >>>> https://paste.opensuse.org/98390849 >>>> >>>> Regards, >>>> Matthias >>>> >>>>> Thanks, >>>>> Stefan >>>>> >>>>>> Regards, >>>>>> Matthias >>>>>> >>>>>>> Thanks, >>>>>>> Stefan >>>>>>> >>>>>>>> Signed-off-by: Matthias Brugger <[email protected]> >>>>>>>> >>>>>>>> --- >>>>>>>> >>>>>>>> board/mediatek/mt7623/mt7623_rfb.c | 8 ++++++++ >>>>>>>> configs/mt7623n_bpir2_defconfig | 1 + >>>>>>>> 2 files changed, 9 insertions(+) >>>>>>>> >>>>>>>> diff --git a/board/mediatek/mt7623/mt7623_rfb.c >>>>>>>> b/board/mediatek/mt7623/mt7623_rfb.c >>>>>>>> index 984e75ccaf..22120be412 100644 >>>>>>>> --- a/board/mediatek/mt7623/mt7623_rfb.c >>>>>>>> +++ b/board/mediatek/mt7623/mt7623_rfb.c >>>>>>>> @@ -5,6 +5,7 @@ >>>>>>>> #include <common.h> >>>>>>>> #include <mmc.h> >>>>>>>> +#include <watchdog.h> >>>>>>>> DECLARE_GLOBAL_DATA_PTR; >>>>>>>> @@ -40,3 +41,10 @@ int mmc_get_env_dev(void) >>>>>>>> return mmc_get_boot_dev(); >>>>>>>> } >>>>>>>> #endif >>>>>>>> + >>>>>>>> +#ifdef CONFIG_BOARD_LATE_INIT >>>>>>>> +int board_late_init(void) >>>>>>>> +{ >>>>>>>> + wdt_stop(gd->watchdog_dev); >>>>>>>> +} >>>>>>>> +#endif >>>>>>>> diff --git a/configs/mt7623n_bpir2_defconfig >>> b/configs/mt7623n_bpir2_defconfig >>>>>>>> index 9177c17dff..fe0b6259dd 100644 >>>>>>>> --- a/configs/mt7623n_bpir2_defconfig >>>>>>>> +++ b/configs/mt7623n_bpir2_defconfig >>>>>>>> @@ -14,6 +14,7 @@ CONFIG_FIT_VERBOSE=y >>>>>>>> CONFIG_BOOTDELAY=3 >>>>>>>> CONFIG_SYS_CONSOLE_IS_IN_ENV=y >>>>>>>> CONFIG_DEFAULT_FDT_FILE="mt7623n-bananapi-bpi-r2.dtb" >>>>>>>> +CONFIG_BOARD_LATE_INIT=y >>>>>>>> # CONFIG_DISPLAY_BOARDINFO is not set >>>>>>>> CONFIG_SYS_PROMPT="U-Boot> " >>>>>>>> CONFIG_CMD_BOOTMENU=y >>>>>>>> >>>>>>> >>>>>>> >>>>>>> Viele Grüße, >>>>>>> Stefan >>>>>>> >>>>>> >>>>> >>>>> >>>>> Viele Grüße, >>>>> Stefan >>>>> >>>> >>> >>> >>> Viele Grüße, >>> Stefan >> > > > Viele Grüße, > Stefan >

