码迷,mamicode.com
首页 > 其他好文 > 详细

spd.从DIMM内存条I2C设备移植到扣板NOR_FLASH

时间:2016-05-13 02:36:40      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:

在 /board/freescale/t104xrdb/ddr.c文件的initdram函数中

phys_size_t initdram(int board_type)

{

    phys_size_tdram_size;

 

#if defined(CONFIG_SPL_BUILD) || !defined(CONFIG_RAMBOOT_PBL)

    puts("Initializing....usingSPD\n");

 

    dram_size= fsl_ddr_sdram();

 

    dram_size = setup_ddr_tlbs(dram_size / 0x100000);

    dram_size*= 0x100000;

 

#else

    dram_size=  fsl_ddr_sdram_size();

#endif

    returndram_size;

}

 

从C语言角度来看,获取spd的过程本质上就是要对dram_size进行赋值的过程。

 

#############################################################

 

drivers/ddr/fsl/main.c/fsl_ddr_sdram调用了__fsl_ddr_compute函数

 

drivers/ddr/fsl/main.c/__fsl_ddr_compute函数中调用乐fsl_ddr_compute函数

 

fsl_ddr_compute函数中定义了获取SPD信息的函数。

 

case STEP_GET_SPD:

#if defined(CONFIG_DDR_SPD) || defined(CONFIG_SPD_EEPROM)

           /*STEP 1:  Gather all DIMM SPD data */

           for(i = first_ctrl; i <= last_ctrl; i++) {

                 fsl_ddr_get_spd(pinfo->spd_installed_dimms[i],i,

                            dimm_slots_per_ctrl);

           }

 

#############################################################

 

 

 

 

 

drivers/ddr/fsl/main.c/fsl_ddr_compute函数中调用了

compute_lowest_common_dimm_parameters函数.

compute_lowest_common_dimm_parameters该函数定义于/drivers/ddr/fsl/ls_common_dimm_params.c

 

在compute_lowest_common_dimm_parameters中定义打印了在uboot启动时显示的Detected UDIMM 18KSF51272AZ-1G6K1这句话,具体代码为:

 

#ifndef CONFIG_SPL_BUILD

                 printf("Detected UDIMM %s\n",

                      dimm_params[i].mpart);

#endif

 

 

 

 

 

############################################################

fsl_ddr_sdram_size函数定义在/drivers/ddr/fsl/main.c文件下:

/*

 * fsl_ddr_sdram_size(first_ctrl,last_intlv) - This function only returns the

 * sizeof the total memory without setting ddr control registers.

 */

phys_size_t

fsl_ddr_sdram_size(void)

{

    fsl_ddr_info_t  info;

    unsignedlong long total_memory = 0;

 

    memset(&info,0 , sizeof(fsl_ddr_info_t));

    info.mem_base = CONFIG_SYS_FSL_DDR_SDRAM_BASE_PHY;

    info.first_ctrl= 0;

    info.num_ctrls= CONFIG_SYS_FSL_DDR_MAIN_NUM_CTRLS;

    info.dimm_slots_per_ctrl= CONFIG_DIMM_SLOTS_PER_CTLR;

    info.board_need_mem_reset= NULL;

 

   /* Compute it once normally. */

    total_memory= fsl_ddr_compute(&info, STEP_GET_SPD, 1);

 

    returntotal_memory;

}

在同一文件下定义了fsl_ddr_compute函数,该函数在STEP1时调用了fsl_ddr_get_spd函数对i2c总线进行操作,获取DIMM内存条上的spd信息,具体如下:

/* STEP 1: Gather all DIMM SPD data */

for (i = first_ctrl; i <= last_ctrl; i++){

   fsl_ddr_get_spd(pinfo->spd_installed_dimms[i],i,

   dimm_slots_per_ctrl);

}

 

那么fsl_ddr_get_spd才是移植的时候应该重点关注的函数, 还是在/drivers/ddr/fsl/main.c文件下定义了fsl_ddr_get_spd函数。

void fsl_ddr_get_spd(generic_spd_eeprom_t *ctrl_dimms_spd,

       unsigned int ctrl_num, unsigned int dimm_slots_per_ctrl)

{

}

这个空出来的函数即是需要关注的函数

 

 

 

spd.从DIMM内存条I2C设备移植到扣板NOR_FLASH

标签:

原文地址:http://blog.csdn.net/huchuan1985/article/details/51344670

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!