mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-25 14:56:03 +00:00
mmc: allow use of hardware partition names for mmc partconf
eMMC v4+ devices have hardware partitions that are accessed via the PARTITION_CONFIG (Extended CSD Register 179) PARTITION_ACCESS and BOOT_PARTITION_ENABLE fields defined as: bit 5:3: BOOT_PARTITION_ENABLE 0x0: Device not boot enabled (default) 0x1: Boot Area partition 1 enabled for boot 0x2: Boot Area partition 2 enabled for boot 0x3-0x6: Reserved 0x7: User area enabled for boot bit 2:0 PARTITION_ACCESS 0x0: No access to boot partition (default) 0x1: Boot Area partition 1 0x2: Boot Area partition 2 0x3: Replay Protected Memory Block (RPMB) 0x4: Access to General Purpose partition 1 0x5: Access to General Purpose partition 2 0x6: Access to General Purpose partition 3 0x7: Access to General Purpose partition 4 Add char arrays to provide names for these values. Use these names which displaying or setting the PARTITION_CONFIG register via the 'mmc partconf' command. Before: u-boot=> mmc partconf 2 1 1 0 && mmc partconf 2 EXT_CSD[179], PARTITION_CONFIG: BOOT_ACK: 0x1 BOOT_PARTITION_ENABLE: 0x2 PARTITION_ACCESS: 0x0 After: u-boot=> mmc partconf 2 1 1 0 && mmc partconf 2 EXT_CSD[179], PARTITION_CONFIG: BOOT_ACK: 0x1 BOOT_PARTITION_ENABLE: 0x1 (boot0) PARTITION_ACCESS: 0x0 (user) u-boot=> mmc partconf 2 1 boot1 0 && mmc partconf 2 EXT_CSD[179], PARTITION_CONFIG: BOOT_ACK: 0x1 BOOT_PARTITION_ENABLE: 0x2 (boot1) PARTITION_ACCESS: 0x0 (user) Signed-off-by: Tim Harvey <tharvey@gateworks.com>
This commit is contained in:
parent
8746aa0f5d
commit
150481e5ba
3 changed files with 64 additions and 4 deletions
27
cmd/mmc.c
27
cmd/mmc.c
|
@ -14,6 +14,7 @@
|
|||
#include <part.h>
|
||||
#include <sparse_format.h>
|
||||
#include <image-sparse.h>
|
||||
#include <linux/ctype.h>
|
||||
|
||||
static int curr_device = -1;
|
||||
|
||||
|
@ -918,8 +919,9 @@ static int mmc_partconf_print(struct mmc *mmc, const char *varname)
|
|||
|
||||
printf("EXT_CSD[179], PARTITION_CONFIG:\n"
|
||||
"BOOT_ACK: 0x%x\n"
|
||||
"BOOT_PARTITION_ENABLE: 0x%x\n"
|
||||
"PARTITION_ACCESS: 0x%x\n", ack, part, access);
|
||||
"BOOT_PARTITION_ENABLE: 0x%x (%s)\n"
|
||||
"PARTITION_ACCESS: 0x%x (%s)\n", ack, part, emmc_boot_part_names[part],
|
||||
access, emmc_hwpart_names[access]);
|
||||
|
||||
return CMD_RET_SUCCESS;
|
||||
}
|
||||
|
@ -948,9 +950,26 @@ static int do_mmc_partconf(struct cmd_tbl *cmdtp, int flag,
|
|||
if (argc == 2 || argc == 3)
|
||||
return mmc_partconf_print(mmc, cmd_arg2(argc, argv));
|
||||
|
||||
/* BOOT_ACK */
|
||||
ack = dectoul(argv[2], NULL);
|
||||
part_num = dectoul(argv[3], NULL);
|
||||
access = dectoul(argv[4], NULL);
|
||||
/* BOOT_PARTITION_ENABLE */
|
||||
if (!isdigit(*argv[3])) {
|
||||
for (part_num = ARRAY_SIZE(emmc_boot_part_names) - 1; part_num > 0; part_num--) {
|
||||
if (!strcmp(argv[3], emmc_boot_part_names[part_num]))
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
part_num = dectoul(argv[3], NULL);
|
||||
}
|
||||
/* PARTITION_ACCESS */
|
||||
if (!isdigit(*argv[4])) {
|
||||
for (access = ARRAY_SIZE(emmc_hwpart_names) - 1; access > 0; access--) {
|
||||
if (!strcmp(argv[4], emmc_hwpart_names[access]))
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
access = dectoul(argv[4], NULL);
|
||||
}
|
||||
|
||||
/* acknowledge to be sent during boot operation */
|
||||
ret = mmc_set_part_conf(mmc, ack, part_num, access);
|
||||
|
|
|
@ -29,6 +29,41 @@
|
|||
|
||||
#define DEFAULT_CMD6_TIMEOUT_MS 500
|
||||
|
||||
/**
|
||||
* names of emmc BOOT_PARTITION_ENABLE values
|
||||
*
|
||||
* Boot Area Partitions - name consistent with Linux
|
||||
*/
|
||||
const char *emmc_boot_part_names[] = {
|
||||
"default", /* EMMC_BOOT_PART_DEFAULT */
|
||||
"boot0", /* EMMC_BOOT_PART_BOOT1 */
|
||||
"boot1", /* EMMC_BOOT_PART_BOOT2 */
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"user", /* EMMC_BOOT_PART_USER */
|
||||
};
|
||||
|
||||
/**
|
||||
* names of emmc 'hardware partitions' consistent with:
|
||||
* - value used in mmc_switch()
|
||||
* - value used by PARTITION_CONFIG PARTITION_ACCESS field
|
||||
*
|
||||
* Boot Area Partitions - name consistent with Linux
|
||||
* General Perpose Partitions - name consistent with 'mmc hwpartition' usage
|
||||
*/
|
||||
const char *emmc_hwpart_names[] = {
|
||||
"user", /* EMMC_HWPART_DEFAULT */
|
||||
"boot0", /* EMMC_HWPART_BOOT1 */
|
||||
"boot1", /* EMMC_HWPART_BOOT2 */
|
||||
"rpmb", /* EMMC_HWPART_RPMB */
|
||||
"gp1", /* EMMC_HWPART_GP1 */
|
||||
"gp2", /* EMMC_HWPART_GP2 */
|
||||
"gp3", /* EMMC_HWPART_GP3 */
|
||||
"gp4", /* EMMC_HWPART_GP4 */
|
||||
};
|
||||
|
||||
static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage);
|
||||
|
||||
#if !CONFIG_IS_ENABLED(DM_MMC)
|
||||
|
|
|
@ -389,6 +389,9 @@ enum emmc_boot_part {
|
|||
EMMC_BOOT_PART_USER = 7,
|
||||
};
|
||||
|
||||
/* emmc PARTITION_CONFIG BOOT_PARTITION_ENABLE names */
|
||||
extern const char *emmc_boot_part_names[8];
|
||||
|
||||
/* emmc PARTITION_CONFIG ACCESS_ENABLE values */
|
||||
enum emmc_hwpart {
|
||||
EMMC_HWPART_DEFAULT = 0, /* user */
|
||||
|
@ -401,6 +404,9 @@ enum emmc_hwpart {
|
|||
EMMC_HWPART_GP4 = 7,
|
||||
};
|
||||
|
||||
/* emmc PARTITION_CONFIG ACCESS_ENABLE names */
|
||||
extern const char *emmc_hwpart_names[8];
|
||||
|
||||
/* Driver model support */
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue