On Tuesday, April 28, 2020 4:34:46 AM EEST Yicong Yang wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the > content is safe > > Hi Pratyush, > > On 2020/4/28 1:23, Pratyush Yadav wrote: > > Hi Yicong, > > > > On 26/04/20 11:53AM, Yicong Yang wrote: > >> On 2020/4/25 2:43, Pratyush Yadav wrote: > >>> JESD216D.01 says that when the address width can be 3 or 4, it defaults > >>> to 3 and enters 4-byte mode when given the appropriate command. So, when > >>> we see a configurable width, default to 3 and let flash that default to > >>> 4 change it in a post-bfpt fixup. > >>> > >>> This fixes SMPT parsing for flashes with configurable address width. If > >>> the SMPT descriptor advertises variable address width, we use > >>> nor->addr_width as the address width. But since it was not set to any > >>> value from the SFDP table, the read command uses an address width of 0, > >>> resulting in an incorrect read being issued. > >>> > >>> Signed-off-by: Pratyush Yadav <p.yadav@xxxxxx> > >>> --- > >>> > >>> drivers/mtd/spi-nor/sfdp.c | 1 + > >>> 1 file changed, 1 insertion(+) > >>> > >>> diff --git a/drivers/mtd/spi-nor/sfdp.c b/drivers/mtd/spi-nor/sfdp.c > >>> index f917631c8110..5cecc4ba2141 100644 > >>> --- a/drivers/mtd/spi-nor/sfdp.c > >>> +++ b/drivers/mtd/spi-nor/sfdp.c > >>> @@ -460,6 +460,7 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor, > >>> > >>> /* Number of address bytes. */ > >>> switch (bfpt.dwords[BFPT_DWORD(1)] & BFPT_DWORD1_ADDRESS_BYTES_MASK) > >>> { > >>> > >>> case BFPT_DWORD1_ADDRESS_BYTES_3_ONLY: > >>> + case BFPT_DWORD1_ADDRESS_BYTES_3_OR_4: > >>> nor->addr_width = 3; > >>> break; > >> > >> Should we also assign address width to 3 in default condition. At least > >> we should not leave it uninitialized here. > > > > The default condition would be taken when this field is 3. The value 3 > > is reserved, and so no current device should use this value. That said, > > I don't see any downsides of doing so. If the value 3 means something > > else in later revisions of the standard, this code would need to change > > anyway. If not, we would use a relatively sane default for devices with > > a faulty BFPT. > > The purpose is to set one possible value which may be used later in parsing > smpt. In current driver, if we do nothing with the post-bfpt fixup, then > the width will be unset. Otherwise, maybe the width can also be set in > spi_nor_smpt_addr_width() > > default: > + if (!nor->addr_width) > + nor->addr_width = 3; > return nor->addr_width; > > But set when parsing bfpt seems more reasonable. Please don't. Any deviations from the standard should be addressed with fixup hooks. > > > I haven't received any comments on my series so far. If end up having to Thanks for the patience, they are in my todo list, I will get soon to them. Cheers, ta