From mboxrd@z Thu Jan 1 00:00:00 1970 From: Derald D. Woods Date: Mon, 10 Dec 2018 23:48:25 -0600 Subject: [U-Boot] [PATCH] ARM: at91: Fix 'boot.bin' generation when CONFIG_SD_BOOT is enabled In-Reply-To: <54d96add-2c3d-1b78-1324-361bc363f79d@microchip.com> References: <20181208194905.21014-1-woods.technical@gmail.com> <20181210130114.GA7182@ethiopia> <00edfbbc-3748-623c-fb98-479378ca3f1a@microchip.com> <54d96add-2c3d-1b78-1324-361bc363f79d@microchip.com> Message-ID: <20181211054824.GB7182@ethiopia> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: u-boot@lists.denx.de On Mon, Dec 10, 2018 at 03:14:05PM +0000, Eugen.Hristev at microchip.com wrote: > > > On 10.12.2018 16:54, Derald Woods wrote: > > > > > > On Mon, Dec 10, 2018 at 8:03 AM > > wrote: > > > > > > > > On 10.12.2018 15:01, Derald D. Woods wrote: > > > On Mon, Dec 10, 2018 at 08:32:33AM +0000, > > Eugen.Hristev at microchip.com wrote: > > >> > > >> > > >> On 08.12.2018 21:49, Derald D. Woods wrote: > > >>> On AT91 platforms configured for SD_BOOT, this commit avoids the > > >>> generation of the PMECC header used for booting from NAND > > flash. This > > >>> issue was found by attempting to boot the SAMA5D3-XPLD board > > with the > > >>> 'sama5d3_xplained_mmc_defconfig'. > > >>> > > >>> [PMECC Reference] > > >>> http://www.at91.com/linux4sam/bin/view/Linux4SAM/AT91Bootstrap > > >>> > > >>> [Mailing List Thread] > > >>> https://lists.denx.de/pipermail/u-boot/2018-December/350666.html > > >>> > > >>> Fixes: 5541543f ("configs: at91: Remove > > CONFIG_SYS_EXTRA_OPTIONS assignment") > > >>> Reported-by: Daniel Evans > > > > >>> Cc: Robert Nelson > > > > >>> Cc: Eugen Hristev > > > > >>> Cc: Wenyou Yang > > > > >>> Signed-off-by: Derald D. Woods > > > > >>> --- > > >>>    scripts/Makefile.spl | 2 ++ > > >>>    1 file changed, 2 insertions(+) > > >>> > > >>> diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl > > >>> index 22bd8f7c27..e727cb610f 100644 > > >>> --- a/scripts/Makefile.spl > > >>> +++ b/scripts/Makefile.spl > > >>> @@ -166,10 +166,12 @@ ifeq ($(CONFIG_SYS_SOC),"at91") > > >>>    MKIMAGEFLAGS_boot.bin = -T atmelimage > > >>> > > >>>    ifeq ($(CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER),y) > > >>> +ifneq ($(CONFIG_SD_BOOT),y) > > >> > > >> Hi Derald, > > >> > > >> Thanks for your patch, however, I don't like that we do not use the > > >> CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER anymore... isn't this config > > >> supposed to say whether we are going to generate the header or not ? > > >> > > > > > > That is not what is happening with this patch. > > SPL_GENERATE_ATMEL_PMECC_HEADER > > > is not removed. The config still serves its orignal intent. If > > SD_BOOT > > > is configured, then NAND is not being used. In this non-NAND > > case, the > > > header is not needed. > > > > > >> Checking if "not sd-boot" doesn't look like a good option... we > > may use > > >> SPI boot or QSPI or some other type at some point and the issue will > > >> still be there. > > >> > > > > > > This location and method would work for those nod-NAND cases > > also. See > > > below. > > > > > >> I would rather fix the original patch by Wenyou, namely move the > > #ifdef > > >> below to not have the GENERATE_ATMEL_PMECC enabled for SDBOOT. > > >> > > >> Does this sound good for you? > > >> > > > > > > If this SPL_GENERATE_ATMEL_PMECC_HEADER only needs to be there > > for NAND, > > > why not guard the 'ifdef ($(CONFIG_NAND_BOOT,y))'? Would this be > > better? > > > Basically we could replace the 'ifneq ($(CONFIG_SD_BOOT),y)' with the > > > more appropriate 'ifeq ($(CONFIG_NAND_BOOT),y)'. This would actually > > > allow the future use-cases to be added as they become available > > and can > > > be shown to actually boot with the header applied. > > > > > > I will put together a proper version 2 of my patch later today. > > > > > > [patch v2] > > > > > ------------------------------------------------------------------------ > > > > > diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl > > > index 22bd8f7..e727cb6 100644 > > > --- a/scripts/Makefile.spl > > > +++ b/scripts/Makefile.spl > > > @@ -166,10 +166,12 @@ ifeq ($(CONFIG_SYS_SOC),"at91") > > >   MKIMAGEFLAGS_boot.bin = -T atmelimage > > > > > >   ifeq ($(CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER),y) > > > +ifeq ($(CONFIG_NAND_BOOT),y) > > >   MKIMAGEFLAGS_boot.bin += -n $(shell > > $(obj)/../tools/atmel_pmecc_params) > > > > > >   boot.bin: $(obj)/../tools/atmel_pmecc_params > > >   endif > > > +endif > > > > > >   boot.bin: $(obj)/u-boot-spl.bin FORCE > > >       $(call if_changed,mkimage) > > > > > ------------------------------------------------------------------------ > > > > > > > > This would allow other configurations to 'opt-in' to applying the > > > header. Which I think is the direction this is truly heading. > > > > My questions are : > > > > If we have configured CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER, then why > > the header is not being applied after your patch ? > > > > And why do we configure CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER if we do > > not wish the PMECC header in the image ? > > > > With your patch, why do we generate the PMECC header w.r.t. the > > configuration of NAND_BOOT and not > > CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER ? > > > > Or perhaps I am missing something on the purpose of > > CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER ? > > > > To quote from doc/README.atmel_pmecc : > > > > To enable the generation of atmel PMECC header for SPL one need to > > define > > CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER. The required parameters are > > taken from > > board configuration and compiled into the host tools > > atmel_pmecc_params. > > This > > tool will be called in build process to parametrize mkimage for > > atmelimage > > type. The mkimage tool has intentionally _not_ compiled in those > > parameters. > > > > > > > > So I would expect CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER to generate > > the > > PMECC header if configured, and if this flag is not present, the PMECC > > header is not generated. > > I do expect that SD card booting configurations do not select this flag. > > > > > > > > The patch does _not_ remove CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER or change > > its purpose or overall role. Literally. It is a very simple patch that > > solves > > a "no-boot" issue for at least sama5d3-xpld. I read the documents before > > my patch. This is a post-build tooling issue. Makefile.spl can leverage > > configs as they are naturally selected. > > > > Derald > > Does the following change fix your problem ? > I am simply working on a proper solution. I have the SAMA5D3-XPLD board and use it occasionally. The original post to the mailing list simply peaked my interest. I had the board pinned at v2017.09 in my personal build environment for the same issue. I am just digging deeper this time around. > diff --git a/include/configs/sama5d3_xplained.h > b/include/configs/sama5d3_xplained.h > index d0d8087..f2661c5 100644 > --- a/include/configs/sama5d3_xplained.h > +++ b/include/configs/sama5d3_xplained.h > @@ -80,6 +80,7 @@ > #elif CONFIG_NAND_BOOT > #define CONFIG_SPL_NAND_DRIVERS > #define CONFIG_SPL_NAND_BASE > +#define CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER > #endif > #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x40000 > #define CONFIG_SYS_NAND_5_ADDR_CYCLE > @@ -88,6 +89,5 @@ > #define CONFIG_SYS_NAND_OOBSIZE 64 > #define CONFIG_SYS_NAND_BLOCK_SIZE 0x20000 > #define CONFIG_SYS_NAND_BAD_BLOCK_POS 0x0 > -#define CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER > > #endif > I began looking into converting the following to Kconfig: [scripts/config_whitelist.txt] (REMOVING ITEMS) ------------------------------------------------------------------------ CONFIG_ATMEL_NAND_HWECC CONFIG_ATMEL_NAND_HW_PMECC CONFIG_PMECC_CAP CONFIG_PMECC_SECTOR_SIZE CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER ------------------------------------------------------------------------ [arch/arm/mach-at91/Kconfig] ------------------------------------------------------------------------ config ATMEL_NAND_HWECC bool "Atmel Hardware ECC" default n config ATMEL_NAND_HW_PMECC bool "Atmel Programmable Multibit ECC (PMECC)" select ATMEL_NAND_HWECC default n help The Programmable Multibit ECC (PMECC) controller is a programmable binary BCH(Bose, Chaudhuri and Hocquenghem) encoder and decoder. config PMECC_CAP int "PMECC Correctable ECC Bits" depends on ATMEL_NAND_HW_PMECC default 2 help Correctable ECC bits, can be 2, 4, 8, 12, and 24. config PMECC_SECTOR_SIZE int "PMECC Sector Size" depends on ATMEL_NAND_HW_PMECC default 512 help Sector size, in bytes, can be 512 or 1024. config SPL_GENERATE_ATMEL_PMECC_HEADER bool "Atmel PMECC Header Generation" select ATMEL_NAND_HWECC select ATMEL_NAND_HW_PMECC default n help Generate Programmable Multibit ECC (PMECC) header for SPL image. ------------------------------------------------------------------------ The issue is that the PMECC configuration items are used along with other NAND configuration items outside of a NAND_BOOT scenario. I would like to get the proper Kconfig selections up and running. This is just a start. I will not have any more time until this weekend. I will send another patch at that time. Cheers, Derald > > > > > > > > > > > > Also, the SPL_GENERATE_ATMEL_PMECC_HEADER needs transitioning to > > > Kconfig. Having the logic in "Makefile.spl" would help with that work > > > too. > > > > > > Derald > > > > > > > > >> Thanks again, > > >> > > >> Eugen > > >> > > >>>    MKIMAGEFLAGS_boot.bin += -n $(shell > > $(obj)/../tools/atmel_pmecc_params) > > >>> > > >>>    boot.bin: $(obj)/../tools/atmel_pmecc_params > > >>>    endif > > >>> +endif > > >>> > > >>>    boot.bin: $(obj)/u-boot-spl.bin FORCE > > >>>     $(call if_changed,mkimage) > > >>> > > > > >