[PATCH] board: mediatek: disable watchdog on BananaPi R2

Heinrich Schuchardt xypron.glpk at gmx.de
Mon Jan 11 09:57:37 CET 2021


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 <sr at denx.de>:
>>> 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, matthias.bgg at kernel.org wrote:
>>>>>>>> From: Matthias Brugger <mbrugger at suse.com>
>>>>>>>>
>>>>>>>> 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 <mbrugger at suse.com>
>>>>>>>>
>>>>>>>> ---
>>>>>>>>
>>>>>>>>      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
>



More information about the U-Boot mailing list