summaryrefslogtreecommitdiff
path: root/data_layout.c
diff options
context:
space:
mode:
Diffstat (limited to 'data_layout.c')
-rw-r--r--data_layout.c68
1 files changed, 31 insertions, 37 deletions
diff --git a/data_layout.c b/data_layout.c
index 2a2230e..13d8f7f 100644
--- a/data_layout.c
+++ b/data_layout.c
@@ -28,7 +28,6 @@
#include "set.h"
#include "context.h"
#include "parse.h"
-#include "t20/nvboot_bct_t20.h"
#include <sys/param.h>
typedef struct blk_data_rec
@@ -309,14 +308,14 @@ fail:
#define SET_BL_FIELD(instance, field, value) \
do { \
- g_bct_parse_interf->setbl_param(instance, \
+ g_soc_config->setbl_param(instance, \
token_bl_##field, \
&(value), \
context->bct); \
} while (0);
#define GET_BL_FIELD(instance, field, ptr) \
-g_bct_parse_interf->getbl_param(instance, \
+g_soc_config->getbl_param(instance, \
token_bl_##field, \
ptr, \
context->bct);
@@ -387,9 +386,9 @@ write_bootloaders(build_image_context *context)
pages_per_blk = 1 << (context->block_size_log2
- context->page_size_log2);
- g_bct_parse_interf->get_value(token_hash_size,
+ g_soc_config->get_value(token_hash_size,
&hash_size, context->bct);
- g_bct_parse_interf->get_value(token_bootloaders_max,
+ g_soc_config->get_value(token_bootloaders_max,
&bootloaders_max, context->bct);
hash_buffer = malloc(hash_size);
@@ -408,7 +407,7 @@ write_bootloaders(build_image_context *context)
* a BL in the device.
*/
GET_BL_FIELD(0, version, &bl_0_version);
- g_bct_parse_interf->get_value(token_bootloader_used,
+ g_soc_config->get_value(token_bootloader_used,
&bl_used, context->bct);
for (bl_instance = 0; bl_instance < bl_used; bl_instance++) {
u_int32_t bl_version;
@@ -438,11 +437,11 @@ write_bootloaders(build_image_context *context)
COPY_BL_FIELD(inst_from, inst_to, entry_point);
COPY_BL_FIELD(inst_from, inst_to, attribute);
- g_bct_parse_interf->getbl_param(inst_from,
+ g_soc_config->getbl_param(inst_from,
token_bl_crypto_hash,
(u_int32_t*)hash_buffer,
context->bct);
- g_bct_parse_interf->setbl_param(inst_to,
+ g_soc_config->setbl_param(inst_to,
token_bl_crypto_hash,
(u_int32_t*)hash_buffer,
context->bct);
@@ -520,7 +519,7 @@ write_bootloaders(build_image_context *context)
sign_data_block(buffer,
bl_actual_size,
hash_buffer);
- g_bct_parse_interf->setbl_param(bl_instance,
+ g_soc_config->setbl_param(bl_instance,
token_bl_crypto_hash,
(u_int32_t*)hash_buffer,
context->bct);
@@ -555,7 +554,7 @@ write_bootloaders(build_image_context *context)
free(buffer);
}
- g_bct_parse_interf->set_value(token_bootloader_used,
+ g_soc_config->set_value(token_bootloader_used,
context->redundancy + bl_move_count,
context->bct);
@@ -585,7 +584,7 @@ write_bootloaders(build_image_context *context)
load_addr,
entry_point);
- g_bct_parse_interf->getbl_param(i,
+ g_soc_config->getbl_param(i,
token_bl_crypto_hash,
(u_int32_t*)hash_buffer,
context->bct);
@@ -599,6 +598,7 @@ write_bootloaders(build_image_context *context)
free(bl_storage);
free(hash_buffer);
return 0;
+
fail:
/* Cleanup. */
free(buffer);
@@ -611,16 +611,16 @@ fail:
void
update_context(struct build_image_context_rec *context)
{
- g_bct_parse_interf->get_value(token_partition_size,
+ g_soc_config->get_value(token_partition_size,
&context->partition_size,
context->bct);
- g_bct_parse_interf->get_value(token_page_size_log2,
+ g_soc_config->get_value(token_page_size_log2,
&context->page_size_log2,
context->bct);
- g_bct_parse_interf->get_value(token_block_size_log2,
+ g_soc_config->get_value(token_block_size_log2,
&context->block_size_log2,
context->bct);
- g_bct_parse_interf->get_value(token_odm_data,
+ g_soc_config->get_value(token_odm_data,
&context->odm_data,
context->bct);
@@ -665,7 +665,6 @@ read_bct_file(struct build_image_context_rec *context)
u_int8_t *bct_storage; /* Holds the Bl after reading */
u_int32_t bct_actual_size; /* In bytes */
file_type bct_filetype = file_type_bct;
- nvboot_config_table *bct = NULL;
int err = 0;
if (read_from_image(context->bct_filename,
@@ -685,18 +684,13 @@ read_bct_file(struct build_image_context_rec *context)
memcpy(context->bct, bct_storage, context->bct_size);
free(bct_storage);
- bct = (nvboot_config_table *)(context->bct);
- if (bct->boot_data_version == NVBOOT_BOOTDATA_VERSION(3, 1)) {
- t30_get_cbootimage_interf(g_bct_parse_interf);
- context->boot_data_version =
- NVBOOT_BOOTDATA_VERSION(3, 1);
- }
- else {
- t20_get_cbootimage_interf(g_bct_parse_interf);
- context->boot_data_version =
- NVBOOT_BOOTDATA_VERSION(2, 1);
- }
- return err;
+ /* get proper soc_config pointer by polling each supported chip */
+ if (if_bct_is_t20_get_soc_config(context, &g_soc_config))
+ return 0;
+ if (if_bct_is_t30_get_soc_config(context, &g_soc_config))
+ return 0;
+
+ return ENODATA;
}
/*
* Update the next_bct_blk and make it point to the next
@@ -711,7 +705,7 @@ find_new_bct_blk(build_image_context *context)
assert(context);
- g_bct_parse_interf->get_value(token_max_bct_search_blks,
+ g_soc_config->get_value(token_max_bct_search_blks,
&max_bct_search_blks, context->bct);
if (context->next_bct_blk > max_bct_search_blks) {
@@ -744,29 +738,29 @@ begin_update(build_image_context *context)
u_int32_t block_size_log2;
u_int32_t page_size_log2;
- g_bct_parse_interf->get_value(token_block_size_log2,
+ g_soc_config->get_value(token_block_size_log2,
&block_size_log2, context->bct);
- g_bct_parse_interf->get_value(token_page_size_log2,
+ g_soc_config->get_value(token_page_size_log2,
&page_size_log2, context->bct);
printf("begin_update(): bct data: b=%d p=%d\n",
block_size_log2, page_size_log2);
}
- g_bct_parse_interf->set_value(token_boot_data_version,
+ g_soc_config->set_value(token_boot_data_version,
context->boot_data_version, context->bct);
- g_bct_parse_interf->get_value(token_hash_size,
+ g_soc_config->get_value(token_hash_size,
&hash_size, context->bct);
- g_bct_parse_interf->get_value(token_reserved_size,
+ g_soc_config->get_value(token_reserved_size,
&reserved_size, context->bct);
- g_bct_parse_interf->get_value(token_reserved_offset,
+ g_soc_config->get_value(token_reserved_offset,
&reserved_offset, context->bct);
/* Set the odm data */
- g_bct_parse_interf->set_value(token_odm_data,
+ g_soc_config->set_value(token_odm_data,
context->odm_data, context->bct);
/* Initialize the bad block table field. */
- g_bct_parse_interf->init_bad_block_table(context);
+ g_soc_config->init_bad_block_table(context);
/* Fill the reserved data w/the padding pattern. */
write_padding(context->bct + reserved_offset, reserved_size);