From 386f20cade50ed36674e3e5827cb282eb1da95c2 Mon Sep 17 00:00:00 2001 From: Quentin Schulz Date: Thu, 12 Sep 2019 16:41:01 +0200 Subject: ubi: provide a way to skip CRC checks Some users of static UBI volumes implement their own integrity check, thus making the volume CRC check done at open time useless. For instance, this is the case when one use the ubiblock + dm-verity + squashfs combination, where dm-verity already checks integrity of the block device but this time at the block granularity instead of verifying the whole volume. Skipping this test drastically improves the boot-time. Adapted to U-Boot by Stefan Roese. Signed-off-by: Quentin Schulz Signed-off-by: Stefan Roese Reviewed-by: Heiko Schocher Cc: Quentin Schulz Cc: Boris Brezillon --- include/mtd/ubi-user.h | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/mtd/ubi-user.h b/include/mtd/ubi-user.h index cd81ef965c8..8d472cc0138 100644 --- a/include/mtd/ubi-user.h +++ b/include/mtd/ubi-user.h @@ -271,6 +271,20 @@ struct ubi_attach_req { __s8 padding[10]; }; +/* + * UBI volume flags. + * + * @UBI_VOL_SKIP_CRC_CHECK_FLG: skip the CRC check done on a static volume at + * open time. Only valid for static volumes and + * should only be used if the volume user has a + * way to verify data integrity + */ +enum { + UBI_VOL_SKIP_CRC_CHECK_FLG = 0x1, +}; + +#define UBI_VOL_VALID_FLGS (UBI_VOL_SKIP_CRC_CHECK_FLG) + /** * struct ubi_mkvol_req - volume description data structure used in * volume creation requests. @@ -278,7 +292,7 @@ struct ubi_attach_req { * @alignment: volume alignment * @bytes: volume size in bytes * @vol_type: volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME) - * @padding1: reserved for future, not used, has to be zeroed + * @flags: volume flags (%UBI_VOL_SKIP_CRC_CHECK_FLG) * @name_len: volume name length * @padding2: reserved for future, not used, has to be zeroed * @name: volume name @@ -307,7 +321,7 @@ struct ubi_mkvol_req { __s32 alignment; __s64 bytes; __s8 vol_type; - __s8 padding1; + __u8 flags; __s16 name_len; __s8 padding2[4]; char name[UBI_MAX_VOLUME_NAME + 1]; -- cgit v1.3.1 From 611623417403256dc79205a89d4dc7f826bc805f Mon Sep 17 00:00:00 2001 From: Philippe Reynes Date: Mon, 14 Oct 2019 19:41:06 +0200 Subject: ubi: env: fix redundand management We check (with a #if defined()) the config ENV_UBI_VOLUME_REDUND to know if there is a redundant env. But this config is a string and is always defined with env is in ubi, so we always consider that a redundand env is used. To fix this issue, I've added a hidden flag ENV_UBI_IS_VOLUME_REDUND that is true when ENV_UBI_VOLUME_REDUND is not "". Then, I check this flag in the code, instead of the string ENV_UBI_VOLUME_REDUND. hs: fixed typo s/condider/consider Signed-off-by: Philippe Reynes Reviewed-by: Heiko Schocher --- env/Kconfig | 6 ++++++ include/env_internal.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/env/Kconfig b/env/Kconfig index e4ba12ece3f..bc03816bc8b 100644 --- a/env/Kconfig +++ b/env/Kconfig @@ -516,6 +516,12 @@ config ENV_UBI_VOLUME_REDUND help Name of the redundant volume that you want to store the environment in. +config ENV_UBI_IS_VOLUME_REDUND + bool + depends on ENV_IS_IN_UBI + default y if ENV_UBI_VOLUME_REDUND != "" + default n + config ENV_UBI_VID_OFFSET int "ubi environment VID offset" depends on ENV_IS_IN_UBI diff --git a/include/env_internal.h b/include/env_internal.h index b1ddcb5adfd..88c36b32a1e 100644 --- a/include/env_internal.h +++ b/include/env_internal.h @@ -101,7 +101,7 @@ extern unsigned long nand_env_oob_offset; # ifndef CONFIG_ENV_UBI_VOLUME # error "Need to define CONFIG_ENV_UBI_VOLUME when using CONFIG_ENV_IS_IN_UBI" # endif -# if defined(CONFIG_ENV_UBI_VOLUME_REDUND) +# if defined(CONFIG_ENV_UBI_IS_VOLUME_REDUND) # define CONFIG_SYS_REDUNDAND_ENVIRONMENT # endif # ifndef CONFIG_ENV_SIZE -- cgit v1.3.1