diff options
-rw-r--r-- | drivers/mmc/mmc.c | 5 | ||||
-rw-r--r-- | include/mmc.h | 1 |
2 files changed, 4 insertions, 2 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c index 81938a7062..0ecdf2546c 100644 --- a/drivers/mmc/mmc.c +++ b/drivers/mmc/mmc.c @@ -1877,8 +1877,9 @@ int mmc_usr_power_on_wp(struct mmc *mmc, lbaint_t addr, unsigned int size) return -EINVAL; } - err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, - EXT_CSD_USER_WP, EXT_CSD_USER_PWR_WP_EN); + err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_USER_WP, + (ext_csd[EXT_CSD_USER_WP] & EXT_CSD_USER_WRITE_ONCE_MASK) | + EXT_CSD_USER_PWR_WP_EN); if (err) return err; diff --git a/include/mmc.h b/include/mmc.h index dd9e803616..b2ead11e37 100644 --- a/include/mmc.h +++ b/include/mmc.h @@ -237,6 +237,7 @@ #define EXT_CSD_USER_PWR_WP_DIS (1 << 3) /* disable power-on write protect*/ #define EXT_CSD_USER_PERM_WP_EN (1 << 2) /* enable permanent write protect */ #define EXT_CSD_USER_PWR_WP_EN (1 << 0) /* enable power-on write protect */ +#define EXT_CSD_USER_WRITE_ONCE_MASK (0xd0) /* mask the bits that can be written only once */ #define R1_ILLEGAL_COMMAND (1 << 22) #define R1_APP_CMD (1 << 5) |