
On Sat, Oct 08, 2016 at 03:41:50PM -0700, Sergey Kubushyn wrote:
On Sat, 8 Oct 2016, Tom Rini wrote:
On Wed, Oct 05, 2016 at 01:28:07PM -0700, Sergey Kubushyn wrote:
This allows to place U-Boot environment into eMMC boot partition thus saving space on user partition for the OS (or whatever.) When booting off of eMMC many (all?) MCUs can use dedicated boot0/boot1 partitions to boot so U-Boot (or SPL) is written to one (or both) such partitions. When such boot configuration is used it makes sense to place environment in the same partition where the U-Boot itself is so the entire user partition is available for the OS.
It might be not well polished yet but it is a simple patch that can be reworked later.
It uses 4 Kconfig variables right now which probably belong to the board Kconfig. Those are:
CONFIG_ENV_IN_EMMC_BOOT -- tells that environment is in eMMC boot partition if defined
CONFIG_EMMC_ENV_PART -- tells which boot partition environment should be stored in (either 1 or 2)
CONFIG_EMMC_BOOT_PART -- which boot partition will be used by eMMC to read U-Boot/SPL binary for boot protocol (either 1 or 2.) That can be different from the environment partition
CONFIG_EMMC_BOOT_ACK -- tells that eMMC should provide boot ACKs if defined
Here is an excerpt from actual board Kconfig:
I think what's missing is that in the other cases where we do environment in the eMMC boot partitions we don't need the boot ack part. Can you see if the existing hooks work, when you add in something for boot ack?
Eh, I _DO_ use existing hook. And one of the parameters passed to that hook is boot ack (drivers/mmc/mmc_boot.c, line 101):
=== Cut === int mmc_set_part_conf(struct mmc *mmc, u8 ack, u8 part_num, u8 access) === Cut ===
I could've just set it to 0 unconditionally but there might be some board configs that might require it to be enabled so I made it configurable.
And I don't think we have any boards with environment in boot partition because there is simply no support for this in common/enc_mmc.c. Remember,
I've put environment on the boot partitions on the eMMC on Beaglebone black for a number of years. See include/configs/am335x_evm.h: #elif defined(CONFIG_EMMC_BOOT) #define CONFIG_ENV_IS_IN_MMC #define CONFIG_SYS_MMC_ENV_DEV 1 #define CONFIG_SYS_MMC_ENV_PART 2 #define CONFIG_ENV_OFFSET 0x0 #define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + CONFIG_ENV_SIZE) #define CONFIG_SYS_REDUNDAND_ENVIRONMENT
Now, I fully accept that it's not working in your case and there must be something further needed.