diff options
Diffstat (limited to 'drivers/mmc/host/omap_hsmmc.c')
| -rw-r--r-- | drivers/mmc/host/omap_hsmmc.c | 12 | 
1 files changed, 11 insertions, 1 deletions
| diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c index 37d3399a2290..69928a8f0768 100644 --- a/drivers/mmc/host/omap_hsmmc.c +++ b/drivers/mmc/host/omap_hsmmc.c @@ -2095,7 +2095,6 @@ static int omap_hsmmc_probe(struct platform_device *pdev)  	mmc->max_blk_size = 512;       /* Block Length at max can be 1024 */  	mmc->max_blk_count = 0xFFFF;    /* No. of Blocks is 16 bits */  	mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; -	mmc->max_seg_size = mmc->max_req_size;  	mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |  		     MMC_CAP_WAIT_WHILE_BUSY | MMC_CAP_ERASE; @@ -2125,6 +2124,17 @@ static int omap_hsmmc_probe(struct platform_device *pdev)  		goto err_irq;  	} +	/* +	 * Limit the maximum segment size to the lower of the request size +	 * and the DMA engine device segment size limits.  In reality, with +	 * 32-bit transfers, the DMA engine can do longer segments than this +	 * but there is no way to represent that in the DMA model - if we +	 * increase this figure here, we get warnings from the DMA API debug. +	 */ +	mmc->max_seg_size = min3(mmc->max_req_size, +			dma_get_max_seg_size(host->rx_chan->device->dev), +			dma_get_max_seg_size(host->tx_chan->device->dev)); +  	/* Request IRQ for MMC operations */  	ret = devm_request_irq(&pdev->dev, host->irq, omap_hsmmc_irq, 0,  			mmc_hostname(mmc), host); | 
