mmc: enable background ops in driver
Vishal Singh [Fri, 27 Apr 2012 12:40:33 +0000 (17:40 +0530)]
Adding a new config option and enabling background ops in driver.
Correcting the EXT_CSD byte that needs to be written in order to
trigger background ops in the MMC firmware.

Bug 847037.

Change-Id: Ibc517540cab43fa5070b142a416f6b67f2f7e7be
Signed-off-by: Vishal Singh <vissingh@nvidia.com>
Reviewed-on: http://git-master/r/99117
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>

drivers/mmc/card/Kconfig
drivers/mmc/core/mmc_ops.c
drivers/mmc/host/sdhci-tegra.c

index ebb4afe..3875c21 100644 (file)
@@ -76,3 +76,13 @@ config MMC_TEST
 
          This driver is only of interest to those developing or
          testing a host driver. Most people should say N here.
+
+config MMC_BKOPS
+       bool "Enable background ops"
+       default n
+       help
+         Say Y here to enable background ops in driver. This will result
+         in issuing of MMC_SWITCH command to write byte 164 of EXT_CSD,
+         in order to trigger background ops in the MMC device's
+         firmware, whenever URGENT_BKOPS flag is found to be set in a
+         read/write command's response.
index 330b968..28bed97 100644 (file)
@@ -588,7 +588,7 @@ int mmc_send_bk_ops_cmd(struct mmc_card *card, bool is_synchronous)
 
        cmd.opcode = MMC_SWITCH;
        cmd.arg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
-               (EXT_CSD_BKOPS_EN << 16) |
+               (EXT_CSD_BKOPS_START << 16) |
                (1 << 8) |
                EXT_CSD_CMD_SET_NORMAL;
        if (is_synchronous)
index 9bbec43..8fec147 100644 (file)
@@ -1122,6 +1122,11 @@ static int __devinit sdhci_tegra_probe(struct platform_device *pdev)
                host->mmc->caps |= MMC_CAP_NONREMOVABLE;
        }
        host->mmc->pm_flags |= MMC_PM_IGNORE_PM_NOTIFY;
+
+#ifdef CONFIG_MMC_BKOPS
+       host->mmc->caps |= MMC_CAP_BKOPS;
+#endif
+
 #ifdef CONFIG_MMC_EMBEDDED_SDIO
        /* Do not turn OFF embedded sdio cards as it support Wake on Wireless */
        if (plat->mmc_data.embedded_sdio)