[PATCH] memory: renesas-rpc-if: Fix IO state based on flash type
Biju Das
biju.das.jz at bp.renesas.com
Wed Aug 30 08:18:05 PDT 2023
Hi Geert Uytterhoeven,
Thanks for the feedback.
> Subject: Re: [PATCH] memory: renesas-rpc-if: Fix IO state based on flash
> type
>
> Hi Biju,
>
> CC hyperbus, spi
>
> On Wed, Aug 30, 2023 at 4:58 PM Biju Das <biju.das.jz at bp.renesas.com>
> wrote:
> > Currently, RZ/G2L-alike SoCs use 2 different SPI serial flash memories
> > 1) AT25QL128A embedded in RZ/{G2UL,Five} SMARC EVKs
> > 2) MT25QU512AB embedded in RZ/{G2L,G2LC,V2L} SMARC EVKs
> >
> > As per section 8.14 on the AT25QL128A hardware manual,
> > IO1..IO3 must be set to Hi-Z state for this flash for fast read quad IO.
> > Snippet from HW manual section 8.14:
> > The upper nibble of the Mode(M7-4) controls the length of the next
> > FAST Read Quad IO instruction through the inclusion or exclusion of
> > the first byte instruction code. The lower nibble bits of the
> > Mode(M3-0) are don't care. However, the IO pins must be high-impedance
> > before the falling edge of the first data out clock.
> >
> > As per the Figure 20: QUAD INPUT/OUTPUT FAST READ on MT25QU512AB
> > mentions
> > IO1..IO2 to be in Hi-Z state and IO3 in '1' state
> >
> > Add a variable io3_fv to struct rpcif_priv and check the child node
> > compatible value to detect micron flash and set IO1..IO3 states based
> > on flash type.
> >
> > Signed-off-by: Biju Das <biju.das.jz at bp.renesas.com>
>
> Thanks for your patch!
>
> I guess this issue is not unique to Renesas platforms...
>
> > --- a/drivers/memory/renesas-rpc-if.c
> > +++ b/drivers/memory/renesas-rpc-if.c
> > @@ -189,6 +189,7 @@ struct rpcif_priv {
> > u32 enable; /* DRENR or SMENR */
> > u32 dummy; /* DRDMCR or SMDMCR */
> > u32 ddr; /* DRDRENR or SMDRENR */
> > + u32 io3_fv;
> > };
> >
> > static const struct rpcif_info rpcif_info_r8a7796 = { @@ -367,7
> > +368,8 @@ int rpcif_hw_init(struct device *dev, bool hyperflash)
> > regmap_update_bits(rpc->regmap, RPCIF_CMNCR,
> > RPCIF_CMNCR_MOIIO(3) |
> RPCIF_CMNCR_IOFV(3) |
> > RPCIF_CMNCR_BSZ(3),
> > - RPCIF_CMNCR_MOIIO(1) |
> RPCIF_CMNCR_IOFV(2) |
> > + RPCIF_CMNCR_MOIIO(1) |
> RPCIF_CMNCR_IO0FV(2) |
> > + RPCIF_CMNCR_IO2FV(3) | rpc->io3_fv
> > + |
> > RPCIF_CMNCR_BSZ(hyperflash ? 1 : 0));
> > else
> > regmap_update_bits(rpc->regmap, RPCIF_CMNCR, @@ -774,6
> > +776,12 @@ static int rpcif_probe(struct platform_device *pdev)
> > return ret;
> > }
> >
> > + if (rpc->info->type == RPCIF_RZ_G2L &&
>
> Wouldn't this apply to non-RZ/G2L systems, too?
It applies, if the device uses the flash[1] or [2] and it needs
4-bit tx support.
[1] Figure 20: QUAD INPUT/OUTPUT FAST READ – EBh/ECh
https://media-www.micron.com/-/media/client/global/documents/products/data-sheet/nor-flash/serial-nor/mt25q/die-rev-a/mt25q_qlks_u_512_aba_0.pdf?rev=3e5b2a574f7b4790b6e58dacf4c889b2
[2] section 8.14
https://www.renesas.com/eu/en/document/dst/at25ql128a-datasheet?r=1608586
Cheers,
Biju
>
> > + of_device_is_compatible(flash, "micron,mt25qu512a"))
> > + rpc->io3_fv = RPCIF_CMNCR_IO3FV(1);
> > + else
> > + rpc->io3_fv = RPCIF_CMNCR_IO3FV(3);
> > +
> > return 0;
> > }
>
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert at linux-
> m68k.org
>
> In personal conversations with technical people, I call myself a hacker.
> But when I'm talking to journalists I just say "programmer" or something
> like that.
> -- Linus Torvalds
More information about the linux-mtd
mailing list