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

在 /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)

{

}

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

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值