Home | History | Annotate | Download | only in mmc-utils

Lines Matching full:ext_csd

38 int read_extcsd(int fd, __u8 *ext_csd)
43 memset(ext_csd, 0, sizeof(__u8) * 512);
50 mmc_ioc_cmd_set_data(idata, ext_csd);
99 void print_writeprotect_status(__u8 *ext_csd)
102 __u8 ext_csd_rev = ext_csd[EXT_CSD_REV];
107 " [BOOT_WP_STATUS]: 0x%02x\n", ext_csd[174]);
109 reg = ext_csd[EXT_CSD_BOOT_WP];
135 __u8 ext_csd[512];
150 ret = read_extcsd(fd, ext_csd);
152 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
156 print_writeprotect_status(ext_csd);
163 __u8 ext_csd[512], value;
178 ret = read_extcsd(fd, ext_csd);
180 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
184 value = ext_csd[EXT_CSD_BOOT_WP] |
189 "EXT_CSD[%d] in %s\n",
199 __u8 ext_csd[512], native_sector_size, data_sector_size, wr_rel_param;
212 ret = read_extcsd(fd, ext_csd);
214 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
218 wr_rel_param = ext_csd[EXT_CSD_WR_REL_PARAM];
219 native_sector_size = ext_csd[EXT_CSD_NATIVE_SECTOR_SIZE];
220 data_sector_size = ext_csd[EXT_CSD_DATA_SECTOR_SIZE];
227 fprintf(stderr, "Could not write 0x%02x to EXT_CSD[%d] in %s\n",
243 __u8 ext_csd[512];
267 ret = read_extcsd(fd, ext_csd);
269 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
273 value = ext_csd[EXT_CSD_PART_CONFIG];
300 "EXT_CSD[%d] in %s\n",
309 __u8 ext_csd[512];
357 ret = read_extcsd(fd, ext_csd);
359 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
362 printf("Changing ext_csd[BOOT_BUS_CONDITIONS] from 0x%02x to 0x%02x\n",
363 ext_csd[EXT_CSD_BOOT_BUS_CONDITIONS], value);
368 "EXT_CSD[%d] in %s\n",
378 __u8 ext_csd[512];
393 ret = read_extcsd(fd, ext_csd);
395 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
399 if ((ext_csd[EXT_CSD_RST_N_FUNCTION] & EXT_CSD_RST_N_EN_MASK) ==
406 if ((ext_csd[EXT_CSD_RST_N_FUNCTION] & EXT_CSD_RST_N_EN_MASK) ==
417 "Could not write 0x%02x to EXT_CSD[%d] in %s\n",
437 __u8 ext_csd[512], value = 0;
452 ret = read_extcsd(fd, ext_csd);
454 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
458 if (!(ext_csd[EXT_CSD_BKOPS_SUPPORT] & 0x1)) {
465 fprintf(stderr, "Could not write 0x%02x to EXT_CSD[%d] in %s\n",
501 unsigned int get_sector_count(__u8 *ext_csd)
503 return (ext_csd[EXT_CSD_SEC_COUNT_3] << 24) |
504 (ext_csd[EXT_CSD_SEC_COUNT_2] << 16) |
505 (ext_csd[EXT_CSD_SEC_COUNT_1] << 8) |
506 ext_csd[EXT_CSD_SEC_COUNT_0];
509 int is_blockaddresed(__u8 *ext_csd)
511 unsigned int sectors = get_sector_count(ext_csd);
516 unsigned int get_hc_wp_grp_size(__u8 *ext_csd)
518 return ext_csd[221];
521 unsigned int get_hc_erase_grp_size(__u8 *ext_csd)
523 return ext_csd[224];
542 "EXT_CSD[%d] in %s\n",
573 __u8 ext_csd[512];
581 ret = read_extcsd(fd, ext_csd);
583 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
586 wp_sz = get_hc_wp_grp_size(ext_csd);
587 erase_sz = get_hc_erase_grp_size(ext_csd);
589 regl = (ext_csd[EXT_CSD_GP_SIZE_MULT_4_2] << 16) |
590 (ext_csd[EXT_CSD_GP_SIZE_MULT_4_1] << 8) |
591 ext_csd[EXT_CSD_GP_SIZE_MULT_4_0];
593 if (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & EXT_CSD_ENH_4) {
599 regl = (ext_csd[EXT_CSD_GP_SIZE_MULT_3_2] << 16) |
600 (ext_csd[EXT_CSD_GP_SIZE_MULT_3_1] << 8) |
601 ext_csd[EXT_CSD_GP_SIZE_MULT_3_0];
603 if (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & EXT_CSD_ENH_3) {
609 regl = (ext_csd[EXT_CSD_GP_SIZE_MULT_2_2] << 16) |
610 (ext_csd[EXT_CSD_GP_SIZE_MULT_2_1] << 8) |
611 ext_csd[EXT_CSD_GP_SIZE_MULT_2_0];
613 if (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & EXT_CSD_ENH_2) {
619 regl = (ext_csd[EXT_CSD_GP_SIZE_MULT_1_2] << 16) |
620 (ext_csd[EXT_CSD_GP_SIZE_MULT_1_1] << 8) |
621 ext_csd[EXT_CSD_GP_SIZE_MULT_1_0];
623 if (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & EXT_CSD_ENH_1) {
629 regl = (ext_csd[EXT_CSD_ENH_SIZE_MULT_2] << 16) |
630 (ext_csd[EXT_CSD_ENH_SIZE_MULT_1] << 8) |
631 ext_csd[EXT_CSD_ENH_SIZE_MULT_0];
633 if (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & EXT_CSD_ENH_USR) {
639 regl = (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT_2] << 16) |
640 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT_1] << 8) |
641 ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT_0];
651 total_sz = get_sector_count(ext_csd) / 2;
667 __u8 ext_csd[512];
704 ret = read_extcsd(fd, ext_csd);
706 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
711 if (ext_csd[EXT_CSD_PARTITION_SETTING_COMPLETED]) {
716 align = 512l * get_hc_wp_grp_size(ext_csd) * get_hc_erase_grp_size(ext_csd);
722 fprintf(stderr, "Could not write 0x1 to EXT_CSD[%d] in %s\n",
731 fprintf(stderr, "Could not write 0x%02x to EXT_CSD[%d] in %s\n",
739 fprintf(stderr, "Could not write 0x%02x to EXT_CSD[%d] in %s\n",
747 fprintf(stderr, "Could not write 0x%02x to EXT_CSD[%d] in %s\n",
752 value = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE];
760 fprintf(stderr, "Could not write EXT_CSD_ENH_%x to EXT_CSD[%d] in %s\n",
766 value = ext_csd[address];
774 fprintf(stderr, "Could not write 0x%x to EXT_CSD[%d] in %s\n",
792 __u8 ext_csd[512];
815 ret = read_extcsd(fd, ext_csd);
817 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
822 if (!(ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & EXT_CSD_ENH_ATTRIBUTE_EN))
829 if (ext_csd[EXT_CSD_PARTITION_SETTING_COMPLETED])
835 align = 512l * get_hc_wp_grp_size(ext_csd) * get_hc_erase_grp_size(ext_csd);
839 enh_start_addr = start_kib * 1024 / (is_blockaddresed(ext_csd) ? 512 : 1);
847 "EXT_CSD[%d] in %s\n",
857 "EXT_CSD[%d] in %s\n", value,
865 "EXT_CSD[%d] in %s\n", value,
873 "EXT_CSD[%d] in %s\n", value,
881 "EXT_CSD[%d] in %s\n", value,
890 "EXT_CSD[%d] in %s\n", value,
898 "EXT_CSD[%d] in %s\n", value,
906 "EXT_CSD[%d] in %s\n", value,
910 value = ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] | EXT_CSD_ENH_USR;
914 "EXT_CSD[%d] in %s\n",
934 __u8 ext_csd[512];
956 ret = read_extcsd(fd, ext_csd);
958 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
963 if (ext_csd[EXT_CSD_PARTITION_SETTING_COMPLETED])
970 if (!(ext_csd[EXT_CSD_WR_REL_PARAM] & HS_CTRL_REL)) {
976 value = ext_csd[EXT_CSD_WR_REL_SET] | (1<<partition);
979 fprintf(stderr, "Could not write 0x%02x to EXT_CSD[%d] in %s\n",
995 __u8 ext_csd[512], ext_csd_rev, reg;
1012 ret = read_extcsd(fd, ext_csd);
1014 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
1018 ext_csd_rev = ext_csd[EXT_CSD_REV];
1050 goto out_free; /* No ext_csd */
1056 reg = ext_csd[EXT_CSD_S_CMD_SET];
1061 reg = ext_csd[EXT_CSD_HPI_FEATURE];
1071 ext_csd[502]);
1075 ext_csd[501]);
1077 ext_csd[500]);
1079 ext_csd[499]);
1082 ext_csd[498]);
1084 ext_csd[497]);
1086 " [CONTEXT_CAPABILITIES: 0x%02x]\n", ext_csd[496]);
1088 ext_csd[495]);
1090 " [EXT_SUPPORT: 0x%02x]\n", ext_csd[494]);
1092 ext_csd[248]);
1094 ext_csd[247]);
1096 ext_csd[249] << 0 | (ext_csd[250] << 8) |
1097 (ext_csd[251] << 16) | (ext_csd[252] << 24));
1104 " [BKOPS_STATUS: 0x%02x]\n", ext_csd[246]);
1109 " [INI_TIMEOUT_AP: 0x%02x]\n", ext_csd[241]);
1113 " [PWR_CL_DDR_52_360: 0x%02x]\n", ext_csd[239]);
1115 " [PWR_CL_DDR_52_195: 0x%02x]\n", ext_csd[238]);
1121 " [PWR_CL_200_360: 0x%02x]\n", ext_csd[237]);
1123 " [PWR_CL_200_195: 0x%02x]\n", ext_csd[236]);
1126 printf(" [MIN_PERF_DDR_W_8_52: 0x%02x]\n", ext_csd[235]);
1127 printf(" [MIN_PERF_DDR_R_8_52: 0x%02x]\n", ext_csd[234]);
1129 printf("TRIM Multiplier [TRIM_MULT: 0x%02x]\n", ext_csd[232]);
1131 ext_csd[231]);
1135 ext_csd[230]);
1137 ext_csd[229]);
1139 reg = ext_csd[EXT_CSD_BOOT_INFO];
1149 printf("Boot partition size [BOOT_SIZE_MULTI: 0x%02x]\n", ext_csd[226]);
1150 printf("Access size [ACC_SIZE: 0x%02x]\n", ext_csd[225]);
1152 reg = get_hc_erase_grp_size(ext_csd);
1158 ext_csd[223]);
1160 ext_csd[222]);
1162 reg = get_hc_wp_grp_size(ext_csd);
1165 printf(" i.e. %lu KiB\n", 512l * get_hc_erase_grp_size(ext_csd) * reg);
1167 printf("Sleep current (VCC) [S_C_VCC: 0x%02x]\n", ext_csd[220]);
1168 printf("Sleep current (VCCQ) [S_C_VCCQ: 0x%02x]\n", ext_csd[219]);
1170 printf("Sleep/awake timeout [S_A_TIMEOUT: 0x%02x]\n", ext_csd[217]);
1173 unsigned int sectors = get_sector_count(ext_csd);
1175 if (is_blockaddresed(ext_csd))
1182 printf(" [MIN_PERF_W_8_52: 0x%02x]\n", ext_csd[210]);
1183 printf(" [MIN_PERF_R_8_52: 0x%02x]\n", ext_csd[209]);
1184 printf(" [MIN_PERF_W_8_26_4_52: 0x%02x]\n", ext_csd[208]);
1185 printf(" [MIN_PERF_R_8_26_4_52: 0x%02x]\n", ext_csd[207]);
1187 printf(" [MIN_PERF_W_4_26: 0x%02x]\n", ext_csd[206]);
1188 printf(" [MIN_PERF_R_4_26: 0x%02x]\n", ext_csd[205]);
1191 printf(" [PWR_CL_26_360: 0x%02x]\n", ext_csd[203]);
1192 printf(" [PWR_CL_52_360: 0x%02x]\n", ext_csd[202]);
1193 printf(" [PWR_CL_26_195: 0x%02x]\n", ext_csd[201]);
1194 printf(" [PWR_CL_52_195: 0x%02x]\n", ext_csd[200]);
1199 "[PARTITION_SWITCH_TIME: 0x%02x]\n", ext_csd[199]);
1201 " [OUT_OF_INTERRUPT_TIME: 0x%02x]\n", ext_csd[198]);
1209 ext_csd[197]);
1212 reg = ext_csd[196];
1221 printf("CSD structure version [CSD_STRUCTURE: 0x%02x]\n", ext_csd[194]);
1222 /* ext_csd_rev = ext_csd[EXT_CSD_REV] (already done!!!) */
1223 printf("Command set [CMD_SET: 0x%02x]\n", ext_csd[191]);
1224 printf("Command set revision [CMD_SET_REV: 0x%02x]\n", ext_csd[189]);
1225 printf("Power class [POWER_CLASS: 0x%02x]\n", ext_csd[187]);
1227 ext_csd[185]);
1228 /* bus_width: ext_csd[183] not readable */
1230 ext_csd[181]);
1231 reg = ext_csd[EXT_CSD_BOOT_CFG];
1267 ext_csd[178]);
1269 ext_csd[177]);
1271 " [ERASE_GROUP_DEF: 0x%02x]\n", ext_csd[EXT_CSD_ERASE_GROUP_DEF]);
1273 print_writeprotect_status(ext_csd);
1278 " [USER_WP]: 0x%02x\n", ext_csd[171]);
1280 printf("FW configuration [FW_CONFIG]: 0x%02x\n", ext_csd[169]);
1281 printf("RPMB Size [RPMB_SIZE_MULT]: 0x%02x\n", ext_csd[168]);
1283 reg = ext_csd[EXT_CSD_WR_REL_SET];
1299 reg = ext_csd[EXT_CSD_WR_REL_PARAM];
1308 /* sanitize_start ext_csd[165]]: not readable
1309 * bkops_start ext_csd[164]]: only writable */
1311 " [BKOPS_EN]: 0x%02x\n", ext_csd[163]);
1313 " [RST_N_FUNCTION]: 0x%02x\n", ext_csd[162]);
1314 printf("HPI management [HPI_MGMT]: 0x%02x\n", ext_csd[161]);
1315 reg = ext_csd[EXT_CSD_PARTITIONING_SUPPORT];
1327 regl = (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT_2] << 16) |
1328 (ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT_1] << 8) |
1329 ext_csd[EXT_CSD_MAX_ENH_SIZE_MULT_0];
1333 unsigned int wp_sz = get_hc_wp_grp_size(ext_csd);
1334 unsigned int erase_sz = get_hc_erase_grp_size(ext_csd);
1338 ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE]);
1339 reg = ext_csd[EXT_CSD_PARTITION_SETTING_COMPLETED];
1349 " [GP_SIZE_MULT_4]: 0x%06x\n", (ext_csd[154] << 16) |
1350 (ext_csd[153] << 8) | ext_csd[152]);
1351 printf(" [GP_SIZE_MULT_3]: 0x%06x\n", (ext_csd[151] << 16) |
1352 (ext_csd[150] << 8) | ext_csd[149]);
1353 printf(" [GP_SIZE_MULT_2]: 0x%06x\n", (ext_csd[148] << 16) |
1354 (ext_csd[147] << 8) | ext_csd[146]);
1355 printf(" [GP_SIZE_MULT_1]: 0x%06x\n", (ext_csd[145] << 16) |
1356 (ext_csd[144] << 8) | ext_csd[143]);
1358 regl = (ext_csd[EXT_CSD_ENH_SIZE_MULT_2] << 16) |
1359 (ext_csd[EXT_CSD_ENH_SIZE_MULT_1] << 8) |
1360 ext_csd[EXT_CSD_ENH_SIZE_MULT_0];
1364 get_hc_erase_grp_size(ext_csd) *
1365 get_hc_wp_grp_size(ext_csd));
1367 regl = (ext_csd[EXT_CSD_ENH_START_ADDR_3] << 24) |
1368 (ext_csd[EXT_CSD_ENH_START_ADDR_2] << 16) |
1369 (ext_csd[EXT_CSD_ENH_START_ADDR_1] << 8) |
1370 ext_csd[EXT_CSD_ENH_START_ADDR_0];
1373 printf(" i.e. %lu bytes offset\n", (is_blockaddresed(ext_csd) ?
1378 " [SEC_BAD_BLK_MGMNT]: 0x%02x\n", ext_csd[134]);
1384 /* tcase_support ext_csd[132] not readable */
1386 ext_csd[131]);
1389 ext_csd[130]);
1394 j, ext_csd[j]);
1397 ext_csd[63]);
1399 ext_csd[62]);
1400 printf("Sector size [DATA_SECTOR_SIZE]: 0x%02x\n", ext_csd[61]);
1403 ext_csd[60]);
1405 ext_csd[59]);
1407 "[DYNCAP_NEEDED]: 0x%02x\n", ext_csd[58]);
1410 (ext_csd[57] << 8) | ext_csd[56]);
1413 (ext_csd[55] << 8) | ext_csd[54]);
1416 (ext_csd[53] << 8) | ext_csd[52]);
1420 " [CONTEXT_CONF[%d]]: 0x%02x\n", j, ext_csd[j]);
1423 " [PACKED_COMMAND_STATUS]: 0x%02x\n", ext_csd[36]);
1425 " [PACKED_FAILURE_INDEX]: 0x%02x\n", ext_csd[35]);
1427 " [POWER_OFF_NOTIFICATION]: 0x%02x\n", ext_csd[34]);
1429 " [CACHE_CTRL]: 0x%02x\n", ext_csd[33]);
1430 /* flush_cache ext_csd[32] not readable */
1456 fprintf(stderr, "Could not write 0x%02x to EXT_CSD[%d] in %s\n",
1978 __u8 ext_csd[512];
1993 ret = read_extcsd(fd, ext_csd);
1995 fprintf(stderr, "Could not read EXT_CSD from %s\n", device);
1999 if (ext_csd[EXT_CSD_REV] < EXT_CSD_REV_V4_5) {
2007 if (!(ext_csd[EXT_CSD_CACHE_SIZE_3] ||
2008 ext_csd[EXT_CSD_CACHE_SIZE_2] ||
2009 ext_csd[EXT_CSD_CACHE_SIZE_1] ||
2010 ext_csd[EXT_CSD_CACHE_SIZE_0])) {
2019 "Could not write 0x%02x to EXT_CSD[%d] in %s\n",