mmc: Check support for TRIM operations
When secure/insecure TRIM operations are supported. When used as erase command argument it applies the erase operation to write blocks instead of erase groups. Signed-off-by: Loic Poulain <loic.poulain@linaro.org> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
This commit is contained in:
parent
7daa8dd59b
commit
eeb739a6fd
2 changed files with 7 additions and 0 deletions
|
@ -2432,6 +2432,9 @@ static int mmc_startup_v4(struct mmc *mmc)
|
|||
|
||||
mmc->wr_rel_set = ext_csd[EXT_CSD_WR_REL_SET];
|
||||
|
||||
mmc->can_trim =
|
||||
!!(ext_csd[EXT_CSD_SEC_FEATURE] & EXT_CSD_SEC_FEATURE_TRIM_EN);
|
||||
|
||||
return 0;
|
||||
error:
|
||||
if (mmc->ext_csd) {
|
||||
|
|
|
@ -241,6 +241,7 @@ static inline bool mmc_is_tuning_cmd(uint cmdidx)
|
|||
#define EXT_CSD_HC_WP_GRP_SIZE 221 /* RO */
|
||||
#define EXT_CSD_HC_ERASE_GRP_SIZE 224 /* RO */
|
||||
#define EXT_CSD_BOOT_MULT 226 /* RO */
|
||||
#define EXT_CSD_SEC_FEATURE 231 /* RO */
|
||||
#define EXT_CSD_GENERIC_CMD6_TIME 248 /* RO */
|
||||
#define EXT_CSD_BKOPS_SUPPORT 502 /* RO */
|
||||
|
||||
|
@ -315,6 +316,8 @@ static inline bool mmc_is_tuning_cmd(uint cmdidx)
|
|||
#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 */
|
||||
|
||||
#define EXT_CSD_SEC_FEATURE_TRIM_EN (1 << 4) /* Support secure & insecure trim */
|
||||
|
||||
#define R1_ILLEGAL_COMMAND (1 << 22)
|
||||
#define R1_APP_CMD (1 << 5)
|
||||
|
||||
|
@ -687,6 +690,7 @@ struct mmc {
|
|||
uint tran_speed;
|
||||
uint legacy_speed; /* speed for the legacy mode provided by the card */
|
||||
uint read_bl_len;
|
||||
bool can_trim;
|
||||
#if CONFIG_IS_ENABLED(MMC_WRITE)
|
||||
uint write_bl_len;
|
||||
uint erase_grp_size; /* in 512-byte sectors */
|
||||
|
|
Loading…
Reference in a new issue