"...git@web.lueluesay.top:root/aufs5-standalone.git" did not exist on "4571d3b2f5eb025b248533f73e08cdcaf1e94ad0"
Commit b7e2599c authored by Saugata Das's avatar Saugata Das Committed by Chris Ball
Browse files

Add support for disabling 512B emulation



In this patch, we add a utility to disable emulation mode in eMMC-4.5.
This is done to increase the data sector size to 4KB.
Signed-off-by: default avatarSaugata Das <saugata.das@linaro.org>
Reviewed-by: default avatarSubhash Jadavani <subhashj@codeaurora.org>
Reviewed-by: default avatarNamjae Jeon <linkinjeon@gmail.com>
Reviewed-by: default avatarSubhash Jadavani <subhashj@codeaurora.org>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent 8ba4466a
...@@ -65,6 +65,11 @@ static struct Command commands[] = { ...@@ -65,6 +65,11 @@ static struct Command commands[] = {
"Set the eMMC writeprotect status of <device>.", "Set the eMMC writeprotect status of <device>.",
NULL NULL
}, },
{ do_disable_512B_emulation, -1,
"disable 512B emulation", "<device>\n"
"Set the eMMC data sector size to 4KB by disabling emulation on <device>.",
NULL
},
{ do_write_boot_en, -3, { do_write_boot_en, -3,
"bootpart enable", "<boot_partition> " "<send_ack> " "<device>\n" "bootpart enable", "<boot_partition> " "<send_ack> " "<device>\n"
"Enable the boot partition for the <device>.\nTo receive acknowledgment of boot from the card set <send_ack>\nto 1, else set it to 0.", "Enable the boot partition for the <device>.\nTo receive acknowledgment of boot from the card set <send_ack>\nto 1, else set it to 0.",
......
...@@ -34,8 +34,18 @@ ...@@ -34,8 +34,18 @@
#define EXT_CSD_BOOT_INFO 228 /* R/W */ #define EXT_CSD_BOOT_INFO 228 /* R/W */
#define EXT_CSD_PART_SWITCH_TIME 199 #define EXT_CSD_PART_SWITCH_TIME 199
#define EXT_CSD_BOOT_CFG 179 #define EXT_CSD_BOOT_CFG 179
#define EXT_CSD_BOOT_WP 173
#define EXT_CSD_PART_CONFIG 179 #define EXT_CSD_PART_CONFIG 179
#define EXT_CSD_BOOT_WP 173
#define EXT_CSD_WR_REL_PARAM 166
#define EXT_CSD_NATIVE_SECTOR_SIZE 63 /* R */
#define EXT_CSD_USE_NATIVE_SECTOR 62 /* R/W */
#define EXT_CSD_DATA_SECTOR_SIZE 61 /* R */
/*
* WR_REL_PARAM field definitions
*/
#define HS_CTRL_REL (1<<0)
#define EN_REL_WR (1<<2)
/* /*
* EXT_CSD field definitions * EXT_CSD field definitions
......
...@@ -170,6 +170,50 @@ int do_writeprotect_set(int nargs, char **argv) ...@@ -170,6 +170,50 @@ int do_writeprotect_set(int nargs, char **argv)
return ret; return ret;
} }
int do_disable_512B_emulation(int nargs, char **argv)
{
__u8 ext_csd[512], native_sector_size, data_sector_size, wr_rel_param;
int fd, ret;
char *device;
CHECK(nargs != 2, "Usage: mmc disable 512B emulation </path/to/mmcblkX>\n", exit(1));
device = argv[1];
fd = open(device, O_RDWR);
if (fd < 0) {
perror("open");
exit(1);
}
ret = read_extcsd(fd, ext_csd);
if (ret) {
fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
exit(1);
}
wr_rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
native_sector_size = ext_csd[EXT_CSD_NATIVE_SECTOR_SIZE];
data_sector_size = ext_csd[EXT_CSD_DATA_SECTOR_SIZE];
if (native_sector_size && !data_sector_size &&
(wr_rel_param & EN_REL_WR)) {
ret = write_extcsd_value(fd, EXT_CSD_USE_NATIVE_SECTOR, 1);
if (ret) {
fprintf(stderr, "Could not write 0x%02x to EXT_CSD[%d] in %s\n",
1, EXT_CSD_BOOT_WP, device);
exit(1);
}
printf("MMC disable 512B emulation successful. Now reset the device to switch to 4KB native sector mode.\n");
} else if (native_sector_size && data_sector_size) {
printf("MMC 512B emulation mode is already disabled; doing nothing.\n");
} else {
printf("MMC does not support disabling 512B emulation mode.\n");
}
return ret;
}
int do_write_boot_en(int nargs, char **argv) int do_write_boot_en(int nargs, char **argv)
{ {
__u8 ext_csd[512]; __u8 ext_csd[512];
...@@ -236,7 +280,6 @@ int do_write_boot_en(int nargs, char **argv) ...@@ -236,7 +280,6 @@ int do_write_boot_en(int nargs, char **argv)
return ret; return ret;
} }
int do_read_extcsd(int nargs, char **argv) int do_read_extcsd(int nargs, char **argv)
{ {
__u8 ext_csd[512], ext_csd_rev, reg; __u8 ext_csd[512], ext_csd_rev, reg;
......
...@@ -19,4 +19,5 @@ int do_read_extcsd(int nargs, char **argv); ...@@ -19,4 +19,5 @@ int do_read_extcsd(int nargs, char **argv);
int do_write_extcsd(int nargs, char **argv); int do_write_extcsd(int nargs, char **argv);
int do_writeprotect_get(int nargs, char **argv); int do_writeprotect_get(int nargs, char **argv);
int do_writeprotect_set(int nargs, char **argv); int do_writeprotect_set(int nargs, char **argv);
int do_disable_512B_emulation(int nargs, char **argv);
int do_write_boot_en(int nargs, char **argv); int do_write_boot_en(int nargs, char **argv);
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment