diff options
Diffstat (limited to 'src/t210/nvbctlib_t210.c')
-rw-r--r-- | src/t210/nvbctlib_t210.c | 2314 |
1 files changed, 2314 insertions, 0 deletions
diff --git a/src/t210/nvbctlib_t210.c b/src/t210/nvbctlib_t210.c new file mode 100644 index 0000000..9921bbb --- /dev/null +++ b/src/t210/nvbctlib_t210.c @@ -0,0 +1,2314 @@ +/* + * Copyright (c) 2015, 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 <http://www.gnu.org/licenses/>. + * + * See file CREDITS for list of people who contributed to this + * project. + */ + +#include "../cbootimage.h" +#include "../parse.h" +#include "../crypto.h" +#include "nvboot_bct_t210.h" +#include "string.h" + +/* nvbctlib_t210.c: The implementation of the nvbctlib API for t210. */ + +/* 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; \ + *((u_int32_t *)data) = bct_ptr->id; \ + break + +#define CASE_GET_CONST(id, val) \ +case token_##id:\ + *((u_int32_t *)data) = val; \ + break + +#define CASE_GET_CONST_PREFIX(id, val_prefix) \ +case token_##id:\ + *((u_int32_t *)data) = val_prefix##_##id; \ + break + +#define CASE_SET_NVU32(id) \ +case token_##id:\ + bct_ptr->id = *((u_int32_t *)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 + +parse_token t210_root_token_list[] = { + token_boot_data_version, + token_block_size, + token_page_size, + token_partition_size, + token_odm_data, + token_bootloader_used, + token_bootloaders_max, + token_bct_size, + token_hash_size, + token_crypto_offset, + token_crypto_length, + token_max_bct_search_blks, + token_unique_chip_id, + token_secure_debug_control +}; + +int +t210_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 +t210_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 +t210_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) { + /* Specifies the type of memory device */ + CASE_GET_SDRAM_PARAM(memory_type); + + /* MC/EMC clock source configuration */ + + /* Specifies the M value for PllM */ + CASE_GET_SDRAM_PARAM(pllm_input_divider); + /* Specifies the N value for PllM */ + CASE_GET_SDRAM_PARAM(pllm_feedback_divider); + /* Specifies the time to wait for PLLM to lock (in microseconds) */ + CASE_GET_SDRAM_PARAM(pllm_stable_time); + /* Specifies misc. control bits */ + CASE_GET_SDRAM_PARAM(pllm_setup_control); + /* Specifies the P value for PLLM */ + CASE_GET_SDRAM_PARAM(pllm_post_divider); + /* Specifies value for Charge Pump Gain Control */ + CASE_GET_SDRAM_PARAM(pllm_kcp); + /* Specifies VCO gain */ + CASE_GET_SDRAM_PARAM(pllm_kvco); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare0); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare1); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare2); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare3); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare4); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare5); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare6); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare7); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare8); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare9); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare10); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare11); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare12); + /* Spare BCT param */ + CASE_GET_SDRAM_PARAM(emc_bct_spare13); + + /* Defines EMC_2X_CLK_SRC, EMC_2X_CLK_DIVISOR, EMC_INVERT_DCD */ + CASE_GET_SDRAM_PARAM(emc_clock_source); + CASE_GET_SDRAM_PARAM(emc_clock_source_dll); + + /* Defines possible override for PLLLM_MISC2 */ + CASE_GET_SDRAM_PARAM(clk_rst_pllm_misc20_override); + /* enables override for PLLLM_MISC2 */ + CASE_GET_SDRAM_PARAM(clk_rst_pllm_misc20_override_enable); + /* defines CLK_ENB_MC1 in register clk_rst_controller_clk_enb_w_clr */ + CASE_GET_SDRAM_PARAM(clear_clock2_mc1); + + /* Auto-calibration of EMC pads */ + + /* Specifies the value for EMC_AUTO_CAL_INTERVAL */ + CASE_GET_SDRAM_PARAM(emc_auto_cal_interval); + /* + * Specifies the value for EMC_AUTO_CAL_CONFIG + * Note: Trigger bits are set by the SDRAM code. + */ + CASE_GET_SDRAM_PARAM(emc_auto_cal_config); + + /* Specifies the value for EMC_AUTO_CAL_CONFIG2 */ + CASE_GET_SDRAM_PARAM(emc_auto_cal_config2); + + /* Specifies the value for EMC_AUTO_CAL_CONFIG3 */ + CASE_GET_SDRAM_PARAM(emc_auto_cal_config3); + + CASE_GET_SDRAM_PARAM(emc_auto_cal_config4); + CASE_GET_SDRAM_PARAM(emc_auto_cal_config5); + CASE_GET_SDRAM_PARAM(emc_auto_cal_config6); + CASE_GET_SDRAM_PARAM(emc_auto_cal_config7); + CASE_GET_SDRAM_PARAM(emc_auto_cal_config8); + /* Specifies the value for EMC_AUTO_CAL_VREF_SEL_0 */ + CASE_GET_SDRAM_PARAM(emc_auto_cal_vref_sel0); + CASE_GET_SDRAM_PARAM(emc_auto_cal_vref_sel1); + + /* Specifies the value for EMC_AUTO_CAL_CHANNEL */ + CASE_GET_SDRAM_PARAM(emc_auto_cal_channel); + + /* Specifies the value for EMC_PMACRO_AUTOCAL_CFG_0 */ + CASE_GET_SDRAM_PARAM(emc_pmacro_auto_cal_cfg0); + CASE_GET_SDRAM_PARAM(emc_pmacro_auto_cal_cfg1); + CASE_GET_SDRAM_PARAM(emc_pmacro_auto_cal_cfg2); + + CASE_GET_SDRAM_PARAM(emc_pmacro_rx_term); + CASE_GET_SDRAM_PARAM(emc_pmacro_dq_tx_drive); + CASE_GET_SDRAM_PARAM(emc_pmacro_ca_tx_drive); + CASE_GET_SDRAM_PARAM(emc_pmacro_cmd_tx_drive); + CASE_GET_SDRAM_PARAM(emc_pmacro_auto_cal_common); + CASE_GET_SDRAM_PARAM(emc_pmacro_zcrtl); + + /* + * Specifies the time for the calibration + * to stabilize (in microseconds) + */ + CASE_GET_SDRAM_PARAM(emc_auto_cal_wait); + + CASE_GET_SDRAM_PARAM(emc_xm2_comp_pad_ctrl); + CASE_GET_SDRAM_PARAM(emc_xm2_comp_pad_ctrl2); + CASE_GET_SDRAM_PARAM(emc_xm2_comp_pad_ctrl3); + + /* + * DRAM size information + * Specifies the value for EMC_ADR_CFG + */ + CASE_GET_SDRAM_PARAM(emc_adr_cfg); + + /* + * Specifies the time to wait after asserting pin + * CKE (in microseconds) + */ + CASE_GET_SDRAM_PARAM(emc_pin_program_wait); + /* Specifies the extra delay before/after pin RESET/CKE command */ + CASE_GET_SDRAM_PARAM(emc_pin_extra_wait); + + CASE_GET_SDRAM_PARAM(emc_pin_gpio_enable); + CASE_GET_SDRAM_PARAM(emc_pin_gpio); + + /* + * Specifies the extra delay after the first writing + * of EMC_TIMING_CONTROL + */ + CASE_GET_SDRAM_PARAM(emc_timing_control_wait); + + /* Timing parameters required for the SDRAM */ + + /* Specifies the value for EMC_RC */ + CASE_GET_SDRAM_PARAM(emc_rc); + /* Specifies the value for EMC_RFC */ + CASE_GET_SDRAM_PARAM(emc_rfc); + + CASE_GET_SDRAM_PARAM(emc_rfc_pb); + CASE_GET_SDRAM_PARAM(emc_ref_ctrl2); + + /* Specifies the value for EMC_RFC_SLR */ + CASE_GET_SDRAM_PARAM(emc_rfc_slr); + /* Specifies the value for EMC_RAS */ + CASE_GET_SDRAM_PARAM(emc_ras); + /* Specifies the value for EMC_RP */ + CASE_GET_SDRAM_PARAM(emc_rp); + /* Specifies the value for EMC_R2R */ + CASE_GET_SDRAM_PARAM(emc_r2r); + /* Specifies the value for EMC_W2W */ + CASE_GET_SDRAM_PARAM(emc_w2w); + /* Specifies the value for EMC_R2W */ + CASE_GET_SDRAM_PARAM(emc_r2w); + /* Specifies the value for EMC_W2R */ + CASE_GET_SDRAM_PARAM(emc_w2r); + /* Specifies the value for EMC_R2P */ + CASE_GET_SDRAM_PARAM(emc_r2p); + /* Specifies the value for EMC_W2P */ + CASE_GET_SDRAM_PARAM(emc_w2p); + /* Specifies the value for EMC_RD_RCD */ + + CASE_GET_SDRAM_PARAM(emc_tppd); + CASE_GET_SDRAM_PARAM(emc_ccdmw); + + CASE_GET_SDRAM_PARAM(emc_rd_rcd); + /* Specifies the value for EMC_WR_RCD */ + CASE_GET_SDRAM_PARAM(emc_wr_rcd); + /* Specifies the value for EMC_RRD */ + CASE_GET_SDRAM_PARAM(emc_rrd); + /* Specifies the value for EMC_REXT */ + CASE_GET_SDRAM_PARAM(emc_rext); + /* Specifies the value for EMC_WEXT */ + CASE_GET_SDRAM_PARAM(emc_wext); + /* Specifies the value for EMC_WDV */ + CASE_GET_SDRAM_PARAM(emc_wdv); + + CASE_GET_SDRAM_PARAM(emc_wdv_chk); + CASE_GET_SDRAM_PARAM(emc_wsv); + CASE_GET_SDRAM_PARAM(emc_wev); + + /* Specifies the value for EMC_WDV_MASK */ + CASE_GET_SDRAM_PARAM(emc_wdv_mask); + + CASE_GET_SDRAM_PARAM(emc_ws_duration); + CASE_GET_SDRAM_PARAM(emc_we_duration); + + /* Specifies the value for EMC_QUSE */ + CASE_GET_SDRAM_PARAM(emc_quse); + /* Specifies the value for EMC_QUSE_WIDTH */ + CASE_GET_SDRAM_PARAM(emc_quse_width); + /* Specifies the value for EMC_IBDLY */ + CASE_GET_SDRAM_PARAM(emc_ibdly); + + CASE_GET_SDRAM_PARAM(emc_obdly); + + /* Specifies the value for EMC_EINPUT */ + CASE_GET_SDRAM_PARAM(emc_einput); + /* Specifies the value for EMC_EINPUT_DURATION */ + CASE_GET_SDRAM_PARAM(emc_einput_duration); + /* Specifies the value for EMC_PUTERM_EXTRA */ + CASE_GET_SDRAM_PARAM(emc_puterm_extra); + /* Specifies the value for EMC_PUTERM_WIDTH */ + CASE_GET_SDRAM_PARAM(emc_puterm_width); + + 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_rdv_early); + CASE_GET_SDRAM_PARAM(emc_rdv_early_mask); + + /* Specifies the value for EMC_QPOP */ + CASE_GET_SDRAM_PARAM(emc_qpop); + + /* Specifies the value for EMC_REFRESH */ + CASE_GET_SDRAM_PARAM(emc_refresh); + /* Specifies the value for EMC_BURST_REFRESH_NUM */ + CASE_GET_SDRAM_PARAM(emc_burst_refresh_num); + /* Specifies the value for EMC_PRE_REFRESH_REQ_CNT */ + CASE_GET_SDRAM_PARAM(emc_prerefresh_req_cnt); + /* Specifies the value for EMC_PDEX2WR */ + CASE_GET_SDRAM_PARAM(emc_pdex2wr); + /* Specifies the value for EMC_PDEX2RD */ + CASE_GET_SDRAM_PARAM(emc_pdex2rd); + /* Specifies the value for EMC_PCHG2PDEN */ + CASE_GET_SDRAM_PARAM(emc_pchg2pden); + /* Specifies the value for EMC_ACT2PDEN */ + CASE_GET_SDRAM_PARAM(emc_act2pden); + /* Specifies the value for EMC_AR2PDEN */ + CASE_GET_SDRAM_PARAM(emc_ar2pden); + /* Specifies the value for EMC_RW2PDEN */ + CASE_GET_SDRAM_PARAM(emc_rw2pden); + + CASE_GET_SDRAM_PARAM(emc_cke2pden); + CASE_GET_SDRAM_PARAM(emc_pdex2che); + CASE_GET_SDRAM_PARAM(emc_pdex2mrr); + + /* Specifies the value for EMC_TXSR */ + CASE_GET_SDRAM_PARAM(emc_txsr); + /* Specifies the value for EMC_TXSRDLL */ + CASE_GET_SDRAM_PARAM(emc_txsr_dll); + /* Specifies the value for EMC_TCKE */ + CASE_GET_SDRAM_PARAM(emc_tcke); + /* Specifies the value for EMC_TCKESR */ + CASE_GET_SDRAM_PARAM(emc_tckesr); + /* Specifies the value for EMC_TPD */ + CASE_GET_SDRAM_PARAM(emc_tpd); + /* Specifies the value for EMC_TFAW */ + CASE_GET_SDRAM_PARAM(emc_tfaw); + /* Specifies the value for EMC_TRPAB */ + CASE_GET_SDRAM_PARAM(emc_trpab); + /* Specifies the value for EMC_TCLKSTABLE */ + CASE_GET_SDRAM_PARAM(emc_tclkstable); + /* Specifies the value for EMC_TCLKSTOP */ + CASE_GET_SDRAM_PARAM(emc_tclkstop); + /* Specifies the value for EMC_TREFBW */ + CASE_GET_SDRAM_PARAM(emc_trefbw); + + /* FBIO configuration values */ + + /* Specifies the value for EMC_FBIO_CFG5 */ + CASE_GET_SDRAM_PARAM(emc_fbio_cfg5); + /* Specifies the value for EMC_FBIO_CFG7 */ + CASE_GET_SDRAM_PARAM(emc_fbio_cfg7); + CASE_GET_SDRAM_PARAM(emc_fbio_cfg8); + + /* Command mapping for CMD brick 0 */ + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd0_0); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd0_1); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd0_2); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd1_0); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd1_1); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd1_2); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd2_0); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd2_1); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd2_2); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd3_0); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd3_1); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_cmd3_2); + CASE_GET_SDRAM_PARAM(emc_cmd_mapping_byte); + + /* Specifies the value for EMC_FBIO_SPARE */ + CASE_GET_SDRAM_PARAM(emc_fbio_spare); + + /* Specifies the value for EMC_CFG_RSV */ + CASE_GET_SDRAM_PARAM(emc_cfg_rsv); + + /* MRS command values */ + + /* Specifies the value for EMC_MRS */ + CASE_GET_SDRAM_PARAM(emc_mrs); + /* Specifies the MP0 command to initialize mode registers */ + CASE_GET_SDRAM_PARAM(emc_emrs); + /* Specifies the MP2 command to initialize mode registers */ + CASE_GET_SDRAM_PARAM(emc_emrs2); + /* Specifies the MP3 command to initialize mode registers */ + CASE_GET_SDRAM_PARAM(emc_emrs3); + /* Specifies the programming to LPDDR2 Mode Register 1 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw1); + /* Specifies the programming to LPDDR2 Mode Register 2 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw2); + /* Specifies the programming to LPDDR2 Mode Register 3 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw3); + /* Specifies the programming to LPDDR2 Mode Register 11 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw4); + + /* Specifies the programming to LPDDR4 Mode Register 3 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw6); + /* Specifies the programming to LPDDR4 Mode Register 11 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw8); + /* Specifies the programming to LPDDR4 Mode Register 11 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw9); + /* Specifies the programming to LPDDR4 Mode Register 12 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw10); + /* Specifies the programming to LPDDR4 Mode Register 14 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw12); + /* Specifies the programming to LPDDR4 Mode Register 14 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw13); + /* Specifies the programming to LPDDR4 Mode Register 22 at cold boot */ + CASE_GET_SDRAM_PARAM(emc_mrw14); + + /* + * Specifies the programming to extra LPDDR2 Mode Register + * at cold boot + */ + CASE_GET_SDRAM_PARAM(emc_mrw_extra); + /* + * Specifies the programming to extra LPDDR2 Mode Register + * at warm boot + */ + CASE_GET_SDRAM_PARAM(emc_warm_boot_mrw_extra); + /* + * Specify the enable of extra Mode Register programming at + * warm boot + */ + CASE_GET_SDRAM_PARAM(emc_warm_boot_extramode_reg_write_enable); + /* + * Specify the enable of extra Mode Register programming at + * cold boot + */ + CASE_GET_SDRAM_PARAM(emc_extramode_reg_write_enable); + + /* Specifies the EMC_MRW reset command value */ + CASE_GET_SDRAM_PARAM(emc_mrw_reset_command); + /* Specifies the EMC Reset wait time (in microseconds) */ + CASE_GET_SDRAM_PARAM(emc_mrw_reset_ninit_wait); + /* Specifies the value for EMC_MRS_WAIT_CNT */ + CASE_GET_SDRAM_PARAM(emc_mrs_wait_cnt); + /* Specifies the value for EMC_MRS_WAIT_CNT2 */ + CASE_GET_SDRAM_PARAM(emc_mrs_wait_cnt2); + + /* EMC miscellaneous configurations */ + + /* Specifies the value for EMC_CFG */ + CASE_GET_SDRAM_PARAM(emc_cfg); + /* Specifies the value for EMC_CFG_2 */ + CASE_GET_SDRAM_PARAM(emc_cfg2); + /* Specifies the pipe bypass controls */ + CASE_GET_SDRAM_PARAM(emc_cfg_pipe); + + CASE_GET_SDRAM_PARAM(emc_cfg_pipe_clk); + CASE_GET_SDRAM_PARAM(emc_fdpd_ctrl_cmd_no_ramp); + CASE_GET_SDRAM_PARAM(emc_cfg_update); + + /* Specifies the value for EMC_DBG */ + CASE_GET_SDRAM_PARAM(emc_dbg); + + CASE_GET_SDRAM_PARAM(emc_dbg_write_mux); + + /* Specifies the value for EMC_CMDQ */ + CASE_GET_SDRAM_PARAM(emc_cmd_q); + /* Specifies the value for EMC_MC2EMCQ */ + CASE_GET_SDRAM_PARAM(emc_mc2emc_q); + /* Specifies the value for EMC_DYN_SELF_REF_CONTROL */ + CASE_GET_SDRAM_PARAM(emc_dyn_self_ref_control); + + /* Specifies the value for MEM_INIT_DONE */ + CASE_GET_SDRAM_PARAM(ahb_arbitration_xbar_ctrl_meminit_done); + + /* Specifies the value for EMC_CFG_DIG_DLL */ + CASE_GET_SDRAM_PARAM(emc_cfg_dig_dll); + CASE_GET_SDRAM_PARAM(emc_cfg_dig_dll_1); + + /* Specifies the value for EMC_CFG_DIG_DLL_PERIOD */ + CASE_GET_SDRAM_PARAM(emc_cfg_dig_dll_period); + /* Specifies the value of *DEV_SELECTN of various EMC registers */ + CASE_GET_SDRAM_PARAM(emc_dev_select); + + /* Specifies the value for EMC_SEL_DPD_CTRL */ + CASE_GET_SDRAM_PARAM(emc_sel_dpd_ctrl); + + /* Pads trimmer delays */ + CASE_GET_SDRAM_PARAM(emc_fdpd_ctrl_dq); + CASE_GET_SDRAM_PARAM(emc_fdpd_ctrl_cmd); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_vref_dq_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_vref_dq_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_vref_dqs_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_vref_dqs_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_rxrt); + CASE_GET_SDRAM_PARAM(emc_cfg_pipe1); + CASE_GET_SDRAM_PARAM(emc_cfg_pipe2); + + /* Specifies the value for EMC_PMACRO_QUSE_DDLL_RANK0_0 */ + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_2); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_3); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_4); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_5); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_2); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_3); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_4); + CASE_GET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_5); + + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_2); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_3); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_4); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_5); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_2); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_3); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_4); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_5); + + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_2); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_3); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_4); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_5); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_2); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_3); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_4); + CASE_GET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_5); + + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank0_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank0_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank0_2); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank0_3); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank1_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank1_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank1_2); + CASE_GET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank1_3); + + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_2); + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_3); + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_4); + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_short_cmd_0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_short_cmd_1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_short_cmd_2); + + /* + * Specifies the delay after asserting CKE pin during a WarmBoot0 + * sequence (in microseconds) + */ + CASE_GET_SDRAM_PARAM(warm_boot_wait); + + /* Specifies the value for EMC_ODT_WRITE */ + CASE_GET_SDRAM_PARAM(emc_odt_write); + + /* Periodic ZQ calibration */ + + /* + * Specifies the value for EMC_ZCAL_INTERVAL + * Value 0 disables ZQ calibration + */ + CASE_GET_SDRAM_PARAM(emc_zcal_interval); + /* Specifies the value for EMC_ZCAL_WAIT_CNT */ + CASE_GET_SDRAM_PARAM(emc_zcal_wait_cnt); + /* Specifies the value for EMC_ZCAL_MRW_CMD */ + CASE_GET_SDRAM_PARAM(emc_zcal_mrw_cmd); + + /* DRAM initialization sequence flow control */ + + /* Specifies the MRS command value for resetting DLL */ + CASE_GET_SDRAM_PARAM(emc_mrs_reset_dll); + /* Specifies the command for ZQ initialization of device 0 */ + CASE_GET_SDRAM_PARAM(emc_zcal_init_dev0); + /* Specifies the command for ZQ initialization of device 1 */ + CASE_GET_SDRAM_PARAM(emc_zcal_init_dev1); + /* + * Specifies the wait time after programming a ZQ initialization + * command (in microseconds) + */ + CASE_GET_SDRAM_PARAM(emc_zcal_init_wait); + /* + * Specifies the enable for ZQ calibration at cold boot [bit 0] + * and warm boot [bit 1] + */ + CASE_GET_SDRAM_PARAM(emc_zcal_warm_cold_boot_enables); + + /* + * Specifies the MRW command to LPDDR2 for ZQ calibration + * on warmboot + */ + /* Is issued to both devices separately */ + CASE_GET_SDRAM_PARAM(emc_mrw_lpddr2zcal_warm_boot); + /* + * Specifies the ZQ command to DDR3 for ZQ calibration on warmboot + * Is issued to both devices separately + */ + CASE_GET_SDRAM_PARAM(emc_zqcal_ddr3_warm_boot); + + CASE_GET_SDRAM_PARAM(emc_zqcal_lpddr4_warm_boot); + + /* + * Specifies the wait time for ZQ calibration on warmboot + * (in microseconds) + */ + CASE_GET_SDRAM_PARAM(emc_zcal_warm_boot_wait); + /* + * Specifies the enable for DRAM Mode Register programming + * at warm boot + */ + CASE_GET_SDRAM_PARAM(emc_mrs_warm_boot_enable); + /* + * Specifies the wait time after sending an MRS DLL reset command + * in microseconds) + */ + CASE_GET_SDRAM_PARAM(emc_mrs_reset_dll_wait); + /* Specifies the extra MRS command to initialize mode registers */ + CASE_GET_SDRAM_PARAM(emc_mrs_extra); + /* Specifies the extra MRS command at warm boot */ + CASE_GET_SDRAM_PARAM(emc_warm_boot_mrs_extra); + /* Specifies the EMRS command to enable the DDR2 DLL */ + CASE_GET_SDRAM_PARAM(emc_emrs_ddr2_dll_enable); + /* Specifies the MRS command to reset the DDR2 DLL */ + CASE_GET_SDRAM_PARAM(emc_mrs_ddr2_dll_reset); + /* Specifies the EMRS command to set OCD calibration */ + CASE_GET_SDRAM_PARAM(emc_emrs_ddr2_ocd_calib); + /* + * Specifies the wait between initializing DDR and setting OCD + * calibration (in microseconds) + */ + CASE_GET_SDRAM_PARAM(emc_ddr2_wait); + /* Specifies the value for EMC_CLKEN_OVERRIDE */ + CASE_GET_SDRAM_PARAM(emc_clken_override); + /* + * Specifies LOG2 of the extra refresh numbers after booting + * Program 0 to disable + */ + CASE_GET_SDRAM_PARAM(emc_extra_refresh_num); + /* Specifies the master override for all EMC clocks */ + CASE_GET_SDRAM_PARAM(emc_clken_override_allwarm_boot); + /* Specifies the master override for all MC clocks */ + CASE_GET_SDRAM_PARAM(mc_clken_override_allwarm_boot); + /* Specifies digital dll period, choosing between 4 to 64 ms */ + CASE_GET_SDRAM_PARAM(emc_cfg_dig_dll_period_warm_boot); + + /* Pad controls */ + + /* Specifies the value for PMC_VDDP_SEL */ + CASE_GET_SDRAM_PARAM(pmc_vddp_sel); + /* Specifies the wait time after programming PMC_VDDP_SEL */ + CASE_GET_SDRAM_PARAM(pmc_vddp_sel_wait); + /* Specifies the value for PMC_DDR_PWR */ + CASE_GET_SDRAM_PARAM(pmc_ddr_pwr); + /* Specifies the value for PMC_DDR_CFG */ + CASE_GET_SDRAM_PARAM(pmc_ddr_cfg); + /* Specifies the value for PMC_IO_DPD3_REQ */ + CASE_GET_SDRAM_PARAM(pmc_io_dpd3_req); + /* Specifies the wait time after programming PMC_IO_DPD3_REQ */ + CASE_GET_SDRAM_PARAM(pmc_io_dpd3_req_wait); + + CASE_GET_SDRAM_PARAM(pmc_io_dpd4_req_wait); + + /* Specifies the value for PMC_REG_SHORT */ + CASE_GET_SDRAM_PARAM(pmc_reg_short); + /* Specifies the value for PMC_NO_IOPOWER */ + CASE_GET_SDRAM_PARAM(pmc_no_io_power); + + CASE_GET_SDRAM_PARAM(pmc_ddr_ctrl_wait); + CASE_GET_SDRAM_PARAM(pmc_ddr_ctrl); + + /* Specifies the value for EMC_ACPD_CONTROL */ + CASE_GET_SDRAM_PARAM(emc_acpd_control); + + /* Specifies the value for EMC_SWIZZLE_RANK0_BYTE0 */ + CASE_GET_SDRAM_PARAM(emc_swizzle_rank0_byte0); + /* Specifies the value for EMC_SWIZZLE_RANK0_BYTE1 */ + CASE_GET_SDRAM_PARAM(emc_swizzle_rank0_byte1); + /* Specifies the value for EMC_SWIZZLE_RANK0_BYTE2 */ + CASE_GET_SDRAM_PARAM(emc_swizzle_rank0_byte2); + /* Specifies the value for EMC_SWIZZLE_RANK0_BYTE3 */ + CASE_GET_SDRAM_PARAM(emc_swizzle_rank0_byte3); + /* Specifies the value for EMC_SWIZZLE_RANK1_BYTE0 */ + CASE_GET_SDRAM_PARAM(emc_swizzle_rank1_byte0); + /* Specifies the value for EMC_SWIZZLE_RANK1_BYTE1 */ + CASE_GET_SDRAM_PARAM(emc_swizzle_rank1_byte1); + /* Specifies the value for EMC_SWIZZLE_RANK1_BYTE2 */ + CASE_GET_SDRAM_PARAM(emc_swizzle_rank1_byte2); + /* Specifies the value for EMC_SWIZZLE_RANK1_BYTE3 */ + CASE_GET_SDRAM_PARAM(emc_swizzle_rank1_byte3); + + /* Specifies the value for EMC_TXDSRVTTGEN */ + CASE_GET_SDRAM_PARAM(emc_txdsrvttgen); + + /* Specifies the value for EMC_DATA_BRLSHFT_0 */ + CASE_GET_SDRAM_PARAM(emc_data_brlshft0); + CASE_GET_SDRAM_PARAM(emc_data_brlshft1); + + CASE_GET_SDRAM_PARAM(emc_dqs_brlshft0); + CASE_GET_SDRAM_PARAM(emc_dqs_brlshft1); + + CASE_GET_SDRAM_PARAM(emc_cmd_brlshft0); + CASE_GET_SDRAM_PARAM(emc_cmd_brlshft1); + CASE_GET_SDRAM_PARAM(emc_cmd_brlshft2); + CASE_GET_SDRAM_PARAM(emc_cmd_brlshft3); + + CASE_GET_SDRAM_PARAM(emc_quse_brlshft0); + CASE_GET_SDRAM_PARAM(emc_quse_brlshft1); + CASE_GET_SDRAM_PARAM(emc_quse_brlshft2); + CASE_GET_SDRAM_PARAM(emc_quse_brlshft3); + + CASE_GET_SDRAM_PARAM(emc_dll_cfg0); + CASE_GET_SDRAM_PARAM(emc_dll_cfg1); + + CASE_GET_SDRAM_PARAM(emc_pmc_scratch1); + CASE_GET_SDRAM_PARAM(emc_pmc_scratch2); + CASE_GET_SDRAM_PARAM(emc_pmc_scratch3); + + CASE_GET_SDRAM_PARAM(emc_pmacro_pad_cfg_ctrl); + + CASE_GET_SDRAM_PARAM(emc_pmacro_vttgen_ctrl0); + CASE_GET_SDRAM_PARAM(emc_pmacro_vttgen_ctrl1); + CASE_GET_SDRAM_PARAM(emc_pmacro_vttgen_ctrl2); + + CASE_GET_SDRAM_PARAM(emc_pmacro_brick_ctrl_rfu1); + CASE_GET_SDRAM_PARAM(emc_pmacro_cmd_brick_ctrl_fdpd); + CASE_GET_SDRAM_PARAM(emc_pmacro_brick_ctrl_rfu2); + CASE_GET_SDRAM_PARAM(emc_pmacro_data_brick_ctrl_fdpd); + CASE_GET_SDRAM_PARAM(emc_pmacro_bg_bias_ctrl0); + CASE_GET_SDRAM_PARAM(emc_pmacro_data_pad_rx_ctrl); + CASE_GET_SDRAM_PARAM(emc_pmacro_cmd_pad_rx_ctrl); + CASE_GET_SDRAM_PARAM(emc_pmacro_data_rx_term_mode); + CASE_GET_SDRAM_PARAM(emc_pmacro_cmd_rx_term_mode); + CASE_GET_SDRAM_PARAM(emc_pmacro_data_pad_tx_ctrl); + CASE_GET_SDRAM_PARAM(emc_pmacro_common_pad_tx_ctrl); + CASE_GET_SDRAM_PARAM(emc_pmacro_cmd_pad_tx_ctrl); + CASE_GET_SDRAM_PARAM(emc_cfg3); + + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_pwrd0); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_pwrd1); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_pwrd2); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_pwrd3); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_pwrd4); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_pwrd5); + + CASE_GET_SDRAM_PARAM(emc_config_sample_delay); + + CASE_GET_SDRAM_PARAM(emc_pmacro_brick_mapping0); + CASE_GET_SDRAM_PARAM(emc_pmacro_brick_mapping1); + CASE_GET_SDRAM_PARAM(emc_pmacro_brick_mapping2); + + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src0); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src1); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src2); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src3); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src4); + CASE_GET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src5); + + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_bypass); + + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_pwrd0); + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_pwrd1); + CASE_GET_SDRAM_PARAM(emc_pmacro_ddll_pwrd2); + + CASE_GET_SDRAM_PARAM(emc_pmacro_cmd_ctrl0); + CASE_GET_SDRAM_PARAM(emc_pmacro_cmd_ctrl1); + CASE_GET_SDRAM_PARAM(emc_pmacro_cmd_ctrl2); + + /* DRAM size information */ + + /* Specifies the value for MC_EMEM_ADR_CFG */ + CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg); + /* Specifies the value for MC_EMEM_ADR_CFG_DEV0 */ + CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_dev0); + /* Specifies the value for MC_EMEM_ADR_CFG_DEV1 */ + CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_dev1); + + CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_channel_mask); + + /* Specifies the value for MC_EMEM_BANK_SWIZZLE_CFG0 */ + CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask0); + /* Specifies the value for MC_EMEM_BANK_SWIZZLE_CFG1 */ + CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask1); + /* Specifies the value for MC_EMEM_BANK_SWIZZLE_CFG2 */ + CASE_GET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask2); + + /* + * Specifies the value for MC_EMEM_CFG which holds the external memory + * size (in KBytes) + */ + CASE_GET_SDRAM_PARAM(mc_emem_cfg); + + /* MC arbitration configuration */ + + /* Specifies the value for MC_EMEM_ARB_CFG */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_cfg); + /* Specifies the value for MC_EMEM_ARB_OUTSTANDING_REQ */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_outstanding_req); + + CASE_GET_SDRAM_PARAM(emc_emem_arb_refpb_hp_ctrl); + CASE_GET_SDRAM_PARAM(emc_emem_arb_refpb_bank_ctrl); + + /* Specifies the value for MC_EMEM_ARB_TIMING_RCD */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rcd); + /* Specifies the value for MC_EMEM_ARB_TIMING_RP */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rp); + /* Specifies the value for MC_EMEM_ARB_TIMING_RC */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rc); + /* Specifies the value for MC_EMEM_ARB_TIMING_RAS */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_ras); + /* Specifies the value for MC_EMEM_ARB_TIMING_FAW */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_faw); + /* Specifies the value for MC_EMEM_ARB_TIMING_RRD */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rrd); + /* Specifies the value for MC_EMEM_ARB_TIMING_RAP2PRE */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rap2pre); + /* Specifies the value for MC_EMEM_ARB_TIMING_WAP2PRE */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_wap2pre); + /* Specifies the value for MC_EMEM_ARB_TIMING_R2R */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_r2r); + /* Specifies the value for MC_EMEM_ARB_TIMING_W2W */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_w2w); + /* Specifies the value for MC_EMEM_ARB_TIMING_R2W */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_r2w); + /* Specifies the value for MC_EMEM_ARB_TIMING_W2R */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_w2r); + + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_rfcpb); + + /* Specifies the value for MC_EMEM_ARB_DA_TURNS */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_da_turns); + /* Specifies the value for MC_EMEM_ARB_DA_COVERS */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_da_covers); + /* Specifies the value for MC_EMEM_ARB_MISC0 */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_misc0); + /* Specifies the value for MC_EMEM_ARB_MISC1 */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_misc1); + CASE_GET_SDRAM_PARAM(mc_emem_arb_misc2); + + /* Specifies the value for MC_EMEM_ARB_RING1_THROTTLE */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_ring1_throttle); + /* Specifies the value for MC_EMEM_ARB_OVERRIDE */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_override); + /* Specifies the value for MC_EMEM_ARB_OVERRIDE_1 */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_override1); + /* Specifies the value for MC_EMEM_ARB_RSV */ + CASE_GET_SDRAM_PARAM(mc_emem_arb_rsv); + + CASE_GET_SDRAM_PARAM(mc_da_cfg0); + CASE_GET_SDRAM_PARAM(mc_emem_arb_timing_ccdmw); + + /* Specifies the value for MC_CLKEN_OVERRIDE */ + CASE_GET_SDRAM_PARAM(mc_clken_override); + + /* Specifies the value for MC_STAT_CONTROL */ + CASE_GET_SDRAM_PARAM(mc_stat_control); + /* Specifies the value for MC_VIDEO_PROTECT_BOM */ + CASE_GET_SDRAM_PARAM(mc_video_protect_bom); + /* Specifies the value for MC_VIDEO_PROTECT_BOM_ADR_HI */ + CASE_GET_SDRAM_PARAM(mc_video_protect_bom_adr_hi); + /* Specifies the value for MC_VIDEO_PROTECT_SIZE_MB */ + CASE_GET_SDRAM_PARAM(mc_video_protect_size_mb); + /* Specifies the value for MC_VIDEO_PROTECT_VPR_OVERRIDE */ + CASE_GET_SDRAM_PARAM(mc_video_protect_vpr_override); + /* Specifies the value for MC_VIDEO_PROTECT_VPR_OVERRIDE1 */ + CASE_GET_SDRAM_PARAM(mc_video_protect_vpr_override1); + /* Specifies the value for MC_VIDEO_PROTECT_GPU_OVERRIDE_0 */ + CASE_GET_SDRAM_PARAM(mc_video_protect_gpu_override0); + /* Specifies the value for MC_VIDEO_PROTECT_GPU_OVERRIDE_1 */ + CASE_GET_SDRAM_PARAM(mc_video_protect_gpu_override1); + /* Specifies the value for MC_SEC_CARVEOUT_BOM */ + CASE_GET_SDRAM_PARAM(mc_sec_carveout_bom); + /* Specifies the value for MC_SEC_CARVEOUT_ADR_HI */ + CASE_GET_SDRAM_PARAM(mc_sec_carveout_adr_hi); + /* Specifies the value for MC_SEC_CARVEOUT_SIZE_MB */ + CASE_GET_SDRAM_PARAM(mc_sec_carveout_size_mb); + /* Specifies the value for MC_VIDEO_PROTECT_REG_CTRL.VIDEO_PROTECT_WRITE_ACCESS */ + CASE_GET_SDRAM_PARAM(mc_video_protect_write_access); + /* Specifies the value for MC_SEC_CARVEOUT_REG_CTRL.SEC_CARVEOUT_WRITE_ACCESS */ + CASE_GET_SDRAM_PARAM(mc_sec_carveout_protect_write_access); + + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_bom); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_bom_hi); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_size_128kb); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout1_cfg0); + + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_bom); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_bom_hi); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_size_128kb); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout2_cfg0); + + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_bom); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_bom_hi); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_size_128kb); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout3_cfg0); + + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_bom); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_bom_hi); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_size_128kb); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout4_cfg0); + + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_bom); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_bom_hi); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_size_128kb); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access0); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access1); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access2); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access3); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access4); + CASE_GET_SDRAM_PARAM(mc_generalized_carveout5_cfg0); + + /* Specifies enable for CA training */ + CASE_GET_SDRAM_PARAM(emc_ca_training_enable); + /* Set if bit 6 select is greater than bit 7 select); uses aremc.spec packet SWIZZLE_BIT6_GT_BIT7 */ + CASE_GET_SDRAM_PARAM(swizzle_rank_byte_encode); + /* Specifies enable and offset for patched boot rom write */ + CASE_GET_SDRAM_PARAM(boot_rom_patch_control); + /* Specifies data for patched boot rom write */ + CASE_GET_SDRAM_PARAM(boot_rom_patch_data); + + /* Specifies the value for MC_MTS_CARVEOUT_BOM */ + CASE_GET_SDRAM_PARAM(mc_mts_carveout_bom); + /* Specifies the value for MC_MTS_CARVEOUT_ADR_HI */ + CASE_GET_SDRAM_PARAM(mc_mts_carveout_adr_hi); + /* Specifies the value for MC_MTS_CARVEOUT_SIZE_MB */ + CASE_GET_SDRAM_PARAM(mc_mts_carveout_size_mb); + /* Specifies the value for MC_MTS_CARVEOUT_REG_CTRL */ + CASE_GET_SDRAM_PARAM(mc_mts_carveout_reg_ctrl); + DEFAULT(); + } + return 0; +} + +int +t210_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) { + /* Specifies the type of memory device */ + CASE_SET_SDRAM_PARAM(memory_type); + + /* MC/EMC clock source configuration */ + + /* Specifies the M value for PllM */ + CASE_SET_SDRAM_PARAM(pllm_input_divider); + /* Specifies the N value for PllM */ + CASE_SET_SDRAM_PARAM(pllm_feedback_divider); + /* Specifies the time to wait for PLLM to lock (in microseconds) */ + CASE_SET_SDRAM_PARAM(pllm_stable_time); + /* Specifies misc. control bits */ + CASE_SET_SDRAM_PARAM(pllm_setup_control); + /* Specifies the P value for PLLM */ + CASE_SET_SDRAM_PARAM(pllm_post_divider); + /* Specifies value for Charge Pump Gain Control */ + CASE_SET_SDRAM_PARAM(pllm_kcp); + /* Specifies VCO gain */ + CASE_SET_SDRAM_PARAM(pllm_kvco); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare0); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare1); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare2); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare3); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare4); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare5); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare6); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare7); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare8); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare9); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare10); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare11); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare12); + /* Spare BCT param */ + CASE_SET_SDRAM_PARAM(emc_bct_spare13); + + /* Defines EMC_2X_CLK_SRC, EMC_2X_CLK_DIVISOR, EMC_INVERT_DCD */ + CASE_SET_SDRAM_PARAM(emc_clock_source); + CASE_SET_SDRAM_PARAM(emc_clock_source_dll); + + /* Defines possible override for PLLLM_MISC2 */ + CASE_SET_SDRAM_PARAM(clk_rst_pllm_misc20_override); + /* enables override for PLLLM_MISC2 */ + CASE_SET_SDRAM_PARAM(clk_rst_pllm_misc20_override_enable); + /* defines CLK_ENB_MC1 in register clk_rst_controller_clk_enb_w_clr */ + CASE_SET_SDRAM_PARAM(clear_clock2_mc1); + + /* Auto-calibration of EMC pads */ + + /* Specifies the value for EMC_AUTO_CAL_INTERVAL */ + CASE_SET_SDRAM_PARAM(emc_auto_cal_interval); + /* + * Specifies the value for EMC_AUTO_CAL_CONFIG + * Note: Trigger bits are set by the SDRAM code. + */ + CASE_SET_SDRAM_PARAM(emc_auto_cal_config); + + /* Specifies the value for EMC_AUTO_CAL_CONFIG2 */ + CASE_SET_SDRAM_PARAM(emc_auto_cal_config2); + + /* Specifies the value for EMC_AUTO_CAL_CONFIG3 */ + CASE_SET_SDRAM_PARAM(emc_auto_cal_config3); + + CASE_SET_SDRAM_PARAM(emc_auto_cal_config4); + CASE_SET_SDRAM_PARAM(emc_auto_cal_config5); + CASE_SET_SDRAM_PARAM(emc_auto_cal_config6); + CASE_SET_SDRAM_PARAM(emc_auto_cal_config7); + CASE_SET_SDRAM_PARAM(emc_auto_cal_config8); + /* Specifies the value for EMC_AUTO_CAL_VREF_SEL_0 */ + CASE_SET_SDRAM_PARAM(emc_auto_cal_vref_sel0); + CASE_SET_SDRAM_PARAM(emc_auto_cal_vref_sel1); + + /* Specifies the value for EMC_AUTO_CAL_CHANNEL */ + CASE_SET_SDRAM_PARAM(emc_auto_cal_channel); + + /* Specifies the value for EMC_PMACRO_AUTOCAL_CFG_0 */ + CASE_SET_SDRAM_PARAM(emc_pmacro_auto_cal_cfg0); + CASE_SET_SDRAM_PARAM(emc_pmacro_auto_cal_cfg1); + CASE_SET_SDRAM_PARAM(emc_pmacro_auto_cal_cfg2); + + CASE_SET_SDRAM_PARAM(emc_pmacro_rx_term); + CASE_SET_SDRAM_PARAM(emc_pmacro_dq_tx_drive); + CASE_SET_SDRAM_PARAM(emc_pmacro_ca_tx_drive); + CASE_SET_SDRAM_PARAM(emc_pmacro_cmd_tx_drive); + CASE_SET_SDRAM_PARAM(emc_pmacro_auto_cal_common); + CASE_SET_SDRAM_PARAM(emc_pmacro_zcrtl); + + /* + * Specifies the time for the calibration + * to stabilize (in microseconds) + */ + CASE_SET_SDRAM_PARAM(emc_auto_cal_wait); + + CASE_SET_SDRAM_PARAM(emc_xm2_comp_pad_ctrl); + CASE_SET_SDRAM_PARAM(emc_xm2_comp_pad_ctrl2); + CASE_SET_SDRAM_PARAM(emc_xm2_comp_pad_ctrl3); + + /* + * DRAM size information + * Specifies the value for EMC_ADR_CFG + */ + CASE_SET_SDRAM_PARAM(emc_adr_cfg); + + /* + * Specifies the time to wait after asserting pin + * CKE (in microseconds) + */ + CASE_SET_SDRAM_PARAM(emc_pin_program_wait); + /* Specifies the extra delay before/after pin RESET/CKE command */ + CASE_SET_SDRAM_PARAM(emc_pin_extra_wait); + + CASE_SET_SDRAM_PARAM(emc_pin_gpio_enable); + CASE_SET_SDRAM_PARAM(emc_pin_gpio); + + /* + * Specifies the extra delay after the first writing + * of EMC_TIMING_CONTROL + */ + CASE_SET_SDRAM_PARAM(emc_timing_control_wait); + + /* Timing parameters required for the SDRAM */ + + /* Specifies the value for EMC_RC */ + CASE_SET_SDRAM_PARAM(emc_rc); + /* Specifies the value for EMC_RFC */ + CASE_SET_SDRAM_PARAM(emc_rfc); + + CASE_SET_SDRAM_PARAM(emc_rfc_pb); + CASE_SET_SDRAM_PARAM(emc_ref_ctrl2); + + /* Specifies the value for EMC_RFC_SLR */ + CASE_SET_SDRAM_PARAM(emc_rfc_slr); + /* Specifies the value for EMC_RAS */ + CASE_SET_SDRAM_PARAM(emc_ras); + /* Specifies the value for EMC_RP */ + CASE_SET_SDRAM_PARAM(emc_rp); + /* Specifies the value for EMC_R2R */ + CASE_SET_SDRAM_PARAM(emc_r2r); + /* Specifies the value for EMC_W2W */ + CASE_SET_SDRAM_PARAM(emc_w2w); + /* Specifies the value for EMC_R2W */ + CASE_SET_SDRAM_PARAM(emc_r2w); + /* Specifies the value for EMC_W2R */ + CASE_SET_SDRAM_PARAM(emc_w2r); + /* Specifies the value for EMC_R2P */ + CASE_SET_SDRAM_PARAM(emc_r2p); + /* Specifies the value for EMC_W2P */ + CASE_SET_SDRAM_PARAM(emc_w2p); + /* Specifies the value for EMC_RD_RCD */ + + CASE_SET_SDRAM_PARAM(emc_tppd); + CASE_SET_SDRAM_PARAM(emc_ccdmw); + + CASE_SET_SDRAM_PARAM(emc_rd_rcd); + /* Specifies the value for EMC_WR_RCD */ + CASE_SET_SDRAM_PARAM(emc_wr_rcd); + /* Specifies the value for EMC_RRD */ + CASE_SET_SDRAM_PARAM(emc_rrd); + /* Specifies the value for EMC_REXT */ + CASE_SET_SDRAM_PARAM(emc_rext); + /* Specifies the value for EMC_WEXT */ + CASE_SET_SDRAM_PARAM(emc_wext); + /* Specifies the value for EMC_WDV */ + CASE_SET_SDRAM_PARAM(emc_wdv); + + CASE_SET_SDRAM_PARAM(emc_wdv_chk); + CASE_SET_SDRAM_PARAM(emc_wsv); + CASE_SET_SDRAM_PARAM(emc_wev); + + /* Specifies the value for EMC_WDV_MASK */ + CASE_SET_SDRAM_PARAM(emc_wdv_mask); + + CASE_SET_SDRAM_PARAM(emc_ws_duration); + CASE_SET_SDRAM_PARAM(emc_we_duration); + + /* Specifies the value for EMC_QUSE */ + CASE_SET_SDRAM_PARAM(emc_quse); + /* Specifies the value for EMC_QUSE_WIDTH */ + CASE_SET_SDRAM_PARAM(emc_quse_width); + /* Specifies the value for EMC_IBDLY */ + CASE_SET_SDRAM_PARAM(emc_ibdly); + + CASE_SET_SDRAM_PARAM(emc_obdly); + + /* Specifies the value for EMC_EINPUT */ + CASE_SET_SDRAM_PARAM(emc_einput); + /* Specifies the value for EMC_EINPUT_DURATION */ + CASE_SET_SDRAM_PARAM(emc_einput_duration); + /* Specifies the value for EMC_PUTERM_EXTRA */ + CASE_SET_SDRAM_PARAM(emc_puterm_extra); + /* Specifies the value for EMC_PUTERM_WIDTH */ + CASE_SET_SDRAM_PARAM(emc_puterm_width); + + 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_rdv_early); + CASE_SET_SDRAM_PARAM(emc_rdv_early_mask); + + /* Specifies the value for EMC_QPOP */ + CASE_SET_SDRAM_PARAM(emc_qpop); + + /* Specifies the value for EMC_REFRESH */ + CASE_SET_SDRAM_PARAM(emc_refresh); + /* Specifies the value for EMC_BURST_REFRESH_NUM */ + CASE_SET_SDRAM_PARAM(emc_burst_refresh_num); + /* Specifies the value for EMC_PRE_REFRESH_REQ_CNT */ + CASE_SET_SDRAM_PARAM(emc_prerefresh_req_cnt); + /* Specifies the value for EMC_PDEX2WR */ + CASE_SET_SDRAM_PARAM(emc_pdex2wr); + /* Specifies the value for EMC_PDEX2RD */ + CASE_SET_SDRAM_PARAM(emc_pdex2rd); + /* Specifies the value for EMC_PCHG2PDEN */ + CASE_SET_SDRAM_PARAM(emc_pchg2pden); + /* Specifies the value for EMC_ACT2PDEN */ + CASE_SET_SDRAM_PARAM(emc_act2pden); + /* Specifies the value for EMC_AR2PDEN */ + CASE_SET_SDRAM_PARAM(emc_ar2pden); + /* Specifies the value for EMC_RW2PDEN */ + CASE_SET_SDRAM_PARAM(emc_rw2pden); + + CASE_SET_SDRAM_PARAM(emc_cke2pden); + CASE_SET_SDRAM_PARAM(emc_pdex2che); + CASE_SET_SDRAM_PARAM(emc_pdex2mrr); + + /* Specifies the value for EMC_TXSR */ + CASE_SET_SDRAM_PARAM(emc_txsr); + /* Specifies the value for EMC_TXSRDLL */ + CASE_SET_SDRAM_PARAM(emc_txsr_dll); + /* Specifies the value for EMC_TCKE */ + CASE_SET_SDRAM_PARAM(emc_tcke); + /* Specifies the value for EMC_TCKESR */ + CASE_SET_SDRAM_PARAM(emc_tckesr); + /* Specifies the value for EMC_TPD */ + CASE_SET_SDRAM_PARAM(emc_tpd); + /* Specifies the value for EMC_TFAW */ + CASE_SET_SDRAM_PARAM(emc_tfaw); + /* Specifies the value for EMC_TRPAB */ + CASE_SET_SDRAM_PARAM(emc_trpab); + /* Specifies the value for EMC_TCLKSTABLE */ + CASE_SET_SDRAM_PARAM(emc_tclkstable); + /* Specifies the value for EMC_TCLKSTOP */ + CASE_SET_SDRAM_PARAM(emc_tclkstop); + /* Specifies the value for EMC_TREFBW */ + CASE_SET_SDRAM_PARAM(emc_trefbw); + + /* FBIO configuration values */ + + /* Specifies the value for EMC_FBIO_CFG5 */ + CASE_SET_SDRAM_PARAM(emc_fbio_cfg5); + /* Specifies the value for EMC_FBIO_CFG7 */ + CASE_SET_SDRAM_PARAM(emc_fbio_cfg7); + CASE_SET_SDRAM_PARAM(emc_fbio_cfg8); + + /* Command mapping for CMD brick 0 */ + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd0_0); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd0_1); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd0_2); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd1_0); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd1_1); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd1_2); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd2_0); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd2_1); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd2_2); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd3_0); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd3_1); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_cmd3_2); + CASE_SET_SDRAM_PARAM(emc_cmd_mapping_byte); + + /* Specifies the value for EMC_FBIO_SPARE */ + CASE_SET_SDRAM_PARAM(emc_fbio_spare); + + /* Specifies the value for EMC_CFG_RSV */ + CASE_SET_SDRAM_PARAM(emc_cfg_rsv); + + /* MRS command values */ + + /* Specifies the value for EMC_MRS */ + CASE_SET_SDRAM_PARAM(emc_mrs); + /* Specifies the MP0 command to initialize mode registers */ + CASE_SET_SDRAM_PARAM(emc_emrs); + /* Specifies the MP2 command to initialize mode registers */ + CASE_SET_SDRAM_PARAM(emc_emrs2); + /* Specifies the MP3 command to initialize mode registers */ + CASE_SET_SDRAM_PARAM(emc_emrs3); + /* Specifies the programming to LPDDR2 Mode Register 1 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw1); + /* Specifies the programming to LPDDR2 Mode Register 2 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw2); + /* Specifies the programming to LPDDR2 Mode Register 3 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw3); + /* Specifies the programming to LPDDR2 Mode Register 11 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw4); + + /* Specifies the programming to LPDDR4 Mode Register 3 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw6); + /* Specifies the programming to LPDDR4 Mode Register 11 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw8); + /* Specifies the programming to LPDDR4 Mode Register 11 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw9); + /* Specifies the programming to LPDDR4 Mode Register 12 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw10); + /* Specifies the programming to LPDDR4 Mode Register 14 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw12); + /* Specifies the programming to LPDDR4 Mode Register 14 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw13); + /* Specifies the programming to LPDDR4 Mode Register 22 at cold boot */ + CASE_SET_SDRAM_PARAM(emc_mrw14); + + /* + * Specifies the programming to extra LPDDR2 Mode Register + * at cold boot + */ + CASE_SET_SDRAM_PARAM(emc_mrw_extra); + /* + * Specifies the programming to extra LPDDR2 Mode Register + * at warm boot + */ + CASE_SET_SDRAM_PARAM(emc_warm_boot_mrw_extra); + /* + * Specify the enable of extra Mode Register programming at + * warm boot + */ + CASE_SET_SDRAM_PARAM(emc_warm_boot_extramode_reg_write_enable); + /* + * Specify the enable of extra Mode Register programming at + * cold boot + */ + CASE_SET_SDRAM_PARAM(emc_extramode_reg_write_enable); + + /* Specifies the EMC_MRW reset command value */ + CASE_SET_SDRAM_PARAM(emc_mrw_reset_command); + /* Specifies the EMC Reset wait time (in microseconds) */ + CASE_SET_SDRAM_PARAM(emc_mrw_reset_ninit_wait); + /* Specifies the value for EMC_MRS_WAIT_CNT */ + CASE_SET_SDRAM_PARAM(emc_mrs_wait_cnt); + /* Specifies the value for EMC_MRS_WAIT_CNT2 */ + CASE_SET_SDRAM_PARAM(emc_mrs_wait_cnt2); + + /* EMC miscellaneous configurations */ + + /* Specifies the value for EMC_CFG */ + CASE_SET_SDRAM_PARAM(emc_cfg); + /* Specifies the value for EMC_CFG_2 */ + CASE_SET_SDRAM_PARAM(emc_cfg2); + /* Specifies the pipe bypass controls */ + CASE_SET_SDRAM_PARAM(emc_cfg_pipe); + + CASE_SET_SDRAM_PARAM(emc_cfg_pipe_clk); + CASE_SET_SDRAM_PARAM(emc_fdpd_ctrl_cmd_no_ramp); + CASE_SET_SDRAM_PARAM(emc_cfg_update); + + /* Specifies the value for EMC_DBG */ + CASE_SET_SDRAM_PARAM(emc_dbg); + + CASE_SET_SDRAM_PARAM(emc_dbg_write_mux); + + /* Specifies the value for EMC_CMDQ */ + CASE_SET_SDRAM_PARAM(emc_cmd_q); + /* Specifies the value for EMC_MC2EMCQ */ + CASE_SET_SDRAM_PARAM(emc_mc2emc_q); + /* Specifies the value for EMC_DYN_SELF_REF_CONTROL */ + CASE_SET_SDRAM_PARAM(emc_dyn_self_ref_control); + + /* Specifies the value for MEM_INIT_DONE */ + CASE_SET_SDRAM_PARAM(ahb_arbitration_xbar_ctrl_meminit_done); + + /* Specifies the value for EMC_CFG_DIG_DLL */ + CASE_SET_SDRAM_PARAM(emc_cfg_dig_dll); + CASE_SET_SDRAM_PARAM(emc_cfg_dig_dll_1); + + /* Specifies the value for EMC_CFG_DIG_DLL_PERIOD */ + CASE_SET_SDRAM_PARAM(emc_cfg_dig_dll_period); + /* Specifies the value of *DEV_SELECTN of various EMC registers */ + CASE_SET_SDRAM_PARAM(emc_dev_select); + + /* Specifies the value for EMC_SEL_DPD_CTRL */ + CASE_SET_SDRAM_PARAM(emc_sel_dpd_ctrl); + + /* Pads trimmer delays */ + CASE_SET_SDRAM_PARAM(emc_fdpd_ctrl_dq); + CASE_SET_SDRAM_PARAM(emc_fdpd_ctrl_cmd); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_vref_dq_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_vref_dq_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_vref_dqs_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_vref_dqs_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_rxrt); + CASE_SET_SDRAM_PARAM(emc_cfg_pipe1); + CASE_SET_SDRAM_PARAM(emc_cfg_pipe2); + + /* Specifies the value for EMC_PMACRO_QUSE_DDLL_RANK0_0 */ + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_2); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_3); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_4); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank0_5); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_2); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_3); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_4); + CASE_SET_SDRAM_PARAM(emc_pmacro_quse_ddll_rank1_5); + + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_2); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_3); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_4); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank0_5); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_2); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_3); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_4); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dq_rank1_5); + + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_2); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_3); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_4); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank0_5); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_2); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_3); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_4); + CASE_SET_SDRAM_PARAM(emc_pmacro_ob_ddll_long_dqs_rank1_5); + + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank0_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank0_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank0_2); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank0_3); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank1_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank1_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank1_2); + CASE_SET_SDRAM_PARAM(emc_pmacro_ib_ddll_long_dqs_rank1_3); + + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_2); + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_3); + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_long_cmd_4); + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_short_cmd_0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_short_cmd_1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_short_cmd_2); + + /* + * Specifies the delay after asserting CKE pin during a WarmBoot0 + * sequence (in microseconds) + */ + CASE_SET_SDRAM_PARAM(warm_boot_wait); + + /* Specifies the value for EMC_ODT_WRITE */ + CASE_SET_SDRAM_PARAM(emc_odt_write); + + /* Periodic ZQ calibration */ + + /* + * Specifies the value for EMC_ZCAL_INTERVAL + * Value 0 disables ZQ calibration + */ + CASE_SET_SDRAM_PARAM(emc_zcal_interval); + /* Specifies the value for EMC_ZCAL_WAIT_CNT */ + CASE_SET_SDRAM_PARAM(emc_zcal_wait_cnt); + /* Specifies the value for EMC_ZCAL_MRW_CMD */ + CASE_SET_SDRAM_PARAM(emc_zcal_mrw_cmd); + + /* DRAM initialization sequence flow control */ + + /* Specifies the MRS command value for resetting DLL */ + CASE_SET_SDRAM_PARAM(emc_mrs_reset_dll); + /* Specifies the command for ZQ initialization of device 0 */ + CASE_SET_SDRAM_PARAM(emc_zcal_init_dev0); + /* Specifies the command for ZQ initialization of device 1 */ + CASE_SET_SDRAM_PARAM(emc_zcal_init_dev1); + /* + * Specifies the wait time after programming a ZQ initialization + * command (in microseconds) + */ + CASE_SET_SDRAM_PARAM(emc_zcal_init_wait); + /* + * Specifies the enable for ZQ calibration at cold boot [bit 0] + * and warm boot [bit 1] + */ + CASE_SET_SDRAM_PARAM(emc_zcal_warm_cold_boot_enables); + + /* + * Specifies the MRW command to LPDDR2 for ZQ calibration + * on warmboot + */ + /* Is issued to both devices separately */ + CASE_SET_SDRAM_PARAM(emc_mrw_lpddr2zcal_warm_boot); + /* + * Specifies the ZQ command to DDR3 for ZQ calibration on warmboot + * Is issued to both devices separately + */ + CASE_SET_SDRAM_PARAM(emc_zqcal_ddr3_warm_boot); + + CASE_SET_SDRAM_PARAM(emc_zqcal_lpddr4_warm_boot); + + /* + * Specifies the wait time for ZQ calibration on warmboot + * (in microseconds) + */ + CASE_SET_SDRAM_PARAM(emc_zcal_warm_boot_wait); + /* + * Specifies the enable for DRAM Mode Register programming + * at warm boot + */ + CASE_SET_SDRAM_PARAM(emc_mrs_warm_boot_enable); + /* + * Specifies the wait time after sending an MRS DLL reset command + * in microseconds) + */ + CASE_SET_SDRAM_PARAM(emc_mrs_reset_dll_wait); + /* Specifies the extra MRS command to initialize mode registers */ + CASE_SET_SDRAM_PARAM(emc_mrs_extra); + /* Specifies the extra MRS command at warm boot */ + CASE_SET_SDRAM_PARAM(emc_warm_boot_mrs_extra); + /* Specifies the EMRS command to enable the DDR2 DLL */ + CASE_SET_SDRAM_PARAM(emc_emrs_ddr2_dll_enable); + /* Specifies the MRS command to reset the DDR2 DLL */ + CASE_SET_SDRAM_PARAM(emc_mrs_ddr2_dll_reset); + /* Specifies the EMRS command to set OCD calibration */ + CASE_SET_SDRAM_PARAM(emc_emrs_ddr2_ocd_calib); + /* + * Specifies the wait between initializing DDR and setting OCD + * calibration (in microseconds) + */ + CASE_SET_SDRAM_PARAM(emc_ddr2_wait); + /* Specifies the value for EMC_CLKEN_OVERRIDE */ + CASE_SET_SDRAM_PARAM(emc_clken_override); + /* + * Specifies LOG2 of the extra refresh numbers after booting + * Program 0 to disable + */ + CASE_SET_SDRAM_PARAM(emc_extra_refresh_num); + /* Specifies the master override for all EMC clocks */ + CASE_SET_SDRAM_PARAM(emc_clken_override_allwarm_boot); + /* Specifies the master override for all MC clocks */ + CASE_SET_SDRAM_PARAM(mc_clken_override_allwarm_boot); + /* Specifies digital dll period, choosing between 4 to 64 ms */ + CASE_SET_SDRAM_PARAM(emc_cfg_dig_dll_period_warm_boot); + + /* Pad controls */ + + /* Specifies the value for PMC_VDDP_SEL */ + CASE_SET_SDRAM_PARAM(pmc_vddp_sel); + /* Specifies the wait time after programming PMC_VDDP_SEL */ + CASE_SET_SDRAM_PARAM(pmc_vddp_sel_wait); + /* Specifies the value for PMC_DDR_PWR */ + CASE_SET_SDRAM_PARAM(pmc_ddr_pwr); + /* Specifies the value for PMC_DDR_CFG */ + CASE_SET_SDRAM_PARAM(pmc_ddr_cfg); + /* Specifies the value for PMC_IO_DPD3_REQ */ + CASE_SET_SDRAM_PARAM(pmc_io_dpd3_req); + /* Specifies the wait time after programming PMC_IO_DPD3_REQ */ + CASE_SET_SDRAM_PARAM(pmc_io_dpd3_req_wait); + + CASE_SET_SDRAM_PARAM(pmc_io_dpd4_req_wait); + + /* Specifies the value for PMC_REG_SHORT */ + CASE_SET_SDRAM_PARAM(pmc_reg_short); + /* Specifies the value for PMC_NO_IOPOWER */ + CASE_SET_SDRAM_PARAM(pmc_no_io_power); + + CASE_SET_SDRAM_PARAM(pmc_ddr_ctrl_wait); + CASE_SET_SDRAM_PARAM(pmc_ddr_ctrl); + + /* Specifies the value for EMC_ACPD_CONTROL */ + CASE_SET_SDRAM_PARAM(emc_acpd_control); + + /* Specifies the value for EMC_SWIZZLE_RANK0_BYTE0 */ + CASE_SET_SDRAM_PARAM(emc_swizzle_rank0_byte0); + /* Specifies the value for EMC_SWIZZLE_RANK0_BYTE1 */ + CASE_SET_SDRAM_PARAM(emc_swizzle_rank0_byte1); + /* Specifies the value for EMC_SWIZZLE_RANK0_BYTE2 */ + CASE_SET_SDRAM_PARAM(emc_swizzle_rank0_byte2); + /* Specifies the value for EMC_SWIZZLE_RANK0_BYTE3 */ + CASE_SET_SDRAM_PARAM(emc_swizzle_rank0_byte3); + /* Specifies the value for EMC_SWIZZLE_RANK1_BYTE0 */ + CASE_SET_SDRAM_PARAM(emc_swizzle_rank1_byte0); + /* Specifies the value for EMC_SWIZZLE_RANK1_BYTE1 */ + CASE_SET_SDRAM_PARAM(emc_swizzle_rank1_byte1); + /* Specifies the value for EMC_SWIZZLE_RANK1_BYTE2 */ + CASE_SET_SDRAM_PARAM(emc_swizzle_rank1_byte2); + /* Specifies the value for EMC_SWIZZLE_RANK1_BYTE3 */ + CASE_SET_SDRAM_PARAM(emc_swizzle_rank1_byte3); + + /* Specifies the value for EMC_TXDSRVTTGEN */ + CASE_SET_SDRAM_PARAM(emc_txdsrvttgen); + + /* Specifies the value for EMC_DATA_BRLSHFT_0 */ + CASE_SET_SDRAM_PARAM(emc_data_brlshft0); + CASE_SET_SDRAM_PARAM(emc_data_brlshft1); + + CASE_SET_SDRAM_PARAM(emc_dqs_brlshft0); + CASE_SET_SDRAM_PARAM(emc_dqs_brlshft1); + + CASE_SET_SDRAM_PARAM(emc_cmd_brlshft0); + CASE_SET_SDRAM_PARAM(emc_cmd_brlshft1); + CASE_SET_SDRAM_PARAM(emc_cmd_brlshft2); + CASE_SET_SDRAM_PARAM(emc_cmd_brlshft3); + + CASE_SET_SDRAM_PARAM(emc_quse_brlshft0); + CASE_SET_SDRAM_PARAM(emc_quse_brlshft1); + CASE_SET_SDRAM_PARAM(emc_quse_brlshft2); + CASE_SET_SDRAM_PARAM(emc_quse_brlshft3); + + CASE_SET_SDRAM_PARAM(emc_dll_cfg0); + CASE_SET_SDRAM_PARAM(emc_dll_cfg1); + + CASE_SET_SDRAM_PARAM(emc_pmc_scratch1); + CASE_SET_SDRAM_PARAM(emc_pmc_scratch2); + CASE_SET_SDRAM_PARAM(emc_pmc_scratch3); + + CASE_SET_SDRAM_PARAM(emc_pmacro_pad_cfg_ctrl); + + CASE_SET_SDRAM_PARAM(emc_pmacro_vttgen_ctrl0); + CASE_SET_SDRAM_PARAM(emc_pmacro_vttgen_ctrl1); + CASE_SET_SDRAM_PARAM(emc_pmacro_vttgen_ctrl2); + + CASE_SET_SDRAM_PARAM(emc_pmacro_brick_ctrl_rfu1); + CASE_SET_SDRAM_PARAM(emc_pmacro_cmd_brick_ctrl_fdpd); + CASE_SET_SDRAM_PARAM(emc_pmacro_brick_ctrl_rfu2); + CASE_SET_SDRAM_PARAM(emc_pmacro_data_brick_ctrl_fdpd); + CASE_SET_SDRAM_PARAM(emc_pmacro_bg_bias_ctrl0); + CASE_SET_SDRAM_PARAM(emc_pmacro_data_pad_rx_ctrl); + CASE_SET_SDRAM_PARAM(emc_pmacro_cmd_pad_rx_ctrl); + CASE_SET_SDRAM_PARAM(emc_pmacro_data_rx_term_mode); + CASE_SET_SDRAM_PARAM(emc_pmacro_cmd_rx_term_mode); + CASE_SET_SDRAM_PARAM(emc_pmacro_data_pad_tx_ctrl); + CASE_SET_SDRAM_PARAM(emc_pmacro_common_pad_tx_ctrl); + CASE_SET_SDRAM_PARAM(emc_pmacro_cmd_pad_tx_ctrl); + CASE_SET_SDRAM_PARAM(emc_cfg3); + + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_pwrd0); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_pwrd1); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_pwrd2); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_pwrd3); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_pwrd4); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_pwrd5); + + CASE_SET_SDRAM_PARAM(emc_config_sample_delay); + + CASE_SET_SDRAM_PARAM(emc_pmacro_brick_mapping0); + CASE_SET_SDRAM_PARAM(emc_pmacro_brick_mapping1); + CASE_SET_SDRAM_PARAM(emc_pmacro_brick_mapping2); + + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src0); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src1); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src2); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src3); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src4); + CASE_SET_SDRAM_PARAM(emc_pmacro_tx_sel_clk_src5); + + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_bypass); + + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_pwrd0); + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_pwrd1); + CASE_SET_SDRAM_PARAM(emc_pmacro_ddll_pwrd2); + + CASE_SET_SDRAM_PARAM(emc_pmacro_cmd_ctrl0); + CASE_SET_SDRAM_PARAM(emc_pmacro_cmd_ctrl1); + CASE_SET_SDRAM_PARAM(emc_pmacro_cmd_ctrl2); + + /* DRAM size information */ + + /* Specifies the value for MC_EMEM_ADR_CFG */ + CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg); + /* Specifies the value for MC_EMEM_ADR_CFG_DEV0 */ + CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_dev0); + /* Specifies the value for MC_EMEM_ADR_CFG_DEV1 */ + CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_dev1); + + CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_channel_mask); + + /* Specifies the value for MC_EMEM_BANK_SWIZZLE_CFG0 */ + CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask0); + /* Specifies the value for MC_EMEM_BANK_SWIZZLE_CFG1 */ + CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask1); + /* Specifies the value for MC_EMEM_BANK_SWIZZLE_CFG2 */ + CASE_SET_SDRAM_PARAM(mc_emem_adr_cfg_bank_mask2); + + /* + * Specifies the value for MC_EMEM_CFG which holds the external memory + * size (in KBytes) + */ + CASE_SET_SDRAM_PARAM(mc_emem_cfg); + + /* MC arbitration configuration */ + + /* Specifies the value for MC_EMEM_ARB_CFG */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_cfg); + /* Specifies the value for MC_EMEM_ARB_OUTSTANDING_REQ */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_outstanding_req); + + CASE_SET_SDRAM_PARAM(emc_emem_arb_refpb_hp_ctrl); + CASE_SET_SDRAM_PARAM(emc_emem_arb_refpb_bank_ctrl); + + /* Specifies the value for MC_EMEM_ARB_TIMING_RCD */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rcd); + /* Specifies the value for MC_EMEM_ARB_TIMING_RP */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rp); + /* Specifies the value for MC_EMEM_ARB_TIMING_RC */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rc); + /* Specifies the value for MC_EMEM_ARB_TIMING_RAS */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_ras); + /* Specifies the value for MC_EMEM_ARB_TIMING_FAW */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_faw); + /* Specifies the value for MC_EMEM_ARB_TIMING_RRD */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rrd); + /* Specifies the value for MC_EMEM_ARB_TIMING_RAP2PRE */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rap2pre); + /* Specifies the value for MC_EMEM_ARB_TIMING_WAP2PRE */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_wap2pre); + /* Specifies the value for MC_EMEM_ARB_TIMING_R2R */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_r2r); + /* Specifies the value for MC_EMEM_ARB_TIMING_W2W */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_w2w); + /* Specifies the value for MC_EMEM_ARB_TIMING_R2W */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_r2w); + /* Specifies the value for MC_EMEM_ARB_TIMING_W2R */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_w2r); + + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_rfcpb); + + /* Specifies the value for MC_EMEM_ARB_DA_TURNS */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_da_turns); + /* Specifies the value for MC_EMEM_ARB_DA_COVERS */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_da_covers); + /* Specifies the value for MC_EMEM_ARB_MISC0 */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_misc0); + /* Specifies the value for MC_EMEM_ARB_MISC1 */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_misc1); + CASE_SET_SDRAM_PARAM(mc_emem_arb_misc2); + + /* Specifies the value for MC_EMEM_ARB_RING1_THROTTLE */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_ring1_throttle); + /* Specifies the value for MC_EMEM_ARB_OVERRIDE */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_override); + /* Specifies the value for MC_EMEM_ARB_OVERRIDE_1 */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_override1); + /* Specifies the value for MC_EMEM_ARB_RSV */ + CASE_SET_SDRAM_PARAM(mc_emem_arb_rsv); + + CASE_SET_SDRAM_PARAM(mc_da_cfg0); + CASE_SET_SDRAM_PARAM(mc_emem_arb_timing_ccdmw); + + /* Specifies the value for MC_CLKEN_OVERRIDE */ + CASE_SET_SDRAM_PARAM(mc_clken_override); + + /* Specifies the value for MC_STAT_CONTROL */ + CASE_SET_SDRAM_PARAM(mc_stat_control); + /* Specifies the value for MC_VIDEO_PROTECT_BOM */ + CASE_SET_SDRAM_PARAM(mc_video_protect_bom); + /* Specifies the value for MC_VIDEO_PROTECT_BOM_ADR_HI */ + CASE_SET_SDRAM_PARAM(mc_video_protect_bom_adr_hi); + /* Specifies the value for MC_VIDEO_PROTECT_SIZE_MB */ + CASE_SET_SDRAM_PARAM(mc_video_protect_size_mb); + /* Specifies the value for MC_VIDEO_PROTECT_VPR_OVERRIDE */ + CASE_SET_SDRAM_PARAM(mc_video_protect_vpr_override); + /* Specifies the value for MC_VIDEO_PROTECT_VPR_OVERRIDE1 */ + CASE_SET_SDRAM_PARAM(mc_video_protect_vpr_override1); + /* Specifies the value for MC_VIDEO_PROTECT_GPU_OVERRIDE_0 */ + CASE_SET_SDRAM_PARAM(mc_video_protect_gpu_override0); + /* Specifies the value for MC_VIDEO_PROTECT_GPU_OVERRIDE_1 */ + CASE_SET_SDRAM_PARAM(mc_video_protect_gpu_override1); + /* Specifies the value for MC_SEC_CARVEOUT_BOM */ + CASE_SET_SDRAM_PARAM(mc_sec_carveout_bom); + /* Specifies the value for MC_SEC_CARVEOUT_ADR_HI */ + CASE_SET_SDRAM_PARAM(mc_sec_carveout_adr_hi); + /* Specifies the value for MC_SEC_CARVEOUT_SIZE_MB */ + CASE_SET_SDRAM_PARAM(mc_sec_carveout_size_mb); + /* Specifies the value for MC_VIDEO_PROTECT_REG_CTRL.VIDEO_PROTECT_WRITE_ACCESS */ + CASE_SET_SDRAM_PARAM(mc_video_protect_write_access); + /* Specifies the value for MC_SEC_CARVEOUT_REG_CTRL.SEC_CARVEOUT_WRITE_ACCESS */ + CASE_SET_SDRAM_PARAM(mc_sec_carveout_protect_write_access); + + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_bom); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_bom_hi); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_size_128kb); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_force_internal_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout1_cfg0); + + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_bom); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_bom_hi); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_size_128kb); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_force_internal_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout2_cfg0); + + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_bom); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_bom_hi); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_size_128kb); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_force_internal_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout3_cfg0); + + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_bom); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_bom_hi); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_size_128kb); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_force_internal_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout4_cfg0); + + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_bom); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_bom_hi); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_size_128kb); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access0); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access1); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access2); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access3); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_force_internal_access4); + CASE_SET_SDRAM_PARAM(mc_generalized_carveout5_cfg0); + + /* Specifies enable for CA training */ + CASE_SET_SDRAM_PARAM(emc_ca_training_enable); + /* Set if bit 6 select is greater than bit 7 select); uses aremc.spec packet SWIZZLE_BIT6_GT_BIT7 */ + CASE_SET_SDRAM_PARAM(swizzle_rank_byte_encode); + /* Specifies enable and offset for patched boot rom write */ + CASE_SET_SDRAM_PARAM(boot_rom_patch_control); + /* Specifies data for patched boot rom write */ + CASE_SET_SDRAM_PARAM(boot_rom_patch_data); + + /* Specifies the value for MC_MTS_CARVEOUT_BOM */ + CASE_SET_SDRAM_PARAM(mc_mts_carveout_bom); + /* Specifies the value for MC_MTS_CARVEOUT_ADR_HI */ + CASE_SET_SDRAM_PARAM(mc_mts_carveout_adr_hi); + /* Specifies the value for MC_MTS_CARVEOUT_SIZE_MB */ + CASE_SET_SDRAM_PARAM(mc_mts_carveout_size_mb); + /* Specifies the value for MC_MTS_CARVEOUT_REG_CTRL */ + CASE_SET_SDRAM_PARAM(mc_mts_carveout_reg_ctrl); + + DEFAULT(); + } + return 0; +} + +int +t210_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 +t210_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 +t210_bct_get_value(parse_token id, void *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); + CASE_GET_NVU32(secure_debug_control); + + case token_block_size: + if (bct == NULL) + return -ENODATA; + *((u_int32_t *)data) = 1 << bct_ptr->block_size_log2; + break; + + case token_page_size: + if (bct == NULL) + return -ENODATA; + *((u_int32_t *)data) = 1 << bct_ptr->page_size_log2; + break; + + /* + * 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_unique_chip_id: + memcpy(data, &(bct_ptr->unique_chip_id), sizeof(nvboot_ecid)); + break; + + case token_reserved_offset: + *((u_int32_t *)data) = (u_int8_t *)&(samplebct.reserved) + - (u_int8_t *)&samplebct; + break; + + case token_bct_size: + *((u_int32_t *)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 */ + *((u_int32_t *)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 */ + *((u_int32_t *)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); + CASE_GET_CONST_PREFIX(memory_type_lpddr4, nvboot); + + default: + return -ENODATA; + } + return 0; +} + +int +t210_bct_set_value(parse_token id, void *data, u_int8_t *bct) +{ + nvboot_config_table *bct_ptr = (nvboot_config_table *)bct; + + if (data == NULL || 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); + CASE_SET_NVU32(secure_debug_control); + case token_unique_chip_id: + memcpy(&bct_ptr->unique_chip_id, data, sizeof(nvboot_ecid)); + break; + + default: + return -ENODATA; + } + + return 0; +} + +int +t210_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; +} + +int t210_get_bct_size() +{ + return sizeof(nvboot_config_table); +} + +int t210_bct_token_supported(parse_token token) +{ + int index; + + for (index = 0; index < ARRAY_SIZE(t210_root_token_list); index++) + if (t210_root_token_list[index] == token) + return 1; + + return 0; +} + +void t210_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 tegra210_config = { + .init_bad_block_table = t210_init_bad_block_table, + .set_dev_param = t210_set_dev_param, + .get_dev_param = t210_get_dev_param, + .set_sdram_param = t210_set_sdram_param, + .get_sdram_param = t210_get_sdram_param, + .setbl_param = t210_setbl_param, + .getbl_param = t210_getbl_param, + .set_value = t210_bct_set_value, + .get_value = t210_bct_get_value, + .set_data = t210_bct_set_data, + .get_bct_size = t210_get_bct_size, + .token_supported = t210_bct_token_supported, + + .devtype_table = s_devtype_table_t210, + .sdmmc_data_width_table = s_sdmmc_data_width_table_t210, + .spi_clock_source_table = s_spi_clock_source_table_t210, + .nvboot_memory_type_table = s_nvboot_memory_type_table_t210, + .sdram_field_table = s_sdram_field_table_t210, + .nand_table = 0, + .sdmmc_table = s_sdmmc_table_t210, + .spiflash_table = s_spiflash_table_t210, + .device_type_table = s_device_type_table_t210, +}; + +void t210_get_soc_config(build_image_context *context, + cbootimage_soc_config **soc_config) +{ + context->boot_data_version = BOOTDATA_VERSION_T210; + *soc_config = &tegra210_config; +} + +int if_bct_is_t210_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_T210) { + t210_get_soc_config(context, soc_config); + return 1; + } + return 0; +} |