/* Controller immediately reports SDHCI_CLOCK_INT_STABLE after enabling the
  * internal clock even when the clock isn't stable */
 #define SDHCI_ARASAN_QUIRK_CLOCK_UNSTABLE BIT(1)
+/*
+ * Some of the Arasan variations might not have timing requirements
+ * met at 25MHz for Default Speed mode, those controllers work at
+ * 19MHz instead
+ */
+#define SDHCI_ARASAN_QUIRK_CLOCK_25_BROKEN BIT(2)
 };
 
 struct sdhci_arasan_of_data {
                sdhci_arasan->is_phy_on = false;
        }
 
+       if (sdhci_arasan->quirks & SDHCI_ARASAN_QUIRK_CLOCK_25_BROKEN) {
+               /*
+                * Some of the Arasan variations might not have timing
+                * requirements met at 25MHz for Default Speed mode,
+                * those controllers work at 19MHz instead.
+                */
+               if (clock == DEFAULT_SPEED_MAX_DTR)
+                       clock = (DEFAULT_SPEED_MAX_DTR * 19) / 25;
+       }
+
        /* Set the Input and Output Clock Phase Delays */
        if (clk_data->set_clk_delays)
                clk_data->set_clk_delays(host);
        if (of_device_is_compatible(np, "xlnx,zynqmp-8.9a")) {
                host->mmc_host_ops.execute_tuning =
                        arasan_zynqmp_execute_tuning;
+
+               sdhci_arasan->quirks |= SDHCI_ARASAN_QUIRK_CLOCK_25_BROKEN;
        }
 
        arasan_dt_parse_clk_phases(dev, &sdhci_arasan->clk_data);