Message ID | 20240625-gigantic-frown-1ef4afa3e6fa@wendy (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [v2] mmc: mmc_spi: allow for spi controllers incapable of getting as low as 400k | expand |
On Tue, 25 Jun 2024 at 14:34, Conor Dooley <conor.dooley@microchip.com> wrote: > > Some controllers may not be able to reach a bus clock as low as 400 KHz > due to a lack of sufficient divisors. In these cases, the SD card slot > becomes non-functional as Linux continuously attempts to set the bus > clock to 400 KHz. If the controller is incapable of getting that low, > set its minimum frequency instead. While this may eliminate some SD > cards, it allows those capable of operating at the controller's minimum > frequency to be used. > > Signed-off-by: Conor Dooley <conor.dooley@microchip.com> Applied for next, thanks! Kind regards Uffe > --- > > Without the RFC tag, but otherwise unchanged. > > rfc/v1: https://lore.kernel.org/all/20240612-dense-resample-563f07c30185@spud/ > > CC: Ulf Hansson <ulf.hansson@linaro.org> > CC: Cyril Jean <cyril.jean@microchip.com> > CC: linux-mmc@vger.kernel.org > CC: linux-kernel@vger.kernel.org > --- > drivers/mmc/host/mmc_spi.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c > index 09d7a6a0dc1aa..c9caa1ece7ef9 100644 > --- a/drivers/mmc/host/mmc_spi.c > +++ b/drivers/mmc/host/mmc_spi.c > @@ -1208,7 +1208,10 @@ static int mmc_spi_probe(struct spi_device *spi) > * that's the only reason not to use a few MHz for f_min (until > * the upper layer reads the target frequency from the CSD). > */ > - mmc->f_min = 400000; > + if (spi->controller->min_speed_hz > 400000) > + dev_warn(&spi->dev,"Controller unable to reduce bus clock to 400 KHz\n"); > + > + mmc->f_min = max(spi->controller->min_speed_hz, 400000); > mmc->f_max = spi->max_speed_hz; > > host = mmc_priv(mmc); > -- > 2.43.2 >
diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c index 09d7a6a0dc1aa..c9caa1ece7ef9 100644 --- a/drivers/mmc/host/mmc_spi.c +++ b/drivers/mmc/host/mmc_spi.c @@ -1208,7 +1208,10 @@ static int mmc_spi_probe(struct spi_device *spi) * that's the only reason not to use a few MHz for f_min (until * the upper layer reads the target frequency from the CSD). */ - mmc->f_min = 400000; + if (spi->controller->min_speed_hz > 400000) + dev_warn(&spi->dev,"Controller unable to reduce bus clock to 400 KHz\n"); + + mmc->f_min = max(spi->controller->min_speed_hz, 400000); mmc->f_max = spi->max_speed_hz; host = mmc_priv(mmc);
Some controllers may not be able to reach a bus clock as low as 400 KHz due to a lack of sufficient divisors. In these cases, the SD card slot becomes non-functional as Linux continuously attempts to set the bus clock to 400 KHz. If the controller is incapable of getting that low, set its minimum frequency instead. While this may eliminate some SD cards, it allows those capable of operating at the controller's minimum frequency to be used. Signed-off-by: Conor Dooley <conor.dooley@microchip.com> --- Without the RFC tag, but otherwise unchanged. rfc/v1: https://lore.kernel.org/all/20240612-dense-resample-563f07c30185@spud/ CC: Ulf Hansson <ulf.hansson@linaro.org> CC: Cyril Jean <cyril.jean@microchip.com> CC: linux-mmc@vger.kernel.org CC: linux-kernel@vger.kernel.org --- drivers/mmc/host/mmc_spi.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)