[v2,2/5] roc-rk3399-pc: Set low power leds, power key only if POR

Message ID 20200319101251.7354-2-jagan@amarulasolutions.com
State New
Headers show
Series
  • [v2,1/5] rockchip: Separate the reset cause from display cpuinfo
Related show

Commit Message

Jagan Teki March 19, 2020, 10:12 a.m.
ROC-RK3399-PC has specific set of configurations for
on-board led setup.

Due to easiness for user to know the state of the board
roc-rk339-pc board code will setup the low power led
on/off, and waiting for user to press power key and then
glow full power led.

All this needs to happen only during power-on-reset not
for soft reset or WDT. So add reset cause check to POR
and configure the low power leds, power key only. Note
that the glowing red led is common across any reset.

Reported-by: Markus Reichl <m.reichl at fivetechno.de>
Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
---
Changes for v2:
- glow red led to common across reboots

 board/firefly/roc-pc-rk3399/roc-pc-rk3399.c | 24 ++++++++++++---------
 1 file changed, 14 insertions(+), 10 deletions(-)

Comments

Suniel Mahesh March 26, 2020, 5:02 p.m. | #1
On Thu, Mar 19, 2020 at 3:43 PM Jagan Teki <jagan at amarulasolutions.com> wrote:
>
> ROC-RK3399-PC has specific set of configurations for
> on-board led setup.
>
> Due to easiness for user to know the state of the board
> roc-rk339-pc board code will setup the low power led
> on/off, and waiting for user to press power key and then
> glow full power led.
>
> All this needs to happen only during power-on-reset not
> for soft reset or WDT. So add reset cause check to POR
> and configure the low power leds, power key only. Note
> that the glowing red led is common across any reset.
>
> Reported-by: Markus Reichl <m.reichl at fivetechno.de>
> Signed-off-by: Jagan Teki <jagan at amarulasolutions.com>
> ---
> Changes for v2:
> - glow red led to common across reboots
>
>  board/firefly/roc-pc-rk3399/roc-pc-rk3399.c | 24 ++++++++++++---------
>  1 file changed, 14 insertions(+), 10 deletions(-)
>
> diff --git a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
> index de9185a7ce..6cc81952d8 100644
> --- a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
> +++ b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
> @@ -33,6 +33,7 @@ out:
>  #endif
>
>  #if defined(CONFIG_TPL_BUILD)
> +#include <asm/arch-rockchip/cru.h>
>
>  #define PMUGRF_BASE     0xff320000
>  #define GPIO0_BASE      0xff720000
> @@ -42,18 +43,21 @@ int board_early_init_f(void)
>         struct rockchip_gpio_regs * const gpio0 = (void *)GPIO0_BASE;
>         struct rk3399_pmugrf_regs * const pmugrf = (void *)PMUGRF_BASE;
>
> -       /**
> -        * 1. Glow yellow LED, termed as low power
> -        * 2. Poll for on board power key press
> -        * 3. Once 2 done, off yellow and glow red LED, termed as full power
> -        * 4. Continue booting...
> -        */
> -       spl_gpio_output(gpio0, GPIO(BANK_A, 2), 1);
> +       /* Set the low power leds, power key only during POR */
> +       if (!strcmp(get_reset_cause(), "POR")) {
> +               /* 1. Glow yellow LED, termed as low power */
> +               spl_gpio_output(gpio0, GPIO(BANK_A, 2), 1);
>
> -       spl_gpio_set_pull(&pmugrf->gpio0_p, GPIO(BANK_A, 5), GPIO_PULL_NORMAL);
> -       while (readl(&gpio0->ext_port) & 0x20);
> +               /* 2. Poll for on board power key press */
> +               spl_gpio_set_pull(&pmugrf->gpio0_p,
> +                                 GPIO(BANK_A, 5), GPIO_PULL_NORMAL);
> +               while (readl(&gpio0->ext_port) & 0x20);
>
> -       spl_gpio_output(gpio0, GPIO(BANK_A, 2), 0);
> +               /* 3. Once 2 done, turn off yellow */
> +               spl_gpio_output(gpio0, GPIO(BANK_A, 2), 0);
> +       }
> +
> +        /* 4. Turn on red LED, termed as full power */
>         spl_gpio_output(gpio0, GPIO(BANK_B, 5), 1);
>
>         return 0;
> --
> 2.17.1
>

Tested-by: Suniel Mahesh <sunil at amarulasolutions.com>

Patch

diff --git a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
index de9185a7ce..6cc81952d8 100644
--- a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
+++ b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
@@ -33,6 +33,7 @@  out:
 #endif
 
 #if defined(CONFIG_TPL_BUILD)
+#include <asm/arch-rockchip/cru.h>
 
 #define PMUGRF_BASE     0xff320000
 #define GPIO0_BASE      0xff720000
@@ -42,18 +43,21 @@  int board_early_init_f(void)
 	struct rockchip_gpio_regs * const gpio0 = (void *)GPIO0_BASE;
 	struct rk3399_pmugrf_regs * const pmugrf = (void *)PMUGRF_BASE;
 
-	/**
-	 * 1. Glow yellow LED, termed as low power
-	 * 2. Poll for on board power key press
-	 * 3. Once 2 done, off yellow and glow red LED, termed as full power
-	 * 4. Continue booting...
-	 */
-	spl_gpio_output(gpio0, GPIO(BANK_A, 2), 1);
+	/* Set the low power leds, power key only during POR */
+	if (!strcmp(get_reset_cause(), "POR")) {
+		/* 1. Glow yellow LED, termed as low power */
+		spl_gpio_output(gpio0, GPIO(BANK_A, 2), 1);
 
-	spl_gpio_set_pull(&pmugrf->gpio0_p, GPIO(BANK_A, 5), GPIO_PULL_NORMAL);
-	while (readl(&gpio0->ext_port) & 0x20);
+		/* 2. Poll for on board power key press */
+		spl_gpio_set_pull(&pmugrf->gpio0_p,
+				  GPIO(BANK_A, 5), GPIO_PULL_NORMAL);
+		while (readl(&gpio0->ext_port) & 0x20);
 
-	spl_gpio_output(gpio0, GPIO(BANK_A, 2), 0);
+		/* 3. Once 2 done, turn off yellow */
+		spl_gpio_output(gpio0, GPIO(BANK_A, 2), 0);
+	}
+
+	 /* 4. Turn on red LED, termed as full power */
 	spl_gpio_output(gpio0, GPIO(BANK_B, 5), 1);
 
 	return 0;