public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Denis Pynkin <denis.pynkin@collabora.com>
To: u-boot@lists.denx.de
Subject: [PATCH] mx6qsabrelite: increase offset for environment on SPI
Date: Mon, 14 Sep 2020 22:48:18 +0300	[thread overview]
Message-ID: <ed515ffa-90c9-8def-a15d-391ce0e0028e@collabora.com> (raw)
In-Reply-To: <20200914185053.GS5110@bill-the-cat>

14.09.2020 21:50, Tom Rini wrote:
> On Mon, Sep 14, 2020 at 08:08:48PM +0300, Denis Pynkin wrote:
>> 14.09.2020 17:11, Tom Rini wrote:
>>> On Mon, Sep 14, 2020 at 09:29:18AM -0400, Tom Rini wrote:
>>>> On Mon, Sep 14, 2020 at 04:20:20PM +0300, Denis Pynkin wrote:
>>>>> 14.09.2020 15:33, Tom Rini wrote?:
>>>>>> On Mon, Sep 14, 2020 at 08:03:33AM -0300, Fabio Estevam wrote:
>>>>>
>>>>>>>> The size of the binary created with the default U-boot config is much
>>>>>>>> greater than the default offset for environment `0x60000`. If the new
>>>>>>>> version is flashed onto SPI it overlaps with the stored environment.
>>>>>>>> This leads to U-Boot corruption in case of saving environment onto
>>>>>>>> SPI and non-bootable SabreLite board.
>>>>>>>>
>>>>>>>> Signed-off-by: Denis Pynkin <denis.pynkin@collabora.com>
>>>>>>>
>>>>>>> Reviewed-by: Fabio Estevam <festevam@gmail.com>
>>>>>>>
>>>>>>> In case you want to detect errors like this again in the future, you could add
>>>>>>> CONFIG_BOARD_SIZE_LIMIT that detects such overlaps in build-time.
>>>>>>>
>>>>>>> Please check commit 033f6ea5fa5f ("mx53loco: Fix U-Boot corruption
>>>>>>> after saving the environment")
>>>>>>>
>>>>>>> The addition of CONFIG_BOARD_SIZE_LIMIT can be a separate patch though.
>>>>>>
>>>>>> Hold on.  Can we shrink the board back down so that we don't need to
>>>>>> move the environment?  Moving the environment is bad as it will also
>>>>>> break existing users.  Thanks!
>>>>>
>>>>> I don't think so to be honest.
>>>>> Current sizes even for `u-boot-nodtb.imx` in my builds are:
>>>>> - 595308 (0x9156C) -- cross-compilation
>>>>> - 470780 (0x72EFC) -- native build
>>>>
>>>> I'd like to have one thread where we see what on earth is going on
>>>> there.  That's a rather crazy size difference and very troubling.
>>>>
>>>>> which is much larger than current offset 393216 (0x60000)
>>>>>
>>>>> The offset for environment `CONFIG_ENV_OFFSET=0x60000` were added in
>>>>> commit a09fea1 just a year ago.
>>>>> Not sure if it was tested with SabreLite board tbh -- this is a bulk
>>>>> commit aimed for ARMv8 and sizes of binaries produced with pre-a09fea1
>>>>> commit are also larger than the current offset.
>>>>
>>>> Ah, so here's what's going on then.  Commit a09fea1 wasn't about ARMv8,
>>>> it was about migrating options to the defconfig files.  In this case, it
>>>> should have been set to the value you're changing it to now, at least
>>>> from a read of the patch (include/configs/mx6sabre_common.h would set it
>>>> to 0xC0000 if CONFIG_ENV_IS_IN_MMC), but I thought I had done that
>>>> migration with my hack to make a tool that had the in-use value be
>>>> printed.  So I'm going to re-check that whole thing to see what else
>>>> might be wrong as well.  Thanks!
>>>
>>> Ah, so, mx6qsabrelite falls in to the "nitrogen6x" family and not the
>>> rest of the "sabre" board families.  As such, it's always had the env
>>> offset of 0x60000.  Jumping back somewhat arbitrarily to v2014.10, I see
>>> with gcc-4.9 a size of 404480 on u-boot.imx which is still bigger.
>>>
>>> The commit message isn't clear however, as environment is in MMC and not
>>> SPI, so SPI booting should be fine.  But MMC/eMMC is where this case can
>>> happen (I'm not sure which device is SD slot and which is eMMC on this
>>> hardware off-hand).  Thanks!
>>
>> To my shame -- I didn't even thought about the booting from MMC, but yes
>> -- should be the same issue in case if U-Boot is placed on SD-card.
>>
>> This device have 2MB SPI NOR flash there the U-Boot could be flashed
>> with an environment. We are using this approach, so I attempt to
>> describe the issue from this point of view.
>>
>> Should I try to re-word the description? Or may I ask you to add a
>> better description?
> 
> Well, there's a few things going on here then.  The defconfig has
> ENV_IS_IN_MMC, not ENV_IS_IN_SPI.  So SPI booting should be fine we're
> putting U-Boot and environment on entirely different media.  There's no
> conflict.  Booting from the first MMC device can be broken as that's
> where we say the environment should be and 'saveenv' will scribble all
> over it.  So can you confirm what the breaking condition you see is?
> The commit message talks about SPI, but SPI should work as-is.

You are absolutely right.
My fault -- copy-paste the patch from my project as is without
additional testing.
Did an additional tests with default value 0x60000:
- works well with the combination U-Boot on SPI NOR flash + environment
on MMC
- corrupted U-Boot on MMC after `saveenv` if used U-Boot on MMC
- corrupted U-Boot after `saveenv` if it is configured
  with `CONFIG_ENV_IS_IN_SPI_FLASH=y` and flashed on SPI

The value `0xC0000` fixes the issue for both corrupted cases.

Thanks a lot for pointing to incorrect description and misunderstanding!

-- 
wbr, Denis

  reply	other threads:[~2020-09-14 19:48 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-14  9:56 [PATCH] mx6qsabrelite: increase offset for environment on SPI Denis Pynkin
2020-09-14 10:01 ` Stefano Babic
2020-09-14 11:03 ` Fabio Estevam
2020-09-14 12:33   ` Tom Rini
2020-09-14 13:20     ` Denis Pynkin
2020-09-14 13:29       ` Tom Rini
2020-09-14 14:11         ` Tom Rini
2020-09-14 17:08           ` Denis Pynkin
2020-09-14 18:50             ` Tom Rini
2020-09-14 19:48               ` Denis Pynkin [this message]
2020-09-15 11:37                 ` [PATCH v2] mx6qsabrelite: increase the environment offset Denis Pynkin
2020-09-15 12:49                   ` Tom Rini
2020-09-18 14:06                   ` sbabic at denx.de

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ed515ffa-90c9-8def-a15d-391ce0e0028e@collabora.com \
    --to=denis.pynkin@collabora.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox