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 |
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 --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