[U-Boot] [PATCH] ARM: ti: Update layout for MMC and eMMC (env and dfu)

Sam Protsenko
2017-02-23T19:28:11Z

On Thu, Feb 23, 2017 at 5:14 PM, Jean-Jacques Hiblot <jjhiblot@ti.com> wrote:
>
>
> On 23/02/2017 14:46, Sam Protsenko wrote:
>>
>> On Wed, Feb 22, 2017 at 10:27 AM, Jean-Jacques Hiblot <jjhiblot@ti.com>
>> wrote:
>>>
>>> The problems with the current DFU layout are:
>>> MMC: The space allocated for u-boot is too small for the latest u-boot
>>> (>750KB). We need to increase it. eMMC uses a much bigger area
>>> (2MB).
>>> eMMC: region "u-boot.img.raw" overlaps the environment area and the
>>> region
>>> "spl-os-image.raw".
>>> both: region "spl-os-image.raw" is quite small and can't handle android
>>> kernels
>>>
>>> Fixing this requires growing some regions and moving others.
>>> Care has been taken to leave some room for further growth of
>>> "spl-os-args.raw".
>>> Also the "env" now appears in the dfu so that it's apparent that the
>>> region is not free space that can be used to grow "u-boot.img.raw".
>>> The total space allocated for those raw binaries is 16MB, of which 13+MB
>>> are reserved for the kernel image.
>>>
>>> Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
>>> ---
>>>
>>> Sam,
>>>
>>> This patch goes a bit further in changing the layout of the MMC than
>>> yours. However
>>> it doesn't update the GPT partitioning. This would still be needed.
>>>
>> Hi Jean-Jacques,
>>
>> Got a couple of questions about this change and my patch (changing
>> eMMC partitions table), about how to make them play nice together.
>>
>> 1. How DFU table is connected to eMMC partition table? And why my
>> patch was interfering with DFU table?
>
> AFAIK DFU is not related to GPT. I never used the GPT so I can't for sure
> how it fits together.
> My guess is that env_mmc.c has no idea that GPT even exists and uses raw
> access to the eMMC. In this case CONFIG_ENV_OFFSET must be defined to point
> at the beginning of your env partition and must be adapted when the GPT is
> updated. The same goes for the DFU. Ideally GPT and DFU should use the same
> layout (at least for MLO, u-boot, kernel and args).
>
>> 2. Can I change CONFIG_ENV_OFFSET? Because my changes is going to move
>> "reserved" partition on eMMC, where U-Boot environment is stored. Or
>> it should be in sync with DFU table somehow? If yes -- we should work
>> together to find solution that works best for both cases.
>
> CONFIG_ENV_OFFSET is loosely related to DFU: we don't update the environment
> through DFU. However we must make sure that the area used to store the env
> doesn't overlap a another region (MLO, u-boot, kernel, args). The dfu
> doesn't define those regions, it's done with #defines like
> CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR. But DFU exposes them for "remote"
> upgrade.
>

So if I change eMMC GPT partition table, it's ok for me to update
CONFIG_ENV_OFFSET as well, right? Because in my case CONFIG_ENV_OFFSET
is going to be different from the value your patch sets. In case of
eMMC table, we're using "reserved" partition to store U-Boot
environment, and I want it to be at 1664 KiB, which gives us
CONFIG_ENV_OFFSET=0x1A0000. Is it ok if I change it to that value? Or
something else must be changed along with it? If yes, then what
exactly?

Thanks.

