#define ESDHC_DLL_ENABLE               0x80000000
 #define ESDHC_DLL_FREQ_SEL             0x08000000
 
+/* DLL Config 1 Register */
+#define ESDHC_DLLCFG1                  0x164
+#define ESDHC_DLL_PD_PULSE_STRETCH_SEL 0x80000000
+
 /* DLL Status 0 Register */
 #define ESDHC_DLLSTAT0                 0x170
 #define ESDHC_DLL_STS_SLV_LOCK         0x08000000
 
        u8 spec_ver;
        bool quirk_incorrect_hostver;
        bool quirk_limited_clk_division;
+       bool quirk_unreliable_pulse_detection;
        bool quirk_fixup_tuning;
        unsigned int peripheral_clock;
        const struct esdhc_clk_fixup *clk_fixup;
 
 static void esdhc_reset(struct sdhci_host *host, u8 mask)
 {
+       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+       struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host);
        u32 val;
 
        sdhci_reset(host, mask);
                val = sdhci_readl(host, ESDHC_TBCTL);
                val &= ~ESDHC_TB_EN;
                sdhci_writel(host, val, ESDHC_TBCTL);
+
+               if (esdhc->quirk_unreliable_pulse_detection) {
+                       val = sdhci_readl(host, ESDHC_DLLCFG1);
+                       val &= ~ESDHC_DLL_PD_PULSE_STRETCH_SEL;
+                       sdhci_writel(host, val, ESDHC_DLLCFG1);
+               }
        }
 }
 
        { },
 };
 
+static struct soc_device_attribute soc_unreliable_pulse_detection[] = {
+       { .family = "QorIQ LX2160A", .revision = "1.0", },
+       { },
+};
+
 static void esdhc_init(struct platform_device *pdev, struct sdhci_host *host)
 {
        const struct of_device_id *match;
        else
                esdhc->quirk_limited_clk_division = false;
 
+       if (soc_device_match(soc_unreliable_pulse_detection))
+               esdhc->quirk_unreliable_pulse_detection = true;
+       else
+               esdhc->quirk_unreliable_pulse_detection = false;
+
        match = of_match_node(sdhci_esdhc_of_match, pdev->dev.of_node);
        if (match)
                esdhc->clk_fixup = match->data;