[U-Boot] [PATCH 04/11] watchdog: Handle SPL build with watchdog disabled

Eugen.Hristev at microchip.com Eugen.Hristev at microchip.com
Wed Mar 20 08:06:48 UTC 2019



On 20.03.2019 09:48, Stefan Roese wrote:
> External E-Mail
> 
> 
> On 20.03.19 08:41, Eugen.Hristev at microchip.com wrote:
>>
>>
>> On 20.03.2019 09:33, Stefan Roese wrote:
>>> External E-Mail
>>>
>>>
>>> On 20.03.19 08:30, Eugen.Hristev at microchip.com wrote:
>>>>
>>>>
>>>> On 19.03.2019 17:56, Stefan Roese wrote:
>>>>> External E-Mail
>>>>>
>>>>>
>>>>> This patch adds some checks, so that the watchdog can be enabled in 
>>>>> main
>>>>> U-Boot proper but can be disabled in SPL.
>>>>
>>>> Hi Stefan,
>>>>
>>>> Actually your code looks at CONFIG_SPL_WATCHDOG_SUPPORT , so , if this
>>>> is disabled in the config, you say that the watchdog was still enabled?
>>>> (thus broken CONFIG_SPL_WATCHDOG_SUPPORT ?)
>>>
>>> Yes, in my case here, the watchdog is disabled in SPL and enabled in
>>> main U-Boot proper. This use case is what this patch fixes.
>>>
>>> Is this still unclear? Sorry, I didn't fully understand your question.
>>
>> There is a Kconfig named CONFIG_SPL_WATCHDOG_SUPPORT
>> If this is y, then the watchdog support should be included in SPL
>> If this is n, then the watchdog support should not be included in SPL.
>>
>> Considering your use case, you want CONFIG_SPL_WATCHDOG_SUPPORT=n
> 
> Correct.
> 
>> Configuring this, the watchdog is still enabled in SPL?
> 
> I don't want the U-Boot SPL support enabled (mainly because of code
> size). AFAIU, the AT91SAM watchdog is enabled by default. So its
> enabled in the SoC when SPL is running, as I don't want to disable
> it (as done e.g. in AT91Bootrap if configured this way).
> 
>> So my question: is the behavior of CONFIG_SPL_WATCHDOG_SUPPORT=n not
>> aligned with your use case ? So you are actually fixing the behavior of
>> CONFIG_SPL_WATCHDOG_SUPPORT=n ?
> 
> Yes. Without this patch I do get this build error:
> 
> ...
>    LD      spl/u-boot-spl
> lib/built-in.o: In function `udelay':
> /home/stefan/git/u-boot/u-boot/lib/time.c:167: undefined reference to 
> `watchdog_reset'
> drivers/built-in.o: In function `atmel_nand_pmecc_write_page':
> /home/stefan/git/u-boot/u-boot/drivers/mtd/nand/raw/atmel_nand.c:592: 
> undefined reference to `watchdog_reset'
> drivers/built-in.o: In function `atmel_nand_pmecc_read_page':
> /home/stefan/git/u-boot/u-boot/drivers/mtd/nand/raw/atmel_nand.c:552: 
> undefined reference to `watchdog_reset'
> drivers/built-in.o: In function `pmecc_err_location':
> /home/stefan/git/u-boot/u-boot/drivers/mtd/nand/raw/atmel_nand.c:416: 
> undefined reference to `watchdog_reset'
> scripts/Makefile.spl:384: recipe for target 'spl/u-boot-spl' failed
> make[1]: *** [spl/u-boot-spl] Error 1
> Makefile:1651: recipe for target 'spl/u-boot-spl' failed
> make: *** [spl/u-boot-spl] Error 2
> 

OK so that's what I want to settle: you are actually fixing the issue of 
CONFIG_SPL_WATCHDOG_SUPPORT=n not working properly

Also, we may have to look inside the atmel_nand.c as it may be affected?

Thanks,
Eugen

> Thanks,
> Stefan
> 
>>
>>> Thanks,
>>> Stefan
>>>
>>>> Eugen
>>>>
>>>>>
>>>>> This will be used by some AT91SAM based boards, which might enable the
>>>>> watchdog in the main U-Boot proper and not in SPL. It will be 
>>>>> enabled in
>>>>> SPL by default there, so no need to configure it there. This approach
>>>>> saves some space in SPL.
>>>>>
>>>>> Signed-off-by: Stefan Roese <sr at denx.de>
>>>>> Cc: Heiko Schocher <hs at denx.de>
>>>>> Cc: Andreas Bießmann <andreas at biessmann.org>
>>>>> Cc: Eugen Hristev <eugen.hristev at microchip.com>
>>>>> ---
>>>>>     include/watchdog.h | 10 ++++++++--
>>>>>     1 file changed, 8 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/include/watchdog.h b/include/watchdog.h
>>>>> index 14073cfdd2..3a357de903 100644
>>>>> --- a/include/watchdog.h
>>>>> +++ b/include/watchdog.h
>>>>> @@ -51,9 +51,15 @@ int init_func_watchdog_reset(void);
>>>>>             #if defined(__ASSEMBLY__)
>>>>>                 #define WATCHDOG_RESET bl watchdog_reset
>>>>>             #else
>>>>> -            extern void watchdog_reset(void);
>>>>> +            /* Don't require the watchdog to be enabled in SPL */
>>>>> +            #if defined(CONFIG_SPL_BUILD) &&        \
>>>>> +                !defined(CONFIG_SPL_WATCHDOG_SUPPORT)
>>>>> +                #define WATCHDOG_RESET() {}
>>>>> +            #else
>>>>> +                extern void watchdog_reset(void);
>>>>> -            #define WATCHDOG_RESET watchdog_reset
>>>>> +                #define WATCHDOG_RESET watchdog_reset
>>>>> +            #endif
>>>>>             #endif
>>>>>         #else
>>>>>             /*
>>>>>
>>>
>>> Viele Grüße,
>>> Stefan
>>>
> 
> Viele Grüße,
> Stefan
> 


More information about the U-Boot mailing list