[PATCH v5 09/10] mtd: spi-nor-core: Add fixups for Cypress s25hl-t/s25hs-t

Pratyush Yadav p.yadav at ti.com
Mon Mar 8 09:54:34 CET 2021


On 08/03/21 05:47PM, Takahiro Kuwano wrote:
> On 2/24/2021 9:40 PM, Pratyush Yadav wrote:
> > On 19/02/21 10:56AM, tkuw584924 at gmail.com wrote:
> >> From: Takahiro Kuwano <Takahiro.Kuwano at infineon.com>
> >>
> >> This patch adds Flash specific fixups and hooks for Cypress
> >> S25HL-T/S25HS-T family, based on the features introduced in [0][1][2].
> > 
> > Instead of linking the patches like this, it would be a better idea to 
> > simply include them in your series. This will make your series 
> > independent from mine and will make it easier for the maintainer to 
> > apply it.
> > 
> Noted with thanks.
> 
> >>
> >> The nor->ready() and spansion_sr_ready() introduced in #5 and #6 in this
> >> series are used for multi-die package parts.
> > 
> > Nitpick: Once this patch makes it into the Git history there is no patch 
> > #5 or #6. Probably a better idea to just say "introduced earlier" or 
> > something similar. 
> > 
> OK.
> 
> >>
> >> The nor->quad_enable() sets the volatile QE bit on each die.
> >>
> >> The mtd._erase() is hooked if the device is single-die package and not
> >> configured to uniform sectors, assuming it is in factory default
> >> configuration that has 32 x 4KB sectors overlaid on bottom address.
> >> Other configurations, top and split, are not supported at this point.
> >> Will submit additional patches to support it as needed.
> > 
> > Ah, this patch does check for uniform sector map. Nice. I assume you 
> > have tested with both configurations.
> > 
> Yes. I tested both.
> 
> >>
> >> The post_bfpt/sfdp() fixes the params wrongly advertised in SFDP.
> >>
> >> [0] https://patchwork.ozlabs.org/project/uboot/patch/20200904153500.3569-7-p.yadav@ti.com/
> >> [1] https://patchwork.ozlabs.org/project/uboot/patch/20200904153500.3569-8-p.yadav@ti.com/
> >> [2] https://patchwork.ozlabs.org/project/uboot/patch/20200904153500.3569-9-p.yadav@ti.com/
> >>
> >> Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano at infineon.com>
> >> ---
> >> Changes in v5:
> >>   - Add s25hx_t_erase_non_uniform()
> >>   - Change mtd.writesize and mtd.flags in s25hx_t_setup()
> >>   - Fix page size and erase size issues in s25hx_t_post_bfpt_fixup()
> >>
> >>  drivers/mtd/spi/spi-nor-core.c | 155 +++++++++++++++++++++++++++++++++
> >>  include/linux/mtd/spi-nor.h    |   3 +
> >>  2 files changed, 158 insertions(+)
> >>
> >> diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
> >> index 8d63681cb3..315e26ab27 100644
> >> --- a/drivers/mtd/spi/spi-nor-core.c
> >> +++ b/drivers/mtd/spi/spi-nor-core.c
[...]
> >> +static int s25hx_t_post_bfpt_fixup(struct spi_nor *nor,
> >> +				   const struct sfdp_parameter_header *header,
> >> +				   const struct sfdp_bfpt *bfpt,
> >> +				   struct spi_nor_flash_parameter *params)
> >> +{
> >> +	int ret;
> >> +	u32 addr;
> >> +	u8 cfr3v;
> >> +
> >> +	/* erase size in case it is set to 4K from BFPT */
> >> +	nor->erase_opcode = SPINOR_OP_SE_4B;
> >> +	nor->mtd.erasesize = nor->info->sector_size;
> >> +
> >> +	/* Enter 4-byte addressing mode for Read Any Register */
> >> +	ret = set_4byte(nor, nor->info, 1);
> >> +	if (ret)
> >> +		return ret;
> > 
> > You enter 4byte addressing but don't exit it before returning. Is this 
> > intentional?
> > 
> Yes. The nor->addr_width must be 4 for read/write/erase to work correctly.
> I think device's addressing mode should be in sync with nor->addr_width.

Right. But the comment above implies that 4-byte mode is only enabled 
for the "Read Any Register" command. Either remove the comment 
completely or make it clear that you are changing to 4-byte for all 
further operations, not just the Read Any Register command.

> 
> >> +	nor->addr_width = 4;
> >> +
> >> +	/*
> >> +	 * The page_size is set to 512B from BFPT, but it actually depends on
> >> +	 * the configuration register. Look up the CFR3V and determine the
> >> +	 * page_size. For multi-die package parts, use 512B only when the all
> >> +	 * dies are configured to 512B buffer.
> >> +	 */
> >> +	for (addr = 0; addr < params->size; addr += SZ_128M) {
> >> +		ret = spansion_read_any_reg(nor, addr + SPINOR_REG_ADDR_CFR3V,
> >> +					    0, &cfr3v);
> >> +		if (ret)
> >> +			return ret;
> >> +
> >> +		if (!(cfr3v & CFR3V_PGMBUF)) {
> >> +			params->page_size = 256;
> >> +			return 0;
> >> +		}
> >> +	}
> >> +	params->page_size = 512;
> > 
> > Ok.
> > 
> >> +
> >> +	return 0;
> >> +}
> >> +

-- 
Regards,
Pratyush Yadav
Texas Instruments Inc.


More information about the U-Boot mailing list