Re:Re: [PATCH] watchdog: mtk: support pre-timeout when the bark irq is available

From: 王擎
Date: Sat Apr 10 2021 - 08:22:39 EST



>On 4/9/21 8:11 PM, 王擎 wrote:
>>
>>> On 4/9/21 7:42 PM, 王擎 wrote:
>>>>
>>>>> On 4/9/21 2:55 AM, Wang Qing wrote:
>>>>>> Use the bark interrupt as the pretimeout notifier if available.
>>>>>>
>>>>>> By default, the pretimeout notification shall occur one second earlier
>>>>>> than the timeout.
>>>>>>
>>>>>> Signed-off-by: Wang Qing <wangqing@xxxxxxxx>
>>>>>> ---
>>>>>> drivers/watchdog/mtk_wdt.c | 47 +++++++++++++++++++++++++++++++++++++++++++---
>>>>>> 1 file changed, 44 insertions(+), 3 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c
>>>>>> index 97ca993..8b919cc
>>>>>> --- a/drivers/watchdog/mtk_wdt.c
>>>>>> +++ b/drivers/watchdog/mtk_wdt.c
>>>>>> @@ -25,6 +25,7 @@
>>>>>> #include <linux/reset-controller.h>
>>>>>> #include <linux/types.h>
>>>>>> #include <linux/watchdog.h>
>>>>>> +#include <linux/interrupt.h>
>>>>>>
>>>>>> #define WDT_MAX_TIMEOUT 31
>>>>>> #define WDT_MIN_TIMEOUT 1
>>>>>> @@ -234,18 +235,35 @@ static int mtk_wdt_start(struct watchdog_device *wdt_dev)
>>>>>> void __iomem *wdt_base = mtk_wdt->wdt_base;
>>>>>> int ret;
>>>>>>
>>>>>> - ret = mtk_wdt_set_timeout(wdt_dev, wdt_dev->timeout);
>>>>>> + ret = mtk_wdt_set_timeout(wdt_dev, wdt_dev->timeout - wdt_dev->pretimeout);
>>>>>
>>>>> That looks suspiciously like the real watchdog won't happen at all.
>>>>> What will happen if the pretimeout governor is set to none ?
>>>>>
>>>>> Guenter
>>>>>
>>>> The pretimeout governor is panic by default. If pretimeout is enabled and the governor is
>>>> set to none, it means the timeout behavior does not need to be processed, only printing.
>>>>
>>>
>>> That was not my question. My question was if the real timeout happens in that case.
>>>
>>> Guenter
>>>
>> Yes, the real timeout will happen. After WDT timeout, IRQ is sent out instead of
>> reset signal first. In order to ensure that CPU does not get stuck after IRQ is sent out,
>> WDT will time again and send reset signal to reset.
>>
>
>When will that be, or in other words how does the chip know when to time out ?
>After all, only a single timeout value is written into the chip. I don't see how
>it would know to reset the chip after wdt_dev->timeout.
>
>Guenter
>
>
Sorry I made a mistake, the IRQ is sent out first, then time again and reset only when
WDT_MODE_IRQ_EN|WDT_MODE_DUAL_EN is enabled. WDT_MODE_DUAL_EN mode
is a special mode, depending on the specific chip design.

If WDT_MODE_IRQ_EN|~WDT_MODE_DUAL_EN as described in my patch, it just sent
out IRQ instead of reset signal, the real timeout will not happen if the pretimeout
governor is set to none.

Also, ~(WDT_MODE_IRQ_EN | WDT_MODE_DUAL_EN) means send reset signal directly.
It does not support pretimeout processing.

Thanks
Qing Wang