sdclk: additional halving to prevent clock going "too fast"

When the system/bus clock frequency is an exact power-of-2 multiple of
the desired sdcard frequency, we can drive the latter at the "maximum"
speed via the "perfect" divider. That sometimes turns out too fast, so
in order to be conservative, we double the divider, thus halving the
resulting sdclock.
This commit is contained in:
Gabriel Somlo 2021-01-31 09:06:52 -05:00
parent b03f46ffec
commit 927fd675bc
1 changed files with 1 additions and 0 deletions

View File

@ -106,6 +106,7 @@ void sdcard_set_clk_freq(uint32_t clk_freq, int show) {
uint32_t divider; uint32_t divider;
divider = clk_freq ? CONFIG_CLOCK_FREQUENCY/clk_freq : 256; divider = clk_freq ? CONFIG_CLOCK_FREQUENCY/clk_freq : 256;
divider = pow2_round_up(divider); divider = pow2_round_up(divider);
divider <<= 1; /* NOTE: workaround for occasional sdcardboot failure */
divider = min(max(divider, 2), 256); divider = min(max(divider, 2), 256);
#ifdef SDCARD_DEBUG #ifdef SDCARD_DEBUG
show = 1; show = 1;