Please apply this patch to your kernel and dump the log for both tuning and non-tuning mode.
diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c
index f2e6ed3..261220e 100644
--- a/drivers/mmc/host/sdhci-tegra.c
+++ b/drivers/mmc/host/sdhci-tegra.c
@@ -403,7 +403,7 @@
u32 trim_delay;
u8 i;
- pr_debug("======= %s: Tuning windows =======\n",
+ pr_err("======= %s: Tuning windows =======\n",
mmc_hostname(host->mmc));
reg = sdhci_readl(host, SDHCI_VNDR_TUN_CTRL0_0);
for (i = 0; i <= TUNING_WORD_SEL_MASK; i++) {
@@ -411,7 +411,7 @@
reg |= i;
sdhci_writel(host, reg, SDHCI_VNDR_TUN_CTRL0_0);
tuning_status = sdhci_readl(host, SDHCI_TEGRA_VNDR_TUNING_STATUS0);
- pr_debug("%s: tuning window[%d]: %#x\n",
+ pr_err("%s: tuning window[%d]: %#x\n",
mmc_hostname(host->mmc), i, tuning_status);
}
reg = sdhci_readl(host, SDHCI_TEGRA_VENDOR_CLOCK_CTRL);
@@ -419,35 +419,35 @@
tap_delay &= SDHCI_CLOCK_CTRL_TAP_MASK;
trim_delay = reg >> SDHCI_CLOCK_CTRL_TRIM_SHIFT;
trim_delay &= SDHCI_CLOCK_CTRL_TRIM_MASK;
- pr_debug("sdhci: Tap value: %u | Trim value: %u\n", tap_delay,
+ pr_err("sdhci: Tap value: %u | Trim value: %u\n", tap_delay,
trim_delay);
- pr_debug("==================================\n");
+ pr_err("==================================\n");
- pr_debug("Vendor clock ctrl: %#x\n",
+ pr_err("Vendor clock ctrl: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_VENDOR_CLOCK_CTRL));
- pr_debug("Vendor SysSW ctrl: %#x\n",
+ pr_err("Vendor SysSW ctrl: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_VENDOR_SYS_SW_CTRL));
- pr_debug("Vendor Err interrupt status : %#x\n",
+ pr_err("Vendor Err interrupt status : %#x\n",
sdhci_readl(host, SDHCI_TEGRA_VENDOR_ERR_INTR_STATUS));
- pr_debug("Vendor Cap overrides: %#x\n",
+ pr_err("Vendor Cap overrides: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_VENDOR_CAP_OVERRIDES));
- pr_debug("Vendor Misc ctrl: %#x\n",
+ pr_err("Vendor Misc ctrl: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_VENDOR_MISC_CTRL));
- pr_debug("Vendor Misc ctrl_1: %#x\n",
+ pr_err("Vendor Misc ctrl_1: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_VENDOR_MISC_CTRL_1));
- pr_debug("Vendor Misc ctrl_2: %#x\n",
+ pr_err("Vendor Misc ctrl_2: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_VENDOR_MISC_CTRL_2));
- pr_debug("Vendor IO trim ctrl: %#x\n",
+ pr_err("Vendor IO trim ctrl: %#x\n",
sdhci_readl(host, SDMMC_VNDR_IO_TRIM_CTRL_0));
- pr_debug("Vendor Tuning ctrl: %#x\n",
+ pr_err("Vendor Tuning ctrl: %#x\n",
sdhci_readl(host, SDHCI_VNDR_TUN_CTRL0_0));
- pr_debug("SDMEM comp padctrl: %#x\n",
+ pr_err("SDMEM comp padctrl: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_SDMEM_COMP_PADCTRL));
- pr_debug("Autocal config: %#x\n",
+ pr_err("Autocal config: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_AUTO_CAL_CONFIG));
- pr_debug("Autocal status: %#x\n",
+ pr_err("Autocal status: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_AUTO_CAL_STATUS));
- pr_debug("Tuning Status1: %#x\n",
+ pr_err("Tuning Status1: %#x\n",
sdhci_readl(host, SDHCI_TEGRA_VNDR_TUNING_STATUS1));
}
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index e355775..0c3bfed 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -2772,6 +2772,7 @@
else {
pr_err("%s: CMD CRC or end bit error, int mask %#x\n",
mmc_hostname(host->mmc), (unsigned)intmask);
+ sdhci_dumpregs(host);
host->cmd->error = -EILSEQ;
}