public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Andre Przywara <andre.przywara@arm.com>
To: Chris Morgan <macroalpha82@gmail.com>
Cc: Jagan Teki <jagan@amarulasolutions.com>,
	Simon Glass <sjg@chromium.org>, Tom Rini <trini@konsulko.com>,
	Chen-Yu Tsai <wens@csie.org>, Hauke Mehrtens <hauke@hauke-m.de>,
	Jernej Skrabec <jernej.skrabec@gmail.com>,
	Samuel Holland <samuel@sholland.org>,
	Icenowy Zheng <icenowy@aosc.xyz>,
	Joe Hershberger <joe.hershberger@ni.com>,
	Wolfgang Denk <wd@denx.de>,
	Daniel Wagenknecht <dwagenk@mailbox.org>,
	u-boot@lists.denx.de
Subject: Re: [PATCH 4/7] sunxi: use boot source for determining environment location
Date: Thu, 21 Apr 2022 00:33:10 +0100	[thread overview]
Message-ID: <20220421003310.35dc0b05@slackpad.lan> (raw)
In-Reply-To: <20220415172822.GA1010@wintermute.localdomain>

On Fri, 15 Apr 2022 12:28:22 -0500
Chris Morgan <macroalpha82@gmail.com> wrote:

Hi Chris,

> On Tue, Jan 11, 2022 at 12:46:04PM +0000, Andre Przywara wrote:
> > Currently we only support to load the environment from raw MMC or FAT
> > locations on Allwinner boards. With the advent of SPI flash we probably
> > also want to support using the environment there, so we need to become
> > a bit more flexible.
> > 
> > Change the environment priority function to take the boot source into
> > account. When booted from eMMC or SD card, we use FAT or MMC, if
> > configured, as before.
> > If we are booted from SPI flash, we try to use the environment from
> > there, if possible. The same is true for NAND flash booting, although
> > this is somewhat theoretical right now (as untested).
> > 
> > This way we can use the same image for SD and SPI flash booting, which
> > allows us to simply copy a booted image from SD card to the SPI flash,
> > for instance.  
> 
> Unfortunately after a git-bisect I can confirm this patch breaks
> booting in FEL mode whenever the environment is set to
> CONFIG_ENV_IS_NOWHERE. Tested and reproducible on an NTC CHIP or a
> Source Parts Popcorn (both Allwinner R8 chips).
> 
> The curious thing though is that I could never see env_get_location
> called, but whenever I either set the environment to something like
> FAT or comment out this change (which I believe causes the non-board
> specific version of env_get_location to be used) it would boot again.
> So while I can confirm this patch breaks booting FEL when the env is
> set to nowhere, I was not able to figure out why that is.

Alright, thanks for the report. I see the problem: The default
fallback for the new env_get_location() is ENVL_FAT, as 157 out of the
160 Allwinner boards define CONFIG_ENV_IS_IN_FAT.
However the C.H.I.P. boards are one of the three exceptions, and
returning FAT when the FAT environment driver is not compiled in will
not end well. I don't have any CHIP board, but simulated this by
configuring a normal board with just defining CONFIG_ENV_IS_NOWHERE.

I made a patch that tries to choose a matching fallback. It's not very
elegant, but seems to fix the problem for me. Please test this once
posted.

Cheers,
Andre

