[U-Boot] [PATCH] mmc: sd_sdhi: add support for 32-bit data buffer

Chris Brandt Chris.Brandt at renesas.com
Tue Nov 14 14:17:49 UTC 2017


Hi Marek,

On Tuesday, November 14, 2017, Marek Vasut wrote:
> On 11/13/2017 09:51 PM, Chris Brandt wrote:
> > Some controllers have a 32-bit data buffer register and do not allow
> > any other access besides 32-bit read/write.
> >
> > Signed-off-by: Chris Brandt <chris.brandt at renesas.com>
> 
> Can you switch to uniphier-sd instead ? I switched Gen3 away from SH
> SDHI and the uniphier driver is so much better.

Interesting.


However...

Functionally, the SDHI in the RZ/A1 is the same as R-Car.

But, there is 1 difference: The registers are spaced 16-bits apart where
the R-Car is 64-bit spaced apart.

Also, all the RZ/A1 registers are 16-bit, except for the data register 
(SD_BUF0) which is 32-bit. That's why I had to patch the upstream kernel 
driver specifically for RZ/A1.

The uniphier-sd is only setup for 32-bit or 64-bit spacing.

So, if I can get away with just this simple patch:

static u32 uniphier_sd_readl(struct uniphier_sd_priv *priv, unsigned int reg)
{
	if (priv->caps & UNIPHIER_SD_CAP_64BIT)
		return readl(priv->regbase + (reg << 1));
	if (priv->caps & UNIPHIER_SD_CAP_16BIT)
		return readl(priv->regbase + (reg >> 1));
	else
		return readl(priv->regbase + reg);
}

Then maybe I can use it.

I'll try it and see how it goes since I prefer to use the same drivers as R-Car.

Chris



More information about the U-Boot mailing list