[PATCH] mtd: spi-nor: Use CONFIG_IS_ENABLED for CONFIG_SPI_FLASH_BAR defines

Bernhard Messerklinger bernhard.messerklinger at br-automation.com
Tue Apr 15 08:12:02 CEST 2025


> From: Mike Looijmans <mike.looijmans at topic.nl>
> On 04-04-2025 11:56, Bernhard Messerklinger wrote:
> > At the moment a mixture of ifdef(CONFIG_IS_ENABLED) and
> > CONFIG_IS_ENABLED(SPI_FLASH_BAR) is used in the spi-nor framework.
> > This leads to misbehaviour in the SPL as there is no Kconfig option
> > CONFIG_SPL_SPI_FLASH_BAR. This commit standardizes the use of
> > CONFIG_SPI_FLASH to get SPLs that load U-Boot proper from the
> > SPI flash to work again.
> >
> > Fixes: 9bb02f7 (mtd: spi-nor: Fix the spi_nor_read() when config SPI_STACKED_PARALLEL is enabled)
> 
> I was hoping this would fix the issues with this commit, but apparently
> not quite. If I add this patch, the Zynq boards still won't boot from
> QSPI with SPL, though now it simply hangs SPL rather than causing a
> "panic please reset the board".
> 
> So far, only reverting commit 9bb02f7 results in a booting system.
> 
> Mike.
> 

This solves my problem, perhaps there are others.
Is it possible to provide your defconfig?
If so, I can try to find out why it is still not working for you.

Regards,
Bernhard 

> 
> > Signed-off-by: Bernhard Messerklinger <bernhard.messerklinger at br-automation.com>
> > ---
> >
> >   drivers/mtd/spi/spi-nor-core.c | 22 +++++++++++-----------
> >   include/linux/mtd/spi-nor.h    |  2 +-
> >   2 files changed, 12 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
> > index 6f352c5c0e2..a8865bbd37c 100644
> > --- a/drivers/mtd/spi/spi-nor-core.c
> > +++ b/drivers/mtd/spi/spi-nor-core.c
> > @@ -655,7 +655,7 @@ static struct spi_nor *mtd_to_spi_nor(struct mtd_info *mtd)
> >       return mtd->priv;
> >   }
> >
> > -#ifndef CONFIG_SPI_FLASH_BAR
> > +#if !CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >   static u8 spi_nor_convert_opcode(u8 opcode, const u8 table[][2], size_t size)
> >   {
> >       size_t i;
> > @@ -739,7 +739,7 @@ static void spi_nor_set_4byte_opcodes(struct spi_nor *nor,
> >       nor->program_opcode = spi_nor_convert_3to4_program(nor->program_opcode);
> >       nor->erase_opcode = spi_nor_convert_3to4_erase(nor->erase_opcode);
> >   }
> > -#endif /* !CONFIG_SPI_FLASH_BAR */
> > +#endif /* !CONFIG_IS_ENABLED(SPI_FLASH_BAR) */
> >
> >   /* Enable/disable 4-byte addressing mode. */
> >   static int set_4byte(struct spi_nor *nor, const struct flash_info *info,
> > @@ -930,7 +930,7 @@ static int spi_nor_erase_chip_wait_till_ready(struct spi_nor *nor, unsigned long
> >       return spi_nor_wait_till_ready_with_timeout(nor, timeout);
> >   }
> >
> > -#ifdef CONFIG_SPI_FLASH_BAR
> > +#if CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >   /*
> >    * This "clean_bar" is necessary in a situation when one was accessing
> >    * spi flash memory > 16 MiB by using Bank Address Register's BA24 bit.
> > @@ -1141,7 +1141,7 @@ static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
> >                                       nor->spi->flags &= ~SPI_XFER_U_PAGE;
> >                       }
> >               }
> > -#ifdef CONFIG_SPI_FLASH_BAR
> > +#if CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >               ret = write_bar(nor, offset);
> >               if (ret < 0)
> >                       goto erase_err;
> > @@ -1175,7 +1175,7 @@ static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
> >
> >       addr_known = false;
> >   erase_err:
> > -#ifdef CONFIG_SPI_FLASH_BAR
> > +#if CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >       err = clean_bar(nor);
> >       if (!ret)
> >               ret = err;
> > @@ -1630,7 +1630,7 @@ static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
> >                               offset /= 2;
> >               }
> >
> > -#ifdef CONFIG_SPI_FLASH_BAR
> > +#if CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >               ret = write_bar(nor, offset);
> >               if (ret < 0)
> >                       return log_ret(ret);
> > @@ -1667,7 +1667,7 @@ static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
> >       ret = 0;
> >
> >   read_err:
> > -#ifdef CONFIG_SPI_FLASH_BAR
> > +#if CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >       ret = clean_bar(nor);
> >   #endif
> >       return ret;
> > @@ -2016,7 +2016,7 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
> >                       }
> >               }
> >
> > -#ifdef CONFIG_SPI_FLASH_BAR
> > +#if CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >               ret = write_bar(nor, offset);
> >               if (ret < 0)
> >                       return ret;
> > @@ -2090,7 +2090,7 @@ static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
> >       }
> >
> >   write_err:
> > -#ifdef CONFIG_SPI_FLASH_BAR
> > +#if CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >       ret = clean_bar(nor);
> >   #endif
> >       return ret;
> > @@ -3791,7 +3791,7 @@ static int s25_s28_setup(struct spi_nor *nor, const struct flash_info *info,
> >       int ret;
> >       u8 cr;
> >
> > -#ifdef CONFIG_SPI_FLASH_BAR
> > +#if CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >       return -ENOTSUPP; /* Bank Address Register is not supported */
> >   #endif
> >       /*
> > @@ -4577,7 +4577,7 @@ int spi_nor_scan(struct spi_nor *nor)
> >       if (nor->flags & (SNOR_F_HAS_PARALLEL | SNOR_F_HAS_STACKED))
> >               shift = 1;
> >       if (nor->addr_width == 3 && (mtd->size >> shift) > SZ_16M) {
> > -#ifndef CONFIG_SPI_FLASH_BAR
> > +#if !CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >               /* enable 4-byte addressing if the device exceeds 16MiB */
> >               nor->addr_width = 4;
> >               if (JEDEC_MFR(info) == SNOR_MFR_SPANSION ||
> > diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
> > index b8b207f7b5c..4eef4ab0488 100644
> > --- a/include/linux/mtd/spi-nor.h
> > +++ b/include/linux/mtd/spi-nor.h
> > @@ -569,7 +569,7 @@ struct spi_nor {
> >       u8                      rdsr_dummy;
> >       u8                      rdsr_addr_nbytes;
> >       u8                      addr_mode_nbytes;
> > -#ifdef CONFIG_SPI_FLASH_BAR
> > +#if CONFIG_IS_ENABLED(SPI_FLASH_BAR)
> >       u8                      bank_read_cmd;
> >       u8                      bank_write_cmd;
> >       u8                      bank_curr;
> 
> 
> --
> Mike Looijmans
> System Expert


More information about the U-Boot mailing list