···3030#define SDHCI_ARASAN_VENDOR_REGISTER 0x7831313232#define SDHCI_ARASAN_ITAPDLY_REGISTER 0xF0F83333+#define SDHCI_ARASAN_ITAPDLY_SEL_MASK 0xFF3434+3335#define SDHCI_ARASAN_OTAPDLY_REGISTER 0xF0FC3636+#define SDHCI_ARASAN_OTAPDLY_SEL_MASK 0x3F34373538#define SDHCI_ARASAN_CQE_BASE_ADDR 0x2003639#define VENDOR_ENHANCED_STROBE BIT(0)···603600 u8 tap_delay, tap_max = 0;604601 int ret;605602606606- /*607607- * This is applicable for SDHCI_SPEC_300 and above608608- * ZynqMP does not set phase for <=25MHz clock.609609- * If degrees is zero, no need to do anything.610610- */611611- if (host->version < SDHCI_SPEC_300 ||612612- host->timing == MMC_TIMING_LEGACY ||613613- host->timing == MMC_TIMING_UHS_SDR12 || !degrees)603603+ /* This is applicable for SDHCI_SPEC_300 and above */604604+ if (host->version < SDHCI_SPEC_300)614605 return 0;615606616607 switch (host->timing) {···634637 ret = zynqmp_pm_set_sd_tapdelay(node_id, PM_TAPDELAY_OUTPUT, tap_delay);635638 if (ret)636639 pr_err("Error setting Output Tap Delay\n");640640+641641+ /* Release DLL Reset */642642+ zynqmp_pm_sd_dll_reset(node_id, PM_DLL_RESET_RELEASE);637643638644 return ret;639645}···668668 u8 tap_delay, tap_max = 0;669669 int ret;670670671671- /*672672- * This is applicable for SDHCI_SPEC_300 and above673673- * ZynqMP does not set phase for <=25MHz clock.674674- * If degrees is zero, no need to do anything.675675- */676676- if (host->version < SDHCI_SPEC_300 ||677677- host->timing == MMC_TIMING_LEGACY ||678678- host->timing == MMC_TIMING_UHS_SDR12 || !degrees)671671+ /* This is applicable for SDHCI_SPEC_300 and above */672672+ if (host->version < SDHCI_SPEC_300)679673 return 0;674674+675675+ /* Assert DLL Reset */676676+ zynqmp_pm_sd_dll_reset(node_id, PM_DLL_RESET_ASSERT);680677681678 switch (host->timing) {682679 case MMC_TIMING_MMC_HS:···730733 struct sdhci_host *host = sdhci_arasan->host;731734 u8 tap_delay, tap_max = 0;732735733733- /*734734- * This is applicable for SDHCI_SPEC_300 and above735735- * Versal does not set phase for <=25MHz clock.736736- * If degrees is zero, no need to do anything.737737- */738738- if (host->version < SDHCI_SPEC_300 ||739739- host->timing == MMC_TIMING_LEGACY ||740740- host->timing == MMC_TIMING_UHS_SDR12 || !degrees)736736+ /* This is applicable for SDHCI_SPEC_300 and above */737737+ if (host->version < SDHCI_SPEC_300)741738 return 0;742739743740 switch (host->timing) {···764773 regval = sdhci_readl(host, SDHCI_ARASAN_OTAPDLY_REGISTER);765774 regval |= SDHCI_OTAPDLY_ENABLE;766775 sdhci_writel(host, regval, SDHCI_ARASAN_OTAPDLY_REGISTER);776776+ regval &= ~SDHCI_ARASAN_OTAPDLY_SEL_MASK;767777 regval |= tap_delay;768778 sdhci_writel(host, regval, SDHCI_ARASAN_OTAPDLY_REGISTER);769779 }···796804 struct sdhci_host *host = sdhci_arasan->host;797805 u8 tap_delay, tap_max = 0;798806799799- /*800800- * This is applicable for SDHCI_SPEC_300 and above801801- * Versal does not set phase for <=25MHz clock.802802- * If degrees is zero, no need to do anything.803803- */804804- if (host->version < SDHCI_SPEC_300 ||805805- host->timing == MMC_TIMING_LEGACY ||806806- host->timing == MMC_TIMING_UHS_SDR12 || !degrees)807807+ /* This is applicable for SDHCI_SPEC_300 and above */808808+ if (host->version < SDHCI_SPEC_300)807809 return 0;808810809811 switch (host->timing) {···832846 sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);833847 regval |= SDHCI_ITAPDLY_ENABLE;834848 sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);849849+ regval &= ~SDHCI_ARASAN_ITAPDLY_SEL_MASK;835850 regval |= tap_delay;836851 sdhci_writel(host, regval, SDHCI_ARASAN_ITAPDLY_REGISTER);837852 regval &= ~SDHCI_ITAPDLY_CHGWIN;