summaryrefslogtreecommitdiff
path: root/board/sifive
diff options
context:
space:
mode:
authorVincent Chen <vincent.chen@sifive.com>2021-07-08 04:08:21 +0300
committerLeo Yu-Chi Liang <ycliang@andestech.com>2021-07-21 17:25:15 +0300
commit219cb173114c9cfaf1dc7fed21281f2c43c88c9f (patch)
tree7e7ffa7262976199007ddef4ab1b403747bc0d26 /board/sifive
parentd3c96b9b46a878e59ecb0c267fe846bbb556f963 (diff)
downloadu-boot-219cb173114c9cfaf1dc7fed21281f2c43c88c9f.tar.xz
board: sifive: unmatched: reset USB hub, PCIe-USB bridge, and ULPI device in SPL
Ensure USB hub, PCIe-USB bridge, and ULPI device to be reset even if the rebooting is without power-cycling. Signed-off-by: Vincent Chen <vincent.chen@sifive.com> Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
Diffstat (limited to 'board/sifive')
-rw-r--r--board/sifive/unmatched/spl.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/board/sifive/unmatched/spl.c b/board/sifive/unmatched/spl.c
index b598f9f614..d5663274cd 100644
--- a/board/sifive/unmatched/spl.c
+++ b/board/sifive/unmatched/spl.c
@@ -16,6 +16,9 @@
#include <asm/arch/gpio.h>
#include <asm/arch/spl.h>
+#define UBRDG_RESET SIFIVE_GENERIC_GPIO_NR(0, 7)
+#define ULPI_RESET SIFIVE_GENERIC_GPIO_NR(0, 9)
+#define UHUB_RESET SIFIVE_GENERIC_GPIO_NR(0, 11)
#define GEM_PHY_RESET SIFIVE_GENERIC_GPIO_NR(0, 12)
#define MODE_SELECT_REG 0x1000
@@ -61,6 +64,21 @@ static inline int spl_gemgxl_init(void)
return ret;
}
+static inline int spl_usb_pcie_bridge_init(void)
+{
+ return spl_reset_device_by_gpio("usb_pcie_bridge_reset", UBRDG_RESET, 3000);
+}
+
+static inline int spl_usb_hub_init(void)
+{
+ return spl_reset_device_by_gpio("usb_hub_reset", UHUB_RESET, 100);
+}
+
+static inline int spl_ulpi_init(void)
+{
+ return spl_reset_device_by_gpio("ulpi_reset", ULPI_RESET, 1);
+}
+
int spl_board_init_f(void)
{
int ret;
@@ -77,6 +95,24 @@ int spl_board_init_f(void)
goto end;
}
+ ret = spl_usb_pcie_bridge_init();
+ if (ret) {
+ debug("USB Bridge (ASM1042A) init failed: %d\n", ret);
+ goto end;
+ }
+
+ ret = spl_usb_hub_init();
+ if (ret) {
+ debug("USB Hub (ASM1074) init failed: %d\n", ret);
+ goto end;
+ }
+
+ ret = spl_ulpi_init();
+ if (ret) {
+ debug("USB 2.0 PHY (USB3320C) init failed: %d\n", ret);
+ goto end;
+ }
+
end:
return ret;
}