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

Kever Yang kever.yang at rock-chips.com
Mon Feb 10 03:33:53 CET 2020


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




More information about the U-Boot mailing list