Index: nvbctlib_ap20.c |
diff --git a/nvbctlib_ap20.c b/nvbctlib_ap20.c |
index b1a902472ff5b832f73220aab1ba774d34573a39..c2ba2c26a17e3ae6c4c096374c8ba5ece564a2a6 100644 |
--- a/nvbctlib_ap20.c |
+++ b/nvbctlib_ap20.c |
@@ -28,6 +28,16 @@ |
/* nvbctlib_ap20.c: The implementation of the nvbctlib API for AP20. */ |
/* Definitions that simplify the code which follows. */ |
+#define CASE_GET_SDRAM_PARAM(x) \ |
+case nvbct_lib_id_sdram_##x:\ |
+ *data = bct_ptr->sdram_params[set].x; \ |
+ break |
+ |
+#define CASE_SET_SDRAM_PARAM(x) \ |
+case nvbct_lib_id_sdram_##x:\ |
+ bct_ptr->sdram_params[set].x = data; \ |
+ break |
+ |
#define CASE_GET_DEV_PARAM(dev, x) \ |
case nvbct_lib_id_##dev##_##x:\ |
*data = bct_ptr->dev_params[set].dev##_params.x; \ |
@@ -83,6 +93,254 @@ case nvbct_lib_id_##id:\ |
break |
static int |
+get_sdram_params(u_int32_t set, |
+ nvbct_lib_id id, |
+ u_int32_t *data, |
+ u_int8_t *bct) |
+{ |
+ nvboot_config_table *bct_ptr = (nvboot_config_table*)bct; |
+ |
+ if (set >= NVBOOT_BCT_MAX_SDRAM_SETS) |
+ return ENODATA; |
+ if (data == NULL || bct == NULL) |
+ return -ENODATA; |
+ |
+ switch (id) { |
+ |
+ CASE_GET_SDRAM_PARAM(memory_type); |
+ CASE_GET_SDRAM_PARAM(pllm_charge_pump_setup_ctrl); |
+ CASE_GET_SDRAM_PARAM(pllm_loop_filter_setup_ctrl); |
+ CASE_GET_SDRAM_PARAM(pllm_input_divider); |
+ CASE_GET_SDRAM_PARAM(pllm_feedback_divider); |
+ CASE_GET_SDRAM_PARAM(pllm_post_divider); |
+ CASE_GET_SDRAM_PARAM(pllm_stable_time); |
+ CASE_GET_SDRAM_PARAM(emc_clock_divider); |
+ CASE_GET_SDRAM_PARAM(emc_auto_cal_interval); |
+ CASE_GET_SDRAM_PARAM(emc_auto_cal_config); |
+ 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_ras); |
+ CASE_GET_SDRAM_PARAM(emc_rp); |
+ 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_quse); |
+ CASE_GET_SDRAM_PARAM(emc_qrst); |
+ CASE_GET_SDRAM_PARAM(emc_qsafe); |
+ CASE_GET_SDRAM_PARAM(emc_rdv); |
+ 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_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_quse_extra); |
+ CASE_GET_SDRAM_PARAM(emc_fbio_cfg1); |
+ CASE_GET_SDRAM_PARAM(emc_fbio_dqsib_dly); |
+ CASE_GET_SDRAM_PARAM(emc_fbio_dqsib_dly_msb); |
+ CASE_GET_SDRAM_PARAM(emc_fbio_quse_dly); |
+ CASE_GET_SDRAM_PARAM(emc_fbio_quse_dly_msb); |
+ 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_mrw1); |
+ CASE_GET_SDRAM_PARAM(emc_mrw2); |
+ CASE_GET_SDRAM_PARAM(emc_mrw3); |
+ 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(emc_adr_cfg1); |
+ CASE_GET_SDRAM_PARAM(mc_emem_Cfg); |
+ CASE_GET_SDRAM_PARAM(mc_lowlatency_config); |
+ CASE_GET_SDRAM_PARAM(emc_cfg); |
+ CASE_GET_SDRAM_PARAM(emc_cfg2); |
+ CASE_GET_SDRAM_PARAM(emc_dbg); |
+ CASE_GET_SDRAM_PARAM(ahb_arbitration_xbar_ctrl); |
+ CASE_GET_SDRAM_PARAM(emc_cfg_dig_dll); |
+ CASE_GET_SDRAM_PARAM(emc_dll_xform_dqs); |
+ CASE_GET_SDRAM_PARAM(emc_dll_xform_quse); |
+ 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_ref_cnt); |
+ 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_mrw_zq_init_dev0); |
+ CASE_GET_SDRAM_PARAM(emc_mrw_zq_init_dev1); |
+ CASE_GET_SDRAM_PARAM(emc_mrw_zq_init_wait); |
+ CASE_GET_SDRAM_PARAM(emc_mrs_reset_dll_wait); |
+ CASE_GET_SDRAM_PARAM(emc_emrs_emr2); |
+ CASE_GET_SDRAM_PARAM(emc_emrs_emr3); |
+ 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(emc_cfg_clktrim0); |
+ CASE_GET_SDRAM_PARAM(emc_cfg_clktrim1); |
+ CASE_GET_SDRAM_PARAM(emc_cfg_clktrim2); |
+ CASE_GET_SDRAM_PARAM(pmc_ddr_pwr); |
+ CASE_GET_SDRAM_PARAM(apb_misc_gp_xm2cfga_pad_ctrl); |
+ CASE_GET_SDRAM_PARAM(apb_misc_gp_xm2cfgc_pad_ctrl); |
+ CASE_GET_SDRAM_PARAM(apb_misc_gp_xm2cfgc_pad_ctrl2); |
+ CASE_GET_SDRAM_PARAM(apb_misc_gp_xm2cfgd_pad_ctrl); |
+ CASE_GET_SDRAM_PARAM(apb_misc_gp_xm2cfgd_pad_ctrl2); |
+ CASE_GET_SDRAM_PARAM(apb_misc_gp_xm2clkcfg_Pad_ctrl); |
+ CASE_GET_SDRAM_PARAM(apb_misc_gp_xm2comp_pad_ctrl); |
+ CASE_GET_SDRAM_PARAM(apb_misc_gp_xm2vttgen_pad_ctrl); |
+ |
+ default: |
+ return -ENODATA; |
+ } |
+ |
+ return 0; |
+ |
+} |
+ |
+static int |
+set_sdram_params(u_int32_t set, |
+ nvbct_lib_id id, |
+ u_int32_t data, |
+ u_int8_t *bct) |
+{ |
+ nvboot_config_table *bct_ptr = (nvboot_config_table*)bct; |
+ |
+ if (set >= NVBOOT_BCT_MAX_SDRAM_SETS) |
+ return ENODATA; |
+ if (bct == NULL) |
+ return -ENODATA; |
+ |
+ switch (id) { |
+ |
+ CASE_SET_SDRAM_PARAM(memory_type); |
+ CASE_SET_SDRAM_PARAM(pllm_charge_pump_setup_ctrl); |
+ CASE_SET_SDRAM_PARAM(pllm_loop_filter_setup_ctrl); |
+ CASE_SET_SDRAM_PARAM(pllm_input_divider); |
+ CASE_SET_SDRAM_PARAM(pllm_feedback_divider); |
+ CASE_SET_SDRAM_PARAM(pllm_post_divider); |
+ CASE_SET_SDRAM_PARAM(pllm_stable_time); |
+ CASE_SET_SDRAM_PARAM(emc_clock_divider); |
+ CASE_SET_SDRAM_PARAM(emc_auto_cal_interval); |
+ CASE_SET_SDRAM_PARAM(emc_auto_cal_config); |
+ 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_ras); |
+ CASE_SET_SDRAM_PARAM(emc_rp); |
+ 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_quse); |
+ CASE_SET_SDRAM_PARAM(emc_qrst); |
+ CASE_SET_SDRAM_PARAM(emc_qsafe); |
+ CASE_SET_SDRAM_PARAM(emc_rdv); |
+ 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_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_quse_extra); |
+ CASE_SET_SDRAM_PARAM(emc_fbio_cfg1); |
+ CASE_SET_SDRAM_PARAM(emc_fbio_dqsib_dly); |
+ CASE_SET_SDRAM_PARAM(emc_fbio_dqsib_dly_msb); |
+ CASE_SET_SDRAM_PARAM(emc_fbio_quse_dly); |
+ CASE_SET_SDRAM_PARAM(emc_fbio_quse_dly_msb); |
+ 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_mrw1); |
+ CASE_SET_SDRAM_PARAM(emc_mrw2); |
+ CASE_SET_SDRAM_PARAM(emc_mrw3); |
+ 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(emc_adr_cfg1); |
+ CASE_SET_SDRAM_PARAM(mc_emem_Cfg); |
+ CASE_SET_SDRAM_PARAM(mc_lowlatency_config); |
+ CASE_SET_SDRAM_PARAM(emc_cfg); |
+ CASE_SET_SDRAM_PARAM(emc_cfg2); |
+ CASE_SET_SDRAM_PARAM(emc_dbg); |
+ CASE_SET_SDRAM_PARAM(ahb_arbitration_xbar_ctrl); |
+ CASE_SET_SDRAM_PARAM(emc_cfg_dig_dll); |
+ CASE_SET_SDRAM_PARAM(emc_dll_xform_dqs); |
+ CASE_SET_SDRAM_PARAM(emc_dll_xform_quse); |
+ 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_ref_cnt); |
+ 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_mrw_zq_init_dev0); |
+ CASE_SET_SDRAM_PARAM(emc_mrw_zq_init_dev1); |
+ CASE_SET_SDRAM_PARAM(emc_mrw_zq_init_wait); |
+ CASE_SET_SDRAM_PARAM(emc_mrs_reset_dll_wait); |
+ CASE_SET_SDRAM_PARAM(emc_emrs_emr2); |
+ CASE_SET_SDRAM_PARAM(emc_emrs_emr3); |
+ 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(emc_cfg_clktrim0); |
+ CASE_SET_SDRAM_PARAM(emc_cfg_clktrim1); |
+ CASE_SET_SDRAM_PARAM(emc_cfg_clktrim2); |
+ CASE_SET_SDRAM_PARAM(pmc_ddr_pwr); |
+ CASE_SET_SDRAM_PARAM(apb_misc_gp_xm2cfga_pad_ctrl); |
+ CASE_SET_SDRAM_PARAM(apb_misc_gp_xm2cfgc_pad_ctrl); |
+ CASE_SET_SDRAM_PARAM(apb_misc_gp_xm2cfgc_pad_ctrl2); |
+ CASE_SET_SDRAM_PARAM(apb_misc_gp_xm2cfgd_pad_ctrl); |
+ CASE_SET_SDRAM_PARAM(apb_misc_gp_xm2cfgd_pad_ctrl2); |
+ CASE_SET_SDRAM_PARAM(apb_misc_gp_xm2clkcfg_Pad_ctrl); |
+ CASE_SET_SDRAM_PARAM(apb_misc_gp_xm2comp_pad_ctrl); |
+ CASE_SET_SDRAM_PARAM(apb_misc_gp_xm2vttgen_pad_ctrl); |
+ |
+ default: |
+ return -ENODATA; |
+ } |
+ |
+ return 0; |
+} |
+static int |
getdev_param(u_int32_t set, |
nvbct_lib_id id, |
u_int32_t *data, |
@@ -251,6 +509,7 @@ bct_get_value(nvbct_lib_id id, u_int32_t *data, u_int8_t *bct) |
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); |
/* |
@@ -294,6 +553,12 @@ bct_get_value(nvbct_lib_id id, u_int32_t *data, u_int8_t *bct) |
CASE_GET_CONST_PREFIX(spi_clock_source_pllm_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); |
+ |
default: |
return -ENODATA; |
} |
@@ -317,6 +582,7 @@ bct_set_value(nvbct_lib_id id, u_int32_t data, u_int8_t *bct) |
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); |
default: |
@@ -379,4 +645,6 @@ nvbct_lib_get_fns(nvbct_lib_fns *fns) |
fns->getdev_param = getdev_param; |
fns->setdev_param = setdev_param; |
+ fns->get_sdram_params = get_sdram_params; |
+ fns->set_sdram_params = set_sdram_params; |
} |