/* * Copyright (c) 2013, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "../cbootimage.h" #include "../parse.h" #include "../crypto.h" #include "nvboot_bct_t124.h" #include "string.h" /* nvbctlib_t124.c: The implementation of the nvbctlib API for t124. */ /* Definitions that simplify the code which follows. */ #define CASE_GET_SDRAM_PARAM(x) \ case token_##x:\ *value = params->x; \ break #define CASE_SET_SDRAM_PARAM(x) \ case token_##x:\ params->x = value; \ break #define CASE_GET_DEV_PARAM(dev, x) \ case token_##dev##_##x:\ *value = bct->dev_params[index].dev##_params.x; \ break #define CASE_SET_DEV_PARAM(dev, x) \ case token_##dev##_##x:\ bct->dev_params[index].dev##_params.x = value; \ break #define CASE_GET_BL_PARAM(x) \ case token_bl_##x:\ *data = bct_ptr->bootloader[set].x; \ break #define CASE_SET_BL_PARAM(x) \ case token_bl_##x:\ bct_ptr->bootloader[set].x = *data; \ break #define CASE_GET_NVU32(id) \ case token_##id:\ if (bct == NULL) \ return -ENODATA; \ *data = bct_ptr->id; \ break #define CASE_GET_CONST(id, val) \ case token_##id:\ *data = val; \ break #define CASE_GET_CONST_PREFIX(id, val_prefix) \ case token_##id:\ *data = val_prefix##_##id; \ break #define CASE_SET_NVU32(id) \ case token_##id:\ bct_ptr->id = data; \ break #define CASE_GET_DATA(id, size) \ case token_##id:\ if (*length < size) \ return -ENODATA;\ memcpy(data, &(bct_ptr->id), size); \ *length = size;\ break #define CASE_SET_DATA(id, size) \ case token_##id:\ if (length < size) \ return -ENODATA;\ memcpy(&(bct_ptr->id), data, size); \ break #define DEFAULT() \ default : \ printf("Unexpected token %d at line %d\n", \ token, __LINE__); \ return 1 int t124_set_dev_param(build_image_context *context, u_int32_t index, parse_token token, u_int32_t value) { nvboot_config_table *bct = NULL; bct = (nvboot_config_table *)(context->bct); assert(context != NULL); assert(bct != NULL); bct->num_param_sets = NV_MAX(bct->num_param_sets, index + 1); switch (token) { CASE_SET_DEV_PARAM(sdmmc, clock_divider); CASE_SET_DEV_PARAM(sdmmc, data_width); CASE_SET_DEV_PARAM(sdmmc, max_power_class_supported); CASE_SET_DEV_PARAM(sdmmc, multi_page_support); CASE_SET_DEV_PARAM(spiflash, clock_source); CASE_SET_DEV_PARAM(spiflash, clock_divider); CASE_SET_DEV_PARAM(spiflash, read_command_type_fast); CASE_SET_DEV_PARAM(spiflash, page_size_2k_or_16k); case token_dev_type: bct->dev_type[index] = value; break; default: return -ENODATA; } return 0; } int t124_get_dev_param(build_image_context *context, u_int32_t index, parse_token token, u_int32_t *value) { nvboot_config_table *bct = NULL; bct = (nvboot_config_table *)(context->bct); assert(context != NULL); assert(bct != NULL); switch (token) { CASE_GET_DEV_PARAM(sdmmc, clock_divider); CASE_GET_DEV_PARAM(sdmmc, data_width); CASE_GET_DEV_PARAM(sdmmc, max_power_class_supported); CASE_GET_DEV_PARAM(sdmmc, multi_page_support); CASE_GET_DEV_PARAM(spiflash, clock_source); CASE_GET_DEV_PARAM(spiflash, clock_divider); CASE_GET_DEV_PARAM(spiflash, read_command_type_fast); CASE_GET_DEV_PARAM(spiflash, page_size_2k_or_16k); case token_dev_type: *value = bct->dev_type[index]; break; default: return -ENODATA; } return 0; } int t124_get_sdram_param(build_image_context *context, u_int32_t index, parse_token token, u_int32_t *value) { nvboot_sdram_params *params; nvboot_config_table *bct = NULL; bct = (nvboot_config_table *)(context->bct); assert(context != NULL); assert(bct != NULL); params = &(bct->sdram_params[index]); switch (token) { CASE_GET_SDRAM_PARAM(memory_type); CASE_GET_SDRAM_PARAM(pllm_input_divider); CASE_GET_SDRAM_PARAM(pllm_feedback_divider); CASE_GET_SDRAM_PARAM(pllm_stable_time); CASE_GET_SDRAM_PARAM(pllm_setup_control); CASE_GET_SDRAM_PARAM(pllm_select_div2); CASE_GET_SDRAM_PARAM(pllm_pdlshift_ph45); CASE_GET_SDRAM_PARAM(pllm_pdlshift_ph90); CASE_GET_SDRAM_PARAM(pllm_pdlshift_ph135); CASE_GET_SDRAM_PARAM(pllm_kcp); CASE_GET_SDRAM_PARAM(pllm_kvco); CASE_GET_SDRAM_PARAM(emc_bct_spare0); CASE_GET_SDRAM_PARAM(emc_bct_spare1); CASE_GET_SDRAM_PARAM(emc_bct_spare2); CASE_GET_SDRAM_PARAM(emc_bct_spare3); CASE_GET_SDRAM_PARAM(emc_bct_spare4); CASE_GET_SDRAM_PARAM(emc_bct_spare5); CASE_GET_SDRAM_PARAM(emc_bct_spare6); CASE_GET_SDRAM_PARAM(emc_bct_spare7); CASE_GET_SDRAM_PARAM(emc_bct_spare8); CASE_GET_SDRAM_PARAM(emc_bct_spare9); CASE_GET_SDRAM_PARAM(emc_bct_spare10); CASE_GET_SDRAM_PARAM(emc_bct_spare11); CASE_GET_SDRAM_PARAM(emc_auto_cal_interval); CASE_GET_SDRAM_PARAM(emc_auto_cal_config); CASE_GET_SDRAM_PARAM(emc_auto_cal_config2); CASE_GET_SDRAM_PARAM(emc_auto_cal_config3); CASE_GET_SDRAM_PARAM(emc_auto_cal_wait); CASE_GET_SDRAM_PARAM(emc_pin_program_wait); CASE_GET_SDRAM_PARAM(emc_rc); CASE_GET_SDRAM_PARAM(emc_rfc); CASE_GET_SDRAM_PARAM(emc_rfc_slr); CASE_GET_SDRAM_PARAM(emc_ras); CASE_GET_SDRAM_PARAM(emc_rp); CASE_GET_SDRAM_PARAM(emc_r2r); CASE_GET_SDRAM_PARAM(emc_w2w); CASE_GET_SDRAM_PARAM(emc_r2w); CASE_GET_SDRAM_PARAM(emc_w2r); CASE_GET_SDRAM_PARAM(emc_r2p); CASE_GET_SDRAM_PARAM(emc_w2p); CASE_GET_SDRAM_PARAM(emc_rd_rcd); CASE_GET_SDRAM_PARAM(emc_wr_rcd); CASE_GET_SDRAM_PARAM(emc_rrd); CASE_GET_SDRAM_PARAM(emc_rext); CASE_GET_SDRAM_PARAM(emc_wdv); CASE_GET_SDRAM_PARAM(emc_wdv_mask); CASE_GET_SDRAM_PARAM(emc_quse); CASE_GET_SDRAM_PARAM(emc_quse_width); CASE_GET_SDRAM_PARAM(emc_ibdly); CASE_GET_SDRAM_PARAM(emc_einput); CASE_GET_SDRAM_PARAM(emc_einput_duration); CASE_GET_SDRAM_PARAM(emc_puterm_extra); CASE_GET_SDRAM_PARAM(emc_puterm_width); CASE_GET_SDRAM_PARAM(emc_puterm_adj); CASE_GET_SDRAM_PARAM(emc_cdb_cntl1); CASE_GET_SDRAM_PARAM(emc_cdb_cntl2); CASE_GET_SDRAM_PARAM(emc_cdb_cntl3); CASE_GET_SDRAM_PARAM(emc_qrst); CASE_GET_SDRAM_PARAM(emc_qsafe); CASE_GET_SDRAM_PARAM(emc_rdv); CASE_GET_SDRAM_PARAM(emc_rdv_mask); CASE_GET_SDRAM_PARAM(emc_qpop); CASE_GET_SDRAM_PARAM(emc_refresh); CASE_GET_SDRAM_PARAM(emc_burst_refresh_num); CASE_GET_SDRAM_PARAM(emc_pdex2wr); CASE_GET_SDRAM_PARAM(emc_pdex2rd); CASE_GET_SDRAM_PARAM(emc_pchg2pden); CASE_GET_SDRAM_PARAM(emc_act2pden); CASE_GET_SDRAM_PARAM(emc_ar2pden); CASE_GET_SDRAM_PARAM(emc_rw2pden); CASE_GET_SDRAM_PARAM(emc_txsr); CASE_GET_SDRAM_PARAM(emc_tcke); CASE_GET_SDRAM_PARAM(emc_tckesr); CASE_GET_SDRAM_PARAM(emc_tpd); CASE_GET_SDRAM_PARAM(emc_tfaw); CASE_GET_SDRAM_PARAM(emc_trpab); CASE_GET_SDRAM_PARAM(emc_tclkstable); CASE_GET_SDRAM_PARAM(emc_tclkstop); CASE_GET_SDRAM_PARAM(emc_trefbw); CASE_GET_SDRAM_PARAM(emc_fbio_cfg5); CASE_GET_SDRAM_PARAM(emc_fbio_cfg6); CASE_GET_SDRAM_PARAM(emc_fbio_spare); CASE_GET_SDRAM_PARAM(emc_mrs); CASE_GET_SDRAM_PARAM(emc_emrs); CASE_GET_SDRAM_PARAM(emc_emrs2); CASE_GET_SDRAM_PARAM(emc_emrs3); CASE_GET_SDRAM_PARAM(emc_mrw1); CASE_GET_SDRAM_PARAM(emc_mrw2); CASE_GET_SDRAM_PARAM(emc_mrw3); CASE_GET_SDRAM_PARAM(emc_mrw4); CASE_GET_SDRAM_PARAM(emc_mrw_reset_command); CASE_GET_SDRAM_PARAM(emc_mrw_reset_ninit_wait); CASE_GET_SDRAM_PARAM(emc_adr_cfg); CASE_GET_SDRAM_PARAM(mc_emem_cfg); CASE_GET_SDRAM_PARAM(emc_cfg); CASE_GET_SDRAM_PARAM(emc_cfg2); CASE_GET_SDRAM_PARAM(emc_cfg_pipe); CASE_GET_SDRAM_PARAM(emc_dbg); CASE_GET_SDRAM_PARAM(emc_cfg_dig_dll); CASE_GET_SDRAM_PARAM(emc_cfg_dig_dll_period); CASE_GET_SDRAM_PARAM(warm_boot_wait); CASE_GET_SDRAM_PARAM(emc_ctt_term_ctrl); CASE_GET_SDRAM_PARAM(emc_odt_write); CASE_GET_SDRAM_PARAM(emc_odt_read); CASE_GET_SDRAM_PARAM(emc_zcal_wait_cnt); CASE_GET_SDRAM_PARAM(emc_zcal_mrw_cmd); CASE_GET_SDRAM_PARAM(emc_mrs_reset_dll); CASE_GET_SDRAM_PARAM(emc_mrs_reset_dll_wait); CASE_GET_SDRAM_PARAM(emc_emrs_ddr2_dll_enable); CASE_GET_SDRAM_PARAM(emc_mrs_ddr2_dll_reset); CASE_GET_SDRAM_PARAM(emc_emrs_ddr2_ocd_calib); CASE_GET_SDRAM_PARAM(emc_ddr2_wait); CASE_GET_SDRAM_PARAM(pmc_ddr_pwr); CASE_GET_SDRAM_PARAM(emc_clock_source); CASE_GET_SDRAM_PARAM(emc_pin_extra_wait); CASE_GET_SDRAM_PARAM(emc_timing_control_wait); CASE_GET_SDRAM_PARAM(emc_wext); CASE_GET_SDRAM_PARAM(emc_ctt); CASE_GET_SDRAM_PARAM(emc_ctt_duration); CASE_GET_SDRAM_PARAM(emc_prerefresh_req_cnt); CASE_GET_SDRAM_PARAM(emc_txsr_dll); CASE_GET_SDRAM_PARAM(emc_cfg_rsv); CASE_GET_SDRAM_PARAM(emc_mrw_extra); CASE_GET_SDRAM_PARAM(emc_warm_boot_mrw_extra); CASE_GET_SDRAM_PARAM(emc_warm_boot_extramode_reg_write_enable); CASE_GET_SDRAM_PARAM(emc_extramode_reg_write_enable); CASE_GET_SDRAM_PARAM(emc_mrs_wait_cnt); CASE_GET_SDRAM_PARAM(emc_mrs_wait_cnt2); CASE_GET_SDRAM_PARAM(emc_cmd_q); CASE_GET_SDRAM_PARAM(emc_mc2emc_q); CASE_GET_SDRAM_PARAM(emc_dyn_self_ref_control); CASE_GET_SDRAM_PARAM(ahb_arbitration_xbar_ctrl_meminit_done); CASE_GET_SDRAM_PARAM(emc_dev_select); CASE_GET_SDRAM_PARAM(emc_sel_dpd_ctrl); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs0); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs1); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs2); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs3); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs4); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs5); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs6); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs7); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs8); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs9); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs10); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs11); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs12); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs13); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs14); CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs15); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse0); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse1); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse2); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse3); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse4); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse5); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse6); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse7); CASE_GET_SDRAM_PARAM(emc_dll_xform_addr0); CASE_GET_SDRAM_PARAM(emc_dll_xform_addr1); CASE_GET_SDRAM_PARAM(emc_dll_xform_addr2); CASE_GET_SDRAM_PARAM(emc_dll_xform_addr3); CASE_GET_SDRAM_PARAM(emc_dll_xform_addr4); CASE_GET_SDRAM_PARAM(emc_dll_xform_addr5); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse8); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse9); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse10); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse11); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse12); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse13); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse14); CASE_GET_SDRAM_PARAM(emc_dll_xform_quse15); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs0); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs1); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs2); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs3); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs4); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs5); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs6); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs7); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs8); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs9); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs10); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs11); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs12); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs13); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs14); CASE_GET_SDRAM_PARAM(emc_dli_trim_tx_dqs15); CASE_GET_SDRAM_PARAM(emc_dll_xform_dq0); CASE_GET_SDRAM_PARAM(emc_dll_xform_dq1); CASE_GET_SDRAM_PARAM(emc_dll_xform_dq2); CASE_GET_SDRAM_PARAM(emc_dll_xform_dq3); CASE_GET_SDRAM_PARAM(emc_dll_xform_dq4); CASE_GET_SDRAM_PARAM(emc_dll_xform_dq5); CASE_GET_SDRAM_PARAM(emc_dll_xform_dq6); CASE_GET_SDRAM_PARAM(emc_dll_xform_dq7); CASE_GET_SDRAM_PARAM(emc_zcal_interval); CASE_GET_SDRAM_PARAM(emc_zcal_init_dev0); CASE_GET_SDRAM_PARAM(emc_zcal_init_dev1); CASE_GET_SDRAM_PARAM(emc_zcal_init_wait); CASE_GET_SDRAM_PARAM(emc_zcal_warm_cold_boot_enables); CASE_GET_SDRAM_PARAM(emc_mrw_lpddr2zcal_warm_boot); CASE_GET_SDRAM_PARAM(emc_zqcal_ddr3_warm_boot); CASE_GET_SDRAM_PARAM(emc_zcal_warm_boot_wait); CASE_GET_SDRAM_PARAM(emc_mrs_warm_boot_enable); CASE_GET_SDRAM_PARAM(emc_mrs_extra); CASE_GET_SDRAM_PARAM(emc_warm_boot_mrs_extra); CASE_GET_SDRAM_PARAM(emc_clken_override); CASE_GET_SDRAM_PARAM(mc_dis_extra_snap_levels); CASE_GET_SDRAM_PARAM(emc_extra_refresh_num); CASE_GET_SDRAM_PARAM(emc_clken_override_allwarm_boot); CASE_GET_SDRAM_PARAM(mc_clken_override_allwarm_boot); CASE_GET_SDRAM_PARAM(emc_cfg_dig_dll_period_warm_boot); CASE_GET_SDRAM_PARAM(pmc_vddp_sel); CASE_GET_SDRAM_PARAM(pmc_vddp_sel_wait); CASE_GET_SDRAM_PARAM(pmc_ddr_cfg); CASE_GET_SDRAM_PARAM(pmc_io_dpd3_req); CASE_GET_SDRAM_PARAM(pmc_io_dpd3_req_wait); CASE_GET_SDRAM_PARAM(pmc_reg_short); CASE_GET_SDRAM_PARAM(pmc_no_io_power); CASE_GET_SDRAM_PARAM(pmc_por_dpd_ctrl_wait); CASE_GET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl); CASE_GET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl2); CASE_GET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl3); CASE_GET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl4); CASE_GET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl5); CASE_GET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl); CASE_GET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl2); CASE_GET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl3); CASE_GET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl4); CASE_GET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl5); CASE_GET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl6); CASE_GET_SDRAM_PARAM(emc_xm2dq_pad_ctrl); CASE_GET_SDRAM_PARAM(emc_xm2dq_pad_ctrl2); CASE_GET_SDRAM_PARAM(emc_xm2dq_pad_ctrl3); CASE_GET_SDRAM_PARAM(emc_xm2clk_pad_ctrl); CASE_GET_SDRAM_PARAM(emc_xm2clk_pad_ctrl2); CASE_GET_SDRAM_PARAM(emc_xm2comp_pad_ctrl); CASE_GET_SDRAM_PARAM(emc_xm2vttgen_pad_ctrl); CASE_GET_SDRAM_PARAM(emc_xm2vttgen_pad_ctrl2); CASE_GET_SDRAM_PARAM(emc_xm2vttgen_pad_ctrl3); CASE_GET_SDRAM_PARAM(emc_acpd_control); CASE_GET_SDRAM_PARAM(emc_swizzle_rank0_byte_cfg); CASE_GET_SDRAM_PARAM(emc_swizzle_rank0_byte0); CASE_GET_SDRAM_PARAM(emc_swizzle_rank0_byte1); CASE_GET_SDRAM_PARAM(emc_swizzle_rank0_byte2); CASE_GET_SDRAM_PARAM(emc_swizzle_rank0_byte3); CASE_GET_SDRAM_PARAM(emc_swizzle_rank1_byte_cfg); CASE_GET_SDRAM_PARAM(emc_swizzle_rank1_byte0); CASE_GET_SDRAM_PARAM(emc_swizzle_rank1_byte1); CASE_GET_SDRAM_PARAM(emc_swizzle_rank1_byte2); CASE_GET_SDRAM_PARAM(emc_swizzle_rank1_byte3); CASE_GET_SDRAM_PARAM(emc_dsr_vttgen_drv); CASE_GET_SDRAM_PARAM(emc_txdsrvttgen); CASE_GET_SDRAM_PARAM(emc_bgbias_ctl0); CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg); CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_dev0); CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_dev1); CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask0); CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask1); CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask2); CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_bank_swizzle3); CASE_GET_SDRAM_PARAM(mc_emem_arb_cfg); CASE_GET_SDRAM_PARAM(mc_emem_arb_outstanding_req); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rcd); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rp); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rc); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_ras); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_faw); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rrd); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rap2pre); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_wap2pre); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_r2r); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_w2w); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_r2w); CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_w2r); CASE_GET_SDRAM_PARAM(mc_emem_arb_da_turns); CASE_GET_SDRAM_PARAM(mc_emem_arb_da_covers); CASE_GET_SDRAM_PARAM(mc_emem_arb_misc0); CASE_GET_SDRAM_PARAM(mc_emem_arb_misc1); CASE_GET_SDRAM_PARAM(mc_emem_arb_ring1_throttle); CASE_GET_SDRAM_PARAM(mc_emem_arb_override); CASE_GET_SDRAM_PARAM(mc_emem_arb_override1); CASE_GET_SDRAM_PARAM(mc_emem_arb_rsv); CASE_GET_SDRAM_PARAM(mc_clken_override); CASE_GET_SDRAM_PARAM(mc_stat_control); CASE_GET_SDRAM_PARAM(mc_display_snap_ring); CASE_GET_SDRAM_PARAM(mc_video_protect_bom); CASE_GET_SDRAM_PARAM(mc_video_protect_bom_adr_hi); CASE_GET_SDRAM_PARAM(mc_video_protect_size_mb); CASE_GET_SDRAM_PARAM(mc_video_protect_vpr_override); CASE_GET_SDRAM_PARAM(mc_video_protect_vpr_override1); CASE_GET_SDRAM_PARAM(mc_video_protect_gpu_override0); CASE_GET_SDRAM_PARAM(mc_video_protect_gpu_override1); CASE_GET_SDRAM_PARAM(mc_sec_carveout_bom); CASE_GET_SDRAM_PARAM(mc_sec_carveout_adr_hi); CASE_GET_SDRAM_PARAM(mc_sec_carveout_size_mb); CASE_GET_SDRAM_PARAM(mc_video_protect_write_access); CASE_GET_SDRAM_PARAM(mc_sec_carveout_protect_write_access); CASE_GET_SDRAM_PARAM(emc_ca_training_enable); CASE_GET_SDRAM_PARAM(emc_ca_training_timing_cntl1); CASE_GET_SDRAM_PARAM(emc_ca_training_timing_cntl2); CASE_GET_SDRAM_PARAM(swizzle_rank_byte_encode); CASE_GET_SDRAM_PARAM(boot_rom_patch_control); CASE_GET_SDRAM_PARAM(boot_rom_patch_data); CASE_GET_SDRAM_PARAM(mc_mts_carveout_bom); CASE_GET_SDRAM_PARAM(mc_mts_carveout_adr_hi); CASE_GET_SDRAM_PARAM(mc_mts_carveout_size_mb); CASE_GET_SDRAM_PARAM(mc_mts_carveout_reg_ctrl); DEFAULT(); } return 0; } int t124_set_sdram_param(build_image_context *context, u_int32_t index, parse_token token, u_int32_t value) { nvboot_sdram_params *params; nvboot_config_table *bct = NULL; bct = (nvboot_config_table *)(context->bct); assert(context != NULL); assert(bct != NULL); params = &(bct->sdram_params[index]); /* Update the number of SDRAM parameter sets. */ bct->num_sdram_sets = NV_MAX(bct->num_sdram_sets, index + 1); switch (token) { CASE_SET_SDRAM_PARAM(memory_type); CASE_SET_SDRAM_PARAM(pllm_input_divider); CASE_SET_SDRAM_PARAM(pllm_feedback_divider); CASE_SET_SDRAM_PARAM(pllm_stable_time); CASE_SET_SDRAM_PARAM(pllm_setup_control); CASE_SET_SDRAM_PARAM(pllm_select_div2); CASE_SET_SDRAM_PARAM(pllm_pdlshift_ph45); CASE_SET_SDRAM_PARAM(pllm_pdlshift_ph90); CASE_SET_SDRAM_PARAM(pllm_pdlshift_ph135); CASE_SET_SDRAM_PARAM(pllm_kcp); CASE_SET_SDRAM_PARAM(pllm_kvco); CASE_SET_SDRAM_PARAM(emc_bct_spare0); CASE_SET_SDRAM_PARAM(emc_bct_spare1); CASE_SET_SDRAM_PARAM(emc_bct_spare2); CASE_SET_SDRAM_PARAM(emc_bct_spare3); CASE_SET_SDRAM_PARAM(emc_bct_spare4); CASE_SET_SDRAM_PARAM(emc_bct_spare5); CASE_SET_SDRAM_PARAM(emc_bct_spare6); CASE_SET_SDRAM_PARAM(emc_bct_spare7); CASE_SET_SDRAM_PARAM(emc_bct_spare8); CASE_SET_SDRAM_PARAM(emc_bct_spare9); CASE_SET_SDRAM_PARAM(emc_bct_spare10); CASE_SET_SDRAM_PARAM(emc_bct_spare11); CASE_SET_SDRAM_PARAM(emc_auto_cal_interval); CASE_SET_SDRAM_PARAM(emc_auto_cal_config); CASE_SET_SDRAM_PARAM(emc_auto_cal_config2); CASE_SET_SDRAM_PARAM(emc_auto_cal_config3); CASE_SET_SDRAM_PARAM(emc_auto_cal_wait); CASE_SET_SDRAM_PARAM(emc_pin_program_wait); CASE_SET_SDRAM_PARAM(emc_rc); CASE_SET_SDRAM_PARAM(emc_rfc); CASE_SET_SDRAM_PARAM(emc_rfc_slr); CASE_SET_SDRAM_PARAM(emc_ras); CASE_SET_SDRAM_PARAM(emc_rp); CASE_SET_SDRAM_PARAM(emc_r2r); CASE_SET_SDRAM_PARAM(emc_w2w); CASE_SET_SDRAM_PARAM(emc_r2w); CASE_SET_SDRAM_PARAM(emc_w2r); CASE_SET_SDRAM_PARAM(emc_r2p); CASE_SET_SDRAM_PARAM(emc_w2p); CASE_SET_SDRAM_PARAM(emc_rd_rcd); CASE_SET_SDRAM_PARAM(emc_wr_rcd); CASE_SET_SDRAM_PARAM(emc_rrd); CASE_SET_SDRAM_PARAM(emc_rext); CASE_SET_SDRAM_PARAM(emc_wdv); CASE_SET_SDRAM_PARAM(emc_wdv_mask); CASE_SET_SDRAM_PARAM(emc_quse); CASE_SET_SDRAM_PARAM(emc_quse_width); CASE_SET_SDRAM_PARAM(emc_ibdly); CASE_SET_SDRAM_PARAM(emc_einput); CASE_SET_SDRAM_PARAM(emc_einput_duration); CASE_SET_SDRAM_PARAM(emc_puterm_extra); CASE_SET_SDRAM_PARAM(emc_puterm_width); CASE_SET_SDRAM_PARAM(emc_puterm_adj); CASE_SET_SDRAM_PARAM(emc_cdb_cntl1); CASE_SET_SDRAM_PARAM(emc_cdb_cntl2); CASE_SET_SDRAM_PARAM(emc_cdb_cntl3); CASE_SET_SDRAM_PARAM(emc_qrst); CASE_SET_SDRAM_PARAM(emc_qsafe); CASE_SET_SDRAM_PARAM(emc_rdv); CASE_SET_SDRAM_PARAM(emc_rdv_mask); CASE_SET_SDRAM_PARAM(emc_qpop); CASE_SET_SDRAM_PARAM(emc_refresh); CASE_SET_SDRAM_PARAM(emc_burst_refresh_num); CASE_SET_SDRAM_PARAM(emc_pdex2wr); CASE_SET_SDRAM_PARAM(emc_pdex2rd); CASE_SET_SDRAM_PARAM(emc_pchg2pden); CASE_SET_SDRAM_PARAM(emc_act2pden); CASE_SET_SDRAM_PARAM(emc_ar2pden); CASE_SET_SDRAM_PARAM(emc_rw2pden); CASE_SET_SDRAM_PARAM(emc_txsr); CASE_SET_SDRAM_PARAM(emc_tcke); CASE_SET_SDRAM_PARAM(emc_tckesr); CASE_SET_SDRAM_PARAM(emc_tpd); CASE_SET_SDRAM_PARAM(emc_tfaw); CASE_SET_SDRAM_PARAM(emc_trpab); CASE_SET_SDRAM_PARAM(emc_tclkstable); CASE_SET_SDRAM_PARAM(emc_tclkstop); CASE_SET_SDRAM_PARAM(emc_trefbw); CASE_SET_SDRAM_PARAM(emc_fbio_cfg5); CASE_SET_SDRAM_PARAM(emc_fbio_cfg6); CASE_SET_SDRAM_PARAM(emc_fbio_spare); CASE_SET_SDRAM_PARAM(emc_mrs); CASE_SET_SDRAM_PARAM(emc_emrs); CASE_SET_SDRAM_PARAM(emc_emrs2); CASE_SET_SDRAM_PARAM(emc_emrs3); CASE_SET_SDRAM_PARAM(emc_mrw1); CASE_SET_SDRAM_PARAM(emc_mrw2); CASE_SET_SDRAM_PARAM(emc_mrw3); CASE_SET_SDRAM_PARAM(emc_mrw4); CASE_SET_SDRAM_PARAM(emc_mrw_reset_command); CASE_SET_SDRAM_PARAM(emc_mrw_reset_ninit_wait); CASE_SET_SDRAM_PARAM(emc_adr_cfg); CASE_SET_SDRAM_PARAM(mc_emem_cfg); CASE_SET_SDRAM_PARAM(emc_cfg); CASE_SET_SDRAM_PARAM(emc_cfg2); CASE_SET_SDRAM_PARAM(emc_cfg_pipe); CASE_SET_SDRAM_PARAM(emc_dbg); CASE_SET_SDRAM_PARAM(emc_cfg_dig_dll); CASE_SET_SDRAM_PARAM(emc_cfg_dig_dll_period); CASE_SET_SDRAM_PARAM(warm_boot_wait); CASE_SET_SDRAM_PARAM(emc_ctt_term_ctrl); CASE_SET_SDRAM_PARAM(emc_odt_write); CASE_SET_SDRAM_PARAM(emc_odt_read); CASE_SET_SDRAM_PARAM(emc_zcal_wait_cnt); CASE_SET_SDRAM_PARAM(emc_zcal_mrw_cmd); CASE_SET_SDRAM_PARAM(emc_mrs_reset_dll); CASE_SET_SDRAM_PARAM(emc_mrs_reset_dll_wait); CASE_SET_SDRAM_PARAM(emc_emrs_ddr2_dll_enable); CASE_SET_SDRAM_PARAM(emc_mrs_ddr2_dll_reset); CASE_SET_SDRAM_PARAM(emc_emrs_ddr2_ocd_calib); CASE_SET_SDRAM_PARAM(emc_ddr2_wait); CASE_SET_SDRAM_PARAM(pmc_ddr_pwr); CASE_SET_SDRAM_PARAM(emc_clock_source); CASE_SET_SDRAM_PARAM(emc_pin_extra_wait); CASE_SET_SDRAM_PARAM(emc_timing_control_wait); CASE_SET_SDRAM_PARAM(emc_wext); CASE_SET_SDRAM_PARAM(emc_ctt); CASE_SET_SDRAM_PARAM(emc_ctt_duration); CASE_SET_SDRAM_PARAM(emc_prerefresh_req_cnt); CASE_SET_SDRAM_PARAM(emc_txsr_dll); CASE_SET_SDRAM_PARAM(emc_cfg_rsv); CASE_SET_SDRAM_PARAM(emc_mrw_extra); CASE_SET_SDRAM_PARAM(emc_warm_boot_mrw_extra); CASE_SET_SDRAM_PARAM(emc_warm_boot_extramode_reg_write_enable); CASE_SET_SDRAM_PARAM(emc_extramode_reg_write_enable); CASE_SET_SDRAM_PARAM(emc_mrs_wait_cnt); CASE_SET_SDRAM_PARAM(emc_mrs_wait_cnt2); CASE_SET_SDRAM_PARAM(emc_cmd_q); CASE_SET_SDRAM_PARAM(emc_mc2emc_q); CASE_SET_SDRAM_PARAM(emc_dyn_self_ref_control); CASE_SET_SDRAM_PARAM(ahb_arbitration_xbar_ctrl_meminit_done); CASE_SET_SDRAM_PARAM(emc_dev_select); CASE_SET_SDRAM_PARAM(emc_sel_dpd_ctrl); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs0); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs1); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs2); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs3); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs4); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs5); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs6); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs7); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs8); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs9); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs10); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs11); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs12); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs13); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs14); CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs15); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse0); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse1); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse2); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse3); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse4); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse5); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse6); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse7); CASE_SET_SDRAM_PARAM(emc_dll_xform_addr0); CASE_SET_SDRAM_PARAM(emc_dll_xform_addr1); CASE_SET_SDRAM_PARAM(emc_dll_xform_addr2); CASE_SET_SDRAM_PARAM(emc_dll_xform_addr3); CASE_SET_SDRAM_PARAM(emc_dll_xform_addr4); CASE_SET_SDRAM_PARAM(emc_dll_xform_addr5); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse8); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse9); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse10); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse11); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse12); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse13); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse14); CASE_SET_SDRAM_PARAM(emc_dll_xform_quse15); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs0); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs1); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs2); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs3); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs4); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs5); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs6); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs7); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs8); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs9); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs10); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs11); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs12); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs13); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs14); CASE_SET_SDRAM_PARAM(emc_dli_trim_tx_dqs15); CASE_SET_SDRAM_PARAM(emc_dll_xform_dq0); CASE_SET_SDRAM_PARAM(emc_dll_xform_dq1); CASE_SET_SDRAM_PARAM(emc_dll_xform_dq2); CASE_SET_SDRAM_PARAM(emc_dll_xform_dq3); CASE_SET_SDRAM_PARAM(emc_dll_xform_dq4); CASE_SET_SDRAM_PARAM(emc_dll_xform_dq5); CASE_SET_SDRAM_PARAM(emc_dll_xform_dq6); CASE_SET_SDRAM_PARAM(emc_dll_xform_dq7); CASE_SET_SDRAM_PARAM(emc_zcal_interval); CASE_SET_SDRAM_PARAM(emc_zcal_init_dev0); CASE_SET_SDRAM_PARAM(emc_zcal_init_dev1); CASE_SET_SDRAM_PARAM(emc_zcal_init_wait); CASE_SET_SDRAM_PARAM(emc_zcal_warm_cold_boot_enables); CASE_SET_SDRAM_PARAM(emc_mrw_lpddr2zcal_warm_boot); CASE_SET_SDRAM_PARAM(emc_zqcal_ddr3_warm_boot); CASE_SET_SDRAM_PARAM(emc_zcal_warm_boot_wait); CASE_SET_SDRAM_PARAM(emc_mrs_warm_boot_enable); CASE_SET_SDRAM_PARAM(emc_mrs_extra); CASE_SET_SDRAM_PARAM(emc_warm_boot_mrs_extra); CASE_SET_SDRAM_PARAM(emc_clken_override); CASE_SET_SDRAM_PARAM(mc_dis_extra_snap_levels); CASE_SET_SDRAM_PARAM(emc_extra_refresh_num); CASE_SET_SDRAM_PARAM(emc_clken_override_allwarm_boot); CASE_SET_SDRAM_PARAM(mc_clken_override_allwarm_boot); CASE_SET_SDRAM_PARAM(emc_cfg_dig_dll_period_warm_boot); CASE_SET_SDRAM_PARAM(pmc_vddp_sel); CASE_SET_SDRAM_PARAM(pmc_vddp_sel_wait); CASE_SET_SDRAM_PARAM(pmc_ddr_cfg); CASE_SET_SDRAM_PARAM(pmc_io_dpd3_req); CASE_SET_SDRAM_PARAM(pmc_io_dpd3_req_wait); CASE_SET_SDRAM_PARAM(pmc_reg_short); CASE_SET_SDRAM_PARAM(pmc_no_io_power); CASE_SET_SDRAM_PARAM(pmc_por_dpd_ctrl_wait); CASE_SET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl); CASE_SET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl2); CASE_SET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl3); CASE_SET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl4); CASE_SET_SDRAM_PARAM(emc_xm2cmd_pad_ctrl5); CASE_SET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl); CASE_SET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl2); CASE_SET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl3); CASE_SET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl4); CASE_SET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl5); CASE_SET_SDRAM_PARAM(emc_xm2dqs_pad_ctrl6); CASE_SET_SDRAM_PARAM(emc_xm2dq_pad_ctrl); CASE_SET_SDRAM_PARAM(emc_xm2dq_pad_ctrl2); CASE_SET_SDRAM_PARAM(emc_xm2dq_pad_ctrl3); CASE_SET_SDRAM_PARAM(emc_xm2clk_pad_ctrl); CASE_SET_SDRAM_PARAM(emc_xm2clk_pad_ctrl2); CASE_SET_SDRAM_PARAM(emc_xm2comp_pad_ctrl); CASE_SET_SDRAM_PARAM(emc_xm2vttgen_pad_ctrl); CASE_SET_SDRAM_PARAM(emc_xm2vttgen_pad_ctrl2); CASE_SET_SDRAM_PARAM(emc_xm2vttgen_pad_ctrl3); CASE_SET_SDRAM_PARAM(emc_acpd_control); CASE_SET_SDRAM_PARAM(emc_swizzle_rank0_byte_cfg); CASE_SET_SDRAM_PARAM(emc_swizzle_rank0_byte0); CASE_SET_SDRAM_PARAM(emc_swizzle_rank0_byte1); CASE_SET_SDRAM_PARAM(emc_swizzle_rank0_byte2); CASE_SET_SDRAM_PARAM(emc_swizzle_rank0_byte3); CASE_SET_SDRAM_PARAM(emc_swizzle_rank1_byte_cfg); CASE_SET_SDRAM_PARAM(emc_swizzle_rank1_byte0); CASE_SET_SDRAM_PARAM(emc_swizzle_rank1_byte1); CASE_SET_SDRAM_PARAM(emc_swizzle_rank1_byte2); CASE_SET_SDRAM_PARAM(emc_swizzle_rank1_byte3); CASE_SET_SDRAM_PARAM(emc_dsr_vttgen_drv); CASE_SET_SDRAM_PARAM(emc_txdsrvttgen); CASE_SET_SDRAM_PARAM(emc_bgbias_ctl0); CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg); CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_dev0); CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_dev1); CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask0); CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask1); CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask2); CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_bank_swizzle3); CASE_SET_SDRAM_PARAM(mc_emem_arb_cfg); CASE_SET_SDRAM_PARAM(mc_emem_arb_outstanding_req); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rcd); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rp); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rc); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_ras); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_faw); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rrd); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rap2pre); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_wap2pre); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_r2r); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_w2w); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_r2w); CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_w2r); CASE_SET_SDRAM_PARAM(mc_emem_arb_da_turns); CASE_SET_SDRAM_PARAM(mc_emem_arb_da_covers); CASE_SET_SDRAM_PARAM(mc_emem_arb_misc0); CASE_SET_SDRAM_PARAM(mc_emem_arb_misc1); CASE_SET_SDRAM_PARAM(mc_emem_arb_ring1_throttle); CASE_SET_SDRAM_PARAM(mc_emem_arb_override); CASE_SET_SDRAM_PARAM(mc_emem_arb_override1); CASE_SET_SDRAM_PARAM(mc_emem_arb_rsv); CASE_SET_SDRAM_PARAM(mc_clken_override); CASE_SET_SDRAM_PARAM(mc_stat_control); CASE_SET_SDRAM_PARAM(mc_display_snap_ring); CASE_SET_SDRAM_PARAM(mc_video_protect_bom); CASE_SET_SDRAM_PARAM(mc_video_protect_bom_adr_hi); CASE_SET_SDRAM_PARAM(mc_video_protect_size_mb); CASE_SET_SDRAM_PARAM(mc_video_protect_vpr_override); CASE_SET_SDRAM_PARAM(mc_video_protect_vpr_override1); CASE_SET_SDRAM_PARAM(mc_video_protect_gpu_override0); CASE_SET_SDRAM_PARAM(mc_video_protect_gpu_override1); CASE_SET_SDRAM_PARAM(mc_sec_carveout_bom); CASE_SET_SDRAM_PARAM(mc_sec_carveout_adr_hi); CASE_SET_SDRAM_PARAM(mc_sec_carveout_size_mb); CASE_SET_SDRAM_PARAM(mc_video_protect_write_access); CASE_SET_SDRAM_PARAM(mc_sec_carveout_protect_write_access); CASE_SET_SDRAM_PARAM(emc_ca_training_enable); CASE_SET_SDRAM_PARAM(emc_ca_training_timing_cntl1); CASE_SET_SDRAM_PARAM(emc_ca_training_timing_cntl2); CASE_SET_SDRAM_PARAM(swizzle_rank_byte_encode); CASE_SET_SDRAM_PARAM(boot_rom_patch_control); CASE_SET_SDRAM_PARAM(boot_rom_patch_data); CASE_SET_SDRAM_PARAM(mc_mts_carveout_bom); CASE_SET_SDRAM_PARAM(mc_mts_carveout_adr_hi); CASE_SET_SDRAM_PARAM(mc_mts_carveout_size_mb); CASE_SET_SDRAM_PARAM(mc_mts_carveout_reg_ctrl); DEFAULT(); } return 0; } int t124_getbl_param(u_int32_t set, parse_token id, u_int32_t *data, u_int8_t *bct) { nvboot_config_table *bct_ptr = (nvboot_config_table *)bct; if (set >= NVBOOT_MAX_BOOTLOADERS) return -ENODATA; if (data == NULL || bct == NULL) return -ENODATA; switch (id) { CASE_GET_BL_PARAM(version); CASE_GET_BL_PARAM(start_blk); CASE_GET_BL_PARAM(start_page); CASE_GET_BL_PARAM(length); CASE_GET_BL_PARAM(load_addr); CASE_GET_BL_PARAM(entry_point); CASE_GET_BL_PARAM(attribute); case token_bl_crypto_hash: memcpy(data, &(bct_ptr->bootloader[set].signature.crypto_hash), sizeof(nvboot_hash)); break; default: return -ENODATA; } return 0; } int t124_setbl_param(u_int32_t set, parse_token id, u_int32_t *data, u_int8_t *bct) { nvboot_config_table *bct_ptr = (nvboot_config_table *)bct; if (set >= NVBOOT_MAX_BOOTLOADERS) return -ENODATA; if (data == NULL || bct == NULL) return -ENODATA; switch (id) { CASE_SET_BL_PARAM(version); CASE_SET_BL_PARAM(start_blk); CASE_SET_BL_PARAM(start_page); CASE_SET_BL_PARAM(length); CASE_SET_BL_PARAM(load_addr); CASE_SET_BL_PARAM(entry_point); CASE_SET_BL_PARAM(attribute); case token_bl_crypto_hash: memcpy(&(bct_ptr->bootloader[set].signature.crypto_hash), data, sizeof(nvboot_hash)); break; default: return -ENODATA; } return 0; } int t124_bct_get_value(parse_token id, u_int32_t *data, u_int8_t *bct) { nvboot_config_table *bct_ptr = (nvboot_config_table *)bct; nvboot_config_table samplebct; /* Used for computing offsets. */ /* * Note: Not all queries require use of the BCT, so testing for a * valid BCT is distributed within the code. */ if (data == NULL) return -ENODATA; switch (id) { /* * Simple BCT fields */ CASE_GET_NVU32(boot_data_version); CASE_GET_NVU32(block_size_log2); CASE_GET_NVU32(page_size_log2); CASE_GET_NVU32(partition_size); CASE_GET_NVU32(num_param_sets); CASE_GET_NVU32(num_sdram_sets); CASE_GET_NVU32(bootloader_used); CASE_GET_NVU32(odm_data); /* * Constants. */ CASE_GET_CONST(bootloaders_max, NVBOOT_MAX_BOOTLOADERS); CASE_GET_CONST(reserved_size, NVBOOT_BCT_RESERVED_SIZE); case token_crypto_hash: memcpy(data, &(bct_ptr->signature.crypto_hash), sizeof(nvboot_hash)); break; case token_reserved_offset: *data = (u_int8_t *)&(samplebct.reserved) - (u_int8_t *)&samplebct; break; case token_bct_size: *data = sizeof(nvboot_config_table); break; CASE_GET_CONST(hash_size, sizeof(nvboot_hash)); case token_crypto_offset: /* Offset to region in BCT to encrypt & sign */ *data = (u_int8_t *)&(samplebct.random_aes_blk) - (u_int8_t *)&samplebct; break; case token_crypto_length: /* size of region in BCT to encrypt & sign */ *data = (u_int8_t *)bct_ptr + sizeof(nvboot_config_table) - (u_int8_t *)&(bct_ptr->random_aes_blk); break; CASE_GET_CONST(max_bct_search_blks, NVBOOT_MAX_BCT_SEARCH_BLOCKS); CASE_GET_CONST_PREFIX(dev_type_sdmmc, nvboot); CASE_GET_CONST_PREFIX(dev_type_spi, nvboot); CASE_GET_CONST_PREFIX(sdmmc_data_width_4bit, nvboot); CASE_GET_CONST_PREFIX(sdmmc_data_width_8bit, nvboot); CASE_GET_CONST_PREFIX(spi_clock_source_pllp_out0, nvboot); CASE_GET_CONST_PREFIX(spi_clock_source_clockm, nvboot); CASE_GET_CONST_PREFIX(memory_type_none, nvboot); CASE_GET_CONST_PREFIX(memory_type_ddr, nvboot); CASE_GET_CONST_PREFIX(memory_type_lpddr, nvboot); CASE_GET_CONST_PREFIX(memory_type_ddr2, nvboot); CASE_GET_CONST_PREFIX(memory_type_lpddr2, nvboot); CASE_GET_CONST_PREFIX(memory_type_ddr3, nvboot); default: return -ENODATA; } return 0; } int t124_bct_set_value(parse_token id, u_int32_t data, u_int8_t *bct) { nvboot_config_table *bct_ptr = (nvboot_config_table *)bct; if (bct == NULL) return -ENODATA; switch (id) { /* * Simple BCT fields */ CASE_SET_NVU32(boot_data_version); CASE_SET_NVU32(block_size_log2); CASE_SET_NVU32(page_size_log2); CASE_SET_NVU32(partition_size); CASE_SET_NVU32(num_param_sets); CASE_SET_NVU32(num_sdram_sets); CASE_SET_NVU32(bootloader_used); CASE_SET_NVU32(odm_data); default: return -ENODATA; } return 0; } int t124_bct_set_data(parse_token id, u_int8_t *data, u_int32_t length, u_int8_t *bct) { nvboot_config_table *bct_ptr = (nvboot_config_table *)bct; if (data == NULL || bct == NULL) return -ENODATA; switch (id) { case token_crypto_hash: if (length < sizeof(nvboot_hash)) return -ENODATA; memcpy(&bct_ptr->signature.crypto_hash, data, sizeof(nvboot_hash)); break; default: return -ENODATA; } return 0; } void t124_init_bad_block_table(build_image_context *context) { u_int32_t bytes_per_entry; nvboot_badblock_table *table; nvboot_config_table *bct; bct = (nvboot_config_table *)(context->bct); assert(context != NULL); assert(bct != NULL); table = &bct->badblock_table; bytes_per_entry = ICEIL(context->partition_size, NVBOOT_BAD_BLOCK_TABLE_SIZE); table->block_size_log2 = context->block_size_log2; table->virtual_blk_size_log2 = NV_MAX(ceil_log2(bytes_per_entry), table->block_size_log2); table->entries_used = iceil_log2(context->partition_size, table->virtual_blk_size_log2); } cbootimage_soc_config tegra124_config = { .init_bad_block_table = t124_init_bad_block_table, .set_dev_param = t124_set_dev_param, .get_dev_param = t124_get_dev_param, .set_sdram_param = t124_set_sdram_param, .get_sdram_param = t124_get_sdram_param, .setbl_param = t124_setbl_param, .getbl_param = t124_getbl_param, .set_value = t124_bct_set_value, .get_value = t124_bct_get_value, .set_data = t124_bct_set_data, .devtype_table = s_devtype_table_t124, .sdmmc_data_width_table = s_sdmmc_data_width_table_t124, .spi_clock_source_table = s_spi_clock_source_table_t124, .nvboot_memory_type_table = s_nvboot_memory_type_table_t124, .sdram_field_table = s_sdram_field_table_t124, .nand_table = 0, .sdmmc_table = s_sdmmc_table_t124, .spiflash_table = s_spiflash_table_t124, .device_type_table = s_device_type_table_t124, }; void t124_get_soc_config(build_image_context *context, cbootimage_soc_config **soc_config) { context->boot_data_version = BOOTDATA_VERSION_T124; *soc_config = &tegra124_config; } int if_bct_is_t124_get_soc_config(build_image_context *context, cbootimage_soc_config **soc_config) { nvboot_config_table *bct = (nvboot_config_table *) context->bct; if (bct->boot_data_version == BOOTDATA_VERSION_T124) { t124_get_soc_config(context, soc_config); return 1; } return 0; }