On Mon, Nov 08, 2021 at 08:58:33AM -0700, Simon Glass wrote: > Hi, > > On Sun, 7 Nov 2021 at 04:18, Heinrich Schuchardt > <heinrich.schucha...@canonical.com> wrote: > > > > > > > > On 11/6/21 14:53, Tom Rini wrote: > > > On Sat, Nov 06, 2021 at 04:55:44AM +0100, Heinrich Schuchardt wrote: > > >> > > >> > > >> On 11/6/21 02:52, Andre Przywara wrote: > > >>> On Fri, 5 Nov 2021 18:56:34 -0400 > > >>> Tom Rini <tr...@konsulko.com> wrote: > > >>> > > >>>> On Fri, Nov 05, 2021 at 09:38:50PM +0100, Heinrich Schuchardt wrote: > > >>>>> On 11/5/21 20:17, Tom Rini wrote: > > >>>>>> On Fri, Nov 05, 2021 at 07:37:02PM +0100, Heinrich Schuchardt wrote: > > >>>>>>> On 11/5/21 17:12, Simon Glass wrote: > > >>>>>>>> Hi, > > >>>>>>>> > > >>>>>>>> On Fri, 5 Nov 2021 at 08:21, Tom Rini <tr...@konsulko.com> wrote: > > >>>>>>>>> > > >>>>>>>>> On Fri, Nov 05, 2021 at 12:14:47PM +0100, Stefan Roese wrote: > > >>>>>>>>>> Hi Andre, > > >>>>>>>>>> > > >>>>>>>>>> Added Tom to Cc. > > >>>>>>>>>> > > >>>>>>>>>> On 05.11.21 11:04, Andre Przywara wrote: > > >>>>>>>>>>> On Thu, 4 Nov 2021 20:02:41 -0600 > > >>>>>>>>>>> Simon Glass <s...@chromium.org> wrote: > > >>>>>>>>>>> > > >>>>>>>>>>> Hi, > > >>>>>>>>>>>> On Thu, 4 Nov 2021 at 19:22, Stefan Roese <s...@denx.de> wrote: > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Hi Andre, > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On 05.11.21 00:11, Andre Przywara wrote: > > >>>>>>>>>>>>>> On Thu, 4 Nov 2021 11:37:57 +0100 > > >>>>>>>>>>>>>> Stefan Roese <s...@denx.de> wrote: > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Hi Stefan, > > >>>>>>>>>>>>>>> On 04.11.21 04:55, Samuel Holland wrote: > > >>>>>>>>>>>>>>>> This series hooks up the watchdog uclass to automatically > > >>>>>>>>>>>>>>>> register > > >>>>>>>>>>>>>>>> watchdog devices for use with sysreset, doing a bit of > > >>>>>>>>>>>>>>>> minor cleanup > > >>>>>>>>>>>>>>>> along the way. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> The goal is for this to replace the sunxi board-level > > >>>>>>>>>>>>>>>> non-DM reset_cpu() > > >>>>>>>>>>>>>>>> function. I was surprised to find that the wdt_reboot > > >>>>>>>>>>>>>>>> driver requires > > >>>>>>>>>>>>>>>> its own undocumented device tree node, which references > > >>>>>>>>>>>>>>>> the watchdog > > >>>>>>>>>>>>>>>> device by phandle. This is problematic for us, because > > >>>>>>>>>>>>>>>> sunxi-u-boot.dtsi > > >>>>>>>>>>>>>>>> file covers 20 different SoCs with varying watchdog node > > >>>>>>>>>>>>>>>> phandle names. > > >>>>>>>>>>>>>>>> So it would have required adding a -u-boot.dtsi file for > > >>>>>>>>>>>>>>>> each board. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Hooking things up automatically makes sense to me; this is > > >>>>>>>>>>>>>>>> what Linux > > >>>>>>>>>>>>>>>> does. However, I put the code behind a new option to avoid > > >>>>>>>>>>>>>>>> surprises for > > >>>>>>>>>>>>>>>> other platforms. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Changes in v3: > > >>>>>>>>>>>>>>>> - Move condition to wdt-uclass.c to fix build > > >>>>>>>>>>>>>>>> errors. > > >>>>>>>>>>>>>>>> - Include watchdog name in error message. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Changes in v2: > > >>>>>>>>>>>>>>>> - Extend the "if SYSRESET" block to the end of the > > >>>>>>>>>>>>>>>> file. > > >>>>>>>>>>>>>>>> - Also make gpio_reboot_probe function static. > > >>>>>>>>>>>>>>>> - Rebase on top of 492ee6b8d0e7 (now handle all > > >>>>>>>>>>>>>>>> watchdogs). > > >>>>>>>>>>>>>>>> - Added patches 5-6 as an example of how the new > > >>>>>>>>>>>>>>>> option will be used. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Samuel Holland (6): > > >>>>>>>>>>>>>>>> sysreset: Add uclass Kconfig dependency to drivers > > >>>>>>>>>>>>>>>> sysreset: Mark driver probe functions as static > > >>>>>>>>>>>>>>>> sysreset: watchdog: Move watchdog reference to > > >>>>>>>>>>>>>>>> plat data > > >>>>>>>>>>>>>>>> watchdog: Automatically register device with > > >>>>>>>>>>>>>>>> sysreset > > >>>>>>>>>>>>>>>> sunxi: Avoid duplicate reset_cpu with SYSRESET > > >>>>>>>>>>>>>>>> enabled > > >>>>>>>>>>>>>>>> sunxi: Use sysreset framework for poweroff/reset > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> arch/arm/Kconfig | 3 +++ > > >>>>>>>>>>>>>>>> arch/arm/mach-sunxi/board.c | 2 ++ > > >>>>>>>>>>>>>>>> drivers/sysreset/Kconfig | 11 ++++++-- > > >>>>>>>>>>>>>>>> drivers/sysreset/sysreset_gpio.c | 2 +- > > >>>>>>>>>>>>>>>> drivers/sysreset/sysreset_resetctl.c | 2 +- > > >>>>>>>>>>>>>>>> drivers/sysreset/sysreset_syscon.c | 2 +- > > >>>>>>>>>>>>>>>> drivers/sysreset/sysreset_watchdog.c | 40 > > >>>>>>>>>>>>>>>> ++++++++++++++++++++++------ > > >>>>>>>>>>>>>>>> drivers/watchdog/wdt-uclass.c | 8 ++++++ > > >>>>>>>>>>>>>>>> include/sysreset.h | 10 +++++++ > > >>>>>>>>>>>>>>>> 9 files changed, 67 insertions(+), 13 deletions(-) > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Applied to u-boot-marvell > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> Mmmh, why u-boot-marvell, > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Because I'm handling watchdog related changed since a few > > >>>>>>>>>>>>> years and we > > >>>>>>>>>>>>> did not create a specific subsystem repo for this and I'm > > >>>>>>>>>>>>> usually > > >>>>>>>>>>>>> using my "marvell" one for this. > > >>>>>>>>> > > >>>>>>>>> And fwiw, there's a few other cases like this. If it's too > > >>>>>>>>> confusing, > > >>>>>>>>> maybe we should just roll out a few more repositories, I think > > >>>>>>>>> it's > > >>>>>>>>> easier to do that now than pre-gitlab? > > >>>>>>>>>>>>>> and why did this end up already in master? > > >>>>>>>>>>>>>> Isn't that material for the next merge window? After all > > >>>>>>>>>>>>>> this changes > > >>>>>>>>>>>>>> quite a bit, for a lot of boards, and I did not have a > > >>>>>>>>>>>>>> closer look at > > >>>>>>>>>>>>>> the sunxi parts yet. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> I was hesitating also a bit. But since this patchset is on > > >>>>>>>>>>>>> the list in > > >>>>>>>>>>>>> v1 since over 2 months now (2021-08-21) I thought it was > > >>>>>>>>>>>>> "ready" for > > >>>>>>>>>>>>> inclusion now. We are at -rc1 and I think we still have > > >>>>>>>>>>>>> enough time to > > >>>>>>>>>>>>> fix any resulting problems in this release cycle. > > >>>>>>>>>>> > > >>>>>>>>>>> Why do we have the merge window then? This is clearly not a > > >>>>>>>>>>> regression or > > >>>>>>>>>>> general fix. > > >>>>>>>>>> > > >>>>>>>>>> AFAIU, we are a bit less strict here in U-Boot. Patches that > > >>>>>>>>>> were posted > > >>>>>>>>>> before the merge-window and skipped the review process (most > > >>>>>>>>>> likely > > >>>>>>>>>> because of lack of time) are often still integrated in the early > > >>>>>>>>>> rcX > > >>>>>>>>>> cycles. At least this is how I handle it usually. > > >>>>>>>>>> > > >>>>>>>>>> Tom, is my understanding here correct? > > >>>>>>>>> > > >>>>>>>>> Yes. We are not as strict as the kernel is about what can come in > > >>>>>>>>> between rc1 and rc2 (and to a certain degree, post rc2). I leave > > >>>>>>>>> things > > >>>>>>>>> up to the discretion of the custodians. People tend of have less > > >>>>>>>>> time > > >>>>>>>>> to handle U-Boot changes than other stuff, so I try and be > > >>>>>>>>> flexible in > > >>>>>>>>> picking things up. > > >>>>>>>>>>>> Yes I agree, that should be plenty of time for people to > > >>>>>>>>>>>> review it. > > >>>>>>>>>>> > > >>>>>>>>>>> Well, if there would be people to review the sunxi parts :-( > > >>>>>>>>>>> I am totally fine with the generic patches (as they have been > > >>>>>>>>>>> reviewed), > > >>>>>>>>>>> but the sunxi integration is somewhat risky. > > >>>>>>>>>>> I was explicitly deprioritising that in my queue, as it really > > >>>>>>>>>>> doesn't > > >>>>>>>>>>> change, add or fix anything, it's mere refactoring, from the > > >>>>>>>>>>> user's point > > >>>>>>>>>>> of view. > > >>>>>>>>>>>>> Do you see any specific issues? > > >>>>>>>>>>> > > >>>>>>>>>>> Patch 6/6 changes the config for all 157 Allwinner boards, so I > > >>>>>>>>>>> think that > > >>>>>>>>>>> deserves at least some testing, *before* merging it. > > >>>>>>>>>> > > >>>>>>>>>> I expect that Samuel did some testing. But still, I agree that it > > >>>>>>>>>> would be much better, if these patches - especially the > > >>>>>>>>>> Allwinner parts > > >>>>>>>>>> got more extensive testing. > > >>>>>>>>>>> I will do as much testing now as possible, but I am not happy > > >>>>>>>>>>> about that > > >>>>>>>>>>> situation. > > >>>>>>>>>> > > >>>>>>>>>> Understood. Should we revert patch 6/6 for now? > > >>>>>>>>> > > >>>>>>>>> FWIW, given Samuel has been doing a number of allwinner changes, > > >>>>>>>>> I had > > >>>>>>>>> also assumed it was sufficiently tested, which is why I didn't > > >>>>>>>>> raise a > > >>>>>>>>> further concern when I saw the widespread nature of the overall > > >>>>>>>>> changes, > > >>>>>>>>> just figured it was a few more ready-to-go cleanups that weren't > > >>>>>>>>> quite > > >>>>>>>>> picked up in time. Please do speak up if you want me to revert > > >>>>>>>>> the last > > >>>>>>>>> part. > > >>>>>>>> > > >>>>>>>> Also it is often true that people find problems by testing on > > >>>>>>>> master > > >>>>>>>> so applying it helps to shake the tree a bit. > > >>>>>>>> > > >>>>>>>> Regards, > > >>>>>>>> Simon > > >>>>>>> > > >>>>>>> We don't actually have a problem with this series but with a > > >>>>>>> previous > > >>>>>>> watchdog patch. The culprit according to bisecting is: > > >>>>>>> > > >>>>>>> b147bd3607f8 ("sunxi: Enable watchdog timer support by default") > > >>>>>>> > > >>>>>>> When booting the OrangePi PC the watchdog triggers while Linux is > > >>>>>>> booting, > > >>>>>>> ca. 16 s after leaving the UEFI subsystem. This matches > > >>>>>>> WDT_MAX_TIMEOUT in > > >>>>>>> drivers/watchdog/sunxi_wdt.c. > > >>>>>>> > > >>>>>>> If I run > > >>>>>>> => wdt dev watchdog@1c20ca0 > > >>>>>>> => wdt stop > > >>>>>>> > > >>>>>>> before the bootefi command booting succeeds. > > >>>>>>> > > >>>>>>> We don't disarm the watchdog and Linux does not do it for us in > > >>>>>>> time. > > >>>>>>> > > >>>>>>> The UEFI specification requires that the default watchdog reset > > >>>>>>> time is 300 > > >>>>>>> s. We should never arm the Sunxi hardware watchdog except within the > > >>>>>>> watchdog reset driver. > > >>>>>>> > > >>>>>>> The solution is to disable CONFIG_WATCHDOG_AUTOSTART on SUNXI. See > > >>>>>>> > > >>>>>>> [PATCH 1/1] watchdog: don't autostart watchdog on Sunxi boards > > >>>>>>> https://lists.denx.de/pipermail/u-boot/2021-November/466318.html > > >>>>>> > > >>>>>> This means we never did come up with a satisfactory to everyone > > >>>>>> solution > > >>>>>> to what UEFI thinks a watchdog should do, and what other types of > > >>>>>> deployment think a watchdog should do, yes? > > >>>>> > > >>>>> Dear Tom, > > >>>>> > > >>>>> The issue is *not* UEFI specific. > > >>>>> > > >>>>> A watchdog timeout of 16 seconds is too short for Linux to boot no > > >>>>> matter > > >>>>> whether you use the EFI stub or the legacy entry point. > > >>>>> > > >>>>> I only referred to the UEFI specification as it indicates what can be > > >>>>> considered as a reasonable timeout interval: 300 seconds. > > >>>> > > >>>> 16 seconds from the last time we pet the watchdog in U-Boot to the > > >>>> kernel being able to take over is quite reasonable. > > >>> > > >>> How do we know that the kernel takes over? What if the kernel/EFI > > >>> payload doesn't have a watchdog driver? I was assuming that the > > >>> watchdog would be disabled as soon as we boot a kernel or an EFI app > > >>> calls ExitBootServices (maybe even earlier). > > >>> But this sounds like a generic problem, not sunxi specific. So how do > > >>> other platforms solve this? > > >>> > > >>> Cheers, > > >>> Andre > > >> > > >> The UEFI specification has this requirement in chapter "3.1.2 Load Option > > >> Processing": > > >> > > >> "... the boot manager must enable the watchdog timer for 5 minutes by > > >> using > > >> the EFI_BOOT_SERVICES.SetWatchdogTimer() boot service prior to calling > > >> EFI_BOOT_SERVICES.StartImage(). If a boot option returns control to the > > >> boot > > >> manager, the boot manager must disable the watchdog timer with an > > >> additional > > >> call to the SetWatchdogTimer() boot service." > > >> > > >> This means that having an armed watchdog when starting the kernel is > > >> correct. > > >> > > >> If you start a watchdog in the firmware which is not disabled or reset by > > >> the operating system, you are out of luck and won't be able to boot. > > >> > > >> Current Linux has driver drivers/watchdog/sunxi_wdt.c compatible to > > >> "allwinner,sun4i-a10-wdt","allwinner,sun6i-a31-wdt" and enabled by > > >> CONFIG_SUNXI_WATCHDOG. This driver was introduced in Linux v3.12. It > > >> originally had compatible "allwinner,sun4i-wdt" only. > > >> > > >> Debian Bullseye has the driver enabled as a module. In the bootlog of the > > >> Orange Pi PC I find: > > >> [ 12.321909] sunxi-wdt 1c20ca0.watchdog: Watchdog enabled (timeout=16 > > >> sec, > > >> nowayout=0) > > >> This message appears approximately *20 seconds* after the EFI stub hands > > >> over to the main kernel. Adding the driver to initrd shortens this to *18 > > >> seconds*. The message occurs after file system checks which can be a > > >> lengthy > > >> operation. In Debian systemd manages the watchdog. > > >> > > >> As I said: 16 seconds is way too short for a hardware watchdog timeout. > > > > > > What's the time if you build it in? > > > > > > > For sure you will find some board and configuration that is faster. > > > > But why should I care? This series breaks booting Debian on my board. So > > it needs to be fixed. So, please, apply my patch that is doing so. > > Five minutes sounds completely unacceptable for embedded platforms. > The user will surely have packaged the item up and will be just > heading out to drop it off for return...
I'm trying to avoid bringing up the long discussion from the previous thread about this :) > Do we need to add a special case for UEFI here? E.g. bootefi could use > a hook to lengthen the watchdog? Well, the problem is that the hardware watchdog has a maximum period of 16 seconds, I believe. -- Tom
signature.asc
Description: PGP signature