Skip to content

Commit

Permalink
mmc: renesas_sdhi: limit block count to 16 bit for old revisions
Browse files Browse the repository at this point in the history
R-Car Gen2 has two different SDHI incarnations in the same chip. The
older one does not support the recently introduced 32 bit register
access to the block count register. Make sure we use this feature only
after the first known version.

Thanks to the Renesas Testing team for this bug report!

Fixes: 5603731 ("mmc: tmio: fix access width of Block Count Register")
Reported-by: Yoshihiro Shimoda <[email protected]>
Signed-off-by: Wolfram Sang <[email protected]>
Reviewed-by: Simon Horman <[email protected]>
Tested-by: Phong Hoang <[email protected]>
Cc: [email protected]
Signed-off-by: Ulf Hansson <[email protected]>
  • Loading branch information
Wolfram Sang authored and storulf committed Mar 21, 2019
1 parent 5ea4769 commit c9a9497
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion drivers/mmc/host/renesas_sdhi_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,7 @@ int renesas_sdhi_probe(struct platform_device *pdev,
struct renesas_sdhi *priv;
struct resource *res;
int irq, ret, i;
u16 ver;

of_data = of_device_get_match_data(&pdev->dev);

Expand Down Expand Up @@ -773,12 +774,17 @@ int renesas_sdhi_probe(struct platform_device *pdev,
if (ret)
goto efree;

ver = sd_ctrl_read16(host, CTL_VERSION);
/* GEN2_SDR104 is first known SDHI to use 32bit block count */
if (ver < SDHI_VER_GEN2_SDR104 && mmc_data->max_blk_count > U16_MAX)
mmc_data->max_blk_count = U16_MAX;

ret = tmio_mmc_host_probe(host);
if (ret < 0)
goto edisclk;

/* One Gen2 SDHI incarnation does NOT have a CBSY bit */
if (sd_ctrl_read16(host, CTL_VERSION) == SDHI_VER_GEN2_SDR50)
if (ver == SDHI_VER_GEN2_SDR50)
mmc_data->flags &= ~TMIO_MMC_HAVE_CBSY;

/* Enable tuning iff we have an SCC and a supported mode */
Expand Down

0 comments on commit c9a9497

Please sign in to comment.