[PATCH 1/6] bootstd: android: add support of bootimage v2
Android bootmeth only support boot image v3/4.
Add support of Android Boot Image version 2 [1]. Vendor boot image is only supported in version 3 and 4 so don't try to read it when header version if version is less than 3.
1:
Signed-off-by: Guillaume La Roque <glaroque@...> --- boot/bootmeth_android.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-)
diff --git a/boot/bootmeth_android.c b/boot/bootmeth_android.c index 19b1f2c377b9..2e7f85e4a708 100644 --- a/boot/bootmeth_android.c +++ b/boot/bootmeth_android.c @@ -259,16 +259,12 @@ static int android_read_bootflow(struct udevice *dev, struct bootflow *bflow) goto free_priv; } - if (priv->header_version != 4) { - log_debug("only boot.img v4 is supported %u\n", priv->header_version); - ret = -EINVAL; - goto free_priv; - } - - ret = scan_vendor_boot_part(bflow->blk, priv); - if (ret < 0) { - log_debug("scan vendor_boot failed: err=%d\n", ret); - goto free_priv; + if (priv->header_version >= 3) { + ret = scan_vendor_boot_part(bflow->blk, priv); + if (ret < 0) { + log_debug("scan vendor_boot failed: err=%d\n", ret); + goto free_priv; + } } /* @@ -476,12 +472,13 @@ static int boot_android_normal(struct bootflow *bflow) if (ret < 0) return log_msg_ret("read boot", ret); - ret = read_slotted_partition(desc, "vendor_boot", priv->slot, vloadaddr); - if (ret < 0) - return log_msg_ret("read vendor_boot", ret); - + if (priv->header_version >= 3) { + ret = read_slotted_partition(desc, "vendor_boot", priv->slot, vloadaddr); + if (ret < 0) + return log_msg_ret("read vendor_boot", ret); + set_avendor_bootimg_addr(vloadaddr); + } set_abootimg_addr(loadaddr); - set_avendor_bootimg_addr(vloadaddr); ret = bootm_boot_start(loadaddr, bflow->cmdline);
-- 2.34.1
|
[PATCH 0/6] Add support of Android Boot Image version 2 and non-AB image
Actually bootmethod android only support android boot image version 4 and with AB image, some old platform wtill use android boot image version 2 with AB or without AB slot.
This patchset add support of both version 2 and non-AB slot images. It's fixed in same time a boot issue seen on khadas vim3{l} board with 16GB eMMC
patchset was tested on khadas VIM3 and VIM3L with AOSP main branch and android-mainline kernel and with TI AM62P with android release provided by TI.
Signed-off-by: Guillaume La Roque <glaroque@...> --- Guillaume La Roque (6): bootstd: android: add support of bootimage v2 bootstd: android: add non-A/B image support configs: khadas-vim3{l}: fix userdata size configs: khadas-vim3l_android{_ab}: move on bootmeth android configs: khadas-vim3_android{_ab}: move on bootmeth android bootstd: Add test for Android boot image v2
arch/sandbox/dts/test.dts | 10 +++- boot/Kconfig | 1 - boot/bootmeth_android.c | 80 ++++++++++++++++++++++--------- configs/am62x_a53_android.config | 1 + configs/khadas-vim3_android_ab_defconfig | 7 ++- configs/khadas-vim3_android_defconfig | 7 ++- configs/khadas-vim3l_android_ab_defconfig | 7 ++- configs/khadas-vim3l_android_defconfig | 7 ++- configs/sandbox_defconfig | 1 + include/configs/khadas-vim3_android.h | 31 +++++++++--- include/configs/khadas-vim3l_android.h | 33 ++++++++++--- test/boot/bootflow.c | 29 +++++++++-- test/py/tests/test_ut.py | 49 +++++++++++++++++++ 13 files changed, 219 insertions(+), 44 deletions(-) --- base-commit: 9e1cd2f2cb86865bbc002ed961a095c7a8bcc989 change-id: 20241015-adnroidv2-a01dca609707 prerequisite-message-id: 20241017-android_ab_master-v5-0-43bfcc096d95@... prerequisite-patch-id: 2741d3997913068fd4ce70645feaf67036adf401 prerequisite-patch-id: 3aee9fe1151f7f358c37dd18068f2270cfd11bf9 prerequisite-patch-id: d43a2bb0407de9b4d76464f5edc7d08eecb6e637 prerequisite-patch-id: 887f326fb6118f3b032f843d4f9edd382a0f3e8f prerequisite-patch-id: 51498bd770f7fe82cf6954ba61564cfd4644aace prerequisite-patch-id: 93d7bac8e10fad672833df6647f346cfce38f008 prerequisite-message-id: 20241017-topic-fastboot-fixes-mkbootimg-v2-0-c3927102d931@... prerequisite-patch-id: 03ee7fe890d6cc5734ba5950fcda820466f9eee5 prerequisite-patch-id: cdef2f4a68a8ae2eb4ffee5467ef45d1638e5266 prerequisite-patch-id: 93aa15770f62ff17e55b74480456cf1f305de65e
Best regards, -- Guillaume La Roque <glaroque@...>
|
Re: [PATCH v3 2/6] treewide: bcb: move ab_select command to bcb subcommands
Hi Dmitry,
toggle quoted message
Show quoted text
On mer., oct. 16, 2024 at 18:48, Dmitry Rokosov <ddrokosov@...> wrote: [...] ``` Long help should use U_BOOT_LONGHELP, we normally handle this with #ifdef - see cmd/bootflow.c for example Thank you for pointing me to U_BOOT_LONGHELP. I have redesigned cmd/bcb.c to utilize the U_BOOT_LONGHELP(), U_BOOT_CMD_WITH_SUBCMDS(), and U_BOOT_SUBCMD_MKENT() functions. As a result, a significant amount of command management code has been removed from cmd/bcb.c, making it look much more compact.
To be honest, I think I missed the minargs parameter in U_BOOT_CMD_WITH_SUBCMDS(). Including minargs would enable us to avoid checking argc for a minimum value in the each subcmd callback and returning CMD_RET_USAGE in case of any errors.
Anyway, I will prepare v5 version with refactored cmd/bcb.c to U_BOOT_LONGHELP usage.
Thank you for your patience with all the back and forth on this. Looking forward to v5 ! Cheers Mattijs -- Thank you, Dmitry
|
Re: [PATCH v3 2/6] treewide: bcb: move ab_select command to bcb subcommands
Hi Dmitry,
toggle quoted message
Show quoted text
On mer., oct. 16, 2024 at 17:06, Dmitry Rokosov <ddrokosov@...> wrote: [...] I just run build on the my x86 Ubuntu machine.
$ cd uboot $ make mproper $ make sandbox_defconfig $ make -j$(nproc) I tried these commands: Here is the successfull build output:
I use: $ ~/work/upstream/u-boot-dfu/ dmitry/ab-dump-v3* gcc --version gcc (GCC) 14.2.1 20240912 (Red Hat 14.2.1-3) Copyright (C) 2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ~/work/upstream/u-boot-dfu/ dmitry/ab-dump-v3* ld --version GNU ld version 2.41-37.fc40 Copyright (C) 2023 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) a later version. This program has absolutely no warranty.
What toolchains do you use?
By default, my machine, which I typically use for cross-compilation, has an outdated toolchain version:
$ gcc --version gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ ld --version GNU ld (GNU Binutils for Ubuntu) 2.30 Copyright (C) 2018 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) a later version. This program has absolutely no warranty.
Thank you for sharing. that looks indeed very old and would explain why we see different results when building sandbox. According to this commit [1], you should use gcc 13.0.2 at least Would it be possible to update? [1] That's all.
I've already sent the v4 patch with #ifdef. I can prepare the v5 patch using the IS_ENABLED() macro and will aim to send it today.
But I have one question:
Do we really want to display the ab_select and ab_dump subcommands to users if these commands are just stubs? Perhaps we should consider adding #ifdef directives to the subcommand arrays. That's a valid concern. I don't think we should display the ab_select and ab_dump commands to the users but I still want to have IS_ENABLED wherever possible to keep the code simple. -- Thank you, Dmitry
|
[PATCH v4 2/5] treewide: bcb: move ab_select command to bcb subcommands
To enhance code organization, it is beneficial to consolidate all A/B BCB management routines into a single super-command. The 'bcb' command is an excellent candidate for this purpose.
This patch integrates the separate 'ab_select' command into the 'bcb' group as the 'ab_select' subcommand, maintaining the same parameter list for consistency.
Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- MAINTAINERS | 1 - cmd/Kconfig | 14 ------ cmd/Makefile | 1 - cmd/ab_select.c | 66 --------------------------- cmd/bcb.c | 75 +++++++++++++++++++++++++++++++ configs/am57xx_evm_defconfig | 1 - configs/am57xx_hs_evm_defconfig | 1 - configs/am57xx_hs_evm_usb_defconfig | 1 - configs/khadas-vim3_android_ab_defconfig | 1 - configs/khadas-vim3l_android_ab_defconfig | 1 - configs/sandbox64_defconfig | 2 + configs/sandbox_defconfig | 1 - doc/android/ab.rst | 12 ++--- include/configs/khadas-vim3_android.h | 2 +- include/configs/khadas-vim3l_android.h | 2 +- include/configs/meson64_android.h | 4 +- include/configs/ti_omap5_common.h | 4 +- test/py/tests/test_android/test_ab.py | 8 ++-- 18 files changed, 93 insertions(+), 104 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS index 7aefda93d017f07d616f0f6d191129914fbeb484..668ccec9ae6df47192b1af668e3fdbeb1dfa15ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -65,7 +65,6 @@ R: Sam Protsenko <semen.protsenko@...> S: Maintained T: git F: boot/android_ab.c -F: cmd/ab_select.c F: doc/android/ab.rst F: include/android_ab.h F: test/py/tests/test_android/test_ab.py diff --git a/cmd/Kconfig b/cmd/Kconfig index 37894eb80d66f98bb5a3b3745d207ddbf7af088d..e1a4a97b042db2491d55398ea1e879ce5a83930e 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1774,20 +1774,6 @@ config CMD_XXD endmenu -menu "Android support commands" - -config CMD_AB_SELECT - bool "ab_select" - depends on ANDROID_AB - help - On Android devices with more than one boot slot (multiple copies of - the kernel and system images) this provides a command to select which - slot should be used to boot from and register the boot attempt. This - is used by the new A/B update model where one slot is updated in the - background while running from the other slot. - -endmenu - if NET menuconfig CMD_NET diff --git a/cmd/Makefile b/cmd/Makefile index 91227f1249cbda5f7b383e8865c8cc23f3ad5f44..0fd7da3c0de91822c4299cc7034193c497d622b1 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -17,7 +17,6 @@ obj-$(CONFIG_CMD_2048) += 2048.o obj-$(CONFIG_CMD_ACPI) += acpi.o obj-$(CONFIG_CMD_ADDRMAP) += addrmap.o obj-$(CONFIG_CMD_AES) += aes.o -obj-$(CONFIG_CMD_AB_SELECT) += ab_select.o obj-$(CONFIG_CMD_ADC) += adc.o obj-$(CONFIG_CMD_ARMFLASH) += armflash.o obj-$(CONFIG_BLK) += blk_common.o diff --git a/cmd/ab_select.c b/cmd/ab_select.c deleted file mode 100644 index 7c178c728ca4c8b5bcba02a04eef2d6a7c86afb6..0000000000000000000000000000000000000000 --- a/cmd/ab_select.c +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: BSD-2-Clause -/* - * Copyright (C) 2017 The Android Open Source Project - */ - -#include <android_ab.h> -#include <command.h> -#include <env.h> -#include <part.h> - -static int do_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]) -{ - int ret; - struct blk_desc *dev_desc; - struct disk_partition part_info; - char slot[2]; - bool dec_tries = true; - - if (argc < 4) - return CMD_RET_USAGE; - - for (int i = 4; i < argc; i++) { - if (strcmp(argv[i], "--no-dec") == 0) { - dec_tries = false; - } else { - return CMD_RET_USAGE; - } - } - - /* Lookup the "misc" partition from argv[2] and argv[3] */ - if (part_get_info_by_dev_and_name_or_num(argv[2], argv[3], - &dev_desc, &part_info, - false) < 0) { - return CMD_RET_FAILURE; - } - - ret = ab_select_slot(dev_desc, &part_info, dec_tries); - if (ret < 0) { - printf("Android boot failed, error %d.\n", ret); - return CMD_RET_FAILURE; - } - - /* Android standard slot names are 'a', 'b', ... */ - slot[0] = BOOT_SLOT_NAME(ret); - slot[1] = '\0'; - env_set(argv[1], slot); - printf("ANDROID: Booting slot: %s\n", slot); - return CMD_RET_SUCCESS; -} - -U_BOOT_CMD(ab_select, 5, 0, do_ab_select, - "Select the slot used to boot from and register the boot attempt.", - "<slot_var_name> <interface> <dev[:part|#part_name]> [--no-dec]\n" - " - Load the slot metadata from the partition 'part' on\n" - " device type 'interface' instance 'dev' and store the active\n" - " slot in the 'slot_var_name' variable. This also updates the\n" - " Android slot metadata with a boot attempt, which can cause\n" - " successive calls to this function to return a different result\n" - " if the returned slot runs out of boot attempts.\n" - " - If 'part_name' is passed, preceded with a # instead of :, the\n" - " partition name whose label is 'part_name' will be looked up in\n" - " the partition table. This is commonly the \"misc\" partition.\n" - " - If '--no-dec' is set, the number of tries remaining will not\n" - " decremented for the selected boot slot\n" -); diff --git a/cmd/bcb.c b/cmd/bcb.c index 97a96c009641cc094645607ef833575f3c03fe4b..bf28726da91134fa287ca8aada884ed74ecc8f2b 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -8,6 +8,7 @@ #include <android_bootloader_message.h> #include <bcb.h> #include <command.h> +#include <android_ab.h> #include <display_options.h> #include <log.h> #include <part.h> @@ -23,6 +24,9 @@ enum bcb_cmd { BCB_CMD_FIELD_TEST, BCB_CMD_FIELD_DUMP, BCB_CMD_STORE, +#ifdef CONFIG_ANDROID_AB + BCB_CMD_AB_SELECT, +#endif }; static const char * const fields[] = { @@ -52,6 +56,10 @@ static int bcb_cmd_get(char *cmd) return BCB_CMD_STORE; if (!strcmp(cmd, "dump")) return BCB_CMD_FIELD_DUMP; +#ifdef CONFIG_ANDROID_AB + if (!strcmp(cmd, "ab_select")) + return BCB_CMD_AB_SELECT; +#endif else return -1; } @@ -85,6 +93,12 @@ static int bcb_is_misused(int argc, char *const argv[]) if (argc != 2) goto err; break; +#ifdef CONFIG_ANDROID_AB + case BCB_CMD_AB_SELECT: + if (argc != 4 && argc != 5) + goto err; + return 0; +#endif default: printf("Error: 'bcb %s' not supported\n", argv[0]); return -1; @@ -414,6 +428,46 @@ void bcb_reset(void) __bcb_reset(); } +#ifdef CONFIG_ANDROID_AB +static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, + char * const argv[]) +{ + int ret; + struct blk_desc *dev_desc; + struct disk_partition part_info; + char slot[2]; + bool dec_tries = true; + + for (int i = 4; i < argc; i++) { + if (strcmp(argv[i], "--no-dec") == 0) + dec_tries = false; + else + return CMD_RET_USAGE; + } + + /* Lookup the "misc" partition from argv[2] and argv[3] */ + if (part_get_info_by_dev_and_name_or_num(argv[2], argv[3], + &dev_desc, &part_info, + false) < 0) { + return CMD_RET_FAILURE; + } + + ret = ab_select_slot(dev_desc, &part_info, dec_tries); + if (ret < 0) { + printf("Android boot failed, error %d.\n", ret); + return CMD_RET_FAILURE; + } + + /* Android standard slot names are 'a', 'b', ... */ + slot[0] = BOOT_SLOT_NAME(ret); + slot[1] = '\0'; + env_set(argv[1], slot); + printf("ANDROID: Booting slot: %s\n", slot); + + return CMD_RET_SUCCESS; +} +#endif + static struct cmd_tbl cmd_bcb_sub[] = { U_BOOT_CMD_MKENT(load, CONFIG_SYS_MAXARGS, 1, do_bcb_load, "", ""), U_BOOT_CMD_MKENT(set, CONFIG_SYS_MAXARGS, 1, do_bcb_set, "", ""), @@ -421,6 +475,10 @@ static struct cmd_tbl cmd_bcb_sub[] = { U_BOOT_CMD_MKENT(test, CONFIG_SYS_MAXARGS, 1, do_bcb_test, "", ""), U_BOOT_CMD_MKENT(dump, CONFIG_SYS_MAXARGS, 1, do_bcb_dump, "", ""), U_BOOT_CMD_MKENT(store, CONFIG_SYS_MAXARGS, 1, do_bcb_store, "", ""), +#ifdef CONFIG_ANDROID_AB + U_BOOT_CMD_MKENT(ab_select, CONFIG_SYS_MAXARGS, 1, + do_bcb_ab_select, "", ""), +#endif }; static int do_bcb(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) @@ -460,6 +518,23 @@ U_BOOT_CMD( "bcb dump <field> - dump BCB <field>\n" "bcb store - store BCB back to <interface>\n" "\n" +#ifdef CONFIG_ANDROID_AB + "bcb ab_select -\n" + " Select the slot used to boot from and register the boot attempt.\n" + " <slot_var_name> <interface> <dev[:part|#part_name]> [--no-dec]\n" + " - Load the slot metadata from the partition 'part' on\n" + " device type 'interface' instance 'dev' and store the active\n" + " slot in the 'slot_var_name' variable. This also updates the\n" + " Android slot metadata with a boot attempt, which can cause\n" + " successive calls to this function to return a different result\n" + " if the returned slot runs out of boot attempts.\n" + " - If 'part_name' is passed, preceded with a # instead of :, the\n" + " partition name whose label is 'part_name' will be looked up in\n" + " the partition table. This is commonly the \"misc\" partition.\n" + " - If '--no-dec' is set, the number of tries remaining will not\n" + " decremented for the selected boot slot\n" + "\n" +#endif "Legend:\n" "<interface> - storage device interface (virtio, mmc, etc)\n" "<dev> - storage device index containing the BCB partition\n" diff --git a/configs/am57xx_evm_defconfig b/configs/am57xx_evm_defconfig index efc154eda043ff3ea08194288e33792ce48282f9..b793f00babe474ea3f15292fb4015a7120401238 100644 --- a/configs/am57xx_evm_defconfig +++ b/configs/am57xx_evm_defconfig @@ -48,7 +48,6 @@ CONFIG_CMD_SPL=y CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2 CONFIG_CMD_BCB=y # CONFIG_CMD_SETEXPR is not set -CONFIG_CMD_AB_SELECT=y CONFIG_BOOTP_DNS2=y # CONFIG_CMD_PMIC is not set CONFIG_CMD_AVB=y diff --git a/configs/am57xx_hs_evm_defconfig b/configs/am57xx_hs_evm_defconfig index 0f8533e15dbd7c0186a513b27b46a0407b6f79f1..5cacd7f9cc53d338d52120186b16684add93fd21 100644 --- a/configs/am57xx_hs_evm_defconfig +++ b/configs/am57xx_hs_evm_defconfig @@ -44,7 +44,6 @@ CONFIG_CMD_ADTIMG=y CONFIG_CMD_ABOOTIMG=y CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2 CONFIG_CMD_BCB=y -CONFIG_CMD_AB_SELECT=y CONFIG_BOOTP_DNS2=y # CONFIG_CMD_PMIC is not set CONFIG_CMD_AVB=y diff --git a/configs/am57xx_hs_evm_usb_defconfig b/configs/am57xx_hs_evm_usb_defconfig index 81a938339d5934605cb7defa04ea92f76468b21a..2d8068ecdc79c01c1281ab3873fc892aa4c96be7 100644 --- a/configs/am57xx_hs_evm_usb_defconfig +++ b/configs/am57xx_hs_evm_usb_defconfig @@ -46,7 +46,6 @@ CONFIG_CMD_ADTIMG=y CONFIG_CMD_ABOOTIMG=y CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2 CONFIG_CMD_BCB=y -CONFIG_CMD_AB_SELECT=y CONFIG_BOOTP_DNS2=y # CONFIG_CMD_PMIC is not set CONFIG_CMD_AVB=y diff --git a/configs/khadas-vim3_android_ab_defconfig b/configs/khadas-vim3_android_ab_defconfig index 510fe4f8928fe39a040a615636fa550b3e0dc5db..de5357c45cbfe4742d9491a29386850570acc235 100644 --- a/configs/khadas-vim3_android_ab_defconfig +++ b/configs/khadas-vim3_android_ab_defconfig @@ -47,7 +47,6 @@ CONFIG_CMD_SPI=y CONFIG_CMD_USB=y CONFIG_CMD_USB_MASS_STORAGE=y # CONFIG_CMD_SETEXPR is not set -CONFIG_CMD_AB_SELECT=y CONFIG_CMD_REGULATOR=y CONFIG_CMD_AVB=y CONFIG_OF_CONTROL=y diff --git a/configs/khadas-vim3l_android_ab_defconfig b/configs/khadas-vim3l_android_ab_defconfig index d2da8ff2a69b209b8fb22a48be537bd4dd17a3bb..4d7b90f23002e464d7dc40516bcd3161b0f59439 100644 --- a/configs/khadas-vim3l_android_ab_defconfig +++ b/configs/khadas-vim3l_android_ab_defconfig @@ -47,7 +47,6 @@ CONFIG_CMD_SPI=y CONFIG_CMD_USB=y CONFIG_CMD_USB_MASS_STORAGE=y # CONFIG_CMD_SETEXPR is not set -CONFIG_CMD_AB_SELECT=y CONFIG_CMD_REGULATOR=y CONFIG_CMD_AVB=y CONFIG_OF_CONTROL=y diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig index 1b3b8c6e788cd6845b61e62a06b730da28831edc..b5f80b8572ad32b2a92d4fe82c9068c453c11dfd 100644 --- a/configs/sandbox64_defconfig +++ b/configs/sandbox64_defconfig @@ -27,6 +27,7 @@ CONFIG_CONSOLE_RECORD=y CONFIG_CONSOLE_RECORD_OUT_SIZE=0x6000 CONFIG_PRE_CONSOLE_BUFFER=y CONFIG_DISPLAY_BOARDINFO_LATE=y +CONFIG_ANDROID_AB=y CONFIG_CMD_CPU=y CONFIG_CMD_LICENSE=y CONFIG_CMD_BOOTZ=y @@ -46,6 +47,7 @@ CONFIG_CMD_MD5SUM=y CONFIG_CMD_MEMINFO=y CONFIG_CMD_MX_CYCLIC=y CONFIG_CMD_MEMTEST=y +CONFIG_CMD_BCB=y CONFIG_CMD_CLK=y CONFIG_CMD_DEMO=y CONFIG_CMD_GPIO=y diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index f31ecef4f58ee201f93c61cd072d6f688b091c3b..749f53559f708ee52fb7c9c638aedcbcb2f23b72 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -103,7 +103,6 @@ CONFIG_CMD_AXI=y CONFIG_CMD_CAT=y CONFIG_CMD_SETEXPR_FMT=y CONFIG_CMD_XXD=y -CONFIG_CMD_AB_SELECT=y CONFIG_CMD_DHCP6=y CONFIG_BOOTP_DNS2=y CONFIG_CMD_PCAP=y diff --git a/doc/android/ab.rst b/doc/android/ab.rst index 2adf88781d60b61d1b3c74efe976a684b590c813..7fd4aeb6a724b839de9be5e9a8843ade2ad3667e 100644 --- a/doc/android/ab.rst +++ b/doc/android/ab.rst @@ -18,7 +18,7 @@ The A/B updates support can be activated by specifying next options in your board configuration file:: CONFIG_ANDROID_AB=y - CONFIG_CMD_AB_SELECT=y + CONFIG_CMD_BCB=y The disk space on target device must be partitioned in a way so that each partition which needs to be updated has two or more instances. The name of @@ -26,8 +26,8 @@ each instance must be formed by adding suffixes: ``_a``, ``_b``, ``_c``, etc. For example: ``boot_a``, ``boot_b``, ``system_a``, ``system_b``, ``vendor_a``, ``vendor_b``. -As a result you can use ``ab_select`` command to ensure A/B boot process in your -boot script. This command analyzes and processes A/B metadata stored on a +As a result you can use ``bcb ab_select`` command to ensure A/B boot process in +your boot script. This command analyzes and processes A/B metadata stored on a special partition (e.g. ``misc``) and determines which slot should be used for booting up. @@ -42,15 +42,15 @@ Command usage .. code-block:: none - ab_select <slot_var_name> <interface> <dev[:part_number|#part_name]> + bcb ab_select <slot_var_name> <interface> <dev[:part_number|#part_name]> for example:: - => ab_select slot_name mmc 1:4 + => bcb ab_select slot_name mmc 1:4 or:: - => ab_select slot_name mmc 1#misc + => bcb ab_select slot_name mmc 1#misc Result:: diff --git a/include/configs/khadas-vim3_android.h b/include/configs/khadas-vim3_android.h index da6adf6c413add03413f40987959a24ad0d41e62..5468ac5878b34b82a70db84c209bab9f3a9dd79f 100644 --- a/include/configs/khadas-vim3_android.h +++ b/include/configs/khadas-vim3_android.h @@ -12,7 +12,7 @@ #define LOGO_UUID "43a3305d-150f-4cc9-bd3b-38fca8693846;" #define ROOT_UUID "ddb8c3f6-d94d-4394-b633-3134139cc2e0;" -#if defined(CONFIG_CMD_AB_SELECT) +#if defined(CONFIG_CMD_BCB) && defined(CONFIG_ANDROID_AB) #define PARTS_DEFAULT \ "uuid_disk=${uuid_gpt_disk};" \ "name=logo,start=512K,size=2M,uuid=" LOGO_UUID \ diff --git a/include/configs/khadas-vim3l_android.h b/include/configs/khadas-vim3l_android.h index b1768e2d821176452254fb07f2e3747402b9b4fd..32821b942109feae5ade9f7fd02924bca34cf58b 100644 --- a/include/configs/khadas-vim3l_android.h +++ b/include/configs/khadas-vim3l_android.h @@ -12,7 +12,7 @@ #define LOGO_UUID "43a3305d-150f-4cc9-bd3b-38fca8693846;" #define ROOT_UUID "ddb8c3f6-d94d-4394-b633-3134139cc2e0;" -#if defined(CONFIG_CMD_AB_SELECT) +#if defined(CONFIG_CMD_BCB) && defined(CONFIG_ANDROID_AB) #define PARTS_DEFAULT \ "uuid_disk=${uuid_gpt_disk};" \ "name=logo,start=512K,size=2M,uuid=" LOGO_UUID \ diff --git a/include/configs/meson64_android.h b/include/configs/meson64_android.h index c0e977abb01fb9efb7a462906a0073c84c800897..cc626dbf02418a49b367c8386797ce6ffc28c85b 100644 --- a/include/configs/meson64_android.h +++ b/include/configs/meson64_android.h @@ -47,13 +47,13 @@ #define AVB_VERIFY_CMD "" #endif -#if defined(CONFIG_CMD_AB_SELECT) +#if defined(CONFIG_CMD_BCB) && defined(CONFIG_ANDROID_AB) #define ANDROIDBOOT_GET_CURRENT_SLOT_CMD "get_current_slot=" \ "if part number mmc ${mmcdev} " CONTROL_PARTITION " control_part_number; " \ "then " \ "echo " CONTROL_PARTITION \ " partition number:${control_part_number};" \ - "ab_select current_slot mmc ${mmcdev}:${control_part_number};" \ + "bcb ab_select current_slot mmc ${mmcdev}:${control_part_number};" \ "else " \ "echo " CONTROL_PARTITION " partition not found;" \ "fi;\0" diff --git a/include/configs/ti_omap5_common.h b/include/configs/ti_omap5_common.h index 26494ae980108ad84eb173a0deaa7b701a5309d4..26b6c1cd188c05371c6455cd6247f07a1773d885 100644 --- a/include/configs/ti_omap5_common.h +++ b/include/configs/ti_omap5_common.h @@ -93,13 +93,13 @@ #define CONTROL_PARTITION "misc" -#if defined(CONFIG_CMD_AB_SELECT) +#if defined(CONFIG_CMD_BCB) && defined(CONFIG_ANDROID_AB) #define AB_SELECT_SLOT \ "if part number mmc 1 " CONTROL_PARTITION " control_part_number; " \ "then " \ "echo " CONTROL_PARTITION \ " partition number:${control_part_number};" \ - "ab_select slot_name mmc ${mmcdev}:${control_part_number};" \ + "bcb ab_select slot_name mmc ${mmcdev}:${control_part_number};" \ "else " \ "echo " CONTROL_PARTITION " partition not found;" \ "exit;" \ diff --git a/test/py/tests/test_android/test_ab.py b/test/py/tests/test_android/test_ab.py index c79cb07fda35dfeb608ac7345cd3f22744e2e491..0d7b7995a9fab6e3daad748721818b9e4cfac452 100644 --- a/test/py/tests/test_android/test_ab.py +++ b/test/py/tests/test_android/test_ab.py @@ -56,20 +56,20 @@ def ab_disk_image(u_boot_console): @pytest.mark.boardspec('sandbox') @pytest.mark.buildconfigspec('android_ab') -@...('cmd_ab_select') +@...('cmd_bcb') @pytest.mark.requiredtool('sgdisk') def test_ab(ab_disk_image, u_boot_console): - """Test the 'ab_select' command.""" + """Test the 'bcb ab_select' command.""" u_boot_console.run_command('host bind 0 ' + ab_disk_image.path) - output = u_boot_console.run_command('ab_select slot_name host 0#misc') + output = u_boot_console.run_command('bcb ab_select slot_name host 0#misc') assert 're-initializing A/B metadata' in output assert 'Attempting slot a, tries remaining 7' in output output = u_boot_console.run_command('printenv slot_name') assert 'slot_name=a' in output - output = u_boot_console.run_command('ab_select slot_name host 0:1') + output = u_boot_console.run_command('bcb ab_select slot_name host 0:1') assert 'Attempting slot b, tries remaining 7' in output output = u_boot_console.run_command('printenv slot_name') assert 'slot_name=b' in output
-- 2.43.0
|
[PATCH v4 5/5] common: android_ab: fix slot suffix for abc block
To align with the official Android BCB (Bootloader Control Block) specifications, it's important to note that the slot_suffix should start with an underscore symbol.
For a comprehensive understanding of the expected slot_suffix format in userspace, please refer to the provided reference [1].
Links: [1] -
Based-on: Reviewed-by: Mattijs Korpershoek <mkorpershoek@...> Reviewed-by: Simon Glass <sjg@...> Tested-by: Guillaume La Roque <glaroque@...> Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- boot/android_ab.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/boot/android_ab.c b/boot/android_ab.c index c93e51541019d0fe793303c4b3d5286df061906f..a287eac04fe88ad08bdcf1b1b1d6e564d503d800 100644 --- a/boot/android_ab.c +++ b/boot/android_ab.c @@ -52,7 +52,7 @@ static int ab_control_default(struct bootloader_control *abc) if (!abc) return -EFAULT; - memcpy(abc->slot_suffix, "a\0\0\0", 4); + memcpy(abc->slot_suffix, "_a\0\0", 4); abc->magic = BOOT_CTRL_MAGIC; abc->version = BOOT_CTRL_VERSION; abc->nb_slot = NUM_SLOTS; @@ -328,7 +328,8 @@ int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info, * or the device tree. */ memset(slot_suffix, 0, sizeof(slot_suffix)); - slot_suffix[0] = BOOT_SLOT_NAME(slot); + slot_suffix[0] = '_'; + slot_suffix[1] = BOOT_SLOT_NAME(slot); if (memcmp(abc->slot_suffix, slot_suffix, sizeof(slot_suffix))) { memcpy(abc->slot_suffix, slot_suffix,
-- 2.43.0
|
Re: [PATCH v3 2/6] treewide: bcb: move ab_select command to bcb subcommands
Hello Mattijs, On Sat, Oct 12, 2024 at 10:49:08AM +0200, Mattijs Korpershoek wrote: Hi Dmitry,
On ven., oct. 11, 2024 at 21:00, Dmitry Rokosov <ddrokosov@...> wrote:
On Fri, Oct 11, 2024 at 04:20:39PM +0200, Mattijs Korpershoek wrote:
On ven., oct. 11, 2024 at 15:30, "Mattijs Korpershoek via groups.io" <mkorpershoek@...> wrote:
Hi Dmitry,
Thank you for the patch.
On mar., oct. 08, 2024 at 23:18, Dmitry Rokosov <ddrokosov@...> wrote:
To enhance code organization, it is beneficial to consolidate all A/B BCB management routines into a single super-command. The 'bcb' command is an excellent candidate for this purpose.
This patch integrates the separate 'ab_select' command into the 'bcb' group as the 'ab_select' subcommand, maintaining the same parameter list for consistency.
Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- MAINTAINERS | 1 - cmd/Kconfig | 15 +------ cmd/Makefile | 1 - cmd/ab_select.c | 66 ------------------------------- cmd/bcb.c | 63 +++++++++++++++++++++++++++++ configs/am57xx_hs_evm_usb_defconfig | 1 - configs/khadas-vim3_android_ab_defconfig | 1 - configs/khadas-vim3l_android_ab_defconfig | 1 - configs/sandbox64_defconfig | 4 +- configs/sandbox_defconfig | 4 +- doc/android/ab.rst | 12 +++--- include/configs/khadas-vim3_android.h | 2 +- include/configs/khadas-vim3l_android.h | 2 +- include/configs/meson64_android.h | 4 +- include/configs/ti_omap5_common.h | 4 +- test/py/tests/test_android/test_ab.py | 8 ++-- 16 files changed, 85 insertions(+), 104 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS index 7aefda93d017f07d616f0f6d191129914fbeb484..668ccec9ae6df47192b1af668e3fdbeb1dfa15ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -65,7 +65,6 @@ R: Sam Protsenko <semen.protsenko@...> S: Maintained T: git F: boot/android_ab.c -F: cmd/ab_select.c F: doc/android/ab.rst F: include/android_ab.h F: test/py/tests/test_android/test_ab.py diff --git a/cmd/Kconfig b/cmd/Kconfig index dd33266cec70a2b134b7244acae1b7f098b921e8..11e8d363dc9b137723a86a240412d82dd0dbccc5 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1067,6 +1067,7 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS + depends on ANDROID_AB When building with khadas-vim3_android_defconfig, we can see that CMD_BCB is no longer part of that build:
$ grep CMD_BCB .config <empty>
However, if we look at include/configs/meson64_android.h, we can see that the "bcb" command is not only used for checking the _slot suffix.
It's also used for checking the bootloader reason. For example, in BOOTENV_DEV_FASTBOOT, we call:
"if bcb test command = bootonce-bootloader; then " \
Since CMD_BCB is no longer part of the .config (due to this dependency), the boot script now shows errors:
""" U-Boot 2024.10-00796-g969325278805 (Oct 11 2024 - 14:46:00 +0200) khadas-vim3
Model: Khadas VIM3 SoC: Amlogic Meson G12B (A311D) Revision 29:b (10:2) DRAM: 2 GiB (effective 3.8 GiB) Core: 411 devices, 36 uclasses, devicetree: separate MMC: mmc@ffe03000: 0, mmc@ffe05000: 1, mmc@ffe07000: 2 Loading Environment from MMC... fs uses incompatible features: 00020000, ignoring Reading from MMC(2)... *** Warning - bad CRC, using default environment
In: usbkbd,serial Out: vidconsole,serial Err: vidconsole,serial Net: eth0: ethernet@ff3f0000
Hit any key to stop autoboot: 0 Verify GPT: success! Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist dev: pinctrl@14 dev: pinctrl@40 gpio: pin 88 (gpio 88) value is 1 Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist Loading Android boot partition... switch to partitions #0, OK mmc2(part 0) is current device """
I know we should not be using a boot script, nor non A/B configs but it's a bummer that this series breaks an upstream defconfig (khadas-vim3_android_defconfig)
My recommendation:
Make BCB_CMD_AB_SELECT implementation dependant on ANDROID_AB. This way, users can use CMD_BCB with and without ANDROID_AB being enabled.
We could do: When ANDROID_AB=y, implement bcb ab_select subcommand When ANDROID_AB=n, command is not accessible.
I'll send you a diff shortly for this. Here is an illustration on how that would work:
diff --git a/cmd/Kconfig b/cmd/Kconfig index 861c31e26408..e1a4a97b042d 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1055,7 +1055,6 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS - depends on ANDROID_AB help Read/modify/write the fields of Bootloader Control Block, usually stored on the flash "misc" partition with its structure defined in: diff --git a/cmd/bcb.c b/cmd/bcb.c index 4fd32186ae65..4fe634f14cc5 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -438,6 +438,9 @@ static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, char slot[2]; bool dec_tries = true; + if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + for (int i = 4; i < argc; i++) { if (!strcmp(argv[i], "--no-dec")) dec_tries = false; @@ -474,6 +477,9 @@ static int do_bcb_ab_dump(struct cmd_tbl *cmdtp, int flag, int argc, struct blk_desc *dev_desc; struct disk_partition part_info; + if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + if (part_get_info_by_dev_and_name_or_num(argv[1], argv[2], &dev_desc, &part_info, false) < 0) {
We also need to include an #ifdef directive for the ab_select_slot() function usage; otherwise, the code will not compile successfully. Are you sure? Per my understanding, it's possible that the compiler optimizes this out because CONFIG_IS_ENABLED(AB_SELECT) is known as build time.
When I tried this diff with khadas-vim3_android_defconfig I did not see any build errors. I will try again early next week.
As I recall, the IS_ENABLED() mechanism serves as a runtime checker to determine whether specific CONFIG_* options are enabled. Consequently, all code paths under this mechanism are always compiled. I attempted to disable CONFIG_ANDROID_AB for the sandbox_defconfig, but it resulted in the expected linker error. /tmp/ccAvYrKL.ltrans25.ltrans.o: In function `do_bcb_ab_select': <artificial>:(.text+0x6d5d): undefined reference to `ab_select_slot' collect2: error: ld returned 1 exit status Makefile:1813: recipe for target 'u-boot' failed make: *** [u-boot] Error 1 I have already prepared a new version using #ifdef directives. I will send it shortly. [...] -- Thank you, Dmitry
|
Re: [PATCH 2/2] ARM: meson: add support for Libre Computer aml-s905d3-cc
On Fri, 20 Sept 2024 at 16:33, Neil Armstrong <neil.armstrong@...> wrote: Add support for the Libre Computer aml-s905d3-cc "Solitude" board:
The Solitude board has a Credit Card form factor, similar to the the previous "Le Potato" card, but with the Amlogic A311D SoC, MIPI DSI and CSI connectors. PoE header and a single USB2 Type-C connector replacing the microUSB one for power and USB 2.0.
The board has an embedded SPI NOR flash, and EFI Capsule support is added.
The GUID is dynamically generated for the board, to get it: => efidebug capsule esrt ======================================== ESRT: fw_resource_count=1 ESRT: fw_resource_count_max=1 ESRT: fw_resource_version=1 [entry 0]============================== ESRT: fw_class=4302C3CB-2502-5EFE-87E0-894A8A322893 ESRT: fw_type=unknown ESRT: fw_version=0 ESRT: lowest_supported_fw_version=0 ESRT: capsule_flags=0 ESRT: last_attempt_version=0 ESRT: last_attempt_status=success ========================================
On the host (with the aml_encrypt_g12a result binary): $ eficapsule --guid 4302C3CB-2502-5EFE-87E0-894A8A322893 -i 1 u-boot.bin u-boot.cap
On the board (from USB disk containing u-boot.cap at root): => load usb 0:1 $kernel_addr_r u-boot.cap => efidebug capsule update $kernel_addr_r
The binary will then be flashed on the SPI.
Signed-off-by: Neil Armstrong <neil.armstrong@...> --- .../dts/meson-sm1-s905d3-libretech-cc-u-boot.dtsi | 15 +++ board/libre-computer/aml-s905d3-cc/MAINTAINERS | 7 ++ board/libre-computer/aml-s905d3-cc/Makefile | 6 ++ board/libre-computer/aml-s905d3-cc/aml-s905d3-cc.c | 44 +++++++++ configs/aml-s905d3-cc_defconfig | 108 +++++++++++++++++++++ doc/board/amlogic/aml-s905d3-cc.rst | 46 +++++++++ doc/board/amlogic/index.rst | 1 + 7 files changed, 227 insertions(+)
diff --git a/arch/arm/dts/meson-sm1-s905d3-libretech-cc-u-boot.dtsi b/arch/arm/dts/meson-sm1-s905d3-libretech-cc-u-boot.dtsi new file mode 100644 index 00000000000..1c4f019120f --- /dev/null +++ b/arch/arm/dts/meson-sm1-s905d3-libretech-cc-u-boot.dtsi @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: (GPL-2.0+ OR MIT) +/* + * Copyright (c) 2023 Neil Armstrong <neil.armstrong@...> + */ + +#include "meson-g12-common-u-boot.dtsi" + +&sd_emmc_c { + pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_4b_pins>, <&emmc_ds_pins>; + bus-width = <4>; +}; + +&spifc { + status = "okay"; +}; diff --git a/board/libre-computer/aml-s905d3-cc/MAINTAINERS b/board/libre-computer/aml-s905d3-cc/MAINTAINERS new file mode 100644 index 00000000000..4b75c815c07 --- /dev/null +++ b/board/libre-computer/aml-s905d3-cc/MAINTAINERS @@ -0,0 +1,7 @@ +LIBRE-COMPUTER AML-S905D3-CC +M: Neil Armstrong <neil.armstrong@...> +S: Maintained +L: [email protected] +F: board/amlogic/aml-s905d3-cc/ +F: configs/aml-s905d3-cc_defconfig +F: doc/board/amlogic/aml-s905d3-cc.rst diff --git a/board/libre-computer/aml-s905d3-cc/Makefile b/board/libre-computer/aml-s905d3-cc/Makefile new file mode 100644 index 00000000000..7d2c41e6436 --- /dev/null +++ b/board/libre-computer/aml-s905d3-cc/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2016 BayLibre, SAS +# Author: Neil Armstrong <narmstrong@...> + +obj-y := aml-s905d3-cc.o diff --git a/board/libre-computer/aml-s905d3-cc/aml-s905d3-cc.c b/board/libre-computer/aml-s905d3-cc/aml-s905d3-cc.c new file mode 100644 index 00000000000..f641db5a494 --- /dev/null +++ b/board/libre-computer/aml-s905d3-cc/aml-s905d3-cc.c @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2016 BayLibre, SAS + * Author: Neil Armstrong <narmstrong@...> + */ + +#include <dm.h> +#include <env.h> +#include <init.h> +#include <net.h> +#include <efi_loader.h> +#include <asm/io.h> +#include <asm/arch/eth.h> + +struct efi_fw_image fw_images[] = { + { + .fw_name = u"AML_S905D3_CC_BOOT", + .image_index = 1, + }, +}; + +struct efi_capsule_update_info update_info = { + .dfu_string = "sf 0:0=u-boot-bin raw 0 0x10000", + .num_images = ARRAY_SIZE(fw_images), + .images = fw_images, +}; + + +#if IS_ENABLED(CONFIG_SET_DFU_ALT_INFO) +void set_dfu_alt_info(char *interface, char *devstr) +{ + if (strcmp(interface, "ram") == 0) + env_set("dfu_alt_info", "fitimage ram 0x08080000 0x4000000"); + else if (IS_ENABLED(CONFIG_EFI_HAVE_CAPSULE_SUPPORT)) + env_set("dfu_alt_info", update_info.dfu_string); +} +#endif + +int misc_init_r(void) +{ + meson_generate_serial_ethaddr(); + + return 0; +} diff --git a/configs/aml-s905d3-cc_defconfig b/configs/aml-s905d3-cc_defconfig new file mode 100644 index 00000000000..a6e5d584c0a --- /dev/null +++ b/configs/aml-s905d3-cc_defconfig @@ -0,0 +1,108 @@ +CONFIG_ARM=y +CONFIG_SYS_VENDOR="libre-computer" +CONFIG_SYS_BOARD="aml-s905d3-cc" +CONFIG_ARCH_MESON=y +CONFIG_TEXT_BASE=0x01000000 +CONFIG_NR_DRAM_BANKS=1 +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x20000000 +CONFIG_ENV_SIZE=0x2000 +CONFIG_ENV_OFFSET=0xFFFF0000 +CONFIG_ENV_SECT_SIZE=0x10000 +CONFIG_DM_GPIO=y +CONFIG_DEFAULT_DEVICE_TREE="amlogic/meson-sm1-s905d3-libretech-cc" +CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_DM_RESET=y +CONFIG_MESON_G12A=y +CONFIG_DEBUG_UART_BASE=0xff803000 +CONFIG_DEBUG_UART_CLOCK=24000000 +CONFIG_IDENT_STRING="aml-s905d3-cc" +CONFIG_SYS_LOAD_ADDR=0x1000000 +CONFIG_DEBUG_UART=y +CONFIG_REMAKE_ELF=y +CONFIG_FIT=y +CONFIG_FIT_SIGNATURE=y +CONFIG_FIT_VERBOSE=y +CONFIG_LEGACY_IMAGE_FORMAT=y +CONFIG_OF_BOARD_SETUP=y +# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_MISC_INIT_R=y +CONFIG_SYS_MAXARGS=32 +# CONFIG_CMD_BDI is not set +# CONFIG_CMD_IMI is not set +CONFIG_CMD_DFU=y +CONFIG_CMD_NVEDIT_EFI=y +CONFIG_CMD_GPIO=y +# CONFIG_CMD_LOADS is not set +CONFIG_CMD_MMC=y +CONFIG_CMD_SF_TEST=y +CONFIG_CMD_SPI=y +CONFIG_CMD_USB=y +CONFIG_CMD_USB_MASS_STORAGE=y +CONFIG_CMD_EFIDEBUG=y +# CONFIG_CMD_SETEXPR is not set +CONFIG_CMD_REGULATOR=y +CONFIG_OF_CONTROL=y +CONFIG_ENV_IS_IN_SPI_FLASH=y +CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_ADC=y +CONFIG_SARADC_MESON=y +CONFIG_BUTTON=y +CONFIG_BUTTON_ADC=y +CONFIG_DFU_RAM=y +CONFIG_DFU_SF=y +CONFIG_SET_DFU_ALT_INFO=y +CONFIG_MMC_MESON_GX=y +CONFIG_MTD=y +CONFIG_DM_MTD=y +CONFIG_DM_SPI_FLASH=y +CONFIG_SPI_FLASH_GIGADEVICE=y +CONFIG_SPI_FLASH_SPANSION=y +CONFIG_PHY_REALTEK=y +CONFIG_DM_MDIO=y +CONFIG_DM_MDIO_MUX=y +CONFIG_ETH_DESIGNWARE_MESON8B=y +CONFIG_MDIO_MUX_MESON_G12A=y +CONFIG_MESON_G12A_USB_PHY=y +CONFIG_PINCTRL=y +CONFIG_PINCTRL_MESON_G12A=y +CONFIG_POWER_DOMAIN=y +CONFIG_MESON_EE_POWER_DOMAIN=y +CONFIG_DM_REGULATOR=y +CONFIG_DM_REGULATOR_FIXED=y +CONFIG_DEBUG_UART_ANNOUNCE=y +CONFIG_DEBUG_UART_SKIP_INIT=y +CONFIG_MESON_SERIAL=y +CONFIG_SPI=y +CONFIG_DM_SPI=y +CONFIG_MESON_SPIFC=y +CONFIG_SYSINFO=y +CONFIG_SYSINFO_SMBIOS=y +CONFIG_USB=y +CONFIG_DM_USB_GADGET=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y +CONFIG_USB_DWC3=y +# CONFIG_USB_DWC3_GADGET is not set +CONFIG_USB_DWC3_MESON_G12A=y +CONFIG_USB_KEYBOARD=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_VENDOR_NUM=0x1b8e +CONFIG_USB_GADGET_PRODUCT_NUM=0xfada +CONFIG_USB_GADGET_DWC2_OTG=y +CONFIG_USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8=y +CONFIG_USB_GADGET_DOWNLOAD=y +CONFIG_VIDEO=y +# CONFIG_VIDEO_BPP8 is not set +# CONFIG_VIDEO_BPP16 is not set +CONFIG_SYS_WHITE_ON_BLACK=y +CONFIG_VIDEO_MESON=y +CONFIG_VIDEO_DT_SIMPLEFB=y +CONFIG_SPLASH_SCREEN=y +CONFIG_SPLASH_SCREEN_ALIGN=y +CONFIG_VIDEO_BMP_RLE8=y +CONFIG_BMP_16BPP=y +CONFIG_BMP_24BPP=y +CONFIG_BMP_32BPP=y +CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y +CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y diff --git a/doc/board/amlogic/aml-s905d3-cc.rst b/doc/board/amlogic/aml-s905d3-cc.rst new file mode 100644 index 00000000000..083a591fc52 --- /dev/null +++ b/doc/board/amlogic/aml-s905d3-cc.rst @@ -0,0 +1,46 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +U-Boot for Libre Computer AML-S905D3-CC 'Solitude' (S905D3) +=========================================================== + +AML-S905D3-CC is a Single Board Computer manufactured by Libre Computer Technology with +the following specifications: + + - Amlogic S905D3 Cortex-A55 quad-core SoC + - 2 or 4GB LPDDR4 SDRAM + - Gigabit Ethernet + - HDMI 2.1 display + - 40-pin GPIO header + - 4 x USB 3.0 Host, 1 x USB 2.0 Type-C + - eMMC 5.x SM Interface for Libre Computer Modules + - microSD + - Infrared receiver + +Schematics are available on the manufacturer website. + +U-Boot Compilation +------------------ + +.. code-block:: bash + + $ export CROSS_COMPILE=aarch64-none-elf- + $ make aml-s905d3-cc_defconfig + $ make + +U-Boot Signing with Pre-Built FIP repo +-------------------------------------- + +.. code-block:: bash + + $ git clone --depth=1 + $ cd amlogic-boot-fip + $ mkdir my-output-dir + $ ./build-fip.sh aml-s905d3-cc /path/to/u-boot/u-boot.bin my-output-dir + +Then write U-Boot to SD or eMMC with: + +.. code-block:: bash + + $ DEV=/dev/boot_device + $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=512 skip=1 seek=1 + $ dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=1 count=440 diff --git a/doc/board/amlogic/index.rst b/doc/board/amlogic/index.rst index de91b21f977..dcd935224ac 100644 --- a/doc/board/amlogic/index.rst +++ b/doc/board/amlogic/index.rst @@ -86,6 +86,7 @@ Board Documentation :maxdepth: 1
aml-a311d-cc + aml-s905d3-cc bananapi-cm4io bananapi-m2pro bananapi-m2s
-- 2.34.1
Tested basic booting of debian and yocto. Tested-by: Ilias Apalodimas <ilias.apalodimas@...>
|
Re: [PATCH v3 2/6] treewide: bcb: move ab_select command to bcb subcommands
Hi Dmitry, On Mon, 14 Oct 2024 at 14:38, Dmitry Rokosov <ddrokosov@...> wrote: Hello Mattijs,
On Sat, Oct 12, 2024 at 10:49:08AM +0200, Mattijs Korpershoek wrote:
Hi Dmitry,
On ven., oct. 11, 2024 at 21:00, Dmitry Rokosov <ddrokosov@...> wrote:
On Fri, Oct 11, 2024 at 04:20:39PM +0200, Mattijs Korpershoek wrote:
On ven., oct. 11, 2024 at 15:30, "Mattijs Korpershoek via groups.io" <mkorpershoek@...> wrote:
Hi Dmitry,
Thank you for the patch.
On mar., oct. 08, 2024 at 23:18, Dmitry Rokosov <ddrokosov@...> wrote:
To enhance code organization, it is beneficial to consolidate all A/B BCB management routines into a single super-command. The 'bcb' command is an excellent candidate for this purpose.
This patch integrates the separate 'ab_select' command into the 'bcb' group as the 'ab_select' subcommand, maintaining the same parameter list for consistency.
Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- MAINTAINERS | 1 - cmd/Kconfig | 15 +------ cmd/Makefile | 1 - cmd/ab_select.c | 66 ------------------------------- cmd/bcb.c | 63 +++++++++++++++++++++++++++++ configs/am57xx_hs_evm_usb_defconfig | 1 - configs/khadas-vim3_android_ab_defconfig | 1 - configs/khadas-vim3l_android_ab_defconfig | 1 - configs/sandbox64_defconfig | 4 +- configs/sandbox_defconfig | 4 +- doc/android/ab.rst | 12 +++--- include/configs/khadas-vim3_android.h | 2 +- include/configs/khadas-vim3l_android.h | 2 +- include/configs/meson64_android.h | 4 +- include/configs/ti_omap5_common.h | 4 +- test/py/tests/test_android/test_ab.py | 8 ++-- 16 files changed, 85 insertions(+), 104 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS index 7aefda93d017f07d616f0f6d191129914fbeb484..668ccec9ae6df47192b1af668e3fdbeb1dfa15ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -65,7 +65,6 @@ R: Sam Protsenko <semen.protsenko@...> S: Maintained T: git F: boot/android_ab.c -F: cmd/ab_select.c F: doc/android/ab.rst F: include/android_ab.h F: test/py/tests/test_android/test_ab.py diff --git a/cmd/Kconfig b/cmd/Kconfig index dd33266cec70a2b134b7244acae1b7f098b921e8..11e8d363dc9b137723a86a240412d82dd0dbccc5 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1067,6 +1067,7 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS + depends on ANDROID_AB When building with khadas-vim3_android_defconfig, we can see that CMD_BCB is no longer part of that build:
$ grep CMD_BCB .config <empty>
However, if we look at include/configs/meson64_android.h, we can see that the "bcb" command is not only used for checking the _slot suffix.
It's also used for checking the bootloader reason. For example, in BOOTENV_DEV_FASTBOOT, we call:
"if bcb test command = bootonce-bootloader; then " \
Since CMD_BCB is no longer part of the .config (due to this dependency), the boot script now shows errors:
""" U-Boot 2024.10-00796-g969325278805 (Oct 11 2024 - 14:46:00 +0200) khadas-vim3
Model: Khadas VIM3 SoC: Amlogic Meson G12B (A311D) Revision 29:b (10:2) DRAM: 2 GiB (effective 3.8 GiB) Core: 411 devices, 36 uclasses, devicetree: separate MMC: mmc@ffe03000: 0, mmc@ffe05000: 1, mmc@ffe07000: 2 Loading Environment from MMC... fs uses incompatible features: 00020000, ignoring Reading from MMC(2)... *** Warning - bad CRC, using default environment
In: usbkbd,serial Out: vidconsole,serial Err: vidconsole,serial Net: eth0: ethernet@ff3f0000
Hit any key to stop autoboot: 0 Verify GPT: success! Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist dev: pinctrl@14 dev: pinctrl@40 gpio: pin 88 (gpio 88) value is 1 Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist Loading Android boot partition... switch to partitions #0, OK mmc2(part 0) is current device """
I know we should not be using a boot script, nor non A/B configs but it's a bummer that this series breaks an upstream defconfig (khadas-vim3_android_defconfig)
My recommendation:
Make BCB_CMD_AB_SELECT implementation dependant on ANDROID_AB. This way, users can use CMD_BCB with and without ANDROID_AB being enabled.
We could do: When ANDROID_AB=y, implement bcb ab_select subcommand When ANDROID_AB=n, command is not accessible.
I'll send you a diff shortly for this. Here is an illustration on how that would work:
diff --git a/cmd/Kconfig b/cmd/Kconfig index 861c31e26408..e1a4a97b042d 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1055,7 +1055,6 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS - depends on ANDROID_AB help Read/modify/write the fields of Bootloader Control Block, usually stored on the flash "misc" partition with its structure defined in: diff --git a/cmd/bcb.c b/cmd/bcb.c index 4fd32186ae65..4fe634f14cc5 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -438,6 +438,9 @@ static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, char slot[2]; bool dec_tries = true;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + for (int i = 4; i < argc; i++) { if (!strcmp(argv[i], "--no-dec")) dec_tries = false; @@ -474,6 +477,9 @@ static int do_bcb_ab_dump(struct cmd_tbl *cmdtp, int flag, int argc, struct blk_desc *dev_desc; struct disk_partition part_info;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + if (part_get_info_by_dev_and_name_or_num(argv[1], argv[2], &dev_desc, &part_info, false) < 0) {
We also need to include an #ifdef directive for the ab_select_slot() function usage; otherwise, the code will not compile successfully. Are you sure? Per my understanding, it's possible that the compiler optimizes this out because CONFIG_IS_ENABLED(AB_SELECT) is known as build time.
When I tried this diff with khadas-vim3_android_defconfig I did not see any build errors. I will try again early next week.
As I recall, the IS_ENABLED() mechanism serves as a runtime checker to determine whether specific CONFIG_* options are enabled. Consequently, all code paths under this mechanism are always compiled. I attempted to disable CONFIG_ANDROID_AB for the sandbox_defconfig, but it resulted in the expected linker error.
/tmp/ccAvYrKL.ltrans25.ltrans.o: In function `do_bcb_ab_select': <artificial>:(.text+0x6d5d): undefined reference to `ab_select_slot' collect2: error: ld returned 1 exit status Makefile:1813: recipe for target 'u-boot' failed make: *** [u-boot] Error 1
I have already prepared a new version using #ifdef directives. I will send it shortly.
Something else is going on here, since we do this all the time and rely on it. So long as the code is behind an if() the dead code should be eliminated. [...]
Regards, Simon
|
Re: [PATCH v3 2/6] treewide: bcb: move ab_select command to bcb subcommands
Hi Mattijs, On Tue, Oct 15, 2024 at 02:10:10PM +0200, Mattijs Korpershoek wrote: Hi Simon, Dmitry
On lun., oct. 14, 2024 at 15:06, Simon Glass <sjg@...> wrote:
Hi Dmitry,
On Mon, 14 Oct 2024 at 14:38, Dmitry Rokosov <ddrokosov@...> wrote:
Hello Mattijs,
On Sat, Oct 12, 2024 at 10:49:08AM +0200, Mattijs Korpershoek wrote:
Hi Dmitry,
On ven., oct. 11, 2024 at 21:00, Dmitry Rokosov <ddrokosov@...> wrote:
On Fri, Oct 11, 2024 at 04:20:39PM +0200, Mattijs Korpershoek wrote:
On ven., oct. 11, 2024 at 15:30, "Mattijs Korpershoek via groups.io" <mkorpershoek@...> wrote:
Hi Dmitry,
Thank you for the patch.
On mar., oct. 08, 2024 at 23:18, Dmitry Rokosov <ddrokosov@...> wrote:
To enhance code organization, it is beneficial to consolidate all A/B BCB management routines into a single super-command. The 'bcb' command is an excellent candidate for this purpose.
This patch integrates the separate 'ab_select' command into the 'bcb' group as the 'ab_select' subcommand, maintaining the same parameter list for consistency.
Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- MAINTAINERS | 1 - cmd/Kconfig | 15 +------ cmd/Makefile | 1 - cmd/ab_select.c | 66 ------------------------------- cmd/bcb.c | 63 +++++++++++++++++++++++++++++ configs/am57xx_hs_evm_usb_defconfig | 1 - configs/khadas-vim3_android_ab_defconfig | 1 - configs/khadas-vim3l_android_ab_defconfig | 1 - configs/sandbox64_defconfig | 4 +- configs/sandbox_defconfig | 4 +- doc/android/ab.rst | 12 +++--- include/configs/khadas-vim3_android.h | 2 +- include/configs/khadas-vim3l_android.h | 2 +- include/configs/meson64_android.h | 4 +- include/configs/ti_omap5_common.h | 4 +- test/py/tests/test_android/test_ab.py | 8 ++-- 16 files changed, 85 insertions(+), 104 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS index 7aefda93d017f07d616f0f6d191129914fbeb484..668ccec9ae6df47192b1af668e3fdbeb1dfa15ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -65,7 +65,6 @@ R: Sam Protsenko <semen.protsenko@...> S: Maintained T: git F: boot/android_ab.c -F: cmd/ab_select.c F: doc/android/ab.rst F: include/android_ab.h F: test/py/tests/test_android/test_ab.py diff --git a/cmd/Kconfig b/cmd/Kconfig index dd33266cec70a2b134b7244acae1b7f098b921e8..11e8d363dc9b137723a86a240412d82dd0dbccc5 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1067,6 +1067,7 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS + depends on ANDROID_AB When building with khadas-vim3_android_defconfig, we can see that CMD_BCB is no longer part of that build:
$ grep CMD_BCB .config <empty>
However, if we look at include/configs/meson64_android.h, we can see that the "bcb" command is not only used for checking the _slot suffix.
It's also used for checking the bootloader reason. For example, in BOOTENV_DEV_FASTBOOT, we call:
"if bcb test command = bootonce-bootloader; then " \
Since CMD_BCB is no longer part of the .config (due to this dependency), the boot script now shows errors:
""" U-Boot 2024.10-00796-g969325278805 (Oct 11 2024 - 14:46:00 +0200) khadas-vim3
Model: Khadas VIM3 SoC: Amlogic Meson G12B (A311D) Revision 29:b (10:2) DRAM: 2 GiB (effective 3.8 GiB) Core: 411 devices, 36 uclasses, devicetree: separate MMC: mmc@ffe03000: 0, mmc@ffe05000: 1, mmc@ffe07000: 2 Loading Environment from MMC... fs uses incompatible features: 00020000, ignoring Reading from MMC(2)... *** Warning - bad CRC, using default environment
In: usbkbd,serial Out: vidconsole,serial Err: vidconsole,serial Net: eth0: ethernet@ff3f0000
Hit any key to stop autoboot: 0 Verify GPT: success! Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist dev: pinctrl@14 dev: pinctrl@40 gpio: pin 88 (gpio 88) value is 1 Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist Loading Android boot partition... switch to partitions #0, OK mmc2(part 0) is current device """
I know we should not be using a boot script, nor non A/B configs but it's a bummer that this series breaks an upstream defconfig (khadas-vim3_android_defconfig)
My recommendation:
Make BCB_CMD_AB_SELECT implementation dependant on ANDROID_AB. This way, users can use CMD_BCB with and without ANDROID_AB being enabled.
We could do: When ANDROID_AB=y, implement bcb ab_select subcommand When ANDROID_AB=n, command is not accessible.
I'll send you a diff shortly for this. Here is an illustration on how that would work:
diff --git a/cmd/Kconfig b/cmd/Kconfig index 861c31e26408..e1a4a97b042d 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1055,7 +1055,6 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS - depends on ANDROID_AB help Read/modify/write the fields of Bootloader Control Block, usually stored on the flash "misc" partition with its structure defined in: diff --git a/cmd/bcb.c b/cmd/bcb.c index 4fd32186ae65..4fe634f14cc5 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -438,6 +438,9 @@ static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, char slot[2]; bool dec_tries = true;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + for (int i = 4; i < argc; i++) { if (!strcmp(argv[i], "--no-dec")) dec_tries = false; @@ -474,6 +477,9 @@ static int do_bcb_ab_dump(struct cmd_tbl *cmdtp, int flag, int argc, struct blk_desc *dev_desc; struct disk_partition part_info;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + if (part_get_info_by_dev_and_name_or_num(argv[1], argv[2], &dev_desc, &part_info, false) < 0) {
We also need to include an #ifdef directive for the ab_select_slot() function usage; otherwise, the code will not compile successfully. Are you sure? Per my understanding, it's possible that the compiler optimizes this out because CONFIG_IS_ENABLED(AB_SELECT) is known as build time.
When I tried this diff with khadas-vim3_android_defconfig I did not see any build errors. I will try again early next week.
As I recall, the IS_ENABLED() mechanism serves as a runtime checker to determine whether specific CONFIG_* options are enabled. Consequently, all code paths under this mechanism are always compiled. I attempted to disable CONFIG_ANDROID_AB for the sandbox_defconfig, but it resulted in the expected linker error.
/tmp/ccAvYrKL.ltrans25.ltrans.o: In function `do_bcb_ab_select': <artificial>:(.text+0x6d5d): undefined reference to `ab_select_slot' collect2: error: ld returned 1 exit status Makefile:1813: recipe for target 'u-boot' failed make: *** [u-boot] Error 1
I have already prepared a new version using #ifdef directives. I will send it shortly. Something else is going on here, since we do this all the time and rely on it. So long as the code is behind an if() the dead code should be eliminated.
I have passed my diff (using CONFIG_IS_ENABLED) through the U-Boot CI:
See the branch:
There are some test errors (sandbox test) but the "world build" stage finished sucessfully.
I have also tested locally using the CI container: $ cd ~/work/upstream/u-boot $ git clean -xdf $ make mproper $ docker run -v $PWD:$PWD -it trini/u-boot-gitlab-ci-runner:jammy-20240227-14Mar2024 /bin/bash
# In container uboot@0ba059e8b7af/$ cd /home/mkorpershoek/work/upstream/u-boot uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ pip install -r test/py/requirements.txt uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ ./test/py/test.py --bd sandbox --build -k test_ut
No build errors either.
Dmitry, can you clarify what compiler/build commands you've used to see that error?
For reference, here is what buildman has in the CI container:
uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ ./tools/buildman/buildman --list-tool-chains List of available toolchains (17): aarch64 : /opt/gcc-13.2.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc arc : /opt/gcc-13.2.0-nolibc/arc-linux/bin/arc-linux-gcc arm : /opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc c89 : /usr/bin/c89-gcc c99 : /usr/bin/c99-gcc i386 : /opt/gcc-13.2.0-nolibc/i386-linux/bin/i386-linux-gcc m68k : /opt/gcc-13.2.0-nolibc/m68k-linux/bin/m68k-linux-gcc microblaze: /opt/gcc-13.2.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc mips : /opt/gcc-13.2.0-nolibc/mips-linux/bin/mips-linux-gcc nios2 : /opt/gcc-13.2.0-nolibc/nios2-linux/bin/nios2-linux-gcc powerpc : /opt/gcc-13.2.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc riscv32 : /opt/gcc-13.2.0-nolibc/riscv32-linux/bin/riscv32-linux-gcc riscv64 : /opt/gcc-13.2.0-nolibc/riscv64-linux/bin/riscv64-linux-gcc sandbox : /usr/bin/cgcc sh2 : /opt/gcc-13.2.0-nolibc/sh2-linux/bin/sh2-linux-gcc x86_64 : /usr/bin/x86_64-linux-gnu-gcc xtensa : /opt/2020.07/xtensa-dc233c-elf/bin/xtensa-dc233c-elf-gcc
I think we should use CONFIG_IS_ENABLED if possible I just run build on the my x86 Ubuntu machine. $ cd uboot $ make mproper $ make sandbox_defconfig $ make -j$(nproc) That's all. I've already sent the v4 patch with #ifdef. I can prepare the v5 patch using the IS_ENABLED() macro and will aim to send it today. But I have one question: Do we really want to display the ab_select and ab_dump subcommands to users if these commands are just stubs? Perhaps we should consider adding #ifdef directives to the subcommand arrays. -- Thank you, Dmitry
|
[PATCH v4 0/5] android_ab: introduce bcb ab_dump command and provide several bcb fixes
The patch series include changes: - move ab_select_slot() documentation to @ notation - move ab_select command to bcb subcommands - introduce the ab_dump command to print the content of the BCB block; it's useful for debugging A/B logic on supported boards - fix the slot suffix format in the ABC block to align with official Android BCB specifications - add a test for the ab_dump command to verify the accuracy of each field within the ABC data displayed, it's also useful for testing slot_suffix problem code paths
Changes v3 since v2 at [2]: - return "Legend" block for bcb command - additionally, verify the CONFIG_ANDROID_AB configuration alongside CONFIG_CMD_BCB to ensure that the A/B scheme is used for the designated board.
Changes v2 since v1 at [1]: - move ab_select_slot() documentation to @ notation - move ab_select command to bcb subcommands per Simon and Mattijs suggestions - redesign ab_dump as bcb subcommand - use spaces instead of tabs in the ab_dump command output - print hex values in the lowercase - add RvB tags
Links: [1] [2]
Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- Changes in v4: - add #ifdefs for CONFIG_ANDROID_AB in cmd/bcb.c to allow the usage of the bcb command without A/B enabled - run the savedefconfig command for all defconfigs that include the CMD_BCB configuration - resolve merge conflicts with latest master - provide additional trailers from the previous version (excluding changed patches) - Link to v3:
--- Dmitry Rokosov (5): include/android_ab: move ab_select_slot() documentation to @ notation treewide: bcb: move ab_select command to bcb subcommands cmd: bcb: change strcmp() usage style in the do_bcb_ab_select() cmd: bcb: introduce 'ab_dump' command to print BCB block content common: android_ab: fix slot suffix for abc block
MAINTAINERS | 1 - boot/android_ab.c | 116 ++++++++++++++++++++++++------ cmd/Kconfig | 14 ---- cmd/Makefile | 1 - cmd/ab_select.c | 66 ----------------- cmd/bcb.c | 110 ++++++++++++++++++++++++++++ configs/am57xx_evm_defconfig | 1 - configs/am57xx_hs_evm_defconfig | 1 - configs/am57xx_hs_evm_usb_defconfig | 1 - configs/khadas-vim3_android_ab_defconfig | 1 - configs/khadas-vim3l_android_ab_defconfig | 1 - configs/sandbox64_defconfig | 2 + configs/sandbox_defconfig | 1 - doc/android/ab.rst | 12 ++-- include/android_ab.h | 17 ++++- include/configs/khadas-vim3_android.h | 2 +- include/configs/khadas-vim3l_android.h | 2 +- include/configs/meson64_android.h | 4 +- include/configs/ti_omap5_common.h | 4 +- test/py/tests/test_android/test_ab.py | 31 ++++++-- 20 files changed, 260 insertions(+), 128 deletions(-) --- base-commit: 5d899fc58c44fe5623e31524da2205d8597a53d1 change-id: 20241008-android_ab_master-d86d71c839ae
Best regards, -- Dmitry Rokosov <ddrokosov@...>
|
Re: [PATCH v3 2/6] treewide: bcb: move ab_select command to bcb subcommands
Hi Dmitry, On Tue, 15 Oct 2024 at 08:42, Dmitry Rokosov <ddrokosov@...> wrote: Hi Mattijs, Simon,
On Tue, Oct 15, 2024 at 02:10:10PM +0200, Mattijs Korpershoek wrote:
Hi Simon, Dmitry
On lun., oct. 14, 2024 at 15:06, Simon Glass <sjg@...> wrote:
Hi Dmitry,
On Mon, 14 Oct 2024 at 14:38, Dmitry Rokosov <ddrokosov@...> wrote:
Hello Mattijs,
On Sat, Oct 12, 2024 at 10:49:08AM +0200, Mattijs Korpershoek wrote:
Hi Dmitry,
On ven., oct. 11, 2024 at 21:00, Dmitry Rokosov <ddrokosov@...> wrote:
On Fri, Oct 11, 2024 at 04:20:39PM +0200, Mattijs Korpershoek wrote:
On ven., oct. 11, 2024 at 15:30, "Mattijs Korpershoek via groups.io" <mkorpershoek@...> wrote:
Hi Dmitry,
Thank you for the patch.
On mar., oct. 08, 2024 at 23:18, Dmitry Rokosov <ddrokosov@...> wrote:
To enhance code organization, it is beneficial to consolidate all A/B BCB management routines into a single super-command. The 'bcb' command is an excellent candidate for this purpose.
This patch integrates the separate 'ab_select' command into the 'bcb' group as the 'ab_select' subcommand, maintaining the same parameter list for consistency.
Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- MAINTAINERS | 1 - cmd/Kconfig | 15 +------ cmd/Makefile | 1 - cmd/ab_select.c | 66 ------------------------------- cmd/bcb.c | 63 +++++++++++++++++++++++++++++ configs/am57xx_hs_evm_usb_defconfig | 1 - configs/khadas-vim3_android_ab_defconfig | 1 - configs/khadas-vim3l_android_ab_defconfig | 1 - configs/sandbox64_defconfig | 4 +- configs/sandbox_defconfig | 4 +- doc/android/ab.rst | 12 +++--- include/configs/khadas-vim3_android.h | 2 +- include/configs/khadas-vim3l_android.h | 2 +- include/configs/meson64_android.h | 4 +- include/configs/ti_omap5_common.h | 4 +- test/py/tests/test_android/test_ab.py | 8 ++-- 16 files changed, 85 insertions(+), 104 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS index 7aefda93d017f07d616f0f6d191129914fbeb484..668ccec9ae6df47192b1af668e3fdbeb1dfa15ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -65,7 +65,6 @@ R: Sam Protsenko <semen.protsenko@...> S: Maintained T: git F: boot/android_ab.c -F: cmd/ab_select.c F: doc/android/ab.rst F: include/android_ab.h F: test/py/tests/test_android/test_ab.py diff --git a/cmd/Kconfig b/cmd/Kconfig index dd33266cec70a2b134b7244acae1b7f098b921e8..11e8d363dc9b137723a86a240412d82dd0dbccc5 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1067,6 +1067,7 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS + depends on ANDROID_AB When building with khadas-vim3_android_defconfig, we can see that CMD_BCB is no longer part of that build:
$ grep CMD_BCB .config <empty>
However, if we look at include/configs/meson64_android.h, we can see that the "bcb" command is not only used for checking the _slot suffix.
It's also used for checking the bootloader reason. For example, in BOOTENV_DEV_FASTBOOT, we call:
"if bcb test command = bootonce-bootloader; then " \
Since CMD_BCB is no longer part of the .config (due to this dependency), the boot script now shows errors:
""" U-Boot 2024.10-00796-g969325278805 (Oct 11 2024 - 14:46:00 +0200) khadas-vim3
Model: Khadas VIM3 SoC: Amlogic Meson G12B (A311D) Revision 29:b (10:2) DRAM: 2 GiB (effective 3.8 GiB) Core: 411 devices, 36 uclasses, devicetree: separate MMC: mmc@ffe03000: 0, mmc@ffe05000: 1, mmc@ffe07000: 2 Loading Environment from MMC... fs uses incompatible features: 00020000, ignoring Reading from MMC(2)... *** Warning - bad CRC, using default environment
In: usbkbd,serial Out: vidconsole,serial Err: vidconsole,serial Net: eth0: ethernet@ff3f0000
Hit any key to stop autoboot: 0 Verify GPT: success! Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist dev: pinctrl@14 dev: pinctrl@40 gpio: pin 88 (gpio 88) value is 1 Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist Loading Android boot partition... switch to partitions #0, OK mmc2(part 0) is current device """
I know we should not be using a boot script, nor non A/B configs but it's a bummer that this series breaks an upstream defconfig (khadas-vim3_android_defconfig)
My recommendation:
Make BCB_CMD_AB_SELECT implementation dependant on ANDROID_AB. This way, users can use CMD_BCB with and without ANDROID_AB being enabled.
We could do: When ANDROID_AB=y, implement bcb ab_select subcommand When ANDROID_AB=n, command is not accessible.
I'll send you a diff shortly for this. Here is an illustration on how that would work:
diff --git a/cmd/Kconfig b/cmd/Kconfig index 861c31e26408..e1a4a97b042d 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1055,7 +1055,6 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS - depends on ANDROID_AB help Read/modify/write the fields of Bootloader Control Block, usually stored on the flash "misc" partition with its structure defined in: diff --git a/cmd/bcb.c b/cmd/bcb.c index 4fd32186ae65..4fe634f14cc5 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -438,6 +438,9 @@ static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, char slot[2]; bool dec_tries = true;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + for (int i = 4; i < argc; i++) { if (!strcmp(argv[i], "--no-dec")) dec_tries = false; @@ -474,6 +477,9 @@ static int do_bcb_ab_dump(struct cmd_tbl *cmdtp, int flag, int argc, struct blk_desc *dev_desc; struct disk_partition part_info;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + if (part_get_info_by_dev_and_name_or_num(argv[1], argv[2], &dev_desc, &part_info, false) < 0) {
We also need to include an #ifdef directive for the ab_select_slot() function usage; otherwise, the code will not compile successfully. Are you sure? Per my understanding, it's possible that the compiler optimizes this out because CONFIG_IS_ENABLED(AB_SELECT) is known as build time.
When I tried this diff with khadas-vim3_android_defconfig I did not see any build errors. I will try again early next week.
As I recall, the IS_ENABLED() mechanism serves as a runtime checker to determine whether specific CONFIG_* options are enabled. Consequently, all code paths under this mechanism are always compiled. I attempted to disable CONFIG_ANDROID_AB for the sandbox_defconfig, but it resulted in the expected linker error.
/tmp/ccAvYrKL.ltrans25.ltrans.o: In function `do_bcb_ab_select': <artificial>:(.text+0x6d5d): undefined reference to `ab_select_slot' collect2: error: ld returned 1 exit status Makefile:1813: recipe for target 'u-boot' failed make: *** [u-boot] Error 1
I have already prepared a new version using #ifdef directives. I will send it shortly. Something else is going on here, since we do this all the time and rely on it. So long as the code is behind an if() the dead code should be eliminated.
I have passed my diff (using CONFIG_IS_ENABLED) through the U-Boot CI:
See the branch:
There are some test errors (sandbox test) but the "world build" stage finished sucessfully.
I have also tested locally using the CI container: $ cd ~/work/upstream/u-boot $ git clean -xdf $ make mproper $ docker run -v $PWD:$PWD -it trini/u-boot-gitlab-ci-runner:jammy-20240227-14Mar2024 /bin/bash
# In container uboot@0ba059e8b7af/$ cd /home/mkorpershoek/work/upstream/u-boot uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ pip install -r test/py/requirements.txt uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ ./test/py/test.py --bd sandbox --build -k test_ut
No build errors either.
Dmitry, can you clarify what compiler/build commands you've used to see that error?
For reference, here is what buildman has in the CI container:
uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ ./tools/buildman/buildman --list-tool-chains List of available toolchains (17): aarch64 : /opt/gcc-13.2.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc arc : /opt/gcc-13.2.0-nolibc/arc-linux/bin/arc-linux-gcc arm : /opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc c89 : /usr/bin/c89-gcc c99 : /usr/bin/c99-gcc i386 : /opt/gcc-13.2.0-nolibc/i386-linux/bin/i386-linux-gcc m68k : /opt/gcc-13.2.0-nolibc/m68k-linux/bin/m68k-linux-gcc microblaze: /opt/gcc-13.2.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc mips : /opt/gcc-13.2.0-nolibc/mips-linux/bin/mips-linux-gcc nios2 : /opt/gcc-13.2.0-nolibc/nios2-linux/bin/nios2-linux-gcc powerpc : /opt/gcc-13.2.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc riscv32 : /opt/gcc-13.2.0-nolibc/riscv32-linux/bin/riscv32-linux-gcc riscv64 : /opt/gcc-13.2.0-nolibc/riscv64-linux/bin/riscv64-linux-gcc sandbox : /usr/bin/cgcc sh2 : /opt/gcc-13.2.0-nolibc/sh2-linux/bin/sh2-linux-gcc x86_64 : /usr/bin/x86_64-linux-gnu-gcc xtensa : /opt/2020.07/xtensa-dc233c-elf/bin/xtensa-dc233c-elf-gcc
I think we should use CONFIG_IS_ENABLED if possible What do you think if we replace
``` #ifdef CONFIG_ANDROID_AB ```
with
``` #if IS_ENABLED(CONFIG_ANDROID_AB)
That seems OK to some extent...but see comments: ```
Like below:
``` git --no-pager diff . diff --git a/cmd/bcb.c b/cmd/bcb.c index a0eff55c2ed4..82ea4f04659b 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -24,7 +24,7 @@ enum bcb_cmd { BCB_CMD_FIELD_TEST, BCB_CMD_FIELD_DUMP, BCB_CMD_STORE, -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) BCB_CMD_AB_SELECT, BCB_CMD_AB_DUMP, #endif We try to avoid this sort of thing, as it makes it impossible to use if() instead of #ifdef(). For the same reason, header files should always be included, not be behind #ifdefs @@ -57,7 +57,7 @@ static int bcb_cmd_get(char *cmd) return BCB_CMD_STORE; if (!strcmp(cmd, "dump")) return BCB_CMD_FIELD_DUMP; -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) if (!strcmp(cmd, "ab_select")) if (IS_ENABLED(CONFIG_ANDROID_AB) && !strcmp(cmd, "ab_select")) return BCB_CMD_AB_SELECT; if (!strcmp(cmd, "ab_dump")) @@ -96,7 +96,7 @@ static int bcb_is_misused(int argc, char *const argv[]) if (argc != 2) goto err; break; -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) case BCB_CMD_AB_SELECT: if (argc != 4 && argc != 5) goto err; @@ -435,7 +435,7 @@ void bcb_reset(void) __bcb_reset(); }
-#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[]) { @@ -504,7 +504,7 @@ static struct cmd_tbl cmd_bcb_sub[] = { U_BOOT_CMD_MKENT(test, CONFIG_SYS_MAXARGS, 1, do_bcb_test, "", ""), U_BOOT_CMD_MKENT(dump, CONFIG_SYS_MAXARGS, 1, do_bcb_dump, "", ""), U_BOOT_CMD_MKENT(store, CONFIG_SYS_MAXARGS, 1, do_bcb_store, "", ""), -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) U_BOOT_CMD_MKENT(ab_select, CONFIG_SYS_MAXARGS, 1, do_bcb_ab_select, "", ""), U_BOOT_CMD_MKENT(ab_dump, CONFIG_SYS_MAXARGS, 1, @@ -549,7 +549,7 @@ U_BOOT_CMD( "bcb dump <field> - dump BCB <field>\n" "bcb store - store BCB back to <interface>\n" "\n" -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) "bcb ab_select -\n" " Select the slot used to boot from and register the boot attempt.\n" " <slot_var_name> <interface> <dev[:part|#part_name]> [--no-dec]\n" ``` Long help should use U_BOOT_LONGHELP, we normally handle this with #ifdef - see cmd/bootflow.c for example Regards, Simon
|
Re: [PATCH v3 2/6] treewide: bcb: move ab_select command to bcb subcommands
Hi Mattijs, Simon, On Tue, Oct 15, 2024 at 02:10:10PM +0200, Mattijs Korpershoek wrote: Hi Simon, Dmitry
On lun., oct. 14, 2024 at 15:06, Simon Glass <sjg@...> wrote:
Hi Dmitry,
On Mon, 14 Oct 2024 at 14:38, Dmitry Rokosov <ddrokosov@...> wrote:
Hello Mattijs,
On Sat, Oct 12, 2024 at 10:49:08AM +0200, Mattijs Korpershoek wrote:
Hi Dmitry,
On ven., oct. 11, 2024 at 21:00, Dmitry Rokosov <ddrokosov@...> wrote:
On Fri, Oct 11, 2024 at 04:20:39PM +0200, Mattijs Korpershoek wrote:
On ven., oct. 11, 2024 at 15:30, "Mattijs Korpershoek via groups.io" <mkorpershoek@...> wrote:
Hi Dmitry,
Thank you for the patch.
On mar., oct. 08, 2024 at 23:18, Dmitry Rokosov <ddrokosov@...> wrote:
To enhance code organization, it is beneficial to consolidate all A/B BCB management routines into a single super-command. The 'bcb' command is an excellent candidate for this purpose.
This patch integrates the separate 'ab_select' command into the 'bcb' group as the 'ab_select' subcommand, maintaining the same parameter list for consistency.
Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- MAINTAINERS | 1 - cmd/Kconfig | 15 +------ cmd/Makefile | 1 - cmd/ab_select.c | 66 ------------------------------- cmd/bcb.c | 63 +++++++++++++++++++++++++++++ configs/am57xx_hs_evm_usb_defconfig | 1 - configs/khadas-vim3_android_ab_defconfig | 1 - configs/khadas-vim3l_android_ab_defconfig | 1 - configs/sandbox64_defconfig | 4 +- configs/sandbox_defconfig | 4 +- doc/android/ab.rst | 12 +++--- include/configs/khadas-vim3_android.h | 2 +- include/configs/khadas-vim3l_android.h | 2 +- include/configs/meson64_android.h | 4 +- include/configs/ti_omap5_common.h | 4 +- test/py/tests/test_android/test_ab.py | 8 ++-- 16 files changed, 85 insertions(+), 104 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS index 7aefda93d017f07d616f0f6d191129914fbeb484..668ccec9ae6df47192b1af668e3fdbeb1dfa15ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -65,7 +65,6 @@ R: Sam Protsenko <semen.protsenko@...> S: Maintained T: git F: boot/android_ab.c -F: cmd/ab_select.c F: doc/android/ab.rst F: include/android_ab.h F: test/py/tests/test_android/test_ab.py diff --git a/cmd/Kconfig b/cmd/Kconfig index dd33266cec70a2b134b7244acae1b7f098b921e8..11e8d363dc9b137723a86a240412d82dd0dbccc5 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1067,6 +1067,7 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS + depends on ANDROID_AB When building with khadas-vim3_android_defconfig, we can see that CMD_BCB is no longer part of that build:
$ grep CMD_BCB .config <empty>
However, if we look at include/configs/meson64_android.h, we can see that the "bcb" command is not only used for checking the _slot suffix.
It's also used for checking the bootloader reason. For example, in BOOTENV_DEV_FASTBOOT, we call:
"if bcb test command = bootonce-bootloader; then " \
Since CMD_BCB is no longer part of the .config (due to this dependency), the boot script now shows errors:
""" U-Boot 2024.10-00796-g969325278805 (Oct 11 2024 - 14:46:00 +0200) khadas-vim3
Model: Khadas VIM3 SoC: Amlogic Meson G12B (A311D) Revision 29:b (10:2) DRAM: 2 GiB (effective 3.8 GiB) Core: 411 devices, 36 uclasses, devicetree: separate MMC: mmc@ffe03000: 0, mmc@ffe05000: 1, mmc@ffe07000: 2 Loading Environment from MMC... fs uses incompatible features: 00020000, ignoring Reading from MMC(2)... *** Warning - bad CRC, using default environment
In: usbkbd,serial Out: vidconsole,serial Err: vidconsole,serial Net: eth0: ethernet@ff3f0000
Hit any key to stop autoboot: 0 Verify GPT: success! Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist dev: pinctrl@14 dev: pinctrl@40 gpio: pin 88 (gpio 88) value is 1 Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist Loading Android boot partition... switch to partitions #0, OK mmc2(part 0) is current device """
I know we should not be using a boot script, nor non A/B configs but it's a bummer that this series breaks an upstream defconfig (khadas-vim3_android_defconfig)
My recommendation:
Make BCB_CMD_AB_SELECT implementation dependant on ANDROID_AB. This way, users can use CMD_BCB with and without ANDROID_AB being enabled.
We could do: When ANDROID_AB=y, implement bcb ab_select subcommand When ANDROID_AB=n, command is not accessible.
I'll send you a diff shortly for this. Here is an illustration on how that would work:
diff --git a/cmd/Kconfig b/cmd/Kconfig index 861c31e26408..e1a4a97b042d 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1055,7 +1055,6 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS - depends on ANDROID_AB help Read/modify/write the fields of Bootloader Control Block, usually stored on the flash "misc" partition with its structure defined in: diff --git a/cmd/bcb.c b/cmd/bcb.c index 4fd32186ae65..4fe634f14cc5 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -438,6 +438,9 @@ static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, char slot[2]; bool dec_tries = true;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + for (int i = 4; i < argc; i++) { if (!strcmp(argv[i], "--no-dec")) dec_tries = false; @@ -474,6 +477,9 @@ static int do_bcb_ab_dump(struct cmd_tbl *cmdtp, int flag, int argc, struct blk_desc *dev_desc; struct disk_partition part_info;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + if (part_get_info_by_dev_and_name_or_num(argv[1], argv[2], &dev_desc, &part_info, false) < 0) {
We also need to include an #ifdef directive for the ab_select_slot() function usage; otherwise, the code will not compile successfully. Are you sure? Per my understanding, it's possible that the compiler optimizes this out because CONFIG_IS_ENABLED(AB_SELECT) is known as build time.
When I tried this diff with khadas-vim3_android_defconfig I did not see any build errors. I will try again early next week.
As I recall, the IS_ENABLED() mechanism serves as a runtime checker to determine whether specific CONFIG_* options are enabled. Consequently, all code paths under this mechanism are always compiled. I attempted to disable CONFIG_ANDROID_AB for the sandbox_defconfig, but it resulted in the expected linker error.
/tmp/ccAvYrKL.ltrans25.ltrans.o: In function `do_bcb_ab_select': <artificial>:(.text+0x6d5d): undefined reference to `ab_select_slot' collect2: error: ld returned 1 exit status Makefile:1813: recipe for target 'u-boot' failed make: *** [u-boot] Error 1
I have already prepared a new version using #ifdef directives. I will send it shortly. Something else is going on here, since we do this all the time and rely on it. So long as the code is behind an if() the dead code should be eliminated.
I have passed my diff (using CONFIG_IS_ENABLED) through the U-Boot CI:
See the branch:
There are some test errors (sandbox test) but the "world build" stage finished sucessfully.
I have also tested locally using the CI container: $ cd ~/work/upstream/u-boot $ git clean -xdf $ make mproper $ docker run -v $PWD:$PWD -it trini/u-boot-gitlab-ci-runner:jammy-20240227-14Mar2024 /bin/bash
# In container uboot@0ba059e8b7af/$ cd /home/mkorpershoek/work/upstream/u-boot uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ pip install -r test/py/requirements.txt uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ ./test/py/test.py --bd sandbox --build -k test_ut
No build errors either.
Dmitry, can you clarify what compiler/build commands you've used to see that error?
For reference, here is what buildman has in the CI container:
uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ ./tools/buildman/buildman --list-tool-chains List of available toolchains (17): aarch64 : /opt/gcc-13.2.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc arc : /opt/gcc-13.2.0-nolibc/arc-linux/bin/arc-linux-gcc arm : /opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc c89 : /usr/bin/c89-gcc c99 : /usr/bin/c99-gcc i386 : /opt/gcc-13.2.0-nolibc/i386-linux/bin/i386-linux-gcc m68k : /opt/gcc-13.2.0-nolibc/m68k-linux/bin/m68k-linux-gcc microblaze: /opt/gcc-13.2.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc mips : /opt/gcc-13.2.0-nolibc/mips-linux/bin/mips-linux-gcc nios2 : /opt/gcc-13.2.0-nolibc/nios2-linux/bin/nios2-linux-gcc powerpc : /opt/gcc-13.2.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc riscv32 : /opt/gcc-13.2.0-nolibc/riscv32-linux/bin/riscv32-linux-gcc riscv64 : /opt/gcc-13.2.0-nolibc/riscv64-linux/bin/riscv64-linux-gcc sandbox : /usr/bin/cgcc sh2 : /opt/gcc-13.2.0-nolibc/sh2-linux/bin/sh2-linux-gcc x86_64 : /usr/bin/x86_64-linux-gnu-gcc xtensa : /opt/2020.07/xtensa-dc233c-elf/bin/xtensa-dc233c-elf-gcc
I think we should use CONFIG_IS_ENABLED if possible What do you think if we replace ``` #ifdef CONFIG_ANDROID_AB ``` with ``` #if IS_ENABLED(CONFIG_ANDROID_AB) ``` Like below: ``` git --no-pager diff . diff --git a/cmd/bcb.c b/cmd/bcb.c index a0eff55c2ed4..82ea4f04659b 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -24,7 +24,7 @@ enum bcb_cmd { BCB_CMD_FIELD_TEST, BCB_CMD_FIELD_DUMP, BCB_CMD_STORE, -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) BCB_CMD_AB_SELECT, BCB_CMD_AB_DUMP, #endif @@ -57,7 +57,7 @@ static int bcb_cmd_get(char *cmd) return BCB_CMD_STORE; if (!strcmp(cmd, "dump")) return BCB_CMD_FIELD_DUMP; -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) if (!strcmp(cmd, "ab_select")) return BCB_CMD_AB_SELECT; if (!strcmp(cmd, "ab_dump")) @@ -96,7 +96,7 @@ static int bcb_is_misused(int argc, char *const argv[]) if (argc != 2) goto err; break; -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) case BCB_CMD_AB_SELECT: if (argc != 4 && argc != 5) goto err; @@ -435,7 +435,7 @@ void bcb_reset(void) __bcb_reset(); } -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[]) { @@ -504,7 +504,7 @@ static struct cmd_tbl cmd_bcb_sub[] = { U_BOOT_CMD_MKENT(test, CONFIG_SYS_MAXARGS, 1, do_bcb_test, "", ""), U_BOOT_CMD_MKENT(dump, CONFIG_SYS_MAXARGS, 1, do_bcb_dump, "", ""), U_BOOT_CMD_MKENT(store, CONFIG_SYS_MAXARGS, 1, do_bcb_store, "", ""), -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) U_BOOT_CMD_MKENT(ab_select, CONFIG_SYS_MAXARGS, 1, do_bcb_ab_select, "", ""), U_BOOT_CMD_MKENT(ab_dump, CONFIG_SYS_MAXARGS, 1, @@ -549,7 +549,7 @@ U_BOOT_CMD( "bcb dump <field> - dump BCB <field>\n" "bcb store - store BCB back to <interface>\n" "\n" -#ifdef CONFIG_ANDROID_AB +#if IS_ENABLED(CONFIG_ANDROID_AB) "bcb ab_select -\n" " Select the slot used to boot from and register the boot attempt.\n" " <slot_var_name> <interface> <dev[:part|#part_name]> [--no-dec]\n" ``` -- Thank you, Dmitry
|
[PATCH v4 3/5] cmd: bcb: change strcmp() usage style in the do_bcb_ab_select()
In the entire cmd/bcb.c file, the return value of strcmp() is not directly compared to 0. Therefore, it would be better to maintain this style in the new do_bcb_ab_select() function as well.
Reviewed-by: Mattijs Korpershoek <mkorpershoek@...> Reviewed-by: Simon Glass <sjg@...> Tested-by: Guillaume La Roque <glaroque@...> Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- cmd/bcb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cmd/bcb.c b/cmd/bcb.c index bf28726da91134fa287ca8aada884ed74ecc8f2b..3935b7f8d535e87593020b91a6b37d7c5ef02a83 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -439,7 +439,7 @@ static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, bool dec_tries = true; for (int i = 4; i < argc; i++) { - if (strcmp(argv[i], "--no-dec") == 0) + if (!strcmp(argv[i], "--no-dec")) dec_tries = false; else return CMD_RET_USAGE;
-- 2.43.0
|
Re: [GIT PULL] Please pull u-boot-amlogic-next-20241014
On Mon, Oct 14, 2024 at 10:44:01AM +0200, Neil Armstrong wrote: Hi Tom,
New Libre Computer boards are added with UEFI Capsule Update support, plus various fixes for HDMI support, boot targets and android-mainline kernel support for khadas-vim3 android config.
Thanks, Neil
The following changes since commit 580fb5773634c4a01f907a164b2a05961840b4c0:
Merge tag 'u-boot-imx-master-20241013' of (2024-10-13 16:25:01 -0600)
are available in the Git repository at:
tags/u-boot-amlogic-next-20241014
for you to fetch changes up to 315cad97a5ae09b1b975fff2413ce785b3b8592a:
configs: meson64: Ensure commands for boot targets are available (2024-10-14 09:06:16 +0200)
Applied to u-boot/master, thanks! -- Tom
|
[PATCH v4 1/5] include/android_ab: move ab_select_slot() documentation to @ notation
There are new function documentation requirements in U-Boot, so apply these changes for android_ab.
Reviewed-by: Mattijs Korpershoek <mkorpershoek@...> Reviewed-by: Simon Glass <sjg@...> Tested-by: Guillaume La Roque <glaroque@...> Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- boot/android_ab.c | 43 ++++++++++++++++++++++++------------------- include/android_ab.h | 7 ++++--- 2 files changed, 28 insertions(+), 22 deletions(-)
diff --git a/boot/android_ab.c b/boot/android_ab.c index 1196a189ed5349ca5c088e3b6ef1796b11c69a84..0045c8133a8e164f1fdd4c0f9b683de0f13f26e0 100644 --- a/boot/android_ab.c +++ b/boot/android_ab.c @@ -13,13 +13,13 @@ #include <u-boot/crc.h> /** - * Compute the CRC-32 of the bootloader control struct. + * ab_control_compute_crc() - Compute the CRC32 of the bootloader control. + * + * @abc: Bootloader control block * * Only the bytes up to the crc32_le field are considered for the CRC-32 * calculation. * - * @param[in] abc bootloader control block - * * Return: crc32 sum */ static uint32_t ab_control_compute_crc(struct bootloader_control *abc) @@ -28,14 +28,14 @@ static uint32_t ab_control_compute_crc(struct bootloader_control *abc) } /** - * Initialize bootloader_control to the default value. + * ab_control_default() - Initialize bootloader_control to the default value. + * + * @abc: Bootloader control block * * It allows us to boot all slots in order from the first one. This value * should be used when the bootloader message is corrupted, but not when * a valid message indicates that all slots are unbootable. * - * @param[in] abc bootloader control block - * * Return: 0 on success and a negative on error */ static int ab_control_default(struct bootloader_control *abc) @@ -67,7 +67,13 @@ static int ab_control_default(struct bootloader_control *abc) } /** - * Load the boot_control struct from disk into newly allocated memory. + * ab_control_create_from_disk() - Load the boot_control from disk into memory. + * + * @dev_desc: Device where to read the boot_control struct from + * @part_info: Partition in 'dev_desc' where to read from, normally + * the "misc" partition should be used + * @abc: pointer to pointer to bootloader_control data + * @offset: boot_control struct offset * * This function allocates and returns an integer number of disk blocks, * based on the block size of the passed device to help performing a @@ -75,10 +81,6 @@ static int ab_control_default(struct bootloader_control *abc) * The boot_control struct offset (2 KiB) must be a multiple of the device * block size, for simplicity. * - * @param[in] dev_desc Device where to read the boot_control struct from - * @param[in] part_info Partition in 'dev_desc' where to read from, normally - * the "misc" partition should be used - * @param[out] pointer to pointer to bootloader_control data * Return: 0 on success and a negative on error */ static int ab_control_create_from_disk(struct blk_desc *dev_desc, @@ -122,15 +124,17 @@ static int ab_control_create_from_disk(struct blk_desc *dev_desc, } /** - * Store the loaded boot_control block. + * ab_control_store() - Store the loaded boot_control block. + * + * @dev_desc: Device where we should write the boot_control struct + * @part_info: Partition on the 'dev_desc' where to write + * @abc Pointer to the boot control struct and the extra bytes after + * it up to the nearest block boundary + * @offset: boot_control struct offset * * Store back to the same location it was read from with * ab_control_create_from_misc(). * - * @param[in] dev_desc Device where we should write the boot_control struct - * @param[in] part_info Partition on the 'dev_desc' where to write - * @param[in] abc Pointer to the boot control struct and the extra bytes after - * it up to the nearest block boundary * Return: 0 on success and a negative on error */ static int ab_control_store(struct blk_desc *dev_desc, @@ -160,12 +164,13 @@ static int ab_control_store(struct blk_desc *dev_desc, } /** - * Compare two slots. + * ab_compare_slots() - Compare two slots. + * + * @a: The first bootable slot metadata + * @b: The second bootable slot metadata * * The function determines slot which is should we boot from among the two. * - * @param[in] a The first bootable slot metadata - * @param[in] b The second bootable slot metadata * Return: Negative if the slot "a" is better, positive of the slot "b" is * better or 0 if they are equally good. */ diff --git a/include/android_ab.h b/include/android_ab.h index dbf20343da62447a237ec845e216517d34455ad3..1e53879a25f145a9d18ac0a6553d8c217123aa6f 100644 --- a/include/android_ab.h +++ b/include/android_ab.h @@ -18,7 +18,10 @@ struct disk_partition; #define NUM_SLOTS 2 /** - * Select the slot where to boot from. + * ab_select_slot() - Select the slot where to boot from. + * + * @dev_desc: Place to store the device description pointer + * @part_info: Place to store the partition information * * On Android devices with more than one boot slot (multiple copies of the * kernel and system images) selects which slot should be used to boot from and @@ -28,8 +31,6 @@ struct disk_partition; * registered before returning from this function so it isn't selected * indefinitely. * - * @param[in] dev_desc Place to store the device description pointer - * @param[in] part_info Place to store the partition information * Return: The slot number (>= 0) on success, or a negative on error */ int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info,
-- 2.43.0
|
[PATCH v4 4/5] cmd: bcb: introduce 'ab_dump' command to print BCB block content
It's really helpful to have the ability to dump BCB block for debugging A/B logic on the board supported this partition schema. Command 'bcb ab_dump' prints all fields of bootloader_control struct including slot_metadata for all presented slots. Output example: ===== board# bcb ab_dump ubi 0#misc Read 512 bytes from volume misc to 000000000bf07580 Read 512 bytes from volume misc to 000000000bf42f40 Bootloader Control: [misc] Active Slot: _a Magic Number: 0x42414342 Version: 1 Number of Slots: 2 Recovery Tries Remaining: 0 CRC: 0x2c8b50bc (Valid)
Slot[0] Metadata: - Priority: 15 - Tries Remaining: 0 - Successful Boot: 1 - Verity Corrupted: 0
Slot[1] Metadata: - Priority: 14 - Tries Remaining: 7 - Successful Boot: 0 - Verity Corrupted: 0 ==== The ab_dump command allows you to display ABC data directly on the U-Boot console. During an A/B test execution, this test verifies the accuracy of each field within the ABC data. Reviewed-by: Mattijs Korpershoek <mkorpershoek@...> Reviewed-by: Simon Glass <sjg@...> Tested-by: Guillaume La Roque <glaroque@...> Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- boot/android_ab.c | 68 +++++++++++++++++++++++++++++++++++ cmd/bcb.c | 35 ++++++++++++++++++ include/android_ab.h | 10 ++++++ test/py/tests/test_android/test_ab.py | 23 ++++++++++++ 4 files changed, 136 insertions(+) diff --git a/boot/android_ab.c b/boot/android_ab.c index 0045c8133a8e164f1fdd4c0f9b683de0f13f26e0..c93e51541019d0fe793303c4b3d5286df061906f 100644 --- a/boot/android_ab.c +++ b/boot/android_ab.c @@ -372,3 +372,71 @@ int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info, return slot; } + +int ab_dump_abc(struct blk_desc *dev_desc, struct disk_partition *part_info) +{ + struct bootloader_control *abc; + u32 crc32_le; + int i, ret; + struct slot_metadata *slot; + + if (!dev_desc || !part_info) { + log_err("ANDROID: Empty device descriptor or partition info\n"); + return -EINVAL; + } + + ret = ab_control_create_from_disk(dev_desc, part_info, &abc, 0); + if (ret < 0) { + log_err("ANDROID: Cannot create bcb from disk %d\n", ret); + return ret; + } + + if (abc->magic != BOOT_CTRL_MAGIC) { + log_err("ANDROID: Unknown A/B metadata: %.8x\n", abc->magic); + ret = -ENODATA; + goto error; + } + + if (abc->version > BOOT_CTRL_VERSION) { + log_err("ANDROID: Unsupported A/B metadata version: %.8x\n", + abc->version); + ret = -ENODATA; + goto error; + } + + if (abc->nb_slot > ARRAY_SIZE(abc->slot_info)) { + log_err("ANDROID: Wrong number of slots %u, expected %zu\n", + abc->nb_slot, ARRAY_SIZE(abc->slot_info)); + ret = -ENODATA; + goto error; + } + + printf("Bootloader Control: [%s]\n", part_info->name); + printf("Active Slot: %s\n", abc->slot_suffix); + printf("Magic Number: 0x%x\n", abc->magic); + printf("Version: %u\n", abc->version); + printf("Number of Slots: %u\n", abc->nb_slot); + printf("Recovery Tries Remaining: %u\n", abc->recovery_tries_remaining); + + printf("CRC: 0x%.8x", abc->crc32_le); + + crc32_le = ab_control_compute_crc(abc); + if (abc->crc32_le != crc32_le) + printf(" (Invalid, Expected: 0x%.8x)\n", crc32_le); + else + printf(" (Valid)\n"); + + for (i = 0; i < abc->nb_slot; ++i) { + slot = &abc->slot_info[i]; + printf("\nSlot[%d] Metadata:\n", i); + printf("\t- Priority: %u\n", slot->priority); + printf("\t- Tries Remaining: %u\n", slot->tries_remaining); + printf("\t- Successful Boot: %u\n", slot->successful_boot); + printf("\t- Verity Corrupted: %u\n", slot->verity_corrupted); + } + +error: + free(abc); + + return ret; +} diff --git a/cmd/bcb.c b/cmd/bcb.c index 3935b7f8d535e87593020b91a6b37d7c5ef02a83..a0eff55c2ed4230e3964297a937c95f9eec3ec85 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -26,6 +26,7 @@ enum bcb_cmd { BCB_CMD_STORE, #ifdef CONFIG_ANDROID_AB BCB_CMD_AB_SELECT, + BCB_CMD_AB_DUMP, #endif }; @@ -59,6 +60,8 @@ static int bcb_cmd_get(char *cmd) #ifdef CONFIG_ANDROID_AB if (!strcmp(cmd, "ab_select")) return BCB_CMD_AB_SELECT; + if (!strcmp(cmd, "ab_dump")) + return BCB_CMD_AB_DUMP; #endif else return -1; @@ -98,6 +101,10 @@ static int bcb_is_misused(int argc, char *const argv[]) if (argc != 4 && argc != 5) goto err; return 0; + case BCB_CMD_AB_DUMP: + if (argc != 3) + goto err; + return 0; #endif default: printf("Error: 'bcb %s' not supported\n", argv[0]); @@ -466,6 +473,28 @@ static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, return CMD_RET_SUCCESS; } + +static int do_bcb_ab_dump(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + int ret; + struct blk_desc *dev_desc; + struct disk_partition part_info; + + if (part_get_info_by_dev_and_name_or_num(argv[1], argv[2], + &dev_desc, &part_info, + false) < 0) { + return CMD_RET_FAILURE; + } + + ret = ab_dump_abc(dev_desc, &part_info); + if (ret < 0) { + printf("Cannot dump ABC data, error %d.\n", ret); + return CMD_RET_FAILURE; + } + + return CMD_RET_SUCCESS; +} #endif static struct cmd_tbl cmd_bcb_sub[] = { @@ -478,6 +507,8 @@ static struct cmd_tbl cmd_bcb_sub[] = { #ifdef CONFIG_ANDROID_AB U_BOOT_CMD_MKENT(ab_select, CONFIG_SYS_MAXARGS, 1, do_bcb_ab_select, "", ""), + U_BOOT_CMD_MKENT(ab_dump, CONFIG_SYS_MAXARGS, 1, + do_bcb_ab_dump, "", ""), #endif }; @@ -534,6 +565,10 @@ U_BOOT_CMD( " - If '--no-dec' is set, the number of tries remaining will not\n" " decremented for the selected boot slot\n" "\n" + "bcb ab_dump -\n" + " Dump boot_control information from specific partition.\n" + " <interface> <dev[:part|#part_name]>\n" + "\n" #endif "Legend:\n" "<interface> - storage device interface (virtio, mmc, etc)\n" diff --git a/include/android_ab.h b/include/android_ab.h index 1e53879a25f145a9d18ac0a6553d8c217123aa6f..838230e06f8cbf7a5d79d9d84d9ebe9f96aca10d 100644 --- a/include/android_ab.h +++ b/include/android_ab.h @@ -36,4 +36,14 @@ struct disk_partition; int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info, bool dec_tries); +/** + * ab_dump_abc() - Dump ABC information for specific partition. + * + * @dev_desc: Device description pointer + * @part_info: Partition information + * + * Return: 0 on success, or a negative on error + */ +int ab_dump_abc(struct blk_desc *dev_desc, struct disk_partition *part_info); + #endif /* __ANDROID_AB_H */ diff --git a/test/py/tests/test_android/test_ab.py b/test/py/tests/test_android/test_ab.py index 0d7b7995a9fab6e3daad748721818b9e4cfac452..9bf1a0eb00a6ae1edebf62f07fd162b9c8c02e49 100644 --- a/test/py/tests/test_android/test_ab.py +++ b/test/py/tests/test_android/test_ab.py @@ -54,6 +54,27 @@ def ab_disk_image(u_boot_console): di = ABTestDiskImage(u_boot_console) return di +def ab_dump(u_boot_console, slot_num, crc): + output = u_boot_console.run_command('bcb ab_dump host 0#misc') + header, slot0, slot1 = output.split('\r\r\n\r\r\n') + slots = [slot0, slot1] + slot_suffixes = ['_a', '_b'] + + header = dict(map(lambda x: map(str.strip, x.split(':')), header.split('\r\r\n'))) + assert header['Bootloader Control'] == '[misc]' + assert header['Active Slot'] == slot_suffixes[slot_num] + assert header['Magic Number'] == '0x42414342' + assert header['Version'] == '1' + assert header['Number of Slots'] == '2' + assert header['Recovery Tries Remaining'] == '0' + assert header['CRC'] == '{} (Valid)'.format(crc) + + slot = dict(map(lambda x: map(str.strip, x.split(':')), slots[slot_num].split('\r\r\n\t- ')[1:])) + assert slot['Priority'] == '15' + assert slot['Tries Remaining'] == '6' + assert slot['Successful Boot'] == '0' + assert slot['Verity Corrupted'] == '0' + @pytest.mark.boardspec('sandbox') @pytest.mark.buildconfigspec('android_ab') @pytest.mark.buildconfigspec('cmd_bcb') @@ -68,8 +89,10 @@ def test_ab(ab_disk_image, u_boot_console): assert 'Attempting slot a, tries remaining 7' in output output = u_boot_console.run_command('printenv slot_name') assert 'slot_name=a' in output + ab_dump(u_boot_console, 0, '0xd438d1b9') output = u_boot_console.run_command('bcb ab_select slot_name host 0:1') assert 'Attempting slot b, tries remaining 7' in output output = u_boot_console.run_command('printenv slot_name') assert 'slot_name=b' in output + ab_dump(u_boot_console, 1, '0x011ec016') -- 2.43.0
|
Re: IBC Show & NAB Show Attendees Email List- 2024
Hi,
Just checking in to see if you received my last email. Are you interested in discussing further?
Looking forward to hearing from you.
Best, Melanie Marketing Coordinator
toggle quoted message
Show quoted text
On Thu, Oct 10, 2024 at 5:00?PM Melanie Hill <attendeees.lists@...> wrote: Hi,
Would you be interested in acquiring NAB Show NY & IBC Show Attendees Data Lists- 2024?
Includes: Company Name, Name, Job Title, Email, Website, Address, Phone, Industry, and more.
Total Contacts:- 80,307 Cost:- $3,859
Interested? Email me back; I would love to provide more information on the list.
Kind Regards, Melanie Marketing Coordinator
|
Re: [PATCH v3 2/6] treewide: bcb: move ab_select command to bcb subcommands
Hi Dmitry, On mar., oct. 15, 2024 at 16:26, Dmitry Rokosov <ddrokosov@...> wrote: Hi Mattijs,
On Tue, Oct 15, 2024 at 02:10:10PM +0200, Mattijs Korpershoek wrote:
Hi Simon, Dmitry
On lun., oct. 14, 2024 at 15:06, Simon Glass <sjg@...> wrote:
Hi Dmitry,
On Mon, 14 Oct 2024 at 14:38, Dmitry Rokosov <ddrokosov@...> wrote:
Hello Mattijs,
On Sat, Oct 12, 2024 at 10:49:08AM +0200, Mattijs Korpershoek wrote:
Hi Dmitry,
On ven., oct. 11, 2024 at 21:00, Dmitry Rokosov <ddrokosov@...> wrote:
On Fri, Oct 11, 2024 at 04:20:39PM +0200, Mattijs Korpershoek wrote:
On ven., oct. 11, 2024 at 15:30, "Mattijs Korpershoek via groups.io" <mkorpershoek@...> wrote:
Hi Dmitry,
Thank you for the patch.
On mar., oct. 08, 2024 at 23:18, Dmitry Rokosov <ddrokosov@...> wrote:
To enhance code organization, it is beneficial to consolidate all A/B BCB management routines into a single super-command. The 'bcb' command is an excellent candidate for this purpose.
This patch integrates the separate 'ab_select' command into the 'bcb' group as the 'ab_select' subcommand, maintaining the same parameter list for consistency.
Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- MAINTAINERS | 1 - cmd/Kconfig | 15 +------ cmd/Makefile | 1 - cmd/ab_select.c | 66 ------------------------------- cmd/bcb.c | 63 +++++++++++++++++++++++++++++ configs/am57xx_hs_evm_usb_defconfig | 1 - configs/khadas-vim3_android_ab_defconfig | 1 - configs/khadas-vim3l_android_ab_defconfig | 1 - configs/sandbox64_defconfig | 4 +- configs/sandbox_defconfig | 4 +- doc/android/ab.rst | 12 +++--- include/configs/khadas-vim3_android.h | 2 +- include/configs/khadas-vim3l_android.h | 2 +- include/configs/meson64_android.h | 4 +- include/configs/ti_omap5_common.h | 4 +- test/py/tests/test_android/test_ab.py | 8 ++-- 16 files changed, 85 insertions(+), 104 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS index 7aefda93d017f07d616f0f6d191129914fbeb484..668ccec9ae6df47192b1af668e3fdbeb1dfa15ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -65,7 +65,6 @@ R: Sam Protsenko <semen.protsenko@...> S: Maintained T: git F: boot/android_ab.c -F: cmd/ab_select.c F: doc/android/ab.rst F: include/android_ab.h F: test/py/tests/test_android/test_ab.py diff --git a/cmd/Kconfig b/cmd/Kconfig index dd33266cec70a2b134b7244acae1b7f098b921e8..11e8d363dc9b137723a86a240412d82dd0dbccc5 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1067,6 +1067,7 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS + depends on ANDROID_AB When building with khadas-vim3_android_defconfig, we can see that CMD_BCB is no longer part of that build:
$ grep CMD_BCB .config <empty>
However, if we look at include/configs/meson64_android.h, we can see that the "bcb" command is not only used for checking the _slot suffix.
It's also used for checking the bootloader reason. For example, in BOOTENV_DEV_FASTBOOT, we call:
"if bcb test command = bootonce-bootloader; then " \
Since CMD_BCB is no longer part of the .config (due to this dependency), the boot script now shows errors:
""" U-Boot 2024.10-00796-g969325278805 (Oct 11 2024 - 14:46:00 +0200) khadas-vim3
Model: Khadas VIM3 SoC: Amlogic Meson G12B (A311D) Revision 29:b (10:2) DRAM: 2 GiB (effective 3.8 GiB) Core: 411 devices, 36 uclasses, devicetree: separate MMC: mmc@ffe03000: 0, mmc@ffe05000: 1, mmc@ffe07000: 2 Loading Environment from MMC... fs uses incompatible features: 00020000, ignoring Reading from MMC(2)... *** Warning - bad CRC, using default environment
In: usbkbd,serial Out: vidconsole,serial Err: vidconsole,serial Net: eth0: ethernet@ff3f0000
Hit any key to stop autoboot: 0 Verify GPT: success! Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist dev: pinctrl@14 dev: pinctrl@40 gpio: pin 88 (gpio 88) value is 1 Unknown command 'bcb' - try 'help' Warning: BCB is corrupted or does not exist Loading Android boot partition... switch to partitions #0, OK mmc2(part 0) is current device """
I know we should not be using a boot script, nor non A/B configs but it's a bummer that this series breaks an upstream defconfig (khadas-vim3_android_defconfig)
My recommendation:
Make BCB_CMD_AB_SELECT implementation dependant on ANDROID_AB. This way, users can use CMD_BCB with and without ANDROID_AB being enabled.
We could do: When ANDROID_AB=y, implement bcb ab_select subcommand When ANDROID_AB=n, command is not accessible.
I'll send you a diff shortly for this. Here is an illustration on how that would work:
diff --git a/cmd/Kconfig b/cmd/Kconfig index 861c31e26408..e1a4a97b042d 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1055,7 +1055,6 @@ config CMD_ADC config CMD_BCB bool "bcb" depends on PARTITIONS - depends on ANDROID_AB help Read/modify/write the fields of Bootloader Control Block, usually stored on the flash "misc" partition with its structure defined in: diff --git a/cmd/bcb.c b/cmd/bcb.c index 4fd32186ae65..4fe634f14cc5 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -438,6 +438,9 @@ static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, char slot[2]; bool dec_tries = true;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + for (int i = 4; i < argc; i++) { if (!strcmp(argv[i], "--no-dec")) dec_tries = false; @@ -474,6 +477,9 @@ static int do_bcb_ab_dump(struct cmd_tbl *cmdtp, int flag, int argc, struct blk_desc *dev_desc; struct disk_partition part_info;
+ if (!CONFIG_IS_ENABLED(AB_SELECT)) + return CMD_RET_SUCCESS; + if (part_get_info_by_dev_and_name_or_num(argv[1], argv[2], &dev_desc, &part_info, false) < 0) {
We also need to include an #ifdef directive for the ab_select_slot() function usage; otherwise, the code will not compile successfully. Are you sure? Per my understanding, it's possible that the compiler optimizes this out because CONFIG_IS_ENABLED(AB_SELECT) is known as build time.
When I tried this diff with khadas-vim3_android_defconfig I did not see any build errors. I will try again early next week.
As I recall, the IS_ENABLED() mechanism serves as a runtime checker to determine whether specific CONFIG_* options are enabled. Consequently, all code paths under this mechanism are always compiled. I attempted to disable CONFIG_ANDROID_AB for the sandbox_defconfig, but it resulted in the expected linker error.
/tmp/ccAvYrKL.ltrans25.ltrans.o: In function `do_bcb_ab_select': <artificial>:(.text+0x6d5d): undefined reference to `ab_select_slot' collect2: error: ld returned 1 exit status Makefile:1813: recipe for target 'u-boot' failed make: *** [u-boot] Error 1
I have already prepared a new version using #ifdef directives. I will send it shortly. Something else is going on here, since we do this all the time and rely on it. So long as the code is behind an if() the dead code should be eliminated.
I have passed my diff (using CONFIG_IS_ENABLED) through the U-Boot CI:
See the branch:
There are some test errors (sandbox test) but the "world build" stage finished sucessfully.
I have also tested locally using the CI container: $ cd ~/work/upstream/u-boot $ git clean -xdf $ make mproper $ docker run -v $PWD:$PWD -it trini/u-boot-gitlab-ci-runner:jammy-20240227-14Mar2024 /bin/bash
# In container uboot@0ba059e8b7af/$ cd /home/mkorpershoek/work/upstream/u-boot uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ pip install -r test/py/requirements.txt uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ ./test/py/test.py --bd sandbox --build -k test_ut
No build errors either.
Dmitry, can you clarify what compiler/build commands you've used to see that error?
For reference, here is what buildman has in the CI container:
uboot@0ba059e8b7af:/home/mkorpershoek/work/upstream/u-boot$ ./tools/buildman/buildman --list-tool-chains List of available toolchains (17): aarch64 : /opt/gcc-13.2.0-nolibc/aarch64-linux/bin/aarch64-linux-gcc arc : /opt/gcc-13.2.0-nolibc/arc-linux/bin/arc-linux-gcc arm : /opt/gcc-13.2.0-nolibc/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc c89 : /usr/bin/c89-gcc c99 : /usr/bin/c99-gcc i386 : /opt/gcc-13.2.0-nolibc/i386-linux/bin/i386-linux-gcc m68k : /opt/gcc-13.2.0-nolibc/m68k-linux/bin/m68k-linux-gcc microblaze: /opt/gcc-13.2.0-nolibc/microblaze-linux/bin/microblaze-linux-gcc mips : /opt/gcc-13.2.0-nolibc/mips-linux/bin/mips-linux-gcc nios2 : /opt/gcc-13.2.0-nolibc/nios2-linux/bin/nios2-linux-gcc powerpc : /opt/gcc-13.2.0-nolibc/powerpc-linux/bin/powerpc-linux-gcc riscv32 : /opt/gcc-13.2.0-nolibc/riscv32-linux/bin/riscv32-linux-gcc riscv64 : /opt/gcc-13.2.0-nolibc/riscv64-linux/bin/riscv64-linux-gcc sandbox : /usr/bin/cgcc sh2 : /opt/gcc-13.2.0-nolibc/sh2-linux/bin/sh2-linux-gcc x86_64 : /usr/bin/x86_64-linux-gnu-gcc xtensa : /opt/2020.07/xtensa-dc233c-elf/bin/xtensa-dc233c-elf-gcc
I think we should use CONFIG_IS_ENABLED if possible I just run build on the my x86 Ubuntu machine.
$ cd uboot $ make mproper $ make sandbox_defconfig $ make -j$(nproc) I tried these commands: Here is the successfull build output: I use: $ ~/work/upstream/u-boot-dfu/ dmitry/ab-dump-v3* gcc --version gcc (GCC) 14.2.1 20240912 (Red Hat 14.2.1-3) Copyright (C) 2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ ~/work/upstream/u-boot-dfu/ dmitry/ab-dump-v3* ld --version GNU ld version 2.41-37.fc40 Copyright (C) 2023 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License version 3 or (at your option) a later version. This program has absolutely no warranty. What toolchains do you use? That's all.
I've already sent the v4 patch with #ifdef. I can prepare the v5 patch using the IS_ENABLED() macro and will aim to send it today.
But I have one question:
Do we really want to display the ab_select and ab_dump subcommands to users if these commands are just stubs? Perhaps we should consider adding #ifdef directives to the subcommand arrays.
That's a valid concern. I don't think we should display the ab_select and ab_dump commands to the users but I still want to have IS_ENABLED wherever possible to keep the code simple. -- Thank you, Dmitry
|
Re: [PATCH v4 2/5] treewide: bcb: move ab_select command to bcb subcommands
Hi Dmitry, Thank you for the patch. On mar., oct. 15, 2024 at 00:06, Dmitry Rokosov <ddrokosov@...> wrote: To enhance code organization, it is beneficial to consolidate all A/B BCB management routines into a single super-command. The 'bcb' command is an excellent candidate for this purpose.
This patch integrates the separate 'ab_select' command into the 'bcb' group as the 'ab_select' subcommand, maintaining the same parameter list for consistency.
Signed-off-by: Dmitry Rokosov <ddrokosov@...> --- MAINTAINERS | 1 - cmd/Kconfig | 14 ------ cmd/Makefile | 1 - cmd/ab_select.c | 66 --------------------------- cmd/bcb.c | 75 +++++++++++++++++++++++++++++++ configs/am57xx_evm_defconfig | 1 - configs/am57xx_hs_evm_defconfig | 1 - configs/am57xx_hs_evm_usb_defconfig | 1 - configs/khadas-vim3_android_ab_defconfig | 1 - configs/khadas-vim3l_android_ab_defconfig | 1 - configs/sandbox64_defconfig | 2 + configs/sandbox_defconfig | 1 - doc/android/ab.rst | 12 ++--- include/configs/khadas-vim3_android.h | 2 +- include/configs/khadas-vim3l_android.h | 2 +- include/configs/meson64_android.h | 4 +- include/configs/ti_omap5_common.h | 4 +- test/py/tests/test_android/test_ab.py | 8 ++-- 18 files changed, 93 insertions(+), 104 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS index 7aefda93d017f07d616f0f6d191129914fbeb484..668ccec9ae6df47192b1af668e3fdbeb1dfa15ea 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -65,7 +65,6 @@ R: Sam Protsenko <semen.protsenko@...> S: Maintained T: git F: boot/android_ab.c -F: cmd/ab_select.c F: doc/android/ab.rst F: include/android_ab.h F: test/py/tests/test_android/test_ab.py diff --git a/cmd/Kconfig b/cmd/Kconfig index 37894eb80d66f98bb5a3b3745d207ddbf7af088d..e1a4a97b042db2491d55398ea1e879ce5a83930e 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -1774,20 +1774,6 @@ config CMD_XXD endmenu -menu "Android support commands" - -config CMD_AB_SELECT - bool "ab_select" - depends on ANDROID_AB - help - On Android devices with more than one boot slot (multiple copies of - the kernel and system images) this provides a command to select which - slot should be used to boot from and register the boot attempt. This - is used by the new A/B update model where one slot is updated in the - background while running from the other slot. - -endmenu - if NET menuconfig CMD_NET diff --git a/cmd/Makefile b/cmd/Makefile index 91227f1249cbda5f7b383e8865c8cc23f3ad5f44..0fd7da3c0de91822c4299cc7034193c497d622b1 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -17,7 +17,6 @@ obj-$(CONFIG_CMD_2048) += 2048.o obj-$(CONFIG_CMD_ACPI) += acpi.o obj-$(CONFIG_CMD_ADDRMAP) += addrmap.o obj-$(CONFIG_CMD_AES) += aes.o -obj-$(CONFIG_CMD_AB_SELECT) += ab_select.o obj-$(CONFIG_CMD_ADC) += adc.o obj-$(CONFIG_CMD_ARMFLASH) += armflash.o obj-$(CONFIG_BLK) += blk_common.o diff --git a/cmd/ab_select.c b/cmd/ab_select.c deleted file mode 100644 index 7c178c728ca4c8b5bcba02a04eef2d6a7c86afb6..0000000000000000000000000000000000000000 --- a/cmd/ab_select.c +++ /dev/null @@ -1,66 +0,0 @@ -// SPDX-License-Identifier: BSD-2-Clause -/* - * Copyright (C) 2017 The Android Open Source Project - */ - -#include <android_ab.h> -#include <command.h> -#include <env.h> -#include <part.h> - -static int do_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]) -{ - int ret; - struct blk_desc *dev_desc; - struct disk_partition part_info; - char slot[2]; - bool dec_tries = true; - - if (argc < 4) - return CMD_RET_USAGE; - - for (int i = 4; i < argc; i++) { - if (strcmp(argv[i], "--no-dec") == 0) { - dec_tries = false; - } else { - return CMD_RET_USAGE; - } - } - - /* Lookup the "misc" partition from argv[2] and argv[3] */ - if (part_get_info_by_dev_and_name_or_num(argv[2], argv[3], - &dev_desc, &part_info, - false) < 0) { - return CMD_RET_FAILURE; - } - - ret = ab_select_slot(dev_desc, &part_info, dec_tries); - if (ret < 0) { - printf("Android boot failed, error %d.\n", ret); - return CMD_RET_FAILURE; - } - - /* Android standard slot names are 'a', 'b', ... */ - slot[0] = BOOT_SLOT_NAME(ret); - slot[1] = '\0'; - env_set(argv[1], slot); - printf("ANDROID: Booting slot: %s\n", slot); - return CMD_RET_SUCCESS; -} - -U_BOOT_CMD(ab_select, 5, 0, do_ab_select, - "Select the slot used to boot from and register the boot attempt.", - "<slot_var_name> <interface> <dev[:part|#part_name]> [--no-dec]\n" - " - Load the slot metadata from the partition 'part' on\n" - " device type 'interface' instance 'dev' and store the active\n" - " slot in the 'slot_var_name' variable. This also updates the\n" - " Android slot metadata with a boot attempt, which can cause\n" - " successive calls to this function to return a different result\n" - " if the returned slot runs out of boot attempts.\n" - " - If 'part_name' is passed, preceded with a # instead of :, the\n" - " partition name whose label is 'part_name' will be looked up in\n" - " the partition table. This is commonly the \"misc\" partition.\n" - " - If '--no-dec' is set, the number of tries remaining will not\n" - " decremented for the selected boot slot\n" -); diff --git a/cmd/bcb.c b/cmd/bcb.c index 97a96c009641cc094645607ef833575f3c03fe4b..bf28726da91134fa287ca8aada884ed74ecc8f2b 100644 --- a/cmd/bcb.c +++ b/cmd/bcb.c @@ -8,6 +8,7 @@ #include <android_bootloader_message.h> #include <bcb.h> #include <command.h> +#include <android_ab.h> #include <display_options.h> #include <log.h> #include <part.h> @@ -23,6 +24,9 @@ enum bcb_cmd { BCB_CMD_FIELD_TEST, BCB_CMD_FIELD_DUMP, BCB_CMD_STORE, +#ifdef CONFIG_ANDROID_AB + BCB_CMD_AB_SELECT, +#endif }; static const char * const fields[] = { @@ -52,6 +56,10 @@ static int bcb_cmd_get(char *cmd) return BCB_CMD_STORE; if (!strcmp(cmd, "dump")) return BCB_CMD_FIELD_DUMP; +#ifdef CONFIG_ANDROID_AB + if (!strcmp(cmd, "ab_select")) + return BCB_CMD_AB_SELECT; +#endif else return -1; } @@ -85,6 +93,12 @@ static int bcb_is_misused(int argc, char *const argv[]) if (argc != 2) goto err; break; +#ifdef CONFIG_ANDROID_AB + case BCB_CMD_AB_SELECT: + if (argc != 4 && argc != 5) + goto err; + return 0; +#endif default: printf("Error: 'bcb %s' not supported\n", argv[0]); return -1; @@ -414,6 +428,46 @@ void bcb_reset(void) __bcb_reset(); } +#ifdef CONFIG_ANDROID_AB As discussed in , let's try to use CONFIG_IS_ENABLED. Let's continue the discussion in +static int do_bcb_ab_select(struct cmd_tbl *cmdtp, int flag, int argc, + char * const argv[]) +{ + int ret; + struct blk_desc *dev_desc; + struct disk_partition part_info; + char slot[2]; + bool dec_tries = true; + + for (int i = 4; i < argc; i++) { + if (strcmp(argv[i], "--no-dec") == 0) + dec_tries = false; + else + return CMD_RET_USAGE; + } + + /* Lookup the "misc" partition from argv[2] and argv[3] */ + if (part_get_info_by_dev_and_name_or_num(argv[2], argv[3], + &dev_desc, &part_info, + false) < 0) { + return CMD_RET_FAILURE; + } + + ret = ab_select_slot(dev_desc, &part_info, dec_tries); + if (ret < 0) { + printf("Android boot failed, error %d.\n", ret); + return CMD_RET_FAILURE; + } + + /* Android standard slot names are 'a', 'b', ... */ + slot[0] = BOOT_SLOT_NAME(ret); + slot[1] = '\0'; + env_set(argv[1], slot); + printf("ANDROID: Booting slot: %s\n", slot); + + return CMD_RET_SUCCESS; +} +#endif + static struct cmd_tbl cmd_bcb_sub[] = { U_BOOT_CMD_MKENT(load, CONFIG_SYS_MAXARGS, 1, do_bcb_load, "", ""), U_BOOT_CMD_MKENT(set, CONFIG_SYS_MAXARGS, 1, do_bcb_set, "", ""), @@ -421,6 +475,10 @@ static struct cmd_tbl cmd_bcb_sub[] = { U_BOOT_CMD_MKENT(test, CONFIG_SYS_MAXARGS, 1, do_bcb_test, "", ""), U_BOOT_CMD_MKENT(dump, CONFIG_SYS_MAXARGS, 1, do_bcb_dump, "", ""), U_BOOT_CMD_MKENT(store, CONFIG_SYS_MAXARGS, 1, do_bcb_store, "", ""), +#ifdef CONFIG_ANDROID_AB + U_BOOT_CMD_MKENT(ab_select, CONFIG_SYS_MAXARGS, 1, + do_bcb_ab_select, "", ""), +#endif }; static int do_bcb(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) @@ -460,6 +518,23 @@ U_BOOT_CMD( "bcb dump <field> - dump BCB <field>\n" "bcb store - store BCB back to <interface>\n" "\n" +#ifdef CONFIG_ANDROID_AB + "bcb ab_select -\n" + " Select the slot used to boot from and register the boot attempt.\n" + " <slot_var_name> <interface> <dev[:part|#part_name]> [--no-dec]\n" + " - Load the slot metadata from the partition 'part' on\n" + " device type 'interface' instance 'dev' and store the active\n" + " slot in the 'slot_var_name' variable. This also updates the\n" + " Android slot metadata with a boot attempt, which can cause\n" + " successive calls to this function to return a different result\n" + " if the returned slot runs out of boot attempts.\n" + " - If 'part_name' is passed, preceded with a # instead of :, the\n" + " partition name whose label is 'part_name' will be looked up in\n" + " the partition table. This is commonly the \"misc\" partition.\n" + " - If '--no-dec' is set, the number of tries remaining will not\n" + " decremented for the selected boot slot\n" + "\n" +#endif "Legend:\n" "<interface> - storage device interface (virtio, mmc, etc)\n" "<dev> - storage device index containing the BCB partition\n" diff --git a/configs/am57xx_evm_defconfig b/configs/am57xx_evm_defconfig index efc154eda043ff3ea08194288e33792ce48282f9..b793f00babe474ea3f15292fb4015a7120401238 100644 --- a/configs/am57xx_evm_defconfig +++ b/configs/am57xx_evm_defconfig @@ -48,7 +48,6 @@ CONFIG_CMD_SPL=y CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2 CONFIG_CMD_BCB=y # CONFIG_CMD_SETEXPR is not set -CONFIG_CMD_AB_SELECT=y CONFIG_BOOTP_DNS2=y # CONFIG_CMD_PMIC is not set CONFIG_CMD_AVB=y diff --git a/configs/am57xx_hs_evm_defconfig b/configs/am57xx_hs_evm_defconfig index 0f8533e15dbd7c0186a513b27b46a0407b6f79f1..5cacd7f9cc53d338d52120186b16684add93fd21 100644 --- a/configs/am57xx_hs_evm_defconfig +++ b/configs/am57xx_hs_evm_defconfig @@ -44,7 +44,6 @@ CONFIG_CMD_ADTIMG=y CONFIG_CMD_ABOOTIMG=y CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2 CONFIG_CMD_BCB=y -CONFIG_CMD_AB_SELECT=y CONFIG_BOOTP_DNS2=y # CONFIG_CMD_PMIC is not set CONFIG_CMD_AVB=y diff --git a/configs/am57xx_hs_evm_usb_defconfig b/configs/am57xx_hs_evm_usb_defconfig index 81a938339d5934605cb7defa04ea92f76468b21a..2d8068ecdc79c01c1281ab3873fc892aa4c96be7 100644 --- a/configs/am57xx_hs_evm_usb_defconfig +++ b/configs/am57xx_hs_evm_usb_defconfig @@ -46,7 +46,6 @@ CONFIG_CMD_ADTIMG=y CONFIG_CMD_ABOOTIMG=y CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2 CONFIG_CMD_BCB=y -CONFIG_CMD_AB_SELECT=y CONFIG_BOOTP_DNS2=y # CONFIG_CMD_PMIC is not set CONFIG_CMD_AVB=y diff --git a/configs/khadas-vim3_android_ab_defconfig b/configs/khadas-vim3_android_ab_defconfig index 510fe4f8928fe39a040a615636fa550b3e0dc5db..de5357c45cbfe4742d9491a29386850570acc235 100644 --- a/configs/khadas-vim3_android_ab_defconfig +++ b/configs/khadas-vim3_android_ab_defconfig @@ -47,7 +47,6 @@ CONFIG_CMD_SPI=y CONFIG_CMD_USB=y CONFIG_CMD_USB_MASS_STORAGE=y # CONFIG_CMD_SETEXPR is not set -CONFIG_CMD_AB_SELECT=y CONFIG_CMD_REGULATOR=y CONFIG_CMD_AVB=y CONFIG_OF_CONTROL=y diff --git a/configs/khadas-vim3l_android_ab_defconfig b/configs/khadas-vim3l_android_ab_defconfig index d2da8ff2a69b209b8fb22a48be537bd4dd17a3bb..4d7b90f23002e464d7dc40516bcd3161b0f59439 100644 --- a/configs/khadas-vim3l_android_ab_defconfig +++ b/configs/khadas-vim3l_android_ab_defconfig @@ -47,7 +47,6 @@ CONFIG_CMD_SPI=y CONFIG_CMD_USB=y CONFIG_CMD_USB_MASS_STORAGE=y # CONFIG_CMD_SETEXPR is not set -CONFIG_CMD_AB_SELECT=y CONFIG_CMD_REGULATOR=y CONFIG_CMD_AVB=y CONFIG_OF_CONTROL=y diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig index 1b3b8c6e788cd6845b61e62a06b730da28831edc..b5f80b8572ad32b2a92d4fe82c9068c453c11dfd 100644 --- a/configs/sandbox64_defconfig +++ b/configs/sandbox64_defconfig @@ -27,6 +27,7 @@ CONFIG_CONSOLE_RECORD=y CONFIG_CONSOLE_RECORD_OUT_SIZE=0x6000 CONFIG_PRE_CONSOLE_BUFFER=y CONFIG_DISPLAY_BOARDINFO_LATE=y +CONFIG_ANDROID_AB=y CONFIG_CMD_CPU=y CONFIG_CMD_LICENSE=y CONFIG_CMD_BOOTZ=y @@ -46,6 +47,7 @@ CONFIG_CMD_MD5SUM=y CONFIG_CMD_MEMINFO=y CONFIG_CMD_MX_CYCLIC=y CONFIG_CMD_MEMTEST=y +CONFIG_CMD_BCB=y CONFIG_CMD_CLK=y CONFIG_CMD_DEMO=y CONFIG_CMD_GPIO=y diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index f31ecef4f58ee201f93c61cd072d6f688b091c3b..749f53559f708ee52fb7c9c638aedcbcb2f23b72 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -103,7 +103,6 @@ CONFIG_CMD_AXI=y CONFIG_CMD_CAT=y CONFIG_CMD_SETEXPR_FMT=y CONFIG_CMD_XXD=y -CONFIG_CMD_AB_SELECT=y CONFIG_CMD_DHCP6=y CONFIG_BOOTP_DNS2=y CONFIG_CMD_PCAP=y diff --git a/doc/android/ab.rst b/doc/android/ab.rst index 2adf88781d60b61d1b3c74efe976a684b590c813..7fd4aeb6a724b839de9be5e9a8843ade2ad3667e 100644 --- a/doc/android/ab.rst +++ b/doc/android/ab.rst @@ -18,7 +18,7 @@ The A/B updates support can be activated by specifying next options in your board configuration file:: CONFIG_ANDROID_AB=y - CONFIG_CMD_AB_SELECT=y + CONFIG_CMD_BCB=y The disk space on target device must be partitioned in a way so that each partition which needs to be updated has two or more instances. The name of @@ -26,8 +26,8 @@ each instance must be formed by adding suffixes: ``_a``, ``_b``, ``_c``, etc. For example: ``boot_a``, ``boot_b``, ``system_a``, ``system_b``, ``vendor_a``, ``vendor_b``. -As a result you can use ``ab_select`` command to ensure A/B boot process in your -boot script. This command analyzes and processes A/B metadata stored on a +As a result you can use ``bcb ab_select`` command to ensure A/B boot process in +your boot script. This command analyzes and processes A/B metadata stored on a special partition (e.g. ``misc``) and determines which slot should be used for booting up. @@ -42,15 +42,15 @@ Command usage .. code-block:: none - ab_select <slot_var_name> <interface> <dev[:part_number|#part_name]> + bcb ab_select <slot_var_name> <interface> <dev[:part_number|#part_name]> for example:: - => ab_select slot_name mmc 1:4 + => bcb ab_select slot_name mmc 1:4 or:: - => ab_select slot_name mmc 1#misc + => bcb ab_select slot_name mmc 1#misc Result:: diff --git a/include/configs/khadas-vim3_android.h b/include/configs/khadas-vim3_android.h index da6adf6c413add03413f40987959a24ad0d41e62..5468ac5878b34b82a70db84c209bab9f3a9dd79f 100644 --- a/include/configs/khadas-vim3_android.h +++ b/include/configs/khadas-vim3_android.h @@ -12,7 +12,7 @@ #define LOGO_UUID "43a3305d-150f-4cc9-bd3b-38fca8693846;" #define ROOT_UUID "ddb8c3f6-d94d-4394-b633-3134139cc2e0;" -#if defined(CONFIG_CMD_AB_SELECT) +#if defined(CONFIG_CMD_BCB) && defined(CONFIG_ANDROID_AB) #define PARTS_DEFAULT \ "uuid_disk=${uuid_gpt_disk};" \ "name=logo,start=512K,size=2M,uuid=" LOGO_UUID \ diff --git a/include/configs/khadas-vim3l_android.h b/include/configs/khadas-vim3l_android.h index b1768e2d821176452254fb07f2e3747402b9b4fd..32821b942109feae5ade9f7fd02924bca34cf58b 100644 --- a/include/configs/khadas-vim3l_android.h +++ b/include/configs/khadas-vim3l_android.h @@ -12,7 +12,7 @@ #define LOGO_UUID "43a3305d-150f-4cc9-bd3b-38fca8693846;" #define ROOT_UUID "ddb8c3f6-d94d-4394-b633-3134139cc2e0;" -#if defined(CONFIG_CMD_AB_SELECT) +#if defined(CONFIG_CMD_BCB) && defined(CONFIG_ANDROID_AB) #define PARTS_DEFAULT \ "uuid_disk=${uuid_gpt_disk};" \ "name=logo,start=512K,size=2M,uuid=" LOGO_UUID \ diff --git a/include/configs/meson64_android.h b/include/configs/meson64_android.h index c0e977abb01fb9efb7a462906a0073c84c800897..cc626dbf02418a49b367c8386797ce6ffc28c85b 100644 --- a/include/configs/meson64_android.h +++ b/include/configs/meson64_android.h @@ -47,13 +47,13 @@ #define AVB_VERIFY_CMD "" #endif -#if defined(CONFIG_CMD_AB_SELECT) +#if defined(CONFIG_CMD_BCB) && defined(CONFIG_ANDROID_AB) #define ANDROIDBOOT_GET_CURRENT_SLOT_CMD "get_current_slot=" \ "if part number mmc ${mmcdev} " CONTROL_PARTITION " control_part_number; " \ "then " \ "echo " CONTROL_PARTITION \ " partition number:${control_part_number};" \ - "ab_select current_slot mmc ${mmcdev}:${control_part_number};" \ + "bcb ab_select current_slot mmc ${mmcdev}:${control_part_number};" \ "else " \ "echo " CONTROL_PARTITION " partition not found;" \ "fi;\0" diff --git a/include/configs/ti_omap5_common.h b/include/configs/ti_omap5_common.h index 26494ae980108ad84eb173a0deaa7b701a5309d4..26b6c1cd188c05371c6455cd6247f07a1773d885 100644 --- a/include/configs/ti_omap5_common.h +++ b/include/configs/ti_omap5_common.h @@ -93,13 +93,13 @@ #define CONTROL_PARTITION "misc" -#if defined(CONFIG_CMD_AB_SELECT) +#if defined(CONFIG_CMD_BCB) && defined(CONFIG_ANDROID_AB) #define AB_SELECT_SLOT \ "if part number mmc 1 " CONTROL_PARTITION " control_part_number; " \ "then " \ "echo " CONTROL_PARTITION \ " partition number:${control_part_number};" \ - "ab_select slot_name mmc ${mmcdev}:${control_part_number};" \ + "bcb ab_select slot_name mmc ${mmcdev}:${control_part_number};" \ "else " \ "echo " CONTROL_PARTITION " partition not found;" \ "exit;" \ diff --git a/test/py/tests/test_android/test_ab.py b/test/py/tests/test_android/test_ab.py index c79cb07fda35dfeb608ac7345cd3f22744e2e491..0d7b7995a9fab6e3daad748721818b9e4cfac452 100644 --- a/test/py/tests/test_android/test_ab.py +++ b/test/py/tests/test_android/test_ab.py @@ -56,20 +56,20 @@ def ab_disk_image(u_boot_console): @pytest.mark.boardspec('sandbox') @pytest.mark.buildconfigspec('android_ab') -@...('cmd_ab_select') +@...('cmd_bcb') @pytest.mark.requiredtool('sgdisk') def test_ab(ab_disk_image, u_boot_console): - """Test the 'ab_select' command.""" + """Test the 'bcb ab_select' command.""" u_boot_console.run_command('host bind 0 ' + ab_disk_image.path) - output = u_boot_console.run_command('ab_select slot_name host 0#misc') + output = u_boot_console.run_command('bcb ab_select slot_name host 0#misc') assert 're-initializing A/B metadata' in output assert 'Attempting slot a, tries remaining 7' in output output = u_boot_console.run_command('printenv slot_name') assert 'slot_name=a' in output - output = u_boot_console.run_command('ab_select slot_name host 0:1') + output = u_boot_console.run_command('bcb ab_select slot_name host 0:1') assert 'Attempting slot b, tries remaining 7' in output output = u_boot_console.run_command('printenv slot_name') assert 'slot_name=b' in output
-- 2.43.0
|