mmc: omap_hsmmc: if multiblock reads are broken, disable them
When device data indicates that multiple block reads are not supported on a given HSMMC controller instance, log a message to the console, and pass the appropriate MMC capability flag to the MMC core. Signed-off-by: Paul Walmsley <paul@pwsan.com> Cc: Dave Hylands <dhylands@gmail.com> Tested-by: Steve Sakoman <sakoman@gmail.com> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
2bf22b3982
commit
9b68256cde
|
@ -31,7 +31,24 @@
|
||||||
|
|
||||||
#define OMAP_MMC_MAX_SLOTS 2
|
#define OMAP_MMC_MAX_SLOTS 2
|
||||||
|
|
||||||
#define OMAP_HSMMC_SUPPORTS_DUAL_VOLT BIT(1)
|
/*
|
||||||
|
* struct omap_mmc_dev_attr.flags possibilities
|
||||||
|
*
|
||||||
|
* OMAP_HSMMC_SUPPORTS_DUAL_VOLT: Some HSMMC controller instances can
|
||||||
|
* operate with either 1.8Vdc or 3.0Vdc card voltages; this flag
|
||||||
|
* should be set if this is the case. See for example Section 22.5.3
|
||||||
|
* "MMC/SD/SDIO1 Bus Voltage Selection" of the OMAP34xx Multimedia
|
||||||
|
* Device Silicon Revision 3.1.x Revision ZR (July 2011) (SWPU223R).
|
||||||
|
*
|
||||||
|
* OMAP_HSMMC_BROKEN_MULTIBLOCK_READ: Multiple-block read transfers
|
||||||
|
* don't work correctly on some MMC controller instances on some
|
||||||
|
* OMAP3 SoCs; this flag should be set if this is the case. See
|
||||||
|
* for example Advisory 2.1.1.128 "MMC: Multiple Block Read
|
||||||
|
* Operation Issue" in _OMAP3530/3525/3515/3503 Silicon Errata_
|
||||||
|
* Revision F (October 2010) (SPRZ278F).
|
||||||
|
*/
|
||||||
|
#define OMAP_HSMMC_SUPPORTS_DUAL_VOLT BIT(0)
|
||||||
|
#define OMAP_HSMMC_BROKEN_MULTIBLOCK_READ BIT(1)
|
||||||
|
|
||||||
struct omap_mmc_dev_attr {
|
struct omap_mmc_dev_attr {
|
||||||
u8 flags;
|
u8 flags;
|
||||||
|
|
|
@ -1942,6 +1942,10 @@ static int __init omap_hsmmc_probe(struct platform_device *pdev)
|
||||||
omap_hsmmc_context_save(host);
|
omap_hsmmc_context_save(host);
|
||||||
|
|
||||||
mmc->caps |= MMC_CAP_DISABLE;
|
mmc->caps |= MMC_CAP_DISABLE;
|
||||||
|
if (host->pdata->controller_flags & OMAP_HSMMC_BROKEN_MULTIBLOCK_READ) {
|
||||||
|
dev_info(&pdev->dev, "multiblock reads disabled due to 35xx erratum 2.1.1.128; MMC read performance may suffer\n");
|
||||||
|
mmc->caps2 |= MMC_CAP2_NO_MULTI_READ;
|
||||||
|
}
|
||||||
|
|
||||||
pm_runtime_enable(host->dev);
|
pm_runtime_enable(host->dev);
|
||||||
pm_runtime_get_sync(host->dev);
|
pm_runtime_get_sync(host->dev);
|
||||||
|
|
Loading…
Reference in New Issue