>> 3. What about my similar patch for AM57x EVM (see [1])? Is it fine, or
>> it affects DFU table as well?
>
> I guess it's OK because the env is stored in a FAT partition:
> CONFIG_ENV_OFFSET is not used
>
>
>>
>> Thanks.
>>
>> [1] https://patchwork.ozlabs.org/patch/730736/
>>
>>> tested on DRA7. DFU updates ok for MMC and eMMC
>>>
>>> Jean-Jacques
>>>
>>> include/configs/dra7xx_evm.h | 2 +-
>>> include/configs/omap5_uevm.h | 2 +-
>>> include/configs/ti_armv7_common.h | 7 ++++---
>>> include/environment/ti/dfu.h | 14 ++++++++------
>>> 4 files changed, 14 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/include/configs/dra7xx_evm.h b/include/configs/dra7xx_evm.h
>>> index bce2816..a56c224 100644
>>> --- a/include/configs/dra7xx_evm.h
>>> +++ b/include/configs/dra7xx_evm.h
>>> @@ -28,7 +28,7 @@
>>> #define CONFIG_ENV_IS_IN_MMC
>>> #define CONFIG_SYS_MMC_ENV_DEV 1 /* SLOT2: eMMC(1) */
>>> #define CONFIG_ENV_SIZE (128 << 10)
>>> -#define CONFIG_ENV_OFFSET 0xE0000
>>> +#define CONFIG_ENV_OFFSET 0x220000
>>> #define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET +
>>> CONFIG_ENV_SIZE)
>>> #define CONFIG_SYS_REDUNDAND_ENVIRONMENT
>>> #endif
>>> diff --git a/include/configs/omap5_uevm.h b/include/configs/omap5_uevm.h
>>> index 736d804..127776e 100644
>>> --- a/include/configs/omap5_uevm.h
>>> +++ b/include/configs/omap5_uevm.h
>>> @@ -38,7 +38,7 @@
>>> #define CONFIG_ENV_IS_IN_MMC
>>> #define CONFIG_SYS_MMC_ENV_DEV 1 /* SLOT2: eMMC(1) */
>>> #define CONFIG_ENV_SIZE (128 << 10)
>>> -#define CONFIG_ENV_OFFSET 0xE0000
>>> +#define CONFIG_ENV_OFFSET 0x220000
>>> #define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET +
>>> CONFIG_ENV_SIZE)
>>> #define CONFIG_SYS_REDUNDAND_ENVIRONMENT
>>>
>>> diff --git a/include/configs/ti_armv7_common.h
>>> b/include/configs/ti_armv7_common.h
>>> index 905e1ef..4cfa134 100644
>>> --- a/include/configs/ti_armv7_common.h
>>> +++ b/include/configs/ti_armv7_common.h
>>> @@ -282,9 +282,10 @@
>>> #define CONFIG_SPL_FS_LOAD_ARGS_NAME "args"
>>>
>>> /* RAW SD card / eMMC */
>>> -#define CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR 0x900 /*
>>> address 0x120000 */
>>> -#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x80 /* address
>>> 0x10000 */
>>> -#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS 0x80 /* 64KiB */
>>> +#define CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR 0x1500 /*
>>> address 0x2A0000 */
>>> +#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x1300 /* address
>>> 0x260000 */
>>> +#define CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS 0x100 /* 128KiB */
>>> +
>>>
>>> /* spl export command */
>>> #define CONFIG_CMD_SPL
>>> diff --git a/include/environment/ti/dfu.h b/include/environment/ti/dfu.h
>>> index caf71a3..63e0ab8 100644
>>> --- a/include/environment/ti/dfu.h
>>> +++ b/include/environment/ti/dfu.h
>>> @@ -12,9 +12,10 @@
>>> "rootfs part 0 2;" \
>>> "MLO fat 0 1;" \
>>> "MLO.raw raw 0x100 0x100;" \
>>> - "u-boot.img.raw raw 0x300 0x400;" \
>>> - "spl-os-args.raw raw 0x80 0x80;" \
>>> - "spl-os-image.raw raw 0x900 0x2000;" \
>>> + "u-boot.img.raw raw 0x300 0xE00;" \
>>> + "u-env.raw raw 0x1100 0x200;" \
>>> + "spl-os-args.raw raw 0x1300 0x100;" \
>>> + "spl-os-image.raw raw 0x1500 0x6B00;" \
>>> "spl-os-args fat 0 1;" \
>>> "spl-os-image fat 0 1;" \
>>> "u-boot.img fat 0 1;" \
>>> @@ -27,9 +28,10 @@
>>> "rootfs part 1 2;" \
>>> "MLO fat 1 1;" \
>>> "MLO.raw raw 0x100 0x100;" \
>>> - "u-boot.img.raw raw 0x300 0x1000;" \
>>> - "spl-os-args.raw raw 0x80 0x80;" \
>>> - "spl-os-image.raw raw 0x900 0x2000;" \
>>> + "u-boot.img.raw raw 0x300 0xE00;" \
>>> + "u-env.raw raw 0x1100 0x200;" \
>>> + "spl-os-args.raw raw 0x1300 0x100;" \
>>> + "spl-os-image.raw raw 0x1500 0x6B00;" \
>>> "spl-os-args fat 1 1;" \
>>> "spl-os-image fat 1 1;" \
>>> "u-boot.img fat 1 1;" \
>>> --
>>> 1.9.1
>>>
>