On Wed, Apr 14, 2021 at 08:51:43PM +0200, Rasmus Villemoes wrote: > This is roughly the U-Boot side equivalent to commit > e282c422e0 (tools: fw_env: use erasesize from MEMGETINFO ioctl). The > motivation is the case where one has a board with several revisions, > where the SPI flashes have different erase sizes. > > In our case, we have an 8K environment, and the flashes have erase > sizes of 4K (newer boards) and 64K (older boards). Currently, we must > set CONFIG_ENV_SECT_SIZE to 64K to make the code work on the older > boards, but for the newer ones, that ends up wasting quite a bit of > time reading/erasing/restoring the last 56K. > > At first, I wanted to allow setting CONFIG_ENV_SECT_SIZE to 0 to mean > "use the erase size the chip reports", but that config > option is used in a number of preprocessor conditionals, and shared > between ENV_IS_IN_FLASH and ENV_IS_IN_SPI_FLASH. > > So instead, introduce a new boolean config option, which for now can > only be used with ENV_IS_IN_SPI_FLASH. If left off, there's no change > in behaviour. > > The only slightly annoying detail is that, when selected, the compiler > is apparently not smart enough to see that the the saved_size and > saved_offset variables are only used under the same "if (sect_size > > CONFIG_ENV_SIZE)" condition as where they are computed, so we need to > initialize them to 0 to avoid "may be used uninitialized" warnings. > > On our newer boards with the 4K erase size, saving the environment now > takes 0.080 seconds instead of 0.53 seconds, which directly translates > to that much faster boot time since our logic always causes the > environment to be written during boot. > > Signed-off-by: Rasmus Villemoes <rasmus.villem...@prevas.dk>
Applied to u-boot/master, thanks! -- Tom
signature.asc
Description: PGP signature