新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AM335x(TQ335x)學(xué)習(xí)筆記——u-boot-2014.10移植

AM335x(TQ335x)學(xué)習(xí)筆記——u-boot-2014.10移植

作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
最近移植了下u-boot-2014.10到TQ335x,如果基于am335x evm進(jìn)行移植,需要修改的地方并不多。

由于TI的am335x evm開發(fā)使用了一個(gè)eeprom保存了板載配置信息,用來區(qū)分不同板子的型號(hào)的,而TQ335x沒有這個(gè)eeprom,因此,需要修改eeprom相關(guān)的部分,使u-boot適應(yīng)TQ335x開發(fā)板。

本文引用地址:http://m.butianyuan.cn/article/201611/322817.htm

使用source insight查看代碼,很容易發(fā)現(xiàn),所有獲取板載配置的部分都是通過讀取eeprom獲得的,因此,首選修改read_eeprom(board/ti/am335x/board.c)函數(shù),具體的修改如下:

  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",后面可以根據(jù)這一配置區(qū)分是否為TQ335x開發(fā)板。

然后是修改get_dpll_ddr_params(board/ti/am335x/board.c)函數(shù),具體的修改內(nèi)容如下:

  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)函數(shù),具體的修改內(nèi)容如下:
  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. }
    上一頁 1 2 下一頁

關(guān)鍵詞: AM335xTQ335xu-boo

評(píng)論


技術(shù)專區(qū)

關(guān)閉