diff mbox series

[v2,2/2] board: roc-pc-rk3399: Add support for onboard LED's and push button to indicate power mode

Message ID 1580737805-1159-2-git-send-email-sunil@amarulasolutions.com
State Accepted
Commit 5a6d3d1fbca70d7f528c685292d64c4cd0106aa6
Headers show
Series [v2,1/2] rockchip: rk3399: split roc-pc-rk3399 out of evb_rk3399 | expand

Commit Message

Suniel Mahesh Feb. 3, 2020, 1:50 p.m. UTC
From: Suniel Mahesh <sunil at amarulasolutions.com>

Added support for onboard LED's and push button. When powered board will be
in low power mode(yellow LED), on button press, board enters full power mode
(red LED) and boots u-boot.

Signed-off-by: Suniel Mahesh <sunil at amarulasolutions.com>
---
Changes for v2:

- Tested on firefly roc-pc-rk3399, an rk3399 based target.
---
 arch/arm/mach-rockchip/tpl.c                |  7 +++++++
 board/firefly/roc-pc-rk3399/roc-pc-rk3399.c | 32 +++++++++++++++++++++++++++++
 configs/roc-pc-rk3399_defconfig             |  1 +
 3 files changed, 40 insertions(+)

Comments

Kever Yang Feb. 10, 2020, 2:33 a.m. UTC | #1
On 2020/2/3 下午9:50, sunil at amarulasolutions.com wrote:
> From: Suniel Mahesh <sunil at amarulasolutions.com>
>
> Added support for onboard LED's and push button. When powered board will be
> in low power mode(yellow LED), on button press, board enters full power mode
> (red LED) and boots u-boot.
>
> Signed-off-by: Suniel Mahesh <sunil at amarulasolutions.com>

Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever
> ---
> Changes for v2:
>
> - Tested on firefly roc-pc-rk3399, an rk3399 based target.
> ---
>   arch/arm/mach-rockchip/tpl.c                |  7 +++++++
>   board/firefly/roc-pc-rk3399/roc-pc-rk3399.c | 32 +++++++++++++++++++++++++++++
>   configs/roc-pc-rk3399_defconfig             |  1 +
>   3 files changed, 40 insertions(+)
>
> diff --git a/arch/arm/mach-rockchip/tpl.c b/arch/arm/mach-rockchip/tpl.c
> index 31a3eb4..a2b8d31 100644
> --- a/arch/arm/mach-rockchip/tpl.c
> +++ b/arch/arm/mach-rockchip/tpl.c
> @@ -40,11 +40,18 @@ __weak void rockchip_stimer_init(void)
>   	       TIMER_CONTROL_REG);
>   }
>   
> +__weak int board_early_init_f(void)
> +{
> +	return 0;
> +}
> +
>   void board_init_f(ulong dummy)
>   {
>   	struct udevice *dev;
>   	int ret;
>   
> +	board_early_init_f();
> +
>   #if defined(CONFIG_DEBUG_UART) && defined(CONFIG_TPL_SERIAL_SUPPORT)
>   	/*
>   	 * Debug UART can be used from here if required:
> diff --git a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
> index d47dba8..de9185a 100644
> --- a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
> +++ b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
> @@ -7,6 +7,10 @@
>   #include <dm.h>
>   #include <asm/arch-rockchip/periph.h>
>   #include <power/regulator.h>
> +#include <spl_gpio.h>
> +#include <asm/io.h>
> +#include <asm/arch-rockchip/gpio.h>
> +#include <asm/arch-rockchip/grf_rk3399.h>
>   
>   #ifndef CONFIG_SPL_BUILD
>   int board_early_init_f(void)
> @@ -27,3 +31,31 @@ out:
>   	return 0;
>   }
>   #endif
> +
> +#if defined(CONFIG_TPL_BUILD)
> +
> +#define PMUGRF_BASE     0xff320000
> +#define GPIO0_BASE      0xff720000
> +
> +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);
> +
> +	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);
> +	spl_gpio_output(gpio0, GPIO(BANK_B, 5), 1);
> +
> +	return 0;
> +}
> +#endif
> diff --git a/configs/roc-pc-rk3399_defconfig b/configs/roc-pc-rk3399_defconfig
> index 5a82029..36c0e0e 100644
> --- a/configs/roc-pc-rk3399_defconfig
> +++ b/configs/roc-pc-rk3399_defconfig
> @@ -57,3 +57,4 @@ CONFIG_USB_ETHER_RTL8152=y
>   CONFIG_USB_ETHER_SMSC95XX=y
>   CONFIG_SPL_TINY_MEMSET=y
>   CONFIG_ERRNO_STR=y
> +CONFIG_TPL_GPIO_SUPPORT=y
diff mbox series

Patch

diff --git a/arch/arm/mach-rockchip/tpl.c b/arch/arm/mach-rockchip/tpl.c
index 31a3eb4..a2b8d31 100644
--- a/arch/arm/mach-rockchip/tpl.c
+++ b/arch/arm/mach-rockchip/tpl.c
@@ -40,11 +40,18 @@  __weak void rockchip_stimer_init(void)
 	       TIMER_CONTROL_REG);
 }
 
+__weak int board_early_init_f(void)
+{
+	return 0;
+}
+
 void board_init_f(ulong dummy)
 {
 	struct udevice *dev;
 	int ret;
 
+	board_early_init_f();
+
 #if defined(CONFIG_DEBUG_UART) && defined(CONFIG_TPL_SERIAL_SUPPORT)
 	/*
 	 * Debug UART can be used from here if required:
diff --git a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
index d47dba8..de9185a 100644
--- a/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
+++ b/board/firefly/roc-pc-rk3399/roc-pc-rk3399.c
@@ -7,6 +7,10 @@ 
 #include <dm.h>
 #include <asm/arch-rockchip/periph.h>
 #include <power/regulator.h>
+#include <spl_gpio.h>
+#include <asm/io.h>
+#include <asm/arch-rockchip/gpio.h>
+#include <asm/arch-rockchip/grf_rk3399.h>
 
 #ifndef CONFIG_SPL_BUILD
 int board_early_init_f(void)
@@ -27,3 +31,31 @@  out:
 	return 0;
 }
 #endif
+
+#if defined(CONFIG_TPL_BUILD)
+
+#define PMUGRF_BASE     0xff320000
+#define GPIO0_BASE      0xff720000
+
+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);
+
+	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);
+	spl_gpio_output(gpio0, GPIO(BANK_B, 5), 1);
+
+	return 0;
+}
+#endif
diff --git a/configs/roc-pc-rk3399_defconfig b/configs/roc-pc-rk3399_defconfig
index 5a82029..36c0e0e 100644
--- a/configs/roc-pc-rk3399_defconfig
+++ b/configs/roc-pc-rk3399_defconfig
@@ -57,3 +57,4 @@  CONFIG_USB_ETHER_RTL8152=y
 CONFIG_USB_ETHER_SMSC95XX=y
 CONFIG_SPL_TINY_MEMSET=y
 CONFIG_ERRNO_STR=y
+CONFIG_TPL_GPIO_SUPPORT=y