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

2020-02-09 Thread Kever Yang



On 2020/2/3 下午9:50, su...@amarulasolutions.com wrote:

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 


Reviewed-by: Kever Yang 

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 
  #include 
  #include 
+#include 
+#include 
+#include 
+#include 
  
  #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 0xff32
+#define GPIO0_BASE  0xff72
+
+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(>gpio0_p, GPIO(BANK_A, 5), GPIO_PULL_NORMAL);
+   while (readl(>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





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

2020-02-03 Thread sunil
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 
---
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 
 #include 
 #include 
+#include 
+#include 
+#include 
+#include 
 
 #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 0xff32
+#define GPIO0_BASE  0xff72
+
+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(>gpio0_p, GPIO(BANK_A, 5), GPIO_PULL_NORMAL);
+   while (readl(>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
-- 
2.7.4