Commit 37ecfd80 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc:
  mvsdio: fix CONFIG_PM=y build
  mmci: fix crash with debug enabled
  sdhci: catch ADMA errors
  mmc: increase power up delay
  sdhci-pci: bad error handling in probe function
  mmc_block: be prepared for oversized requests
parents 71019c35 2e058a6f
...@@ -253,6 +253,14 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) ...@@ -253,6 +253,14 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
brq.stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC; brq.stop.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;
brq.data.blocks = req->nr_sectors; brq.data.blocks = req->nr_sectors;
/*
* The block layer doesn't support all sector count
* restrictions, so we need to be prepared for too big
* requests.
*/
if (brq.data.blocks > card->host->max_blk_count)
brq.data.blocks = card->host->max_blk_count;
/* /*
* After a read error, we redo the request one sector at a time * After a read error, we redo the request one sector at a time
* in order to accurately determine which sectors can be read * in order to accurately determine which sectors can be read
......
...@@ -706,7 +706,7 @@ static void mmc_power_up(struct mmc_host *host) ...@@ -706,7 +706,7 @@ static void mmc_power_up(struct mmc_host *host)
* This delay should be sufficient to allow the power supply * This delay should be sufficient to allow the power supply
* to reach the minimum voltage. * to reach the minimum voltage.
*/ */
mmc_delay(2); mmc_delay(10);
host->ios.clock = host->f_min; host->ios.clock = host->f_min;
host->ios.power_mode = MMC_POWER_ON; host->ios.power_mode = MMC_POWER_ON;
...@@ -716,7 +716,7 @@ static void mmc_power_up(struct mmc_host *host) ...@@ -716,7 +716,7 @@ static void mmc_power_up(struct mmc_host *host)
* This delay must be at least 74 clock sizes, or 1 ms, or the * This delay must be at least 74 clock sizes, or 1 ms, or the
* time required to reach a stable voltage. * time required to reach a stable voltage.
*/ */
mmc_delay(2); mmc_delay(10);
} }
static void mmc_power_off(struct mmc_host *host) static void mmc_power_off(struct mmc_host *host)
......
...@@ -514,6 +514,7 @@ static int __devinit mmci_probe(struct amba_device *dev, void *id) ...@@ -514,6 +514,7 @@ static int __devinit mmci_probe(struct amba_device *dev, void *id)
} }
host = mmc_priv(mmc); host = mmc_priv(mmc);
host->mmc = mmc;
/* Bits 12 thru 19 is the designer */ /* Bits 12 thru 19 is the designer */
host->hw_designer = (dev->periphid >> 12) & 0xff; host->hw_designer = (dev->periphid >> 12) & 0xff;
/* Bits 20 thru 23 is the revison */ /* Bits 20 thru 23 is the revison */
...@@ -545,7 +546,6 @@ static int __devinit mmci_probe(struct amba_device *dev, void *id) ...@@ -545,7 +546,6 @@ static int __devinit mmci_probe(struct amba_device *dev, void *id)
host->mclk = clk_get_rate(host->clk); host->mclk = clk_get_rate(host->clk);
DBG(host, "eventual mclk rate: %u Hz\n", host->mclk); DBG(host, "eventual mclk rate: %u Hz\n", host->mclk);
} }
host->mmc = mmc;
host->base = ioremap(dev->res.start, SZ_4K); host->base = ioremap(dev->res.start, SZ_4K);
if (!host->base) { if (!host->base) {
ret = -ENOMEM; ret = -ENOMEM;
......
...@@ -825,24 +825,23 @@ static int __exit mvsd_remove(struct platform_device *pdev) ...@@ -825,24 +825,23 @@ static int __exit mvsd_remove(struct platform_device *pdev)
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int mvsd_suspend(struct platform_device *dev, pm_message_t state, static int mvsd_suspend(struct platform_device *dev, pm_message_t state)
u32 level)
{ {
struct mmc_host *mmc = platform_get_drvdata(dev); struct mmc_host *mmc = platform_get_drvdata(dev);
int ret = 0; int ret = 0;
if (mmc && level == SUSPEND_DISABLE) if (mmc)
ret = mmc_suspend_host(mmc, state); ret = mmc_suspend_host(mmc, state);
return ret; return ret;
} }
static int mvsd_resume(struct platform_device *dev, u32 level) static int mvsd_resume(struct platform_device *dev)
{ {
struct mmc_host *mmc = platform_dev_get_drvdata(dev); struct mmc_host *mmc = platform_get_drvdata(dev);
int ret = 0; int ret = 0;
if (mmc && level == RESUME_ENABLE) if (mmc)
ret = mmc_resume_host(mmc); ret = mmc_resume_host(mmc);
return ret; return ret;
......
...@@ -522,8 +522,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot( ...@@ -522,8 +522,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot)); host = sdhci_alloc_host(&pdev->dev, sizeof(struct sdhci_pci_slot));
if (IS_ERR(host)) { if (IS_ERR(host)) {
ret = PTR_ERR(host); dev_err(&pdev->dev, "cannot allocate host\n");
goto unmap; return ERR_PTR(PTR_ERR(host));
} }
slot = sdhci_priv(host); slot = sdhci_priv(host);
...@@ -541,7 +541,7 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot( ...@@ -541,7 +541,7 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc)); ret = pci_request_region(pdev, bar, mmc_hostname(host->mmc));
if (ret) { if (ret) {
dev_err(&pdev->dev, "cannot request region\n"); dev_err(&pdev->dev, "cannot request region\n");
return ERR_PTR(ret); goto free;
} }
addr = pci_resource_start(pdev, bar); addr = pci_resource_start(pdev, bar);
...@@ -572,6 +572,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot( ...@@ -572,6 +572,8 @@ static struct sdhci_pci_slot * __devinit sdhci_pci_probe_slot(
release: release:
pci_release_region(pdev, bar); pci_release_region(pdev, bar);
free:
sdhci_free_host(host); sdhci_free_host(host);
return ERR_PTR(ret); return ERR_PTR(ret);
......
...@@ -125,7 +125,7 @@ ...@@ -125,7 +125,7 @@
#define SDHCI_INT_DATA_MASK (SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | \ #define SDHCI_INT_DATA_MASK (SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | \
SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL | \ SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL | \
SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC | \ SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC | \
SDHCI_INT_DATA_END_BIT) SDHCI_INT_DATA_END_BIT | SDHCI_ADMA_ERROR)
#define SDHCI_INT_ALL_MASK ((unsigned int)-1) #define SDHCI_INT_ALL_MASK ((unsigned int)-1)
#define SDHCI_ACMD12_ERR 0x3C #define SDHCI_ACMD12_ERR 0x3C
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment