Index: bct_dump.c |
diff --git a/bct_dump.c b/bct_dump.c |
index 74b59ef1180693ba9b59678c887a1981e66474b0..fb0df5701ac201d595ecc2504edf2ca1e243dd52 100644 |
--- a/bct_dump.c |
+++ b/bct_dump.c |
@@ -36,51 +36,27 @@ typedef struct { |
} value_data; |
static value_data const values[] = { |
- {nvbct_lib_id_boot_data_version, |
- "Version..................: 0x%08x\n"}, |
- {nvbct_lib_id_block_size_log2, |
- "Block size (log2)........: %d\n"}, |
- {nvbct_lib_id_page_size_log2, |
- "Page size (log2).........: %d\n"}, |
- {nvbct_lib_id_partition_size, |
- "Parition size............: 0x%08x\n"}, |
- {nvbct_lib_id_bootloader_used, |
- "Bootloader used..........: %d\n"}, |
- {nvbct_lib_id_bootloaders_max, |
- "Bootloaders max..........: %d\n"}, |
- {nvbct_lib_id_bct_size, |
- "BCT size.................: %d\n"}, |
- {nvbct_lib_id_hash_size, |
- "Hash size................: %d\n"}, |
- {nvbct_lib_id_crypto_offset, |
- "Crypto offset............: %d\n"}, |
- {nvbct_lib_id_crypto_length, |
- "Crypto length............: %d\n"}, |
- {nvbct_lib_id_max_bct_search_blks, |
- "Max BCT search blocks....: %d\n"}, |
- {nvbct_lib_id_num_param_sets, |
- "Device parameters used...: %d\n"}, |
+ { nvbct_lib_id_boot_data_version, "Version = 0x%08x;\n" }, |
+ { nvbct_lib_id_block_size_log2, "BlockSize = 0x%08x;\n" }, |
Vincent Palatin
2011/03/14 21:11:10
I'm seeing mixed tabs and spaces between the 2 col
|
+ { nvbct_lib_id_page_size_log2, "PageSize = 0x%08x;\n" }, |
+ { nvbct_lib_id_partition_size, "PartitionSize = 0x%08x;\n" }, |
+ { nvbct_lib_id_bootloader_used, "# Bootloader used = %d;\n" }, |
+ { nvbct_lib_id_bootloaders_max, "# Bootloaders max = %d;\n" }, |
+ { nvbct_lib_id_bct_size, "# BCT size = %d;\n" }, |
+ { nvbct_lib_id_hash_size, "# Hash size = %d;\n" }, |
+ { nvbct_lib_id_crypto_offset, "# Crypto offset = %d;\n" }, |
+ { nvbct_lib_id_crypto_length, "# Crypto length = %d;\n" }, |
+ { nvbct_lib_id_max_bct_search_blks, "# Max BCT search blocks = %d;\n" }, |
}; |
static value_data const bl_values[] = { |
- {nvbct_lib_id_bl_version, |
- " Version.......: 0x%08x\n"}, |
- {nvbct_lib_id_bl_start_blk, |
- " Start block...: %d\n"}, |
- {nvbct_lib_id_bl_start_page, |
- " Start page....: %d\n"}, |
- {nvbct_lib_id_bl_length, |
- " Length........: %d\n"}, |
- {nvbct_lib_id_bl_load_addr, |
- " Load address..: 0x%08x\n"}, |
- {nvbct_lib_id_bl_entry_point, |
- " Entry point...: 0x%08x\n"}, |
- {nvbct_lib_id_bl_attribute, |
- " Attributes....: 0x%08x\n"}, |
-}; |
- |
-static const char *sdram_types[nvboot_memory_type_num] = { |
- "None", "DDR", "LPDDR", "DDR2", "LPDDR2" |
+ { nvbct_lib_id_bl_version, "Version = 0x%08x;\n" }, |
+ { nvbct_lib_id_bl_start_blk, "Start block = %d;\n" }, |
+ { nvbct_lib_id_bl_start_page, "Start page = %d;\n" }, |
+ { nvbct_lib_id_bl_length, "Length = %d;\n" }, |
+ { nvbct_lib_id_bl_load_addr, "Load address = 0x%08x;\n" }, |
+ { nvbct_lib_id_bl_entry_point, "Entry point = 0x%08x;\n" }, |
+ { nvbct_lib_id_bl_attribute, "Attributes = 0x%08x;\n" }, |
}; |
/*****************************************************************************/ |
@@ -106,28 +82,54 @@ static int max_width(field_item const * table) |
return width; |
} |
/*****************************************************************************/ |
-static int display_field_value(field_item const * item, u_int32_t value) |
+static enum_item const * find_enum_item(build_image_context *context, |
+ enum_item const * table, |
+ u_int32_t value) |
+{ |
+ int i; |
+ |
+ for (i = 0; table[i].name != NULL; ++i) |
+ { |
+ u_int32_t table_value; |
+ |
+ if (!context->bctlib.get_value(table[i].value, |
+ &table_value, |
+ context->bct) && |
+ table_value == value) |
+ return table + i; |
+ } |
+ |
+ return NULL; |
+} |
+/*****************************************************************************/ |
+static void display_enum_value(build_image_context *context, |
+ enum_item const * table, |
+ u_int32_t value) |
+{ |
+ enum_item const * e_item = find_enum_item(context, table, value); |
+ |
+ if (e_item) |
+ printf("%s", e_item->name); |
+ else |
+ printf("<UNKNOWN ENUM VALUE (%d)>", value); |
+} |
+/*****************************************************************************/ |
+static int display_field_value(build_image_context *context, |
+ field_item const * item, |
+ u_int32_t value) |
{ |
switch (item->type) |
{ |
case field_type_enum: |
- /* |
- * It would be ideal if we could take the enum value |
- * and programatically look up a string that the parse |
- * would accept for this field. The problem is that |
- * the mapping between field values and nvbct_lib_id |
- * values is hard coded in the nvbctlib source. For |
- * now we drop down to the u32 printing code. |
- * |
- * TODO(robotboy): Fix this |
- */ |
+ display_enum_value(context, item->enum_table, value); |
+ break; |
case field_type_u32: |
printf("0x%08x", value); |
break; |
case field_type_u8: |
- printf("0x%02x", value); |
+ printf("%d", value); |
break; |
default: |
@@ -171,7 +173,14 @@ int main(int argc, char *argv[]) |
/* Display root values */ |
for (i = 0; i < sizeof(values) / sizeof(values[0]); ++i) { |
e = context.bctlib.get_value(values[i].id, &data, context.bct); |
- printf(values[i].message, e == 0 ? data : -1); |
+ |
+ if (e != 0) |
+ data = -1; |
+ else if (values[i].id == nvbct_lib_id_block_size_log2 || |
+ values[i].id == nvbct_lib_id_page_size_log2) |
+ data = 1 << data; |
+ |
+ printf(values[i].message, data); |
} |
/* Display bootloader values */ |
@@ -179,55 +188,71 @@ int main(int argc, char *argv[]) |
&bootloaders_used, |
context.bct); |
- for (i = 0; (e == 0) && (i < bootloaders_used); ++i) { |
- printf("Bootloader[%d]\n", i); |
+ if ((e == 0) && (bootloaders_used > 0)) { |
+ int bl_count = sizeof(bl_values) / sizeof(bl_values[0]); |
+ |
+ printf("#\n" |
+ "# These values are set by cbootimage using the\n" |
+ "# bootloader provided by the Bootloader=...\n" |
+ "# configuration option.\n" |
+ "#\n"); |
+ |
+ for (i = 0; i < bootloaders_used; ++i) { |
+ for (j = 0; j < bl_count; ++j) { |
+ e = context.bctlib.getbl_param(i, |
+ bl_values[j].id, |
+ &data, |
+ context.bct); |
+ printf("# Bootloader[%d].", i); |
- for (j = 0; j < sizeof(bl_values) / sizeof(bl_values[0]); ++j) { |
- e = context.bctlib.getbl_param(i, |
- bl_values[j].id, |
- &data, |
- context.bct); |
- printf(bl_values[j].message, e == 0 ? data : -1); |
+ if (e != 0) |
+ data = -1; |
+ |
+ printf(bl_values[j].message, data); |
+ } |
} |
} |
- /* Display device values */ |
+ /* Display flash device parameters */ |
e = context.bctlib.get_value(nvbct_lib_id_num_param_sets, |
¶meters_used, |
context.bct); |
for (i = 0; (e == 0) && (i < parameters_used); ++i) { |
field_item const * device_field_table = NULL; |
+ char const * prefix = NULL; |
field_item const * item; |
- printf("DeviceParameter[%d]\n", i); |
- |
e = context.bctlib.getdev_param(i, |
nvbct_lib_id_dev_type, |
&type, |
context.bct); |
+ printf("\n" |
+ "DevType[%d] = ", i); |
+ display_enum_value(&context, s_devtype_table, type); |
+ printf(";\n"); |
+ |
switch (type) |
{ |
case nvboot_dev_type_spi: |
- printf(" Type = SPI\n"); |
device_field_table = s_spiflash_table; |
+ prefix = "SpiFlashParams"; |
break; |
case nvboot_dev_type_sdmmc: |
- printf(" Type = SDMMC\n"); |
device_field_table = s_sdmmc_table; |
+ prefix = "SdmmcParams"; |
break; |
case nvboot_dev_type_nand: |
- printf(" Type = NAND\n"); |
device_field_table = s_nand_table; |
+ prefix = "NandParams"; |
break; |
default: |
device_field_table = NULL; |
- printf(" Type = <UNKNOWN TYPE (%d)>\n", |
- type); |
+ prefix = ""; |
break; |
} |
@@ -241,45 +266,42 @@ int main(int argc, char *argv[]) |
item->enum_value, |
&data, |
context.bct); |
- printf(" %-*s = 0x%08x\n", |
- width, item->name, |
- e == 0 ? data : -1); |
+ printf("DeviceParam[%d].%s.%-*s = ", |
+ i, prefix, width, item->name); |
+ |
+ if (e != 0) |
+ printf("<ERROR reading parameter (%d)>", e); |
+ else |
+ display_field_value(&context, item, data); |
+ |
+ printf(";\n"); |
} |
} |
- /* Display SDRAM parameters sets */ |
+ /* Display SDRAM parameters */ |
e = context.bctlib.get_value(nvbct_lib_id_num_sdram_sets, |
&sdram_used, |
context.bct); |
for (i = 0; (e == 0) && (i < sdram_used); ++i) { |
- printf("SDRAMParameter[%d]\n", i); |
- |
- e = context.bctlib.get_sdram_params(i, |
- nvbct_lib_id_sdram_memory_type, |
- &type, |
- context.bct); |
- |
- printf(" Type............................: %s\n", |
- type < nvboot_memory_type_num ? sdram_types[type] |
- : "Unknown"); |
- |
int width = max_width(s_sdram_field_table); |
field_item const * item; |
+ printf("\n"); |
+ |
for (item = s_sdram_field_table; item->name != NULL; ++item) { |
e = context.bctlib.get_sdram_params(i, |
item->enum_value, |
&data, |
context.bct); |
- printf(" %-*s = ", width, item->name); |
+ printf("SDRAM[%d].%-*s = ", i, width, item->name); |
if (e != 0) |
printf("<ERROR reading parameter (%d)>", e); |
else |
- display_field_value(item, data); |
+ display_field_value(&context, item, data); |
- printf("\n"); |
+ printf(";\n"); |
} |
} |
@@ -288,3 +310,4 @@ int main(int argc, char *argv[]) |
return e; |
} |
+/*****************************************************************************/ |