> 
> Thank you.
> 
> > 
> > Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> > ---
> >  board/sunxi/board.c | 51 ++++++++++++++++++++++++++++++++++++++-------
> >  1 file changed, 43 insertions(+), 8 deletions(-)
> > 
> > diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> > index 2790a0f9e8..2472343d00 100644
> > --- a/board/sunxi/board.c
> > +++ b/board/sunxi/board.c
> > @@ -170,21 +170,56 @@ void i2c_init_board(void)
> >  #endif
> >  }
> >  
> > -#if defined(CONFIG_ENV_IS_IN_MMC) && defined(CONFIG_ENV_IS_IN_FAT)
> > +/*
> > + * Try to use the environment from the boot source first.
> > + * For MMC, this means a FAT partition on the boot device (SD or eMMC).
> > + * If the raw MMC environment is also enabled, this is tried next.
> > + * SPI flash falls back to FAT (on SD card).
> > + */
> >  enum env_location env_get_location(enum env_operation op, int prio)
> >  {
> > -	switch (prio) {
> > -	case 0:
> > -		return ENVL_FAT;
> > +	enum env_location boot_loc = ENVL_FAT;
> >  
> > -	case 1:
> > -		return ENVL_MMC;
> > +	gd->env_load_prio = prio;
> >  
> > +	switch (sunxi_get_boot_device()) {
> > +	case BOOT_DEVICE_MMC1:
> > +	case BOOT_DEVICE_MMC2:
> > +		boot_loc = ENVL_FAT;
> > +		break;
> > +	case BOOT_DEVICE_NAND:
> > +		if (IS_ENABLED(CONFIG_ENV_IS_IN_NAND))
> > +			boot_loc = ENVL_NAND;
> > +		break;
> > +	case BOOT_DEVICE_SPI:
> > +		if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH))
> > +			boot_loc = ENVL_SPI_FLASH;
> > +		break;
> > +	case BOOT_DEVICE_BOARD:
> > +		break;
> >  	default:
> > -		return ENVL_UNKNOWN;
> > +		break;
> > +	}
> > +
> > +	/* Always try to access the environment on the boot device first. */
> > +	if (prio == 0)
> > +		return boot_loc;
> > +
> > +	if (prio == 1) {
> > +		switch (boot_loc) {
> > +		case ENVL_SPI_FLASH:
> > +			return ENVL_FAT;
> > +		case ENVL_FAT:
> > +			if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC))
> > +				return ENVL_MMC;
> > +			break;
> > +		default:
> > +			break;
> > +		}
> >  	}
> > +
> > +	return ENVL_UNKNOWN;
> >  }
> > -#endif
> >  
> >  #ifdef CONFIG_DM_MMC
> >  static void mmc_pinmux_setup(int sdc);  


  reply	other threads:[~2022-04-20 23:34 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-11 12:46 [PATCH 0/7] sunxi: Fix U-Boot proper SPI operation Andre Przywara
2022-01-11 12:46 ` [PATCH 1/7] sunxi: SPI: fix pinmuxing for Allwinner H6 SoCs Andre Przywara
2022-01-11 12:46 ` [PATCH 2/7] sunxi: Kconfig: Fix up SPI configuration Andre Przywara
2022-01-24 17:02   ` Andre Przywara
2022-02-24  7:26   ` Jagan Teki
2022-02-24  7:26     ` Jagan Teki
2022-01-11 12:46 ` [PATCH 3/7] env: sunxi: Define location in SPI flash Andre Przywara
2022-01-11 12:46 ` [PATCH 4/7] sunxi: use boot source for determining environment location Andre Przywara
2022-04-15 17:28   ` Chris Morgan
2022-04-20 23:33     ` Andre Przywara [this message]
2022-05-05 15:43       ` Chris Morgan
2022-01-11 12:46 ` [PATCH 5/7] env: sunxi: enable ENV_IS_IN_SPI_FLASH Andre Przywara
2022-01-11 12:46 ` [PATCH 6/7] sunxi: boards: Enable SPI flash support in U-Boot proper Andre Przywara
2022-01-11 12:46 ` [PATCH 7/7] sunxi: H6: Enable SPI0 in DT when no eMMC is used Andre Przywara
2022-01-20 13:38   ` Jagan Teki
2022-01-20 14:06     ` Andre Przywara
2022-01-20 14:36       ` Jagan Teki
2022-02-24  7:30         ` Jagan Teki
2022-02-24 11:00           ` Andre Przywara
2022-03-10 12:05 ` [PATCH 0/7] sunxi: Fix U-Boot proper SPI operation Jagan Teki

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=20220421003310.35dc0b05@slackpad.lan \
    --to=andre.przywara@arm.com \
    --cc=dwagenk@mailbox.org \
    --cc=hauke@hauke-m.de \
    --cc=icenowy@aosc.xyz \
    --cc=jagan@amarulasolutions.com \
    --cc=jernej.skrabec@gmail.com \
    --cc=joe.hershberger@ni.com \
    --cc=macroalpha82@gmail.com \
    --cc=samuel@sholland.org \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=wd@denx.de \
    --cc=wens@csie.org \
    /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