您的位置 首页 硬件

AM335x(TQ335x)学习笔记——u-boot-2014.10移植

最近移植了下u-boot-201410到TQ335x,如果基于am335xevm进行移植,需要修改的地方并不多。由于TI的am335xevm开发使用了一个eeprom保存

最近移植了下u-boot-2014.10到TQ335x,假如依据am335x evm进行移植,需求修正的当地并不多。

因为TI的am335x evm开发运用了一个eeprom保存了板载装备信息,用来区别不同板子的类型的,而TQ335x没有这个eeprom,因而,需求修正eeprom相关的部分,使u-boot习惯TQ335x开发板。

运用source insight检查代码,很简单发现,一切获取板载装备的部分都是经过读取eeprom取得的,因而,首选修正read_eeprom(board/ti/am335x/board.c)函数,详细的修正如下:

  1. staticintread_eeprom(structam335x_baseboard_id*header)
  2. {
  3. #if1
  4. strcpy(header->name,”TQ335x”);
  5. #else
  6. /*Checkifbaseboardeepromisavailable*/
  7. if(i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)){
  8. puts(“CouldnotprobetheEEPROM;somethingfundamentally”
  9. “wrongontheI2Cbus.”);
  10. return-ENODEV;
  11. }
  12. /*readtheeepromusingi2c*/
  13. if(i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR,0,2,(uchar*)header,
  14. sizeof(structam335x_baseboard_id))){
  15. puts(“CouldnotreadtheEEPROM;somethingfundamentally”
  16. “wrongontheI2Cbus.”);
  17. return-EIO;
  18. }
  19. if(header->magic!=0xEE3355AA){
  20. /*
  21. *readtheeepromusingi2cagain,
  22. *butuseonlya1byteaddress
  23. */
  24. if(i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR,0,1,(uchar*)header,
  25. sizeof(structam335x_baseboard_id))){
  26. puts(“CouldnotreadtheEEPROM;something”
  27. “fundamentallywrongontheI2Cbus.”);
  28. return-EIO;
  29. }
  30. if(header->magic!=0xEE3355AA){
  31. printf(“Incorrectmagicnumber(0x%x)inEEPROM”,
  32. header->magic);
  33. return-EINVAL;
  34. }
  35. }
  36. #endif
  37. return0;
  38. }

经过上述修正,u-boot不去读取eeprom,而是直接将header的name赋值为”TQ335x”,后边能够依据这一装备区别是否为TQ335x开发板。

然后是修正get_dpll_ddr_params(board/ti/am335x/board.c)函数,详细的修正内容如下:

  1. conststructdpll_params*get_dpll_ddr_params(void)
  2. {
  3. structam335x_baseboard_idheader;
  4. enable_i2c0_pin_mux();
  5. i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED,CONFIG_SYS_OMAP24_I2C_SLAVE);
  6. if(read_eeprom(&header)<0)
  7. puts(“CouldnotgetboardID.”);
  8. if(board_is_tq335x(&header)||board_is_evm_sk(&header))
  9. return&dpll_ddr_evm_sk;
  10. elseif(board_is_bone_lt(&header))
  11. return&dpll_ddr_bone_black;
  12. elseif(board_is_evm_15_or_later(&header))
  13. return&dpll_ddr_evm_sk;
  14. else
  15. return&dpll_ddr;
  16. }

然后是修正sdram_init(board/ti/am335x/board.c)函数,详细的修正内容如下:

  1. voidsdram_init(void)
  2. {
  3. __maybe_unusedstructam335x_baseboard_idheader;
  4. if(read_eeprom(&header)<0)
  5. puts(“CouldnotgetboardID.”);
  6. if(board_is_evm_sk(&header)){
  7. /*
  8. *EVMSK1.2Aandlaterusegpio0_7toenableDDR3.
  9. *Thisissafeenoughtodoonolderrevs.
  10. */
  11. gpio_request(GPIO_DDR_VTT_EN,”ddr_vtt_en”);
  12. gpio_direction_output(GPIO_DDR_VTT_EN,1);
  13. }
  14. if(board_is_evm_sk(&header)||board_is_tq335x(&header))
  15. config_ddr(303,&ioregs_evmsk,&ddr3_data,
  16. &ddr3_cmd_ctrl_data,&ddr3_emif_reg_data,0);
  17. elseif(board_is_bone_lt(&header))
  18. config_ddr(400,&ioregs_bonelt,
  19. &ddr3_beagleblack_data,
  20. &ddr3_beagleblack_cmd_ctrl_data,
  21. &ddr3_beagleblack_emif_reg_data,0);
  22. elseif(board_is_evm_15_or_later(&header))
  23. config_ddr(303,&ioregs_evm15,&ddr3_evm_data,
  24. &ddr3_evm_cmd_ctrl_data,&ddr3_evm_emif_reg_data,0);
  25. else
  26. config_ddr(266,&ioregs,&ddr2_data,
  27. &ddr2_cmd_ctrl_data,&ddr2_emif_reg_data,0);
  28. }
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/256209.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部