[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