summaryrefslogtreecommitdiff
path: root/util/cbi-util.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/cbi-util.c')
-rw-r--r--util/cbi-util.c53
1 files changed, 52 insertions, 1 deletions
diff --git a/util/cbi-util.c b/util/cbi-util.c
index aa8e5dd325..108b82da7f 100644
--- a/util/cbi-util.c
+++ b/util/cbi-util.c
@@ -37,6 +37,10 @@ enum {
OPT_SKU_ID,
OPT_DRAM_PART_NUM,
OPT_OEM_NAME,
+ OPT_MODEL_ID,
+ OPT_FW_CONFIG,
+ OPT_PCB_SUPPLIER,
+ OPT_SSFC,
OPT_SIZE,
OPT_ERASE_BYTE,
OPT_SHOW_ALL,
@@ -50,6 +54,10 @@ static const struct option opts_create[] = {
{"sku_id", 1, 0, OPT_SKU_ID},
{"dram_part_num", 1, 0, OPT_DRAM_PART_NUM},
{"oem_name", 1, 0, OPT_OEM_NAME},
+ {"model_id", 1, 0, OPT_MODEL_ID},
+ {"fw_config", 1, 0, OPT_FW_CONFIG},
+ {"pcb_supplier", 1, 0, OPT_PCB_SUPPLIER},
+ {"ssfc", 1, 0, OPT_SSFC},
{"size", 1, 0, OPT_SIZE},
{"erase_byte", 1, 0, OPT_ERASE_BYTE},
{NULL, 0, 0, 0}
@@ -67,7 +75,11 @@ static const char *field_name[] = {
"OEM_ID",
"SKU_ID",
"DRAM_PART_NUM",
- "OEM_NAME"
+ "OEM_NAME",
+ "MODEL_ID",
+ "FW_CONFIG",
+ "PCB_SUPPLIER",
+ "SSFC",
};
BUILD_ASSERT(ARRAY_SIZE(field_name) == CBI_TAG_COUNT);
@@ -89,6 +101,15 @@ const char help_create[] =
" --oem_name <value> OEM NAME\n"
" --erase_byte <uint8> Byte used for empty space. Default:0xff\n"
" --format_version <uint16> Data format version\n"
+ " --model_id <value> Model ID\n"
+ " --fw_config <value> Firmware configuration bit-field\n"
+ " --pcb_supplier <value> PCB supplier\n"
+ " --ssfc <value> Second Source Factory Cache bit-field\n"
+ "\n"
+ "<value> must be a positive integer <= 0XFFFFFFFF and field size can\n"
+ " be optionally specified by <value:size> notation: e.g. 0xabcd:4.\n"
+ "<size> must be a positive integer <= 0XFFFF.\n"
+ "<string> is a string\n"
"\n";
const char help_show[] =
@@ -240,6 +261,10 @@ static int cmd_create(int argc, char **argv)
struct integer_field ver;
struct integer_field oem;
struct integer_field sku;
+ struct integer_field model;
+ struct integer_field fw_config;
+ struct integer_field pcb_supplier;
+ struct integer_field ssfc;
const char *dram_part_num;
const char *oem_name;
} bi;
@@ -305,6 +330,22 @@ static int cmd_create(int argc, char **argv)
case OPT_OEM_NAME:
bi.oem_name = optarg;
break;
+ case OPT_MODEL_ID:
+ if (parse_integer_field(optarg, &bi.model))
+ return -1;
+ break;
+ case OPT_FW_CONFIG:
+ if (parse_integer_field(optarg, &bi.fw_config))
+ return -1;
+ break;
+ case OPT_PCB_SUPPLIER:
+ if (parse_integer_field(optarg, &bi.pcb_supplier))
+ return -1;
+ break;
+ case OPT_SSFC:
+ if (parse_integer_field(optarg, &bi.ssfc))
+ return -1;
+ break;
}
}
@@ -338,6 +379,12 @@ static int cmd_create(int argc, char **argv)
p = cbi_set_data(p, CBI_TAG_OEM_NAME, bi.oem_name,
strlen(bi.oem_name) + 1);
}
+ p = cbi_set_data(p, CBI_TAG_MODEL_ID, &bi.model.val, bi.model.size);
+ p = cbi_set_data(p, CBI_TAG_FW_CONFIG, &bi.fw_config.val,
+ bi.fw_config.size);
+ p = cbi_set_data(p, CBI_TAG_PCB_SUPPLIER, &bi.pcb_supplier.val,
+ bi.pcb_supplier.size);
+ p = cbi_set_data(p, CBI_TAG_SSFC, &bi.ssfc.val, bi.ssfc.size);
h->total_size = p - cbi;
h->crc = cbi_crc8(h);
@@ -458,6 +505,10 @@ static int cmd_show(int argc, char **argv)
print_integer(buf, CBI_TAG_BOARD_VERSION);
print_integer(buf, CBI_TAG_OEM_ID);
print_integer(buf, CBI_TAG_SKU_ID);
+ print_integer(buf, CBI_TAG_MODEL_ID);
+ print_integer(buf, CBI_TAG_FW_CONFIG);
+ print_integer(buf, CBI_TAG_PCB_SUPPLIER);
+ print_integer(buf, CBI_TAG_SSFC);
print_string(buf, CBI_TAG_DRAM_PART_NUM);
print_string(buf, CBI_TAG_OEM_NAME);