mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 10:04:12 +08:00
MMC core:
- Don't access RPMB partitions for normal read/write - Fix hibernation restore sequence MMC host: - dw_mmc: Fix card detection for non removable cards - dw_mmc: Fix sglist issue in 32-bit mode - sh_mmcif: Fix timeout value for command request -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJVTGKzAAoJEP4mhCVzWIwpD74QAJzWUVv+wUMAuJy8SvlMwWBD tdObKWEdEz7jAQ1VVSqwOVlk+E/0sroBfA2vEie1Hsm+qt02r8AR1XmYJyG6nkxr BuIP0fnGVbH4sYnqa3CQEUI4AzYubryj6oDnZuulrxEfK9cbEGYJ7XWOvGVtCA5e jvyzty1/8c/vyTDaUUvqFTXIO8fLhKphpfvKUv7N13vnHPTtQShzQw8cyqQdem+F oYnyRrQEbdUbopQUOuc2AmveYAqCFXpq7SNkWa3bApzdLG9vzC9ObxJ4+EQYg/qx wuH49vbb04sTdWuwLBAXRmhOzjAxHCg7BT5dSvo7nlkIhp+PEiiHSzSmmd4Z+cYx nofrBEJI/16V7m672KILnvrvc4X/Q6h3a3Qw7k5bFlf+w70YGcE+uF1B9GnLfCrL bQIjOdP/kv1w62zgPKdVay07OZGX2ZVs8hoSLsWz8YM0kPwibUc2YojpLmUnziop xb066vWc4g120ecs3epu+klc4DbJps6SQXDgrcUbk/iqpVYg5E9sd0ZqdxdiqZZw ByDUCwcY++qkxWCz3JcGJxVcqeXK3kmBa1lyfgL6tYg529nEkHV9SriRy9Kky1Um j+3KNOWq3/xnuXm34XTcALP3x/i3mai7m7l9e7DuCRX36vsc3VXq1lXkc/NOZECV FyD3mli2FyWWomb14r3b =zel9 -----END PGP SIGNATURE----- Merge tag 'mmc-4.1-rc2' of git://git.linaro.org/people/ulf.hansson/mmc Pull MMC fixes from Ulf Hansson: "MMC core: - Don't access RPMB partitions for normal read/write - Fix hibernation restore sequence MMC host: - dw_mmc: Fix card detection for non removable cards - dw_mmc: Fix sglist issue in 32-bit mode - sh_mmcif: Fix timeout value for command request" * tag 'mmc-4.1-rc2' of git://git.linaro.org/people/ulf.hansson/mmc: mmc: dw_mmc: dw_mci_get_cd check MMC_CAP_NONREMOVABLE mmc: dw_mmc: init desc in dw_mci_idmac_init mmc: card: Don't access RPMB partitions for normal read/write mmc: sh_mmcif: Fix timeout value for command request mmc: core: add missing pm event in mmc_pm_notify to fix hib restore
This commit is contained in:
commit
a8a0811314
@ -1029,6 +1029,18 @@ static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type)
|
||||
md->reset_done &= ~type;
|
||||
}
|
||||
|
||||
int mmc_access_rpmb(struct mmc_queue *mq)
|
||||
{
|
||||
struct mmc_blk_data *md = mq->data;
|
||||
/*
|
||||
* If this is a RPMB partition access, return ture
|
||||
*/
|
||||
if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req)
|
||||
{
|
||||
struct mmc_blk_data *md = mq->data;
|
||||
|
@ -38,7 +38,7 @@ static int mmc_prep_request(struct request_queue *q, struct request *req)
|
||||
return BLKPREP_KILL;
|
||||
}
|
||||
|
||||
if (mq && mmc_card_removed(mq->card))
|
||||
if (mq && (mmc_card_removed(mq->card) || mmc_access_rpmb(mq)))
|
||||
return BLKPREP_KILL;
|
||||
|
||||
req->cmd_flags |= REQ_DONTPREP;
|
||||
|
@ -73,4 +73,6 @@ extern void mmc_queue_bounce_post(struct mmc_queue_req *);
|
||||
extern int mmc_packed_init(struct mmc_queue *, struct mmc_card *);
|
||||
extern void mmc_packed_clean(struct mmc_queue *);
|
||||
|
||||
extern int mmc_access_rpmb(struct mmc_queue *);
|
||||
|
||||
#endif
|
||||
|
@ -2651,6 +2651,7 @@ int mmc_pm_notify(struct notifier_block *notify_block,
|
||||
switch (mode) {
|
||||
case PM_HIBERNATION_PREPARE:
|
||||
case PM_SUSPEND_PREPARE:
|
||||
case PM_RESTORE_PREPARE:
|
||||
spin_lock_irqsave(&host->lock, flags);
|
||||
host->rescan_disable = 1;
|
||||
spin_unlock_irqrestore(&host->lock, flags);
|
||||
|
@ -589,9 +589,11 @@ static int dw_mci_idmac_init(struct dw_mci *host)
|
||||
host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc);
|
||||
|
||||
/* Forward link the descriptor list */
|
||||
for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++)
|
||||
for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++) {
|
||||
p->des3 = cpu_to_le32(host->sg_dma +
|
||||
(sizeof(struct idmac_desc) * (i + 1)));
|
||||
p->des1 = 0;
|
||||
}
|
||||
|
||||
/* Set the last descriptor as the end-of-ring descriptor */
|
||||
p->des3 = cpu_to_le32(host->sg_dma);
|
||||
@ -1300,7 +1302,8 @@ static int dw_mci_get_cd(struct mmc_host *mmc)
|
||||
int gpio_cd = mmc_gpio_get_cd(mmc);
|
||||
|
||||
/* Use platform get_cd function, else try onboard card detect */
|
||||
if (brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION)
|
||||
if ((brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION) ||
|
||||
(mmc->caps & MMC_CAP_NONREMOVABLE))
|
||||
present = 1;
|
||||
else if (!IS_ERR_VALUE(gpio_cd))
|
||||
present = gpio_cd;
|
||||
|
@ -1408,7 +1408,7 @@ static int sh_mmcif_probe(struct platform_device *pdev)
|
||||
host = mmc_priv(mmc);
|
||||
host->mmc = mmc;
|
||||
host->addr = reg;
|
||||
host->timeout = msecs_to_jiffies(1000);
|
||||
host->timeout = msecs_to_jiffies(10000);
|
||||
host->ccs_enable = !pd || !pd->ccs_unsupported;
|
||||
host->clk_ctrl2_enable = pd && pd->clk_ctrl2_present;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user