[PATCH] lib: utils/reset: Add voltage level for gpio_reset

Xiang W wxjstz at 126.com
Sun Oct 24 18:52:27 PDT 2021


在 2021-10-25星期一的 00:46 +0800,Xiang W写道:
> The reset voltage may be different under different platforms, so fdt
> should describe the reset level.
> 
> Signed-off-by: Xiang W <wxjstz at 126.com>
> ---
>  lib/utils/reset/fdt_reset_gpio.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/utils/reset/fdt_reset_gpio.c
> b/lib/utils/reset/fdt_reset_gpio.c
> index 4da1450..b834522 100644
> --- a/lib/utils/reset/fdt_reset_gpio.c
> +++ b/lib/utils/reset/fdt_reset_gpio.c
> @@ -21,16 +21,19 @@
>  
>  struct gpio_reset {
>         struct gpio_pin pin;
> +       u32 active_level;
>         u32 active_delay;
>         u32 inactive_delay;
>  };
>  
>  static struct gpio_reset poweroff = {
> +       .active_level = 1,
>         .active_delay = 100,
>         .inactive_delay = 100
>  };
>  
>  static struct gpio_reset restart = {
> +       .active_level = 1,
>         .active_delay = 100,
>         .inactive_delay = 100
>  };
> @@ -68,15 +71,15 @@ static void gpio_system_reset(u32 type, u32
> reason)
>  
>         if (reset) {
>                 /* drive it active, also inactive->active edge */
> -               gpio_direction_output(&reset->pin, 1);
> +               gpio_direction_output(&reset->pin, reset-
> >active_level);
>                 sbi_timer_mdelay(reset->active_delay);
>  
>                 /* drive inactive, also active->inactive edge */
> -               gpio_set(&reset->pin, 0);
> +               gpio_set(&reset->pin, !reset->active_level);
>                 sbi_timer_mdelay(reset->inactive_delay);
>  
>                 /* drive it active, also inactive->active edge */
> -               gpio_set(&reset->pin, 1);
> +               gpio_set(&reset->pin, reset->active_level);
>         }
>         /* hang !!! */
>         sbi_hart_hang();
> @@ -107,6 +110,10 @@ static int gpio_reset_init(void *fdt, int
> nodeoff,
>                         return rc;
>         }
>  
> +       val = fdt_getprop(fdt, nodeoff, "active-level", &len);
> +       if (len > 0)
> +               reset->active_level = !!fdt32_to_cpu(*val);
> +
>         val = fdt_getprop(fdt, nodeoff, "active-delay-ms", &len);
>         if (len > 0)
>                 reset->active_delay = fdt32_to_cpu(*val);

sorry!!!
revoke this patch.

Regards,
Xiang W





More information about the opensbi mailing list