From patchwork Mon Feb 3 10:47:07 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suniel Mahesh X-Patchwork-Id: 235830 List-Id: U-Boot discussion From: sunil at amarulasolutions.com (sunil at amarulasolutions.com) Date: Mon, 3 Feb 2020 16:17:07 +0530 Subject: [PATCH 2/2] board: roc-rk3399-pc: Add support for onboard LED's and push button to indicate power mode In-Reply-To: <1580726827-12381-1-git-send-email-sunil@amarulasolutions.com> References: <1580726827-12381-1-git-send-email-sunil@amarulasolutions.com> Message-ID: <1580726827-12381-2-git-send-email-sunil@amarulasolutions.com> From: Suniel Mahesh 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 --- arch/arm/mach-rockchip/tpl.c | 7 ++++++ board/firefly/roc-rk3399-pc/roc-rk3399-pc.c | 33 +++++++++++++++++++++++++++++ configs/roc-pc-rk3399_defconfig | 1 + 3 files changed, 41 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-rk3399-pc/roc-rk3399-pc.c b/board/firefly/roc-rk3399-pc/roc-rk3399-pc.c index b9049ab..8f23ce2 100644 --- a/board/firefly/roc-rk3399-pc/roc-rk3399-pc.c +++ b/board/firefly/roc-rk3399-pc/roc-rk3399-pc.c @@ -7,6 +7,10 @@ #include #include #include +#include +#include +#include +#include #ifndef CONFIG_SPL_BUILD int board_early_init_f(void) @@ -28,3 +32,32 @@ out: return 0; } #endif + +#if defined(CONFIG_TPL_BUILD) || \ + (!defined(CONFIG_TPL) && defined(CONFIG_SPL_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 c7187dc..79bdf34 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