微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AM335x(TQ335x)学习笔记——u-boot-2014.10移植

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

时间:11-28 来源:互联网 点击:
最近移植了下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. }

然后添加board_is_tq335x函数的具体实现,参考其它类似函数实现即可,由于我们的read_eeprom仅读到了name,其内容是"TQ335x",故可如下实现,在board/ti/am335x/board.h中添加如下内容:

  1. staticinlineintboard_is_tq335x(structam335x_baseboard_id*header)
  2. {
  3. return!strncmp(header->name,"TQ335x",HDR_NAME_LEN);
  4. }

最后是修改enable_board_pin_mux(board/ti/am335x/mux.c)函数,具体的修改内容如下:

  1. voidenable_board_pin_mux(structam335x_baseboard_id*header)
  2. {
  3. /*Doboard-specificmuxes.*/
  4. if(board_is_bone(header)||board_is_tq335x(header)){
  5. /*Beaglebonepinmux*/
  6. configure_module_pin_mux(i2c1_pin_mux);
  7. configure_module_pin_mux(mii1_pin_mux);
  8. configure_module_pin_mux(mmc0_pin_mux);
  9. #ifdefined(CONFIG_NAND)
  10. configure_module_pin_mux(nand_pin_mux);
  11. #elifdefined(CONFIG_NOR)
  12. configure_module_pin_mux(bone_norcape_pin_mux);
  13. #else
  14. configu

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top