Skip to content

Commit 64f580d

Browse files
committed
mmc: sdhci-of-at91: avoid division by zero
Avoid division by zero and setting invalid values to address pointed by SDHCI_PRESET_FOR_SDR104. Fixes: bac9f2f ("mmc: sdhci-of-at91: add preset for HS400 mode") Fixes: d85a069 ("mmc: sdhci-of-at91: add compatible to sama7g5 SoC") Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> Reviewed-by: Eugen Hristev <eugen.hristev@microchip.com>
1 parent 2481801 commit 64f580d

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

drivers/mmc/host/sdhci-of-at91.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -306,15 +306,21 @@ static int sdhci_at91_set_clks_presets(struct device *dev)
306306
preset_div = DIV_ROUND_UP(gck_rate, 100000000) - 1;
307307
writew(SDHCI_AT91_PRESET_COMMON_CONF | preset_div,
308308
host->ioaddr + SDHCI_PRESET_FOR_SDR50);
309-
preset_div = DIV_ROUND_UP(gck_rate, priv->soc_data->max_sdr104_clk) - 1;
310-
writew(SDHCI_AT91_PRESET_COMMON_CONF | preset_div,
311-
host->ioaddr + SDHCI_PRESET_FOR_SDR104);
309+
if (priv->soc_data->max_sdr104_clk) {
310+
preset_div = DIV_ROUND_UP(gck_rate,
311+
priv->soc_data->max_sdr104_clk) - 1;
312+
writew(SDHCI_AT91_PRESET_COMMON_CONF | preset_div,
313+
host->ioaddr + SDHCI_PRESET_FOR_SDR104);
314+
}
312315
preset_div = DIV_ROUND_UP(gck_rate, 50000000) - 1;
313316
writew(SDHCI_AT91_PRESET_COMMON_CONF | preset_div,
314317
host->ioaddr + SDHCI_PRESET_FOR_DDR50);
315-
preset_div = DIV_ROUND_UP(gck_rate, priv->soc_data->max_sdr104_clk) - 1;
316-
writew(SDHCI_AT91_PRESET_DRVA_CONF | preset_div,
317-
host->ioaddr + SDHCI_PRESET_FOR_HS400);
318+
if (priv->soc_data->max_sdr104_clk) {
319+
preset_div = DIV_ROUND_UP(gck_rate,
320+
priv->soc_data->max_sdr104_clk) - 1;
321+
writew(SDHCI_AT91_PRESET_DRVA_CONF | preset_div,
322+
host->ioaddr + SDHCI_PRESET_FOR_HS400);
323+
}
318324

319325
clk_prepare_enable(priv->mainck);
320326
clk_prepare_enable(priv->gck);

0 commit comments

Comments
 (0)