mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
mmc: Handle switch error status bit in MMC card status
MMC switch command for unsupported feature (e.g. bus width) sets a switch error bit in card status. This bit should be checked, and, if it's set, no access with new controller settings should be performed. Acked-by: Pantelis Antoniou <panto@antoniou-consulting.com> Signed-off-by: Andrew Gabbasov <andrew_gabbasov@mentor.com>
This commit is contained in:
parent
d803fea576
commit
6b2221b008
2 changed files with 5 additions and 1 deletions
|
@ -150,6 +150,8 @@ int mmc_send_status(struct mmc *mmc, int timeout)
|
|||
#endif
|
||||
return TIMEOUT;
|
||||
}
|
||||
if (cmd.response[0] & MMC_STATUS_SWITCH_ERROR)
|
||||
return SWITCH_ERR;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -501,7 +503,7 @@ static int mmc_change_freq(struct mmc *mmc)
|
|||
err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
return err == SWITCH_ERR ? 0 : err;
|
||||
|
||||
/* Now check to see that it worked */
|
||||
err = mmc_send_ext_csd(mmc, ext_csd);
|
||||
|
|
|
@ -54,6 +54,7 @@
|
|||
#define COMM_ERR -18 /* Communications Error */
|
||||
#define TIMEOUT -19
|
||||
#define IN_PROGRESS -20 /* operation is in progress */
|
||||
#define SWITCH_ERR -21 /* Card reports failure to switch mode */
|
||||
|
||||
#define MMC_CMD_GO_IDLE_STATE 0
|
||||
#define MMC_CMD_SEND_OP_COND 1
|
||||
|
@ -109,6 +110,7 @@
|
|||
#define SECURE_ERASE 0x80000000
|
||||
|
||||
#define MMC_STATUS_MASK (~0x0206BF7F)
|
||||
#define MMC_STATUS_SWITCH_ERROR (1 << 7)
|
||||
#define MMC_STATUS_RDY_FOR_DATA (1 << 8)
|
||||
#define MMC_STATUS_CURR_STATE (0xf << 9)
|
||||
#define MMC_STATUS_ERROR (1 << 19)
|
||||
|
|
Loading…
Reference in a new issue