| From 3f18c5046e633cc4bbad396b74c05d46d353033d Mon Sep 17 00:00:00 2001 |
| From: Paul Cercueil <paul@crapouillou.net> |
| Date: Tue, 31 Jan 2023 21:02:28 +0000 |
| Subject: mmc: jz4740: Work around bug on JZ4760(B) |
| |
| From: Paul Cercueil <paul@crapouillou.net> |
| |
| commit 3f18c5046e633cc4bbad396b74c05d46d353033d upstream. |
| |
| On JZ4760 and JZ4760B, SD cards fail to run if the maximum clock |
| rate is set to 50 MHz, even though the controller officially does |
| support it. |
| |
| Until the actual bug is found and fixed, limit the maximum clock rate to |
| 24 MHz. |
| |
| Signed-off-by: Paul Cercueil <paul@crapouillou.net> |
| Cc: stable@vger.kernel.org |
| Link: https://lore.kernel.org/r/20230131210229.68129-1-paul@crapouillou.net |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/mmc/host/jz4740_mmc.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| --- a/drivers/mmc/host/jz4740_mmc.c |
| +++ b/drivers/mmc/host/jz4740_mmc.c |
| @@ -1053,6 +1053,16 @@ static int jz4740_mmc_probe(struct platf |
| mmc->ops = &jz4740_mmc_ops; |
| if (!mmc->f_max) |
| mmc->f_max = JZ_MMC_CLK_RATE; |
| + |
| + /* |
| + * There seems to be a problem with this driver on the JZ4760 and |
| + * JZ4760B SoCs. There, when using the maximum rate supported (50 MHz), |
| + * the communication fails with many SD cards. |
| + * Until this bug is sorted out, limit the maximum rate to 24 MHz. |
| + */ |
| + if (host->version == JZ_MMC_JZ4760 && mmc->f_max > JZ_MMC_CLK_RATE) |
| + mmc->f_max = JZ_MMC_CLK_RATE; |
| + |
| mmc->f_min = mmc->f_max / 128; |
| mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; |
| |