mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-19 03:15:00 +00:00
drivers: mmc: write protect single boot area
Add features to write protect single boot area rather than all boot areas. Signed-off-by: Ying-Chun Liu (PaulLiu) <paul.liu@linaro.org> Cc: Peng Fan <peng.fan@nxp.com> Cc: Jaehoon Chung <jh80.chung@samsung.com>
This commit is contained in:
parent
3363a73ddf
commit
19a29ff362
2 changed files with 43 additions and 0 deletions
|
@ -863,6 +863,33 @@ int mmc_boot_wp(struct mmc *mmc)
|
|||
return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BOOT_WP, 1);
|
||||
}
|
||||
|
||||
int mmc_boot_wp_single_partition(struct mmc *mmc, int partition)
|
||||
{
|
||||
u8 value;
|
||||
int ret;
|
||||
|
||||
value = EXT_CSD_BOOT_WP_B_PWR_WP_EN;
|
||||
|
||||
if (partition == 0) {
|
||||
value |= EXT_CSD_BOOT_WP_B_SEC_WP_SEL;
|
||||
ret = mmc_switch(mmc,
|
||||
EXT_CSD_CMD_SET_NORMAL,
|
||||
EXT_CSD_BOOT_WP,
|
||||
value);
|
||||
} else if (partition == 1) {
|
||||
value |= EXT_CSD_BOOT_WP_B_SEC_WP_SEL;
|
||||
value |= EXT_CSD_BOOT_WP_B_PWR_WP_SEC_SEL;
|
||||
ret = mmc_switch(mmc,
|
||||
EXT_CSD_CMD_SET_NORMAL,
|
||||
EXT_CSD_BOOT_WP,
|
||||
value);
|
||||
} else {
|
||||
ret = mmc_boot_wp(mmc);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if !CONFIG_IS_ENABLED(MMC_TINY)
|
||||
static int mmc_set_card_speed(struct mmc *mmc, enum bus_mode mode,
|
||||
bool hsdowngrade)
|
||||
|
|
|
@ -308,6 +308,10 @@ static inline bool mmc_is_tuning_cmd(uint cmdidx)
|
|||
|
||||
#define EXT_CSD_HS_CTRL_REL (1 << 0) /* host controlled WR_REL_SET */
|
||||
|
||||
#define EXT_CSD_BOOT_WP_B_SEC_WP_SEL (0x80) /* enable partition selector */
|
||||
#define EXT_CSD_BOOT_WP_B_PWR_WP_SEC_SEL (0x02) /* partition selector to protect */
|
||||
#define EXT_CSD_BOOT_WP_B_PWR_WP_EN (0x01) /* power-on write-protect */
|
||||
|
||||
#define EXT_CSD_WR_DATA_REL_USR (1 << 0) /* user data area WR_REL */
|
||||
#define EXT_CSD_WR_DATA_REL_GP(x) (1 << ((x)+1)) /* GP part (x+1) WR_REL */
|
||||
|
||||
|
@ -991,6 +995,18 @@ int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd);
|
|||
*/
|
||||
int mmc_boot_wp(struct mmc *mmc);
|
||||
|
||||
/**
|
||||
* mmc_boot_wp_single_partition() - set write protection to a boot partition.
|
||||
*
|
||||
* This function sets a single boot partition to protect and leave the
|
||||
* other partition writable.
|
||||
*
|
||||
* @param mmc the mmc device.
|
||||
* @param partition 0 - first boot partition, 1 - second boot partition.
|
||||
* @return 0 for success
|
||||
*/
|
||||
int mmc_boot_wp_single_partition(struct mmc *mmc, int partition);
|
||||
|
||||
static inline enum dma_data_direction mmc_get_dma_dir(struct mmc_data *data)
|
||||
{
|
||||
return data->flags & MMC_DATA_WRITE ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
|
||||
|
|
Loading…
Add table
Reference in a new issue