mmc: add bkops-enable command
Add new command that provides possibility to enable the background operations handshake functionality (BKOPS_EN, EXT_CSD byte [163]) on eMMC devices. This is an optional feature of eMMCs, the setting is write-once. The command must be explicitly taken into use with CONFIG_CMD_BKOPS_ENABLE. Signed-off-by: Tomas Melin <tomas.melin@vaisala.com>
This commit is contained in:
committed by
Jaehoon Chung
parent
f0ecfc5e7e
commit
cd3d48807d
@@ -1817,3 +1817,37 @@ int mmc_initialize(bd_t *bis)
|
||||
mmc_do_preinit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CMD_BKOPS_ENABLE
|
||||
int mmc_set_bkops_enable(struct mmc *mmc)
|
||||
{
|
||||
int err;
|
||||
ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
|
||||
|
||||
err = mmc_send_ext_csd(mmc, ext_csd);
|
||||
if (err) {
|
||||
puts("Could not get ext_csd register values\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
if (!(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) {
|
||||
puts("Background operations not supported on device\n");
|
||||
return -EMEDIUMTYPE;
|
||||
}
|
||||
|
||||
if (ext_csd[EXT_CSD_BKOPS_EN] & 0x1) {
|
||||
puts("Background operations already enabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BKOPS_EN, 1);
|
||||
if (err) {
|
||||
puts("Failed to enable manual background operations\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
puts("Enabled manual background operations\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user