From 01573e231f18eb2d99162747186f59511f56b64d Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 08 Dec 2023 10:40:48 +0000 Subject: [PATCH] 移去rt --- u-boot/arch/arm/mach-rockchip/board.c | 202 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 138 insertions(+), 64 deletions(-) diff --git a/u-boot/arch/arm/mach-rockchip/board.c b/u-boot/arch/arm/mach-rockchip/board.c index b3bced5..a539d4b 100644 --- a/u-boot/arch/arm/mach-rockchip/board.c +++ b/u-boot/arch/arm/mach-rockchip/board.c @@ -56,6 +56,10 @@ DECLARE_GLOBAL_DATA_PTR; +#ifdef CONFIG_ARM64 +static ulong orig_images_ep; +#endif + __weak int rk_board_late_init(void) { return 0; @@ -246,30 +250,48 @@ static int boot_from_udisk(void) { struct blk_desc *desc; - char *devtype; - char *devnum; - - devtype = env_get("devtype"); - devnum = env_get("devnum"); + struct udevice *dev; + int devnum = -1; + char buf[32]; /* Booting priority: mmc1 > udisk */ - if (!strcmp(devtype, "mmc") && !strcmp(devnum, "1")) + if (!strcmp(env_get("devtype"), "mmc") && !strcmp(env_get("devnum"), "1")) return 0; if (!run_command("usb start", -1)) { - desc = blk_get_devnum_by_type(IF_TYPE_USB, 0); - if (!desc) { - printf("No usb device found\n"); + for (blk_first_device(IF_TYPE_USB, &dev); + dev; + blk_next_device(&dev)) { + desc = dev_get_uclass_platdata(dev); + printf("Scanning usb %d ...\n", desc->devnum); + if (desc->type == DEV_TYPE_UNKNOWN) + continue; + + if (desc->lba > 0L && desc->blksz > 0L) { + devnum = desc->devnum; + break; + } + } + if (devnum < 0) { + printf("No usb mass storage found\n"); return -ENODEV; } - if (!run_command("rkimgtest usb 0", -1)) { + desc = blk_get_devnum_by_type(IF_TYPE_USB, devnum); + if (!desc) { + printf("No usb %d found\n", devnum); + return -ENODEV; + } + + snprintf(buf, 32, "rkimgtest usb %d", devnum); + if (!run_command(buf, -1)) { + snprintf(buf, 32, "%d", devnum); rockchip_set_bootdev(desc); env_set("devtype", "usb"); - env_set("devnum", "0"); - printf("Boot from usb 0\n"); + env_set("devnum", buf); + printf("=== Booting from usb %d ===\n", devnum); } else { - printf("No usb dev 0 found\n"); + printf("No available udisk image on usb %d\n", devnum); return -ENODEV; } } @@ -358,6 +380,8 @@ static void cmdline_handle(void) { struct blk_desc *dev_desc; + int if_type; + int devnum; param_parse_pubkey_fuse_programmed(); @@ -373,19 +397,51 @@ * rockchip_get_boot_mode() actually only read once, * we need to update boot mode according to udisk BCB. */ - if ((dev_desc->if_type == IF_TYPE_MMC && dev_desc->devnum == 1) || - (dev_desc->if_type == IF_TYPE_USB && dev_desc->devnum == 0)) { + if_type = dev_desc->if_type; + devnum = dev_desc->devnum; + if ((if_type == IF_TYPE_MMC && devnum == 1) || (if_type == IF_TYPE_USB)) { if (get_bcb_recovery_msg() == BCB_MSG_RECOVERY_RK_FWUPDATE) { - if (dev_desc->if_type == IF_TYPE_MMC && dev_desc->devnum == 1) { + if (if_type == IF_TYPE_MMC && devnum == 1) { env_update("bootargs", "sdfwupdate"); - } else if (dev_desc->if_type == IF_TYPE_USB && dev_desc->devnum == 0) { + } else if (if_type == IF_TYPE_USB) { env_update("bootargs", "usbfwupdate"); env_set("reboot_mode", "recovery-usb"); } } else { - if (dev_desc->if_type == IF_TYPE_USB && dev_desc->devnum == 0) + if (if_type == IF_TYPE_USB) env_set("reboot_mode", "normal"); } + } + + if (rockchip_get_boot_mode() == BOOT_MODE_QUIESCENT) + env_update("bootargs", "androidboot.quiescent=1 pwm_bl.quiescent=1"); +} + +static void scan_run_cmd(void) +{ + char *config = CONFIG_ROCKCHIP_CMD; + char *cmd, *key; + + key = strchr(config, ' '); + if (!key) + return; + + cmd = strdup(config); + cmd[key - config] = 0; + key++; + + if (!strcmp(key, "-")) { + run_command(cmd, 0); + } else { +#ifdef CONFIG_DM_KEY + ulong map; + + map = simple_strtoul(key, NULL, 10); + if (key_is_pressed(key_read(map))) { + printf("## Key<%ld> pressed... run cmd '%s'\n", map, cmd); + run_command(cmd, 0); + } +#endif } } @@ -398,7 +454,7 @@ rockchip_set_serialno(); #endif setup_download_mode(); - + scan_run_cmd(); #ifdef CONFIG_ROCKCHIP_USB_BOOT boot_from_udisk(); #endif @@ -406,7 +462,8 @@ charge_display(); #endif #ifdef CONFIG_DRM_ROCKCHIP - rockchip_show_logo(); + if (rockchip_get_boot_mode() != BOOT_MODE_QUIESCENT) + rockchip_show_logo(); #endif #ifdef CONFIG_ROCKCHIP_EINK_DISPLAY rockchip_eink_show_uboot_logo(); @@ -458,57 +515,31 @@ printf("Cmd interface: disabled\n"); } -#if defined(CONFIG_MTD_BLK) && defined(CONFIG_USING_KERNEL_DTB) -static void board_mtd_blk_map_partitions(void) -{ - struct blk_desc *dev_desc; - - dev_desc = rockchip_get_bootdev(); - if (dev_desc) - mtd_blk_map_partitions(dev_desc); -} -#endif - int board_init(void) { board_debug_init(); - /* optee select security level */ -#ifdef CONFIG_OPTEE_CLIENT - trusty_select_security_level(); -#endif - #ifdef DEBUG soc_clk_dump(); #endif - -#ifdef CONFIG_USING_KERNEL_DTB -#ifdef CONFIG_MTD_BLK - board_mtd_blk_map_partitions(); +#ifdef CONFIG_OPTEE_CLIENT + trusty_select_security_level(); #endif +#ifdef CONFIG_USING_KERNEL_DTB init_kernel_dtb(); #endif early_download(); - /* - * pmucru isn't referenced on some platforms, so pmucru driver can't - * probe that the "assigned-clocks" is unused. - */ clks_probe(); #ifdef CONFIG_DM_REGULATOR - if (regulators_enable_boot_on(is_hotkey(HK_REGULATOR))) - debug("%s: Can't enable boot on regulator\n", __func__); + regulators_enable_boot_on(is_hotkey(HK_REGULATOR)); #endif - #ifdef CONFIG_ROCKCHIP_IO_DOMAIN io_domain_init(); #endif - set_armclk_rate(); - #ifdef CONFIG_DM_DVFS dvfs_init(true); #endif - #ifdef CONFIG_ANDROID_AB if (ab_decrease_tries()) printf("Decrease ab tries count fail!\n"); @@ -537,6 +568,10 @@ /* Common fixup for DRM */ #ifdef CONFIG_DRM_ROCKCHIP rockchip_display_fixup(blob); +#endif + +#ifdef CONFIG_ROCKCHIP_VENDOR_PARTITION + vendor_storage_fixup(blob); #endif return rk_board_fdt_fixup(blob); @@ -603,6 +638,9 @@ * But relocation is in board_quiesce_devices() until all decompress * done, mainly for saving boot time. */ + + orig_images_ep = images->ep; + if (data[10] == 0x00) { if (round_down(images->ep, SZ_2M) != images->ep) images->ep = round_down(images->ep, SZ_2M); @@ -736,9 +774,10 @@ return boot_flags; } -#if defined(CONFIG_USB_GADGET) && defined(CONFIG_USB_GADGET_DWC2_OTG) -#include <fdt_support.h> +#if defined(CONFIG_USB_GADGET) #include <usb.h> +#if defined(CONFIG_USB_GADGET_DWC2_OTG) +#include <fdt_support.h> #include <usb/dwc2_udc.h> static struct dwc2_plat_otg_data otg_data = { @@ -808,7 +847,17 @@ { return 0; } -#endif +#elif defined(CONFIG_USB_DWC3_GADGET) /* CONFIG_USB_GADGET_DWC2_OTG */ +#include <dwc3-uboot.h> + +int board_usb_cleanup(int index, enum usb_init_type init) +{ + dwc3_uboot_exit(index); + return 0; +} + +#endif /* CONFIG_USB_DWC3_GADGET */ +#endif /* CONFIG_USB_GADGET */ static void bootm_no_reloc(void) { @@ -1049,15 +1098,13 @@ #endif #ifdef CONFIG_ARM64 bootm_headers_t *bootm_images = (bootm_headers_t *)images; - ulong kernel_addr; /* relocate kernel after decompress cleanup */ - kernel_addr = env_get_ulong("kernel_addr_r", 16, 0); - if (kernel_addr != bootm_images->ep) { - memmove((char *)bootm_images->ep, (const char *)kernel_addr, + if (orig_images_ep && orig_images_ep != bootm_images->ep) { + memmove((char *)bootm_images->ep, (const char *)orig_images_ep, bootm_images->os.image_len); printf("== DO RELOCATE == Kernel from 0x%08lx to 0x%08lx\n", - kernel_addr, bootm_images->ep); + orig_images_ep, bootm_images->ep); } #endif @@ -1109,16 +1156,39 @@ #endif } -#ifdef CONFIG_ENVF - char * sys_bootargs; +#if defined(CONFIG_ENVF) || defined(CONFIG_ENV_PARTITION) + char *part_type[] = { "mtdparts", "blkdevparts" }; + char *part_list; + char *env; + int id = 0; - sys_bootargs = env_get("sys_bootargs"); - if (sys_bootargs) { - env_update("bootargs", sys_bootargs); + env = env_get(part_type[id]); + if (!env) + env = env_get(part_type[++id]); + if (env) { + if (!strstr(env, part_type[id])) { + part_list = calloc(1, strlen(env) + strlen(part_type[id]) + 2); + if (part_list) { + strcat(part_list, part_type[id]); + strcat(part_list, "="); + strcat(part_list, env); + } + } else { + part_list = env; + } + env_update("bootargs", part_list); if (dump) - printf("## sys_bootargs: %s\n\n", sys_bootargs); + printf("## parts: %s\n\n", part_list); + } + + env = env_get("sys_bootargs"); + if (env) { + env_update("bootargs", env); + if (dump) + printf("## sys_bootargs: %s\n\n", env); } #endif + #ifdef CONFIG_MTD_BLK if (!env_get("mtdparts")) { char *mtd_par_info = mtd_part_parse(NULL); @@ -1129,6 +1199,10 @@ } } #endif + +#ifdef CONFIG_ANDROID_AB + ab_update_root_partition(); +#endif /* * Initrd fixup: remove unused "initrd=0x...,0x...", * this for compatible with legacy parameter.txt -- Gitblit v1.6.2