Switched RockPro64 to mainline u-boot (#2218)

* Switched RockPro64 to mainline u-boot

* Enabled rockusb and ums for RockPro64 in mainline u-boot

* Switched RockPro64 u-boot to TPL/SPL/BLOB scenario

* Enabled advanced recovery button support for RockPro64

* Disabled SDR104 mode for RockPro64 in legacy
This commit is contained in:
Piotr Szczepanik 2020-10-05 23:17:55 +02:00 committed by GitHub
parent cc7e03e0e4
commit f2db962525
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 173 additions and 9 deletions

View File

@ -48,19 +48,12 @@ elif [[ $BOARD == pinebook-pro ]]; then
BOOT_SOC=rk3399
ATFPATCHDIR='atf-rk3399'
elif [[ $BOARD == rockpi-4* ]]; then
elif [[ $BOARD == rockpi-4* || $BOARD == rockpro64 ]]; then
BOOT_USE_BLOBS=yes
BOOT_USE_TPL_SPL_BLOB=yes
BOOT_SOC=rk3399
DDR_BLOB='rk33/rk3399_ddr_933MHz_v1.20.bin' # 1GB model does not boot with later versions
MINILOADER_BLOB='rk33/rk3399_miniloader_v1.19.bin'
BL31_BLOB='rk33/rk3399_bl31_v1.30.elf'
elif [[ $BOARD == rockpro64 ]]; then
BOOT_RK3399_LEGACY_HYBRID=yes
BL31_BLOB='rk33/rk3399_bl31_v1.17.elf'
elif [[ $BOARD == rockpi-s ]]; then
BOOT_USE_BLOBS=yes

View File

@ -0,0 +1,13 @@
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dts b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dts
index 079358437..d7daa3d40 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3399-rockpro64.dts
@@ -896,7 +896,7 @@
cap-sd-highspeed;
disable-wp;
num-slots = <1>;
- sd-uhs-sdr104;
+ // sd-uhs-sdr104;
vqmmc-supply = <&vcc_sd>;
pinctrl-names = "default";
pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;

View File

@ -0,0 +1,34 @@
diff --git a/configs/rockpro64-rk3399_defconfig b/configs/rockpro64-rk3399_defconfig
index ad0c6ab2..57e129ac 100644
--- a/configs/rockpro64-rk3399_defconfig
+++ b/configs/rockpro64-rk3399_defconfig
@@ -24,6 +24,8 @@ CONFIG_CMD_GPT=y
CONFIG_CMD_MMC=y
CONFIG_CMD_PCI=y
CONFIG_CMD_USB=y
+CONFIG_CMD_ROCKUSB=y
+CONFIG_CMD_USB_MASS_STORAGE=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_TIME=y
CONFIG_SPL_OF_CONTROL=y
@@ -46,6 +48,8 @@ CONFIG_ETH_DESIGNWARE=y
CONFIG_GMAC_ROCKCHIP=y
CONFIG_NVME=y
CONFIG_PCI=y
+CONFIG_PHY_ROCKCHIP_INNO_USB2=y
+CONFIG_PHY_ROCKCHIP_TYPEC=y
CONFIG_PMIC_RK8XX=y
CONFIG_REGULATOR_PWM=y
CONFIG_REGULATOR_RK8XX=y
@@ -63,7 +67,11 @@ CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_GENERIC=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_GENERIC=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_DWC3_GENERIC=y
CONFIG_USB_KEYBOARD=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_FUNCTION_ROCKUSB=y
CONFIG_USB_HOST_ETHER=y
CONFIG_USB_ETHER_ASIX=y
CONFIG_USB_ETHER_ASIX88179=y

View File

@ -0,0 +1,124 @@
From ff72515d3f6e65e22baa8cb1fbefe15540256310 Mon Sep 17 00:00:00 2001
From: Piotr Szczepanik <piter75@gmail.com>
Date: Sun, 4 Oct 2020 18:19:02 +0200
Subject: [PATCH] Enabled advanced recovery button support for rockchip
It allows to enter either ums, fastboot or rockusb based on the time the
button is pressed.
SD (mmc0) is preferred if present with eMMC (mmc1) set as fallback.
Based on:
https://github.com/ayufan-rock64/linux-u-boot/commit/ea6efecdfecc57c853a6f32f78469d1b2417329b
https://github.com/ayufan-rock64/linux-u-boot/commit/1abc9ab51306200880c434c2069eceb4be7789e9
Signed-off-by: Piotr Szczepanik <piter75@gmail.com>
diff --git a/arch/arm/mach-rockchip/boot_mode.c b/arch/arm/mach-rockchip/boot_mode.c
index 21589341..4fb6d3ae 100644
--- a/arch/arm/mach-rockchip/boot_mode.c
+++ b/arch/arm/mach-rockchip/boot_mode.c
@@ -8,6 +8,7 @@
#include <command.h>
#include <env.h>
#include <log.h>
+#include <linux/delay.h>
#include <asm/io.h>
#include <asm/arch-rockchip/boot_mode.h>
#include <dm/device.h>
@@ -70,13 +71,92 @@ __weak int rockchip_dnl_key_pressed(void)
return false;
}
+int rockchip_dnl_mode(int num_modes)
+{
+ int mode = 0;
+ const char *mode_names[5] = {
+ "none",
+ "ums",
+ "fastboot",
+ "rockusb",
+ "maskrom"
+ };
+
+
+ while(mode < num_modes) {
+ ++mode;
+
+ printf("rockchip_dnl_mode = %s mode\n", mode_names[mode]);
+
+ // return early
+ if (mode == num_modes) {
+ goto end;
+ }
+
+ // wait 2 seconds
+ for (int i = 0; i < 100; ++i) {
+ if (!rockchip_dnl_key_pressed()) {
+ goto end;
+ }
+ mdelay(20);
+ }
+ }
+
+end:
+ return mode;
+}
+
void rockchip_dnl_mode_check(void)
{
- if (rockchip_dnl_key_pressed()) {
- printf("download key pressed, entering download mode...");
- set_back_to_bootrom_dnl_flag();
- do_reset(NULL, 0, 0, NULL);
+ int mmc_device = 0;
+ int ret = 0;
+ char cmd[32];
+
+ if (!rockchip_dnl_key_pressed()) {
+ return 0;
+ }
+
+ ;
+ if (cli_simple_run_command("mmc dev 1") >= 0) {
+ mmc_device = 1;
+ } else if (cli_simple_run_command("mmc dev 1") >= 0) {
+ mmc_device = 0;
+ } else {
+ printf("no mmc device suitable for download mode!\n");
+ return 0;
}
+
+ printf("using mmc%d device for download mode\n", mmc_device);
+
+ switch(rockchip_dnl_mode(4)) {
+ case 0:
+ return;
+
+ case 1:
+ printf("entering ums mode...\n");
+ sprintf(cmd, "ums 0 mmc %d", mmc_device);
+ cli_simple_run_command(cmd, 0);
+ break;
+
+ case 2:
+ printf("entering fastboot mode...\n");
+ sprintf(cmd, "mmc dev %d; fastboot usb 0", mmc_device);
+ cli_simple_run_command(cmd, 0);
+ break;
+
+ case 3:
+ printf("entering download mode...\n");
+ sprintf(cmd, "rockusb 0 mmc %d", mmc_device);
+ cli_simple_run_command(cmd, 0);
+ break;
+
+ case 4:
+ printf("entering maskrom mode...\n");
+ break;
+ }
+
+ set_back_to_bootrom_dnl_flag();
+ do_reset(NULL, 0, 0, NULL);
}
int setup_boot_mode(void)