summaryrefslogtreecommitdiff
path: root/set.c
diff options
context:
space:
mode:
Diffstat (limited to 'set.c')
-rw-r--r--set.c437
1 files changed, 27 insertions, 410 deletions
diff --git a/set.c b/set.c
index 9f31852..01e3846 100644
--- a/set.c
+++ b/set.c
@@ -1,5 +1,5 @@
/**
- * Copyright (c) 2011 NVIDIA Corporation. All rights reserved.
+ * Copyright (c) 2012 NVIDIA Corporation. All rights reserved.
*
* See file CREDITS for list of people who contributed to this
* project.
@@ -38,23 +38,6 @@
* A ParseXXX() function may call other parse functions and set functions.
* A SetXXX() function may not call any parseing functions.
*/
-
-#define CASE_DEVICE_VALUE(prefix, id) \
- case token_##id: \
- (void)context->bctlib.setdev_param(index, \
- nvbct_lib_id_##prefix##_##id, \
- value, \
- context->bct); \
- break
-
-#define CASE_SDRAM_VALUE(id) \
- case token_##id: \
- (void)context->bctlib.set_sdram_params(index, \
- nvbct_lib_id_sdram_##id, \
- value, \
- context->bct); \
- break
-
#define DEFAULT() \
default: \
printf("Unexpected token %d at line %d\n", \
@@ -63,9 +46,7 @@
int
read_from_image(char *filename,
- u_int32_t page_size,
u_int8_t **image,
- u_int32_t *storage_size,
u_int32_t *actual_size,
file_type f_type)
{
@@ -87,35 +68,20 @@ read_from_image(char *filename,
}
*actual_size = (u_int32_t)stats.st_size;
- *storage_size =
- (u_int32_t)(ICEIL(stats.st_size, page_size) * page_size);
-
- if (f_type == file_type_bl) {
- if (stats.st_size > MAX_BOOTLOADER_SIZE) {
- printf("Error: Bootloader file %s is too large.\n",
- filename);
- result = 1;
- goto cleanup;
- }
-
- /* Workaround for a bug in release 1.0 of the boot rom.
- * Any BL whose padded size is an integral multiple of page size
- * has its length extended by 16 bytes to bump it to end on a
- * partial page.
- */
- if ((*storage_size - *actual_size) < 16) {
- *actual_size += 16;
- *storage_size += page_size;
- }
+ if (f_type == file_type_bl && *actual_size > MAX_BOOTLOADER_SIZE) {
+ printf("Error: Bootloader file %s is too large.\n",
+ filename);
+ result = 1;
+ goto cleanup;
}
- *image = malloc(*storage_size);
+ *image = malloc(*actual_size);
if (*image == NULL) {
result = 1;
goto cleanup;
}
- memset(*image, 0, *storage_size);
+ memset(*image, 0, *actual_size);
if (fread(*image, 1, (size_t)stats.st_size, fp) != stats.st_size) {
result = 1;
@@ -127,9 +93,14 @@ cleanup:
return result;
}
-
/*
- * set_bootloader(): Processes commands to set a bootloader.
+ * Processes commands to set a bootloader.
+ *
+ * @param context The main context pointer
+ * @param filename The file name of bootloader
+ * @param load_addr The load address value for bootloader
+ * @param entry_point The entry point value for bootloader
+ * @return 0 and 1 for success and failure
*/
int
set_bootloader(build_image_context *context,
@@ -150,39 +121,12 @@ set_bootloader(build_image_context *context,
return 1
/*
- * context_set_array(): Sets an array value.
- */
-int
-context_set_array(build_image_context *context,
- u_int32_t index,
- parse_token token,
- u_int32_t value)
-{
- assert(context != NULL);
- assert(context->bct != NULL);
-
- switch (token) {
- case token_attribute:
- (void)context->bctlib.setbl_param(index,
- nvbct_lib_id_bl_attribute,
- &value,
- context->bct);
- break;
-
- case token_dev_type:
- (void)context->bctlib.setdev_param(index,
- nvbct_lib_id_dev_type,
- value,
- context->bct);
- break;
-
- DEFAULT();
- }
- return 0;
-}
-
-/*
- * context_set_value(): General handler for setting values in config files.
+ * General handler for setting values in config files.
+ *
+ * @param context The main context pointer
+ * @param token The parse token value
+ * @param value The value to set
+ * @return 0 for success
*/
int context_set_value(build_image_context *context,
parse_token token,
@@ -210,7 +154,8 @@ int context_set_value(build_image_context *context,
}
context->pages_per_blk= 1 << (context->block_size_log2-
context->page_size_log2);
- SET_VALUE(block_size_log2, context->block_size_log2);
+ g_bct_parse_interf->set_value(token_block_size_log2,
+ context->block_size_log2, context->bct);
break;
case token_partition_size:
@@ -220,7 +165,8 @@ int context_set_value(build_image_context *context,
}
context->partition_size= value;
- SET_VALUE(partition_size, value);
+ g_bct_parse_interf->set_value(token_partition_size,
+ value, context->bct);
break;
case token_page_size:
@@ -229,7 +175,8 @@ int context_set_value(build_image_context *context,
context->pages_per_blk= 1 << (context->block_size_log2-
context->page_size_log2);
- SET_VALUE(page_size_log2, context->page_size_log2);
+ g_bct_parse_interf->set_value(token_page_size_log2,
+ context->page_size_log2, context->bct);
break;
case token_redundancy:
context->redundancy = value;
@@ -248,333 +195,3 @@ int context_set_value(build_image_context *context,
return 0;
}
-
-int
-set_addon_filename(build_image_context *context,
- char *filename,
- int index)
-{
-
- struct addon_item_rec **current;
- int i;
-
- current = &(context->addon_tbl.addon_item_list);
-
- for(i = 0; i <= index; i++) {
- if (*current == NULL) {
- (*current) = malloc(sizeof(struct addon_item_rec));
- if (*current == NULL)
- return -ENOMEM;
- memset((*current), 0, sizeof(struct addon_item_rec));
- memcpy((*current)->addon_filename,
- filename, MAX_BUFFER);
- (*current)->item_index = index;
- (*current)->next = NULL;
- context->addon_tbl.addon_item_no++;
- } else if ((*current)->item_index == index) {
- memcpy((*current)->addon_filename,
- filename, MAX_BUFFER);
- } else
- current = &((*current)->next);
- }
- return 0;
-}
-
-int set_addon_attr(build_image_context *context,
- u_int32_t file_attr,
- int index)
-{
- struct addon_item_rec **current;
- int i;
-
- current = &(context->addon_tbl.addon_item_list);
-
- for(i = 0; i <= index; i++) {
- if (*current == NULL) {
- (*current) = malloc(sizeof(struct addon_item_rec));
- if (*current == NULL)
- return -ENOMEM;
- memset((*current), 0, sizeof(struct addon_item_rec));
- (*current)->item.attribute= file_attr;
- (*current)->item_index = index;
- (*current)->next = NULL;
- context->addon_tbl.addon_item_no++;
- } else if ((*current)->item_index == index) {
- (*current)->item.attribute= file_attr;
- } else
- current = &((*current)->next);
- }
- return 0;
-}
-
-int set_unique_name(build_image_context *context, char *uname, int index)
-{
- struct addon_item_rec **current;
- int i;
-
- current = &(context->addon_tbl.addon_item_list);
-
- for(i = 0; i <= index; i++) {
- if (*current == NULL) {
- (*current) = malloc(sizeof(struct addon_item_rec));
- if (*current == NULL)
- return -ENOMEM;
- memset((*current), 0, sizeof(struct addon_item_rec));
- memcpy((*current)->item.unique_name, uname, 4);
- (*current)->item_index = index;
- (*current)->next = NULL;
- context->addon_tbl.addon_item_no++;
- } else if ((*current)->item_index == index) {
- memcpy((*current)->item.unique_name, uname, 4);
- } else
- current = &((*current)->next);
- }
- return 0;
-}
-
-int
-set_other_field(build_image_context *context,
- char *other_str,
- int other,
- int index)
-{
- struct addon_item_rec **current;
- int i;
-
- current = &(context->addon_tbl.addon_item_list);
-
- for(i = 0; i <= index; i++) {
- if (*current == NULL) {
- (*current) = malloc(sizeof(struct addon_item_rec));
- if (*current == NULL)
- return -ENOMEM;
- memset((*current), 0, sizeof(struct addon_item_rec));
- if (other_str == NULL)
- (*current)->item.reserve[0] = other;
- else
- memcpy((*current)->item.reserve,
- other_str, 16);
- (*current)->item_index = index;
- (*current)->next = NULL;
- context->addon_tbl.addon_item_no++;
- } else if ((*current)->item_index == index) {
- if (other_str == NULL)
- (*current)->item.reserve[0] = other;
- else
- memcpy((*current)->item.reserve,
- other_str, 16);
- } else
- current = &((*current)->next);
- }
- return 0;
-
-}
-
-static void
-update_num_param_sets(build_image_context *context, u_int32_t index)
-{
- u_int32_t num_params;
-
- GET_VALUE(num_param_sets, &num_params);
- num_params = NV_MAX(num_params, index + 1);
- SET_VALUE(num_param_sets, num_params);
-}
-
-/*
- * set_nand_param(): Processes commands to set Nand parameters.
- */
-int
-set_nand_param(build_image_context *context,
- u_int32_t index,
- parse_token token,
- u_int32_t value)
-{
- assert(context != NULL);
- assert(context->bct != NULL);
-
- update_num_param_sets(context, index);
-
- switch (token) {
- CASE_DEVICE_VALUE(nand, clock_divider);
- CASE_DEVICE_VALUE(nand, nand_timing);
- CASE_DEVICE_VALUE(nand, nand_timing2);
- CASE_DEVICE_VALUE(nand, block_size_log2);
- CASE_DEVICE_VALUE(nand, page_size_log2);
- DEFAULT();
- }
-
- return 0;
-}
-
-/*
- * set_sdmmc_param(): Processes commands to set MoviNand parameters.
- */
-int
-set_sdmmc_param(build_image_context *context,
- u_int32_t index,
- parse_token token,
- u_int32_t value)
-{
- assert(context != NULL);
- assert(context->bct != NULL);
-
- update_num_param_sets(context, index);
-
- switch (token) {
- CASE_DEVICE_VALUE(sdmmc, clock_divider);
- CASE_DEVICE_VALUE(sdmmc, data_width);
- CASE_DEVICE_VALUE(sdmmc, max_power_class_supported);
- DEFAULT();
- }
-
- return 0;
-}
-
-/*
- * set_spiflash_param(): Processes commands to set SpiFlash parameters.
- */
-int
-set_spiflash_param(build_image_context *context,
- u_int32_t index,
- parse_token token,
- u_int32_t value)
-{
- assert(context != NULL);
- assert(context->bct != NULL);
-
- update_num_param_sets(context, index);
-
- switch (token) {
- CASE_DEVICE_VALUE(spiflash, clock_divider);
- CASE_DEVICE_VALUE(spiflash, clock_source);
- CASE_DEVICE_VALUE(spiflash, read_command_type_fast);
- DEFAULT();
- }
-
- return 0;
-}
-
-int
-set_sdram_param(build_image_context *context,
- u_int32_t index,
- parse_token token,
- u_int32_t value)
-{
- u_int32_t num_sdram_sets;
-
- assert(context != NULL);
- assert(context->bct != NULL);
-
- // Update the number of SDRAM parameter sets.
- GET_VALUE(num_sdram_sets, &num_sdram_sets);
- num_sdram_sets = NV_MAX(num_sdram_sets, index + 1);
- SET_VALUE(num_sdram_sets, num_sdram_sets);
-
- switch (token) {
-
- CASE_SDRAM_VALUE(memory_type);
- CASE_SDRAM_VALUE(pllm_charge_pump_setup_ctrl);
- CASE_SDRAM_VALUE(pllm_loop_filter_setup_ctrl);
- CASE_SDRAM_VALUE(pllm_input_divider);
- CASE_SDRAM_VALUE(pllm_feedback_divider);
- CASE_SDRAM_VALUE(pllm_post_divider);
- CASE_SDRAM_VALUE(pllm_stable_time);
- CASE_SDRAM_VALUE(emc_clock_divider);
- CASE_SDRAM_VALUE(emc_auto_cal_interval);
- CASE_SDRAM_VALUE(emc_auto_cal_config);
- CASE_SDRAM_VALUE(emc_auto_cal_wait);
- CASE_SDRAM_VALUE(emc_pin_program_wait);
- CASE_SDRAM_VALUE(emc_rc);
- CASE_SDRAM_VALUE(emc_rfc);
- CASE_SDRAM_VALUE(emc_ras);
- CASE_SDRAM_VALUE(emc_rp);
- CASE_SDRAM_VALUE(emc_r2w);
- CASE_SDRAM_VALUE(emc_w2r);
- CASE_SDRAM_VALUE(emc_r2p);
- CASE_SDRAM_VALUE(emc_w2p);
- CASE_SDRAM_VALUE(emc_rd_rcd);
- CASE_SDRAM_VALUE(emc_wr_rcd);
- CASE_SDRAM_VALUE(emc_rrd);
- CASE_SDRAM_VALUE(emc_rext);
- CASE_SDRAM_VALUE(emc_wdv);
- CASE_SDRAM_VALUE(emc_quse);
- CASE_SDRAM_VALUE(emc_qrst);
- CASE_SDRAM_VALUE(emc_qsafe);
- CASE_SDRAM_VALUE(emc_rdv);
- CASE_SDRAM_VALUE(emc_refresh);
- CASE_SDRAM_VALUE(emc_burst_refresh_num);
- CASE_SDRAM_VALUE(emc_pdex2wr);
- CASE_SDRAM_VALUE(emc_pdex2rd);
- CASE_SDRAM_VALUE(emc_pchg2pden);
- CASE_SDRAM_VALUE(emc_act2pden);
- CASE_SDRAM_VALUE(emc_ar2pden);
- CASE_SDRAM_VALUE(emc_rw2pden);
- CASE_SDRAM_VALUE(emc_txsr);
- CASE_SDRAM_VALUE(emc_tcke);
- CASE_SDRAM_VALUE(emc_tfaw);
- CASE_SDRAM_VALUE(emc_trpab);
- CASE_SDRAM_VALUE(emc_tclkstable);
- CASE_SDRAM_VALUE(emc_tclkstop);
- CASE_SDRAM_VALUE(emc_trefbw);
- CASE_SDRAM_VALUE(emc_quse_extra);
- CASE_SDRAM_VALUE(emc_fbio_cfg1);
- CASE_SDRAM_VALUE(emc_fbio_dqsib_dly);
- CASE_SDRAM_VALUE(emc_fbio_dqsib_dly_msb);
- CASE_SDRAM_VALUE(emc_fbio_quse_dly);
- CASE_SDRAM_VALUE(emc_fbio_quse_dly_msb);
- CASE_SDRAM_VALUE(emc_fbio_cfg5);
- CASE_SDRAM_VALUE(emc_fbio_cfg6);
- CASE_SDRAM_VALUE(emc_fbio_spare);
- CASE_SDRAM_VALUE(emc_mrs);
- CASE_SDRAM_VALUE(emc_emrs);
- CASE_SDRAM_VALUE(emc_mrw1);
- CASE_SDRAM_VALUE(emc_mrw2);
- CASE_SDRAM_VALUE(emc_mrw3);
- CASE_SDRAM_VALUE(emc_mrw_reset_command);
- CASE_SDRAM_VALUE(emc_mrw_reset_ninit_wait);
- CASE_SDRAM_VALUE(emc_adr_cfg);
- CASE_SDRAM_VALUE(emc_adr_cfg1);
- CASE_SDRAM_VALUE(mc_emem_Cfg);
- CASE_SDRAM_VALUE(mc_lowlatency_config);
- CASE_SDRAM_VALUE(emc_cfg);
- CASE_SDRAM_VALUE(emc_cfg2);
- CASE_SDRAM_VALUE(emc_dbg);
- CASE_SDRAM_VALUE(ahb_arbitration_xbar_ctrl);
- CASE_SDRAM_VALUE(emc_cfg_dig_dll);
- CASE_SDRAM_VALUE(emc_dll_xform_dqs);
- CASE_SDRAM_VALUE(emc_dll_xform_quse);
- CASE_SDRAM_VALUE(warm_boot_wait);
- CASE_SDRAM_VALUE(emc_ctt_term_ctrl);
- CASE_SDRAM_VALUE(emc_odt_write);
- CASE_SDRAM_VALUE(emc_odt_read);
- CASE_SDRAM_VALUE(emc_zcal_ref_cnt);
- CASE_SDRAM_VALUE(emc_zcal_wait_cnt);
- CASE_SDRAM_VALUE(emc_zcal_mrw_cmd);
- CASE_SDRAM_VALUE(emc_mrs_reset_dll);
- CASE_SDRAM_VALUE(emc_mrw_zq_init_dev0);
- CASE_SDRAM_VALUE(emc_mrw_zq_init_dev1);
- CASE_SDRAM_VALUE(emc_mrw_zq_init_wait);
- CASE_SDRAM_VALUE(emc_mrs_reset_dll_wait);
- CASE_SDRAM_VALUE(emc_emrs_emr2);
- CASE_SDRAM_VALUE(emc_emrs_emr3);
- CASE_SDRAM_VALUE(emc_emrs_ddr2_dll_enable);
- CASE_SDRAM_VALUE(emc_mrs_ddr2_dll_reset);
- CASE_SDRAM_VALUE(emc_emrs_ddr2_ocd_calib);
- CASE_SDRAM_VALUE(emc_ddr2_wait);
- CASE_SDRAM_VALUE(emc_cfg_clktrim0);
- CASE_SDRAM_VALUE(emc_cfg_clktrim1);
- CASE_SDRAM_VALUE(emc_cfg_clktrim2);
- CASE_SDRAM_VALUE(pmc_ddr_pwr);
- CASE_SDRAM_VALUE(apb_misc_gp_xm2cfga_pad_ctrl);
- CASE_SDRAM_VALUE(apb_misc_gp_xm2cfgc_pad_ctrl);
- CASE_SDRAM_VALUE(apb_misc_gp_xm2cfgc_pad_ctrl2);
- CASE_SDRAM_VALUE(apb_misc_gp_xm2cfgd_pad_ctrl);
- CASE_SDRAM_VALUE(apb_misc_gp_xm2cfgd_pad_ctrl2);
- CASE_SDRAM_VALUE(apb_misc_gp_xm2clkcfg_Pad_ctrl);
- CASE_SDRAM_VALUE(apb_misc_gp_xm2comp_pad_ctrl);
- CASE_SDRAM_VALUE(apb_misc_gp_xm2vttgen_pad_ctrl);
-
- DEFAULT();
- }
- return 0;
-}