mmc: fsl_esdhc: always check write protect state

The QorIQ eSDHC on all platforms supports checking write protect
state through register bit. So check it always.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
This commit is contained in:
Yangbo Lu 2019-10-31 18:54:25 +08:00 committed by Peng Fan
parent 08197cb8df
commit 0cc127c424
2 changed files with 4 additions and 12 deletions

View file

@ -75,7 +75,6 @@ struct fsl_esdhc_plat {
* @mmc: mmc * @mmc: mmc
* Following is used when Driver Model is enabled for MMC * Following is used when Driver Model is enabled for MMC
* @dev: pointer for the device * @dev: pointer for the device
* @wp_enable: 1: enable checking wp; 0: no check
* @cd_gpio: gpio for card detection * @cd_gpio: gpio for card detection
* @wp_gpio: gpio for write protection * @wp_gpio: gpio for write protection
*/ */
@ -88,7 +87,6 @@ struct fsl_esdhc_priv {
struct mmc *mmc; struct mmc *mmc;
#endif #endif
struct udevice *dev; struct udevice *dev;
int wp_enable;
}; };
/* Return the XFERTYP flags for a given command and data packet */ /* Return the XFERTYP flags for a given command and data packet */
@ -231,12 +229,10 @@ static int esdhc_setup_data(struct fsl_esdhc_priv *priv, struct mmc *mmc,
#endif #endif
if (wml_value > WML_WR_WML_MAX) if (wml_value > WML_WR_WML_MAX)
wml_value = WML_WR_WML_MAX_VAL; wml_value = WML_WR_WML_MAX_VAL;
if (priv->wp_enable) {
if ((esdhc_read32(&regs->prsstat) & if (!(esdhc_read32(&regs->prsstat) & PRSSTAT_WPSPL)) {
PRSSTAT_WPSPL) == 0) { printf("Can not write to locked SD card.\n");
printf("\nThe SD card is locked. Can not write to a locked card.\n\n"); return -EINVAL;
return -ETIMEDOUT;
}
} }
esdhc_clrsetbits32(&regs->wml, WML_WR_WML_MASK, esdhc_clrsetbits32(&regs->wml, WML_WR_WML_MASK,
@ -722,7 +718,6 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg)
priv->esdhc_regs = (struct fsl_esdhc *)(unsigned long)(cfg->esdhc_base); priv->esdhc_regs = (struct fsl_esdhc *)(unsigned long)(cfg->esdhc_base);
priv->sdhc_clk = cfg->sdhc_clk; priv->sdhc_clk = cfg->sdhc_clk;
priv->wp_enable = cfg->wp_enable;
mmc_cfg = &plat->cfg; mmc_cfg = &plat->cfg;
@ -862,8 +857,6 @@ static int fsl_esdhc_probe(struct udevice *dev)
#endif #endif
priv->dev = dev; priv->dev = dev;
priv->wp_enable = 1;
if (IS_ENABLED(CONFIG_CLK)) { if (IS_ENABLED(CONFIG_CLK)) {
/* Assigned clock already set clock */ /* Assigned clock already set clock */
ret = clk_get_by_name(dev, "per", &priv->per_clk); ret = clk_get_by_name(dev, "per", &priv->per_clk);

View file

@ -168,7 +168,6 @@ struct fsl_esdhc_cfg {
phys_addr_t esdhc_base; phys_addr_t esdhc_base;
u32 sdhc_clk; u32 sdhc_clk;
u8 max_bus_width; u8 max_bus_width;
int wp_enable;
int vs18_enable; /* Use 1.8V if set to 1 */ int vs18_enable; /* Use 1.8V if set to 1 */
struct mmc_config cfg; struct mmc_config cfg;
}; };