mmc: host: sdhci-msm: Skip reading GENERICS register in check_pwr_status

Skip checking the SWITCHABLE_SIGNALING_VOLTAGE bit of MCI_GENERICS
register while checking power status on SDHC v5.0 onwards.

This bit shows whether controller supports switching of IO signaling
voltage or not.  On SDHC v5.0, switchable signaling voltage support
is present by default and this bit was removed. So we can skip checking
this bit in case of v5.0 controller.

Without this patch, driver tries to read a non-existing bit field which is
causing driver to proceed without waiting for pwr-irq. In some case its
turning off the clock even before pwr irq finishes thus resulting in
un-clocked access errors.


Change-Id: I5beaf5bf043999522e3f2ec537568524c5aec4bf
Signed-off-by: Veerabhadrarao Badiganti <vbadigan@codeaurora.org>
This commit is contained in:
Veerabhadrarao Badiganti 2017-03-27 22:46:20 +05:30 committed by Gerrit - the friendly Code Review server
parent 664cdd33f9
commit 20bc196762

View file

@ -2736,14 +2736,15 @@ static void sdhci_msm_check_power_status(struct sdhci_host *host, u32 req_type)
msm_host->offset;
unsigned long flags;
bool done = false;
u32 io_sig_sts;
u32 io_sig_sts = SWITCHABLE_SIGNALLING_VOL;
spin_lock_irqsave(&host->lock, flags);
pr_debug("%s: %s: request %d curr_pwr_state %x curr_io_level %x\n",
mmc_hostname(host->mmc), __func__, req_type,
msm_host->curr_pwr_state, msm_host->curr_io_level);
io_sig_sts = sdhci_msm_readl_relaxed(host,
msm_host_offset->CORE_GENERICS);
if (!msm_host->mci_removed)
io_sig_sts = sdhci_msm_readl_relaxed(host,
msm_host_offset->CORE_GENERICS);
/*
* The IRQ for request type IO High/Low will be generated when -