RE: [PATCH v23 13/14] mmc: renesas_sdhi: Add RZ/G3L HS400 support

Biju Das <[email protected]> Sat, 8 Aug 2026 14:21:57 +0000
Newsgroups org.kernel.vger.linux-mmc,org.kernel.vger.linux-kernel,org.kernel.vger.linux-renesas-soc
Message-ID <TY3PR01MB113469EB645EA5D76F49AB7D086D02@TY3PR01MB11346.jpnprd01.prod.outlook.com>
Hi Geert,

Thanks for the feedback.

> -----Original Message-----
> From: Geert Uytterhoeven <[email protected]>
> Sent: 07 August 2026 14:25
> Subject: Re: [PATCH v23 13/14] mmc: renesas_sdhi: Add RZ/G3L HS400 support
> 
> Hi Biju,
> 
> On Thu, 30 Jul 2026 at 13:32, Biju <[email protected]> wrote:
> > From: Biju Das <[email protected]>
> >
> > Add HS400 support for the RZ/G3L SoC.
> >
> > RZ/G3L needs a second HS400 enable register, SDm_SCC_HS400MODE2
> > (offset 0x020), alongside the existing TMPPORT2 path. Add a
> > TMIO_MMC_HS400MODE2 flag (bit 16) for controllers that need it.
> >
> > renesas_sdhi_hs400_complete() now also sets HS400EN2 in HS400MODE2
> > when the flag is set, and renesas_sdhi_reset_hs400_mode() clears it on
> > exit. Add renesas_sdhi_set_tmpport() to mask off only the lower
> > 16 bits (TMPOUT) of TMPPORT2 when writing it, preserving the upper
> > bits on controllers with HS400MODE2, instead of the previous
> > unconditional zero write.
> >
> > RZ/G3L HS400 supports only one divider value, so
> > renesas_sdhi_set_clock() now forces the clock value to 0 before
> > masking when HS400MODE2 is set and the internal divider isn't
> > currently enabled, rejecting any other divider. This also completes
> > renesas_sdhi_is_internal_divider_enabled() from earlier in the series,
> > which now additionally checks that the current timing mode is not
> > MMC_TIMING_MMC_HS400 before reporting the internal divider as enabled.
> >
> > Enable TMIO_MMC_HS400MODE2 in of_data_rzg3l to complete RZ/G3L HS400
> > support.
> >
> > Signed-off-by: Biju Das <[email protected]>
> > ---
> > v22->v23:
> >  * No change.
> > v21->v22:
> >  * Updated commit description
> >  * Added a renesas_sdhi_set_tmpport() helper to set delay values.
> >  * Added a check in renesas_sdhi_is_internal_divider_enabled() to
> >    return disabled status when in HS400 mode.
> 
> Thanks for the update!
> 
> > --- a/drivers/mmc/host/renesas_sdhi_core.c
> > +++ b/drivers/mmc/host/renesas_sdhi_core.c
> 
> > @@ -355,6 +366,22 @@ static inline void sd_scc_write32(struct tmio_mmc_host *host,
> >         writel(val, priv->scc_ctl + (addr << host->bus_shift));  }
> >
> > +static void renesas_sdhi_set_tmpport(struct tmio_mmc_host *host, u32
> > +tmpport) {
> > +       struct renesas_sdhi *priv = host_to_priv(host);
> > +       u32 val;
> 
> u32 val = tmpport;

OK.
> 
> > +
> > +       if (host->pdata->flags & TMIO_MMC_HS400MODE2) {
> > +               val = sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2);
> > +               val &= ~GENMASK(15, 0); /* TMPOUT MASK */
> 
> Add a #define for this magic value?

Will introduce the macro SH_MOBILE_SDHI_SCC_TMPPORT2_TMPOUT

> 
> val |= sd_scc_read32(...) & ...;

OK.

> 
> > +               val |= tmpport;
> > +       } else {
> > +               val = tmpport;
> > +       }
> 
> And then you can drop these...

OK. Will fix this in next version.

Cheers,
Biju