From fc08a804bc514e07c3f3883a58b367e34cb00620 Mon Sep 17 00:00:00 2001 From: Dzmitry Sankouski Date: Tue, 29 Nov 2022 22:07:36 +0300 Subject: [PATCH] testing/u-boot-starqltechn: update u-boot version and new patches (MR 3679) Add new patches: - enable serial console - save relocation address to find KASLR - buttons as keyboard input driver to navigate bootmenu - bootmenu loop entry selection --- ...m-init-save-previous-bootloader-data.patch | 337 ------------------ ...01-starqltechn-enable-serial-console.patch | 50 +++ ...n-get-board-usable-add-bootcmd-and-d.patch | 257 ------------- ...m845-save-relocaddr-to-env-variables.patch | 29 ++ ...rride-console-when-stdin-and-device-.patch | 26 ++ ...04-wip-input-driver-for-gpio-buttons.patch | 212 +++++++++++ ...button-kbd-driver-for-navigating-boo.patch | 99 +++++ ...-loop-over-menu-entries-with-one-key.patch | 32 ++ device/testing/u-boot-starqltechn/APKBUILD | 24 +- 9 files changed, 464 insertions(+), 602 deletions(-) delete mode 100644 device/testing/u-boot-starqltechn/0001-arm-init-save-previous-bootloader-data.patch create mode 100644 device/testing/u-boot-starqltechn/0001-starqltechn-enable-serial-console.patch delete mode 100644 device/testing/u-boot-starqltechn/0002-board-starqltechn-get-board-usable-add-bootcmd-and-d.patch create mode 100644 device/testing/u-boot-starqltechn/0002-sdm845-save-relocaddr-to-env-variables.patch create mode 100644 device/testing/u-boot-starqltechn/0003-input-do-not-override-console-when-stdin-and-device-.patch create mode 100644 device/testing/u-boot-starqltechn/0004-wip-input-driver-for-gpio-buttons.patch create mode 100644 device/testing/u-boot-starqltechn/0005-starqltechn-use-button-kbd-driver-for-navigating-boo.patch create mode 100644 device/testing/u-boot-starqltechn/0006-bootmenu-loop-over-menu-entries-with-one-key.patch diff --git a/device/testing/u-boot-starqltechn/0001-arm-init-save-previous-bootloader-data.patch b/device/testing/u-boot-starqltechn/0001-arm-init-save-previous-bootloader-data.patch deleted file mode 100644 index 85c1bf41b..000000000 --- a/device/testing/u-boot-starqltechn/0001-arm-init-save-previous-bootloader-data.patch +++ /dev/null @@ -1,337 +0,0 @@ -From 52ece15559cdb67ed3da2d6e1ce06bad0dc722f8 Mon Sep 17 00:00:00 2001 -From: Dzmitry Sankouski -Date: Tue, 25 Jan 2022 22:15:50 +0300 -Subject: [PATCH 1/3 v3] arm: init: save previous bootloader data - -When u-boot is used as a chain-loaded bootloader (replacing OS kernel), -previous bootloader leaves data in RAM, that can be reused. - -For example, on recent arm linux system, when chainloading u-boot, -there are initramfs and fdt in RAM prepared for OS booting. Initramfs -may be modified to store u-boot's payload, thus providing the ability to -use chainloaded u-boot to boot OS without any storage support. - -Two config options added: -- SAVE_PREV_BL_INITRAMFS_START_ADDR - saves initramfs start address to 'prevbl_initrd_start_addr' environment - variable -- SAVE_PREV_BL_FDT_ADDR - saves fdt address to 'prevbl_fdt_addr' environment variable - -Signed-off-by: Dzmitry Sankouski -Cc: Tom Rini ---- -Changes for v2: -- change signed off line -Changes for v3: -- use if (CONFIG_IS_ENABLED... instead of #if defined -- fix save_prev_bl_data.o in Makefile -- add save_prev_bl_data call to env initialization - - arch/arm/lib/Makefile | 5 ++ - arch/arm/lib/save_prev_bl_data.c | 91 ++++++++++++++++++++++++++++++++ - boot/Kconfig | 79 +++++++++++++++++---------- - common/board_r.c | 5 ++ - include/init.h | 13 +++++ - 5 files changed, 166 insertions(+), 27 deletions(-) - create mode 100644 arch/arm/lib/save_prev_bl_data.c - -diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile -index c48e1f622d..f3c31c05e5 100644 ---- a/arch/arm/lib/Makefile -+++ b/arch/arm/lib/Makefile -@@ -48,6 +48,11 @@ obj-$(CONFIG_$(SPL_TPL_)USE_ARCH_MEMCPY) += memcpy.o - endif - obj-$(CONFIG_SEMIHOSTING) += semihosting.o - -+ifneq ($(filter y,$(CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR) $(CONFIG_SAVE_PREV_BL_FDT_ADDR)),) -+obj-y += save_prev_bl_data.o -+endif -+ -+# obj-$(CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR) += save_prev_bl_data.o - obj-y += bdinfo.o - obj-y += sections.o - CFLAGS_REMOVE_sections.o := $(LTO_CFLAGS) -diff --git a/arch/arm/lib/save_prev_bl_data.c b/arch/arm/lib/save_prev_bl_data.c -new file mode 100644 -index 0000000000..f4ee86a89c ---- /dev/null -+++ b/arch/arm/lib/save_prev_bl_data.c -@@ -0,0 +1,91 @@ -+// SPDX-License-Identifier: GPL-2.0+ -+/* -+ * save_prev_bl_data - saving previous bootloader data -+ * to environment variables. -+ * -+ * Copyright (c) 2022 Dzmitry Sankouski (dsankouski@gmail.com) -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+static ulong reg0 __section(".data"); -+ -+/** -+ * Save x0 register value, assuming previous bootloader set it to -+ * point on loaded fdt or (for older linux kernels)atags. -+ */ -+void save_boot_params(ulong r0) -+{ -+ reg0 = r0; -+ save_boot_params_ret(); -+} -+ -+bool is_addr_accessible(phys_addr_t addr) -+{ -+ struct mm_region *mem = mem_map; -+ phys_addr_t bank_start; -+ phys_addr_t bank_end; -+ -+ while (mem->size) { -+ bank_start = mem->phys; -+ bank_end = bank_start + mem->size; -+ debug("check if block %pap - %pap includes %pap\n", &bank_start, &bank_end, &addr); -+ if (addr > bank_start && addr < bank_end) -+ return true; -+ mem++; -+ } -+ -+ return false; -+} -+ -+int save_prev_bl_data(void) -+{ -+ struct fdt_header *fdt_blob; -+ int node; -+ u64 initrd_start_prop; -+ -+ if (!is_addr_accessible((phys_addr_t)reg0)) -+ return -ENODATA; -+ -+ fdt_blob = (struct fdt_header *)reg0; -+ if (!fdt_valid(&fdt_blob)) { -+ pr_warn("%s: address 0x%lx is not a valid fdt\n", __func__, reg0); -+ return -ENODATA; -+ } -+ -+ if (CONFIG_IS_ENABLED(SAVE_PREV_BL_FDT_ADDR)) -+ env_set_addr("prevbl_fdt_addr", (void *)reg0); -+ if (!CONFIG_IS_ENABLED(SAVE_PREV_BL_INITRAMFS_START_ADDR)) -+ return 0; -+ -+ node = fdt_path_offset(fdt_blob, "/chosen"); -+ if (!node) { -+ pr_warn("%s: chosen node not found in device tree at addr: 0x%lx\n", -+ __func__, reg0); -+ return -ENODATA; -+ } -+ /* -+ * linux,initrd-start property might be either 64 or 32 bit, -+ * depending on primary bootloader implementation. -+ */ -+ initrd_start_prop = fdtdec_get_uint64(fdt_blob, node, "linux,initrd-start", 0); -+ if (!initrd_start_prop) { -+ debug("%s: attempt to get uint64 linux,initrd-start property failed, trying uint\n", -+ __func__); -+ initrd_start_prop = fdtdec_get_uint(fdt_blob, node, "linux,initrd-start", 0); -+ if (!initrd_start_prop) { -+ debug("%s: attempt to get uint failed, too\n", __func__); -+ return -ENODATA; -+ } -+ } -+ env_set_addr("prevbl_initrd_start_addr", (void *)initrd_start_prop); -+ -+ return 0; -+} -diff --git a/boot/Kconfig b/boot/Kconfig -index c8d5906cd3..da2f0797e0 100644 ---- a/boot/Kconfig -+++ b/boot/Kconfig -@@ -135,10 +135,10 @@ config FIT_IMAGE_POST_PROCESS - processed before being added to the FIT image). - - config FIT_PRINT -- bool "Support FIT printing" -- default y -- help -- Support printing the content of the fitImage in a verbose manner. -+ bool "Support FIT printing" -+ default y -+ help -+ Support printing the content of the fitImage in a verbose manner. - - if SPL - -@@ -207,12 +207,12 @@ config SPL_LOAD_FIT - This path has the following limitations: - - 1. "loadables" images, other than FDTs, which do not have a "load" -- property will not be loaded. This limitation also applies to FPGA -- images with the correct "compatible" string. -+ property will not be loaded. This limitation also applies to FPGA -+ images with the correct "compatible" string. - 2. For FPGA images, only the "compatible" = "u-boot,fpga-legacy" -- loading method is supported. -+ loading method is supported. - 3. FDTs are only loaded for images with an "os" property of "u-boot". -- "linux" images are also supported with Falcon boot mode. -+ "linux" images are also supported with Falcon boot mode. - - config SPL_LOAD_FIT_ADDRESS - hex "load address of fit image" -@@ -345,8 +345,8 @@ config SYS_EXTRA_OPTIONS - The old configuration infrastructure (= mkconfig + boards.cfg) - provided the extra options field. If you have something like - "HAS_BAR,BAZ=64", the optional options -- #define CONFIG_HAS -- #define CONFIG_BAZ 64 -+ #define CONFIG_HAS -+ #define CONFIG_BAZ 64 - will be defined in include/config.h. - This option was prepared for the smooth migration from the old - configuration to Kconfig. Since this option will be removed sometime, -@@ -380,7 +380,7 @@ config SYS_CLK_FREQ - int "CPU clock frequency" - default 125000000 if ARCH_LS1012A - default 100000000 if ARCH_P2020 || ARCH_T1024 || ARCH_T1042 || \ -- ARCH_LS1021A || FSL_LSCH2 || FSL_LSCH3 -+ ARCH_LS1021A || FSL_LSCH2 || FSL_LSCH3 - default 66666666 if ARCH_P1010 || ARCH_P1020 || ARCH_T4240 - default 66660000 if ARCH_T2080 - default 33333333 if RCAR_GEN3 -@@ -485,15 +485,15 @@ config BOOTSTAGE_REPORT - boot process. The report looks something like this: - - Timer summary in microseconds: -- Mark Elapsed Stage -- 0 0 reset -+ Mark Elapsed Stage -+ 0 0 reset - 3,575,678 3,575,678 board_init_f start -- 3,575,695 17 arch_cpu_init A9 -- 3,575,777 82 arch_cpu_init done -- 3,659,598 83,821 board_init_r start -- 3,910,375 250,777 main_loop -+ 3,575,695 17 arch_cpu_init A9 -+ 3,575,777 82 arch_cpu_init done -+ 3,659,598 83,821 board_init_r start -+ 3,910,375 250,777 main_loop - 29,916,167 26,005,792 bootm_start -- 30,361,327 445,160 start_kernel -+ 30,361,327 445,160 start_kernel - - config BOOTSTAGE_RECORD_COUNT - int "Number of boot stage records to store" -@@ -580,24 +580,24 @@ config SHOW_BOOT_PROGRESS - Legacy uImage format: - - Arg Where When -- 1 common/cmd_bootm.c before attempting to boot an image -+ 1 common/cmd_bootm.c before attempting to boot an image - -1 common/cmd_bootm.c Image header has bad magic number -- 2 common/cmd_bootm.c Image header has correct magic number -+ 2 common/cmd_bootm.c Image header has correct magic number - -2 common/cmd_bootm.c Image header has bad checksum -- 3 common/cmd_bootm.c Image header has correct checksum -+ 3 common/cmd_bootm.c Image header has correct checksum - -3 common/cmd_bootm.c Image data has bad checksum -- 4 common/cmd_bootm.c Image data has correct checksum -+ 4 common/cmd_bootm.c Image data has correct checksum - -4 common/cmd_bootm.c Image is for unsupported architecture -- 5 common/cmd_bootm.c Architecture check OK -+ 5 common/cmd_bootm.c Architecture check OK - -5 common/cmd_bootm.c Wrong Image Type (not kernel, multi) -- 6 common/cmd_bootm.c Image Type check OK -+ 6 common/cmd_bootm.c Image Type check OK - -6 common/cmd_bootm.c gunzip uncompression error - -7 common/cmd_bootm.c Unimplemented compression type -- 7 common/cmd_bootm.c Uncompression OK -- 8 common/cmd_bootm.c No uncompress/copy overwrite error -+ 7 common/cmd_bootm.c Uncompression OK -+ 8 common/cmd_bootm.c No uncompress/copy overwrite error - -9 common/cmd_bootm.c Unsupported OS (not Linux, BSD, VxWorks, QNX) - -- 9 common/image.c Start initial ramdisk verification -+ 9 common/image.c Start initial ramdisk verification - -10 common/image.c Ramdisk header has bad magic number - -11 common/image.c Ramdisk header has bad checksum - 10 common/image.c Ramdisk header is OK -@@ -1067,4 +1067,29 @@ config DEFAULT_FDT_FILE - help - This option is used to set the default fdt file to boot OS. - -+config SAVE_PREV_BL_FDT_ADDR -+ depends on ARM -+ bool "Saves fdt address, passed by the previous bootloader, to env var" -+ default n -+ help -+ When u-boot is used as a chain-loaded bootloader (replacing OS kernel), -+ enable this option to save fdt address, passed by the -+ previous bootloader for future use. -+ Address is saved to `prevbl_fdt_addr` environment variable. -+ -+ If no fdt was provided by previous bootloader, no env variables -+ will be created. -+ -+config SAVE_PREV_BL_INITRAMFS_START_ADDR -+ depends on ARM -+ bool "Saves initramfs address, passed by the previous bootloader, to env var" -+ default n -+ help -+ When u-boot is used as a chain-loaded bootloader(replacing OS kernel), -+ enable this option to save initramfs address, passed by the -+ previous bootloader for future use. -+ Address is saved to `prevbl_initrd_start_addr` environment variable. -+ -+ If no initramfs was provided by previous bootloader, no env variables -+ will be created. - endmenu # Booting -diff --git a/common/board_r.c b/common/board_r.c -index c24d9b4e22..5b717e2162 100644 ---- a/common/board_r.c -+++ b/common/board_r.c -@@ -445,6 +445,11 @@ static int initr_env(void) - env_set_hex("fdtcontroladdr", - (unsigned long)map_to_sysmem(gd->fdt_blob)); - -+ #if (CONFIG_IS_ENABLED(SAVE_PREV_BL_INITRAMFS_START_ADDR) || \ -+ CONFIG_IS_ENABLED(SAVE_PREV_BL_FDT_ADDR)) -+ save_prev_bl_data(); -+ #endif -+ - /* Initialize from environment */ - image_load_addr = env_get_ulong("loadaddr", 16, image_load_addr); - -diff --git a/include/init.h b/include/init.h -index 20c3976af0..1a55a0e2e4 100644 ---- a/include/init.h -+++ b/include/init.h -@@ -166,6 +166,19 @@ int arch_setup_bdinfo(void); - */ - int setup_bdinfo(void); - -+#if defined(CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR) || \ -+defined(CONFIG_SAVE_PREV_BL_FDT_ADDR) -+/** -+ * save_prev_bl_data - Save prev bl data in env vars. -+ * -+ * When u-boot is chain-loaded, save previous bootloader data, -+ * like initramfs address to environment variables. -+ * -+ * Return: 0 if ok; -ENODATA on error -+ */ -+int save_prev_bl_data(void); -+#endif -+ - /** - * cpu_secondary_init_r() - CPU-specific secondary initialization - * --- -2.20.1 - diff --git a/device/testing/u-boot-starqltechn/0001-starqltechn-enable-serial-console.patch b/device/testing/u-boot-starqltechn/0001-starqltechn-enable-serial-console.patch new file mode 100644 index 000000000..cfe95afe6 --- /dev/null +++ b/device/testing/u-boot-starqltechn/0001-starqltechn-enable-serial-console.patch @@ -0,0 +1,50 @@ +From f6c35ea176e29eda0e34c13a38d877af4124c25a Mon Sep 17 00:00:00 2001 +From: Dzmitry Sankouski +Date: Tue, 29 Nov 2022 17:25:37 +0300 +Subject: [PATCH 1/6] starqltechn: enable serial console + +Problem affected device boot, was fixed in +f5ed6c9ccf3ec32a4bcc20835ee8fc378c342df9 +--- + configs/starqltechn_defconfig | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/configs/starqltechn_defconfig b/configs/starqltechn_defconfig +index 7955076d61..995a623305 100644 +--- a/configs/starqltechn_defconfig ++++ b/configs/starqltechn_defconfig +@@ -9,7 +9,8 @@ CONFIG_IDENT_STRING="\nSamsung S9 SM-G9600" + CONFIG_SYS_LOAD_ADDR=0x80000000 + CONFIG_FIT=y + CONFIG_FIT_VERBOSE=y +-CONFIG_BOOTDELAY=0 ++CONFIG_BOOTDELAY=5 ++CONFIG_USE_PREBOOT=y + CONFIG_SAVE_PREV_BL_FDT_ADDR=y + CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR=y + # CONFIG_DISPLAY_CPUINFO is not set +@@ -20,17 +21,18 @@ CONFIG_SYS_PBSIZE=532 + CONFIG_CMD_GPIO=y + CONFIG_CMD_BMP=y + # CONFIG_NET is not set +-# CONFIG_DM_STDIO is not set + CONFIG_CLK=y + CONFIG_MSM_GPIO=y + CONFIG_QCOM_PMIC_GPIO=y + CONFIG_PINCTRL=y + CONFIG_DM_PMIC=y + CONFIG_PMIC_QCOM=y +-# CONFIG_REQUIRE_SERIAL_CONSOLE is not set ++CONFIG_REQUIRE_SERIAL_CONSOLE=y ++CONFIG_MSM_GENI_SERIAL=y + CONFIG_SPMI_MSM=y + CONFIG_VIDEO=y + CONFIG_SYS_WHITE_ON_BLACK=y + CONFIG_VIDEO_SIMPLE=y +-CONFIG_VIDEO_DT_SIMPLEFB=y ++CONFIG_VIDEO_DT_SIMPLEFB=n + CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_BAUDRATE=921600 +-- +2.30.2 + diff --git a/device/testing/u-boot-starqltechn/0002-board-starqltechn-get-board-usable-add-bootcmd-and-d.patch b/device/testing/u-boot-starqltechn/0002-board-starqltechn-get-board-usable-add-bootcmd-and-d.patch deleted file mode 100644 index f79dcc915..000000000 --- a/device/testing/u-boot-starqltechn/0002-board-starqltechn-get-board-usable-add-bootcmd-and-d.patch +++ /dev/null @@ -1,257 +0,0 @@ -From 9dc363f0968cd74223cace7806fb88a938d897b2 Mon Sep 17 00:00:00 2001 -From: Dzmitry Sankouski -Date: Wed, 26 Jan 2022 14:34:33 +0300 -Subject: [PATCH 2/3 v4] board: starqltechn: get board usable - add bootcmd and - docs - -U-boot is intended to replace linux kernel in android boot image(ABL), and -it's FIT payload to replace initramfs file. The boot process is similar to -boot image with linux: -- android bootloader (ABL) unpacks android boot image -- ABL sets `linux,initrd-start property` in chosen node in unpacked FDT -- ABL sets x0 register to FDT address, and passes control to u-boot -- u-boot reads x0 register, and stores it in `prevbl_fdt_addr` env variable -- u-boot reads `linux,initrd-start` property, -and stores it in `prevbl_initrd_start_addr` - -In this way, u-boot bootcmd relies on `prevbl_initrd_start_addr` env -variable, and boils down to `bootm $prevbl_initrd_start_addr`. -If more control on boot process is desired, pack a boot script in -FIT image, and put it to default configuration - -What done: -- strip unneeded config options -- add FIT image support -- add framebuffer node, u-boot logo and video console -- increase LMB_MAX_REGIONS, to store all linux dtb reserved memory regions -- add linux kernel image header - -Uart driver causes hang, when u-boot is used in android boot image instead -of linux. Temporary disable console driver, until investigated and fixed. - -Signed-off-by: Dzmitry Sankouski -Cc: Ramon Fried ---- -Changes for v2: -- change signed off line -- add CONFIG_SAVE_PREV_BL_FDT_ADDR. It's needed to boot -android stock kernel -- change bootcmd to source bootscript from FIT image -for more flexibility -Changes for v3: -- enable simple framebuffer -- enable video console -- add preboot variable -- remove 0x prefix in name in device tree -Changes for v4: -- fix uart driver pinmux -- remove serial from stdout and stderr env -- disable serial driver, because it's crashes autoboot - - arch/arm/dts/sdm845.dtsi | 6 ++-- - arch/arm/dts/starqltechn-uboot.dtsi | 9 ++++-- - arch/arm/dts/starqltechn.dts | 13 ++++++-- - configs/starqltechn_defconfig | 21 ++++++++++--- - doc/board/qualcomm/sdm845.rst | 47 ++++++++++++++++++++++++++++- - include/configs/sdm845.h | 8 +++++ - 6 files changed, 90 insertions(+), 14 deletions(-) - -diff --git a/arch/arm/dts/sdm845.dtsi b/arch/arm/dts/sdm845.dtsi -index 1185b71216..6f2fb20d68 100644 ---- a/arch/arm/dts/sdm845.dtsi -+++ b/arch/arm/dts/sdm845.dtsi -@@ -48,10 +48,8 @@ - - /* DEBUG UART */ - qup_uart9: qup-uart9-default { -- pinmux { -- pins = "GPIO_4", "GPIO_5"; -- function = "qup9"; -- }; -+ pins = "GPIO_4", "GPIO_5"; -+ function = "gpio"; - }; - }; - -diff --git a/arch/arm/dts/starqltechn-uboot.dtsi b/arch/arm/dts/starqltechn-uboot.dtsi -index d8d75e018a..b55cccfe14 100644 ---- a/arch/arm/dts/starqltechn-uboot.dtsi -+++ b/arch/arm/dts/starqltechn-uboot.dtsi -@@ -8,15 +8,18 @@ - - / - { -+ framebuffer@9D400000 { -+ u-boot,dm-pre-reloc; -+ }; - soc { - u-boot,dm-pre-reloc; -+ serial@a84000 { -+ u-boot,dm-pre-reloc; -+ }; - gcc { - clock-controller@100000 { - u-boot,dm-pre-reloc; - }; -- serial@0xa84000 { -- u-boot,dm-pre-reloc; -- }; - gpio_north@3900000 { - u-boot,dm-pre-reloc; - }; -diff --git a/arch/arm/dts/starqltechn.dts b/arch/arm/dts/starqltechn.dts -index 387420f30b..0261388319 100644 ---- a/arch/arm/dts/starqltechn.dts -+++ b/arch/arm/dts/starqltechn.dts -@@ -34,9 +34,18 @@ - method = "smc"; - }; - -+ framebuffer: framebuffer@9D400000 { -+ compatible = "simple-framebuffer"; -+ reg = <0 0x9D400000 0 (2960 * 1440 * 4)>;//2400000 -+ width = <1440>; -+ height = <2960>; -+ stride = <(1440 * 4)>; -+ format = "a8r8g8b8"; -+ }; -+ - soc: soc { -- serial@0xa84000 { -- status = "ok"; -+ serial@a84000 { -+ status = "okay"; - }; - - pinctrl@3900000 { -diff --git a/configs/starqltechn_defconfig b/configs/starqltechn_defconfig -index f57bb859cc..75e8409c4d 100644 ---- a/configs/starqltechn_defconfig -+++ b/configs/starqltechn_defconfig -@@ -2,16 +2,18 @@ CONFIG_ARM=y - CONFIG_SKIP_LOWLEVEL_INIT=y - CONFIG_POSITION_INDEPENDENT=y - CONFIG_ARCH_SNAPDRAGON=y --CONFIG_SYS_TEXT_BASE=0x80000000 --CONFIG_SYS_MALLOC_LEN=0x81f000 - CONFIG_DEFAULT_DEVICE_TREE="starqltechn" -+CONFIG_BOOTDELAY=0 -+CONFIG_FIT=y -+CONFIG_FIT_VERBOSE=y - CONFIG_TARGET_STARQLTECHN=y - CONFIG_IDENT_STRING="\nSamsung S9 SM-G9600" - CONFIG_SYS_LOAD_ADDR=0x80000000 --CONFIG_USE_PREBOOT=y -+CONFIG_LMB_MAX_REGIONS=64 - # CONFIG_DISPLAY_CPUINFO is not set - CONFIG_HUSH_PARSER=y - CONFIG_CMD_GPIO=y -+# CONFIG_REQUIRE_SERIAL_CONSOLE is not set - # CONFIG_NET is not set - # CONFIG_DM_STDIO is not set - CONFIG_CLK=y -@@ -20,5 +22,16 @@ CONFIG_PM8916_GPIO=y - CONFIG_PINCTRL=y - CONFIG_DM_PMIC=y - CONFIG_PMIC_PM8916=y --CONFIG_MSM_GENI_SERIAL=y -+# CONFIG_MSM_GENI_SERIAL is not set - CONFIG_SPMI_MSM=y -+CONFIG_LINUX_KERNEL_IMAGE_HEADER=y -+CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR=y -+CONFIG_SAVE_PREV_BL_FDT_ADDR=y -+CONFIG_DM_VIDEO=y -+CONFIG_VIDEO_LOGO=y -+CONFIG_CMD_VIDCONSOLE=y -+CONFIG_CONSOLE_NORMAL=y -+CONFIG_SYS_WHITE_ON_BLACK=y -+CONFIG_VIDEO_DT_SIMPLEFB=y -+CONFIG_VIDEO_SIMPLE=y -+CONFIG_CMD_BMP=y -diff --git a/doc/board/qualcomm/sdm845.rst b/doc/board/qualcomm/sdm845.rst -index cd46cbe9cf..b00a30a313 100644 ---- a/doc/board/qualcomm/sdm845.rst -+++ b/doc/board/qualcomm/sdm845.rst -@@ -17,7 +17,9 @@ It is loaded as an Android boot image through ABL - - Installation - ------------ --First, setup ``CROSS_COMPILE`` for aarch64. Then, build U-Boot for your board:: -+Build -+^^^^^^^^^^^^^^^^^^^^^^^^ -+Setup ``CROSS_COMPILE`` for aarch64 and build U-Boot for your board:: - - $ export CROSS_COMPILE= - $ make _defconfig -@@ -25,6 +27,49 @@ First, setup ``CROSS_COMPILE`` for aarch64. Then, build U-Boot for your board:: - - This will build ``u-boot.bin`` in the configured output directory. - -+Generate FIT image -+^^^^^^^^^^^^^^^^^^^^^^^^ -+See doc/uImage.FIT for more details -+ -+Pack android boot image -+^^^^^^^^^^^^^^^^^^^^^^^^ -+We'll assemble android boot image with ``u-boot.bin`` instead of linux kernel, -+and FIT image instead of ``initramfs``. Android bootloader expect gzipped kernel -+with appended dtb, so let's mimic linux to satisfy stock bootloader: -+ -+- create dump dtb:: -+ -+ workdir=/tmp/prepare_payload -+ mkdir -p "$workdir" -+ cd "$workdir" -+ mock_dtb="$workdir"/payload_mock.dtb -+ -+ dtc -I dts -O dtb -o "$mock_dtb" << EOF -+ /dts-v1/; -+ / { -+ memory { -+ /* We expect the bootloader to fill in the size */ -+ reg = <0 0 0 0>; -+ }; -+ -+ chosen { }; -+ }; -+ EOF -+ -+- gzip u-boot ``gzip u-boot.bin`` -+- append dtb to gzipped u-boot: ``cat u-boot.bin.gz "$mock_dtb" > u-boot.bin.gz-dtb`` -+ -+Now we've got everything to build android boot image::: -+ -+ mkbootimg --base 0x0 --kernel_offset 0x00008000 \ -+ --ramdisk_offset 0x02000000 --tags_offset 0x01e00000 \ -+ --pagesize 4096 --second_offset 0x00f00000 \ -+ --ramdisk "$fit_image" \ -+ --kernel u-boot.bin.gz-dtb \ -+ -o boot.img -+ -+Flash image with your phone's flashing method. -+ - Boards - ------------ - starqlte -diff --git a/include/configs/sdm845.h b/include/configs/sdm845.h -index af9ba197d4..ba57323c74 100644 ---- a/include/configs/sdm845.h -+++ b/include/configs/sdm845.h -@@ -16,6 +16,14 @@ - /* Generic Timer Definitions */ - #define COUNTER_FREQUENCY 19000000 - -+#define CONFIG_EXTRA_ENV_SETTINGS \ -+ "bootm_size=0x4000000\0" \ -+ "bootm_low=0x80000000\0" \ -+ "stdout=vidconsole\0" \ -+ "stderr=vidconsole\0" \ -+ "preboot=source $prevbl_initrd_start_addr:prebootscript\0" \ -+ "bootcmd=source $prevbl_initrd_start_addr:bootscript\0" -+ - /* Size of malloc() pool */ - #define CONFIG_SYS_BOOTM_LEN SZ_64M - --- -2.20.1 - diff --git a/device/testing/u-boot-starqltechn/0002-sdm845-save-relocaddr-to-env-variables.patch b/device/testing/u-boot-starqltechn/0002-sdm845-save-relocaddr-to-env-variables.patch new file mode 100644 index 000000000..e1bd62ed5 --- /dev/null +++ b/device/testing/u-boot-starqltechn/0002-sdm845-save-relocaddr-to-env-variables.patch @@ -0,0 +1,29 @@ +From 22865c8e1872c7ff634232b0174b7cf5adb10bbd Mon Sep 17 00:00:00 2001 +From: Dzmitry Sankouski +Date: Tue, 29 Nov 2022 21:45:48 +0300 +Subject: [PATCH 2/6] sdm845: save relocaddr to env variables + +KASLR address is needed to boot fully functional Android. +KASLR is set by primary bootloader, and since u-boot is used +as a secondary bootloader(replacing kernel) on sdm845 platform, +KASLR may be found by comparing memory chunks at relocaddr over +supposed KASLR range. +--- + arch/arm/mach-snapdragon/init_sdm845.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/arm/mach-snapdragon/init_sdm845.c b/arch/arm/mach-snapdragon/init_sdm845.c +index 5f53c21947..1f22aee7f6 100644 +--- a/arch/arm/mach-snapdragon/init_sdm845.c ++++ b/arch/arm/mach-snapdragon/init_sdm845.c +@@ -77,6 +77,7 @@ __weak int misc_init_r(void) + } else { + env_set("key_power", "0"); + } ++ env_set_addr("relocaddr", gd->relocaddr); + + return 0; + } +-- +2.30.2 + diff --git a/device/testing/u-boot-starqltechn/0003-input-do-not-override-console-when-stdin-and-device-.patch b/device/testing/u-boot-starqltechn/0003-input-do-not-override-console-when-stdin-and-device-.patch new file mode 100644 index 000000000..99b952a75 --- /dev/null +++ b/device/testing/u-boot-starqltechn/0003-input-do-not-override-console-when-stdin-and-device-.patch @@ -0,0 +1,26 @@ +From 4e60f940452ca7ae8651d3560c0ac1b368375c3b Mon Sep 17 00:00:00 2001 +From: Dzmitry Sankouski +Date: Thu, 1 Dec 2022 20:07:36 +0300 +Subject: [PATCH 3/6] input: do not override console, when stdin and device + name not defined + +--- + drivers/input/input.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/input/input.c b/drivers/input/input.c +index a4341e8c7c..a4eeba13a5 100644 +--- a/drivers/input/input.c ++++ b/drivers/input/input.c +@@ -671,7 +671,7 @@ int input_stdio_register(struct stdio_dev *dev) + error = stdio_register(dev); + #if !defined(CONFIG_SPL_BUILD) || CONFIG_IS_ENABLED(ENV_SUPPORT) + /* check if this is the standard input device */ +- if (!error && strcmp(env_get("stdin"), dev->name) == 0) { ++ if (!error && !dev->name && strcmp(env_get("stdin"), dev->name) == 0) { + /* reassign the console */ + if (OVERWRITE_CONSOLE || + console_assign(stdin, dev->name)) +-- +2.30.2 + diff --git a/device/testing/u-boot-starqltechn/0004-wip-input-driver-for-gpio-buttons.patch b/device/testing/u-boot-starqltechn/0004-wip-input-driver-for-gpio-buttons.patch new file mode 100644 index 000000000..63aa4f50d --- /dev/null +++ b/device/testing/u-boot-starqltechn/0004-wip-input-driver-for-gpio-buttons.patch @@ -0,0 +1,212 @@ +From 70477a286fbb36ba8b019ccff30615f837b89dbf Mon Sep 17 00:00:00 2001 +From: Dzmitry Sankouski +Date: Thu, 1 Dec 2022 20:13:04 +0300 +Subject: [PATCH 4/6] wip: input driver for gpio buttons + +Bootmenu requires an input device with arrows and enter key. +A common smartphone luckily has power, volume up/down buttons, +which may be used for bootmenu. + +This driver implements linux,code on a gpio pins. +--- + drivers/input/Makefile | 1 + + drivers/input/button_kbd.c | 175 +++++++++++++++++++++++++++++++++++++ + 2 files changed, 176 insertions(+) + create mode 100644 drivers/input/button_kbd.c + +diff --git a/drivers/input/Makefile b/drivers/input/Makefile +index ded76bddb2..b113c836e7 100644 +--- a/drivers/input/Makefile ++++ b/drivers/input/Makefile +@@ -6,6 +6,7 @@ + obj-$(CONFIG_$(SPL_TPL_)CROS_EC_KEYB) += cros_ec_keyb.o + obj-$(CONFIG_$(SPL_TPL_)OF_CONTROL) += key_matrix.o + obj-$(CONFIG_$(SPL_TPL_)DM_KEYBOARD) += input.o keyboard-uclass.o ++obj-$(CONFIG_DM_KEYBOARD) += button_kbd.o + + ifndef CONFIG_SPL_BUILD + +diff --git a/drivers/input/button_kbd.c b/drivers/input/button_kbd.c +new file mode 100644 +index 0000000000..2a9490dc1c +--- /dev/null ++++ b/drivers/input/button_kbd.c +@@ -0,0 +1,175 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * (C) Copyright 2022 Dzmitry Sankouski ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++struct gpio_desc keydown_desc; ++struct gpio_desc keypwr_desc; ++int pwr_current = 0; ++int voldown_current = 0; ++char pwr_keycode = 0; ++char voldown_keycode = 0; ++ ++struct button_kbd_priv { ++ struct input_config *input; ++}; ++ ++int read_voldown(void) { ++ if (voldown_current != dm_gpio_get_value(&keydown_desc)) { ++ voldown_current = !voldown_current; ++ pwr_keycode = KEY_DOWN; ++ return 1; ++ } ++ return 0; ++} ++ ++int read_pwr(void) { ++ int pwrval = dm_gpio_get_value(&keypwr_desc); ++ if (pwr_current != pwrval) { ++ pwr_keycode = KEY_ENTER; ++ pwr_current = !pwr_current; ++ return 1; ++ } ++ return 0; ++} ++ ++int button_tstc(struct udevice *dev) { ++ int res = 0; ++ ++ res |= read_pwr(); ++ res |= read_voldown(); ++ return res; ++} ++ ++int button_read_keys(struct input_config *input) { ++ int res = 0; ++ int code[1]; ++ if (read_pwr()) { ++ if (pwr_current == 0) { ++ code[0] = -1; ++ input_send_keycodes(input, code, 1); ++ } else { ++ code[0] = KEY_ENTER; ++ input_send_keycodes(input, code, 1); ++ } ++ res = 1; ++ } ++ if (read_voldown()) { ++ if (voldown_current == 0) { ++ code[0] = -1; ++ input_send_keycodes(input, code, 1); ++ } else { ++ code[0] = KEY_DOWN; ++ input_send_keycodes(input, code, 1); ++ } ++ res = 1; ++ } ++ return res; ++} ++ ++ ++int button_getc(struct udevice *dev) { ++ int code = 0; ++ if (pwr_keycode || read_pwr()) { ++ code = pwr_keycode; ++ pwr_keycode = 0; ++ return code; ++ } ++ if (voldown_keycode || read_voldown()) { ++ code = voldown_keycode; ++ voldown_keycode = 0; ++ return code; ++ } ++ return -EAGAIN; ++} ++ ++static int button_kbd_start(struct udevice *dev) { ++ struct udevice *pon; ++ int node, ret; ++ ++ ret = uclass_get_device_by_name(UCLASS_GPIO, "pm8998_pon@800", &pon); ++ if (ret < 0) { ++ printf("Failed to find PMIC pon node. Check device tree\n"); ++ return 0; ++ } ++ ++ node = fdt_subnode_offset(gd->fdt_blob, dev_of_offset(pon), ++ "key_vol_down"); ++ if (node < 0) { ++ printf("Failed to find key_vol_down node. Check device tree\n"); ++ return 0; ++ } ++ if (gpio_request_by_name_nodev(offset_to_ofnode(node), "gpios", 0, ++ &keydown_desc, 0)) { ++ printf("Failed to request key_vol_down button.\n"); ++ return 0; ++ } ++ ++ node = fdt_subnode_offset(gd->fdt_blob, dev_of_offset(pon), ++ "key_power"); ++ if (node < 0) { ++ printf("Failed to find key_power node. Check device tree\n"); ++ return 0; ++ } ++ if (gpio_request_by_name_nodev(offset_to_ofnode(node), "gpios", 0, ++ &keypwr_desc, 0)) { ++ printf("Failed to request key_power button.\n"); ++ return 0; ++ } ++ return 0; ++} ++ ++static int button_kbd_probe(struct udevice *dev) { ++ struct button_kbd_priv *priv = dev_get_priv(dev); ++ struct keyboard_priv *uc_priv = dev_get_uclass_priv(dev); ++ struct stdio_dev *sdev = &uc_priv->sdev; ++ struct input_config *input = &uc_priv->input; ++ int ret = 0; ++ ++ input_init(input, false); ++ input_add_tables(input, false); ++ ++ /* Register the device. init_tegra_keyboard() will be called soon */ ++ priv->input = input; ++ input->dev = dev; ++ input->read_keys = button_read_keys; ++ strcpy(sdev->name, "button-kbc"); ++ ret = input_stdio_register(sdev); ++ if (ret) { ++ debug("%s: input_stdio_register() failed\n", __func__); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static const struct keyboard_ops button_kbd_ops = { ++ .start = button_kbd_start, ++ .getc = button_getc, ++ .tstc = button_tstc ++}; ++ ++static const struct udevice_id button_kbd_ids[] = { ++ { .compatible = "button-kbd" }, ++ { } ++}; ++ ++U_BOOT_DRIVER(button_kbd) = { ++ .name = "button_kbd", ++ .id = UCLASS_KEYBOARD, ++ .of_match = button_kbd_ids, ++ .probe = button_kbd_probe, ++ .ops = &button_kbd_ops , ++ .priv_auto = sizeof(struct button_kbd_priv), ++}; +-- +2.30.2 + diff --git a/device/testing/u-boot-starqltechn/0005-starqltechn-use-button-kbd-driver-for-navigating-boo.patch b/device/testing/u-boot-starqltechn/0005-starqltechn-use-button-kbd-driver-for-navigating-boo.patch new file mode 100644 index 000000000..87121d2df --- /dev/null +++ b/device/testing/u-boot-starqltechn/0005-starqltechn-use-button-kbd-driver-for-navigating-boo.patch @@ -0,0 +1,99 @@ +From 506cdd778b001d7586dbf87beaf92b2c134305e3 Mon Sep 17 00:00:00 2001 +From: Dzmitry Sankouski +Date: Thu, 1 Dec 2022 20:15:24 +0300 +Subject: [PATCH 5/6] starqltechn: use button-kbd driver for navigating boot + menu + +--- + arch/arm/dts/sdm845.dtsi | 4 +++ + arch/arm/mach-snapdragon/init_sdm845.c | 45 -------------------------- + configs/starqltechn_defconfig | 2 ++ + 3 files changed, 6 insertions(+), 45 deletions(-) + +diff --git a/arch/arm/dts/sdm845.dtsi b/arch/arm/dts/sdm845.dtsi +index 607af277f8..4adf494218 100644 +--- a/arch/arm/dts/sdm845.dtsi ++++ b/arch/arm/dts/sdm845.dtsi +@@ -63,6 +63,10 @@ + status = "disabled"; + }; + ++ button_kbd { ++ compatible = "button-kbd"; ++ }; ++ + spmi@c440000 { + compatible = "qcom,spmi-pmic-arb"; + reg = <0xc440000 0x1100>, +diff --git a/arch/arm/mach-snapdragon/init_sdm845.c b/arch/arm/mach-snapdragon/init_sdm845.c +index 1f22aee7f6..cbbe1d5c76 100644 +--- a/arch/arm/mach-snapdragon/init_sdm845.c ++++ b/arch/arm/mach-snapdragon/init_sdm845.c +@@ -32,51 +32,6 @@ __weak int board_init(void) + /* Check for vol- and power buttons */ + __weak int misc_init_r(void) + { +- struct udevice *pon; +- struct gpio_desc resin; +- int node, ret; +- +- ret = uclass_get_device_by_name(UCLASS_GPIO, "pm8998_pon@800", &pon); +- if (ret < 0) { +- printf("Failed to find PMIC pon node. Check device tree\n"); +- return 0; +- } +- +- node = fdt_subnode_offset(gd->fdt_blob, dev_of_offset(pon), +- "key_vol_down"); +- if (node < 0) { +- printf("Failed to find key_vol_down node. Check device tree\n"); +- return 0; +- } +- if (gpio_request_by_name_nodev(offset_to_ofnode(node), "gpios", 0, +- &resin, 0)) { +- printf("Failed to request key_vol_down button.\n"); +- return 0; +- } +- if (dm_gpio_get_value(&resin)) { +- env_set("key_vol_down", "1"); +- printf("Volume down button pressed\n"); +- } else { +- env_set("key_vol_down", "0"); +- } +- +- node = fdt_subnode_offset(gd->fdt_blob, dev_of_offset(pon), +- "key_power"); +- if (node < 0) { +- printf("Failed to find key_power node. Check device tree\n"); +- return 0; +- } +- if (gpio_request_by_name_nodev(offset_to_ofnode(node), "gpios", 0, +- &resin, 0)) { +- printf("Failed to request key_power button.\n"); +- return 0; +- } +- if (dm_gpio_get_value(&resin)) { +- env_set("key_power", "1"); +- printf("Power button pressed\n"); +- } else { +- env_set("key_power", "0"); +- } + env_set_addr("relocaddr", gd->relocaddr); + + return 0; +diff --git a/configs/starqltechn_defconfig b/configs/starqltechn_defconfig +index 995a623305..baaba6824f 100644 +--- a/configs/starqltechn_defconfig ++++ b/configs/starqltechn_defconfig +@@ -10,6 +10,8 @@ CONFIG_SYS_LOAD_ADDR=0x80000000 + CONFIG_FIT=y + CONFIG_FIT_VERBOSE=y + CONFIG_BOOTDELAY=5 ++CONFIG_CMD_BOOTMENU=y ++CONFIG_DM_KEYBOARD=y + CONFIG_USE_PREBOOT=y + CONFIG_SAVE_PREV_BL_FDT_ADDR=y + CONFIG_SAVE_PREV_BL_INITRAMFS_START_ADDR=y +-- +2.30.2 + diff --git a/device/testing/u-boot-starqltechn/0006-bootmenu-loop-over-menu-entries-with-one-key.patch b/device/testing/u-boot-starqltechn/0006-bootmenu-loop-over-menu-entries-with-one-key.patch new file mode 100644 index 000000000..b5ba32d03 --- /dev/null +++ b/device/testing/u-boot-starqltechn/0006-bootmenu-loop-over-menu-entries-with-one-key.patch @@ -0,0 +1,32 @@ +From ee9acd76d945aece3b375b56600f88843f5a105f Mon Sep 17 00:00:00 2001 +From: Dzmitry Sankouski +Date: Thu, 1 Dec 2022 22:07:08 +0300 +Subject: [PATCH 6/6] bootmenu: loop over menu entries with one key + +--- + cmd/bootmenu.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/cmd/bootmenu.c b/cmd/bootmenu.c +index 3340be1632..7d9f0b3a46 100644 +--- a/cmd/bootmenu.c ++++ b/cmd/bootmenu.c +@@ -103,11 +103,15 @@ static char *bootmenu_choice_entry(void *data) + case KEY_UP: + if (menu->active > 0) + --menu->active; ++ else ++ menu->active = menu->count - 1; + /* no menu key selected, regenerate menu */ + return NULL; + case KEY_DOWN: + if (menu->active < menu->count - 1) + ++menu->active; ++ else ++ menu->active = 0; + /* no menu key selected, regenerate menu */ + return NULL; + case KEY_SELECT: +-- +2.30.2 + diff --git a/device/testing/u-boot-starqltechn/APKBUILD b/device/testing/u-boot-starqltechn/APKBUILD index b831dd10b..05913aea0 100644 --- a/device/testing/u-boot-starqltechn/APKBUILD +++ b/device/testing/u-boot-starqltechn/APKBUILD @@ -1,6 +1,6 @@ # U-boot with patches to make the Samsung S9 boot pkgname=u-boot-starqltechn -pkgver=2022.04_rc4 +pkgver=2023.01_rc2 pkgrel=0 pkgdesc="U-Boot bootloader for the Samsung SM-G9600 starqltechn" url="https://source.denx.de/u-boot" @@ -18,11 +18,15 @@ makedepends="$depends_dev swig " options="!archcheck !check !strip" -ubootver=2022.04-rc4 +ubootver=2023.01-rc2 source=" -http://source.denx.de/u-boot/u-boot/-/archive/v$ubootver/u-boot-v$ubootver.tar.gz -0001-arm-init-save-previous-bootloader-data.patch -0002-board-starqltechn-get-board-usable-add-bootcmd-and-d.patch + http://source.denx.de/u-boot/u-boot/-/archive/v$ubootver/u-boot-v$ubootver.tar.gz + 0001-starqltechn-enable-serial-console.patch + 0002-sdm845-save-relocaddr-to-env-variables.patch + 0003-input-do-not-override-console-when-stdin-and-device-.patch + 0004-wip-input-driver-for-gpio-buttons.patch + 0005-starqltechn-use-button-kbd-driver-for-navigating-boo.patch + 0006-bootmenu-loop-over-menu-entries-with-one-key.patch " builddir="$srcdir/u-boot-v$ubootver" @@ -37,7 +41,11 @@ package() { } sha512sums=" -f9865d9aa552c4161deb416379b0221cbf3ba0530e4af4c95db6b7ef96843a9bc59a0fc30b38e9e3fd1403dc6557249930d7476423a1470820f07104f2e7747b u-boot-v2022.04-rc4.tar.gz -a6158cf9271f400e758b6c4724c044dea66066ae28c7ecae9c51323b795684238b9f4509b8f590e001568033478e87f0fb5abd7511c1bc65f757d62982fa5763 0001-arm-init-save-previous-bootloader-data.patch -95d4fa1e7327fba05f0213aa29f27a231fd314a419b055a572ae23a5bb9155eb6149e91bfe90953b7725ab8b876ed4745c6b8082f30c7ecae9c4aaab9930e178 0002-board-starqltechn-get-board-usable-add-bootcmd-and-d.patch +5e570a0070cd31bb4d9541542532229dbe15e28955428e8a6659de5e4140c89f82d635045d5594e6b9cc6b4bb3037ea4e2c6236433d65a7c814a0ec9c0f32004 u-boot-v2023.01-rc2.tar.gz +068453a2eb3e2e6a950a31cd014f1dd4eed99f327f09aae69f4e4e55edf99cbef640d2361ada5844c5a02b2242c5668800d6b88599886c257764378615b351f8 0001-starqltechn-enable-serial-console.patch +5e0dbe9a99c3931aba8d67510453058722f028ca3dbaeb8f12523b76b60349d2394175ffc25a6ea2395f5f65c5e86f563cd4db3794e17986c1085ca444613b0b 0002-sdm845-save-relocaddr-to-env-variables.patch +ea3e3c270d04da74a7ab993802467631af7c47a14b78dcb3e185b234ceec804841eb4b6c0919d6bdd30157126fdb44a99e829712f3b44c60dd794a2a3acb812c 0003-input-do-not-override-console-when-stdin-and-device-.patch +72b78a26737d9ee21854b71036ec5e31206be7cfe70e11ba583eb3e699da674db0db45ce9e51c30f1935aa8bcfa8ed6157899f129de55fb5966892490e6e7eb3 0004-wip-input-driver-for-gpio-buttons.patch +1060f0517d5fe7ad36156313b50f7814e73b1ccfec96fa01cfb66bd63c6d6e5343121024c6ccc32ecbf12eeed499b00de5d7df73882edafac65a4bd7cacb7067 0005-starqltechn-use-button-kbd-driver-for-navigating-boo.patch +e6217387c7e5f5766602feca99d3973c0a1780069d279e279b413425dc7ab1b6f4227eb0d108f17e6ccbeddb6ab99c5a6b236678980cf5a77dbff36fd1b1d2b0 0006-bootmenu-loop-over-menu-entries-with-one-key.patch "