Dne nedelja, 23. marec 2025 ob 12:35:23 Srednjeevropski standardni čas je Andre 
Przywara napisal(a):
> From: Jernej Skrabec <jernej.skra...@gmail.com>
> 
> The watchdog in the Allwinner A523 SoC differs a bit from the one in the
> previous SoCs: it lives in a separate register frame, so no longer
> inside some timer device, and it manages to shuffle around some
> registers a bit.
> 
> Provide a new struct describing the register layout, and adjust the
> address calculation in the SPL code accoringly. This is guarded by the
> MACH_SUN55I_A523 Kconfig variable.

This one is missing SoB, apparently by me :)

> ---
>  arch/arm/include/asm/arch-sunxi/watchdog.h | 12 ++++++++++++
>  arch/arm/mach-sunxi/board.c                |  6 ++++++
>  2 files changed, 18 insertions(+)
> 
> diff --git a/arch/arm/include/asm/arch-sunxi/watchdog.h 
> b/arch/arm/include/asm/arch-sunxi/watchdog.h
> index 38e2ef2aca3..96d5725141e 100644
> --- a/arch/arm/include/asm/arch-sunxi/watchdog.h
> +++ b/arch/arm/include/asm/arch-sunxi/watchdog.h
> @@ -26,6 +26,18 @@ struct sunxi_wdog {
>       u32 res[2];
>  };
>  
> +#elif defined(CONFIG_MACH_SUN55I_A523)
> +
> +struct sunxi_wdog {
> +     u32 irq_en;             /* 0x00 */
> +     u32 irq_sta;            /* 0x04 */
> +     u32 srst;               /* 0x08 */
> +     u32 ctl;                /* 0x0c */
> +     u32 cfg;                /* 0x10 */
> +     u32 mode;               /* 0x14 */
> +     u32 ocfg;               /* 0x18 */
> +};

Anyway, since you announced battle against C structures for register
layout, it seems contraproductive to add it here. What do you think?

Best regards,
Jernej

> +
>  #else
>  
>  #define WDT_CFG_RESET                (0x1)
> diff --git a/arch/arm/mach-sunxi/board.c b/arch/arm/mach-sunxi/board.c
> index 701899ee4b2..89aea61e8e8 100644
> --- a/arch/arm/mach-sunxi/board.c
> +++ b/arch/arm/mach-sunxi/board.c
> @@ -495,6 +495,12 @@ void reset_cpu(void)
>               /* sun5i sometimes gets stuck without this */
>               writel(WDT_MODE_RESET_EN | WDT_MODE_EN, &wdog->mode);
>       }
> +#elif defined(CONFIG_MACH_SUN55I_A523)
> +     static const struct sunxi_wdog *wdog =
> +             (struct sunxi_wdog *)SUNXI_TIMER_BASE;
> +
> +     writel(WDT_CTRL_KEY | WDT_CTRL_RESTART, &wdog->srst);
> +     while (1) { }
>  #elif defined(CONFIG_SUNXI_GEN_SUN6I) || defined(CONFIG_SUN50I_GEN_H6) || 
> defined(CONFIG_SUNXI_GEN_NCAT2)
>  #if defined(CONFIG_MACH_SUN50I_H6)
>       /* WDOG is broken for some H6 rev. use the R_WDOG instead */
> 




Reply via email to