liblitesdcard/sdcard: clamp divider value.
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 9 Jul 2020 11:09:36 +0000 (13:09 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Thu, 9 Jul 2020 11:09:36 +0000 (13:09 +0200)
litex/soc/software/liblitesdcard/sdcard.c

index 6b6d838a6081eea8c6798ecf8c6d5a9964e47f1e..5739809ca2b287a237b04c64f976d0cc379c5a2d 100644 (file)
 
 unsigned int sdcard_response[SD_CMD_RESPONSE_SIZE/4];
 
+/*-----------------------------------------------------------------------*/
+/* Helpers                                                               */
+/*-----------------------------------------------------------------------*/
+
+#define max(x, y) (((x) > (y)) ? (x) : (y))
+#define min(x, y) (((x) < (y)) ? (x) : (y))
+
 /*-----------------------------------------------------------------------*/
 /* SDCard command helpers                                                */
 /*-----------------------------------------------------------------------*/
@@ -124,6 +131,8 @@ static void sdcard_set_clk_freq(uint32_t clk_freq) {
     uint32_t divider;
     divider = CONFIG_CLOCK_FREQUENCY/clk_freq + 1;
     divider = (1 << log2(divider));
+    divider = max(divider,   2);
+    divider = min(divider, 128);
 #ifdef SDCARD_DEBUG
     printf("Setting SDCard clk freq to ");
     if (clk_freq > 1000000)