- static int read_eeprom(struct am335x_baseboard_id *header)  
 
- {  
 
- #if 1  
 
-     strcpy(header->name, "TQ335x");  
 
- #else  
 
-     /* Check if baseboard eeprom is available */  
 
-     if (i2c_probe(CONFIG_SYS_I2C_EEPROM_ADDR)) {  
 
-         puts("Could not probe the EEPROM; something fundamentally "  
 
-             "wrong on the I2C bus.\n");  
 
-         return -ENODEV;  
 
-     }  
 
-   
 
-     /* read the eeprom using i2c */  
 
-     if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 2, (uchar *)header,  
 
-              sizeof(struct am335x_baseboard_id))) {  
 
-         puts("Could not read the EEPROM; something fundamentally"  
 
-             " wrong on the I2C bus.\n");  
 
-         return -EIO;  
 
-     }  
 
-   
 
-     if (header->magic != 0xEE3355AA) {  
 
-         /* 
 
-          * read the eeprom using i2c again, 
 
-          * but use only a 1 byte address 
 
-          */  
 
-         if (i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, 1, (uchar *)header,  
 
-                  sizeof(struct am335x_baseboard_id))) {  
 
-             puts("Could not read the EEPROM; something "  
 
-                 "fundamentally wrong on the I2C bus.\n");  
 
-             return -EIO;  
 
-         }  
 
-   
 
-         if (header->magic != 0xEE3355AA) {  
 
-             printf("Incorrect magic number (0x[%]x) in EEPROM\n",  
 
-                     header->magic);  
 
-             return -EINVAL;  
 
-         }  
 
-     }  
 
- #endif  
 
-   
 
-     return 0;  
 
- }
通过上述修改,u-boot不去读取eeprom,而是直接将header的name赋值为"TQ335x",后面可以根据这一配置区分是否为TQ335x开发板。
然后是修改get_dpll_ddr_params(board/ti/am335x/board.c)函数,具体的修改内容如下:
- const struct dpll_params *get_dpll_ddr_params(void)  
 
- {  
 
-     struct am335x_baseboard_id header;  
 
-   
 
-     enable_i2c0_pin_mux();  
 
-     i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE);  
 
-     if (read_eeprom(&header) < 0)  
 
-         puts("Could not get board ID.\n");  
 
-   
 
-     if (board_is_tq335x(&header) || board_is_evm_sk(&header))  
 
-         return &dpll_ddr_evm_sk;  
 
-     else if (board_is_bone_lt(&header))  
 
-         return &dpll_ddr_bone_black;  
 
-     else if (board_is_evm_15_or_later(&header))  
 
-         return &dpll_ddr_evm_sk;  
 
-     else  
 
-         return &dpll_ddr;  
 
- }
- void sdram_init(void)  
 
- {  
 
-     __maybe_unused struct am335x_baseboard_id header;  
 
-   
 
-     if (read_eeprom(&header) < 0)  
 
-         puts("Could not get board ID.\n");  
 
-   
 
-     if (board_is_evm_sk(&header)) {  
 
-         /* 
 
-          * EVM SK 1.2A and later use gpio0_7 to enable DDR3. 
 
-          * This is safe enough to do on older revs. 
 
-          */  
 
-         gpio_request(GPIO_DDR_VTT_EN, "ddr_vtt_en");  
 
-         gpio_direction_output(GPIO_DDR_VTT_EN, 1);  
 
-     }  
 
-   
 
-     if (board_is_evm_sk(&header) || board_is_tq335x(&header))  
 
-         config_ddr(303, &ioregs_evmsk, &ddr3_data,  
 
-                &ddr3_cmd_ctrl_data, &ddr3_emif_reg_data, 0);  
 
-     else if (board_is_bone_lt(&header))  
 
-         config_ddr(400, &ioregs_bonelt,  
 
-                &ddr3_beagleblack_data,  
 
-                &ddr3_beagleblack_cmd_ctrl_data,  
 
-                &ddr3_beagleblack_emif_reg_data, 0);  
 
-     else if (board_is_evm_15_or_later(&header))  
 
-         config_ddr(303, &ioregs_evm15, &ddr3_evm_data,  
 
-                &ddr3_evm_cmd_ctrl_data, &ddr3_evm_emif_reg_data, 0);  
 
-     else  
 
-         config_ddr(266, &ioregs, &ddr2_data,  
 
-                &ddr2_cmd_ctrl_data, &ddr2_emif_reg_data, 0);  
 
- }
- static inline int board_is_tq335x(struct am335x_baseboard_id *header)  
 
- {  
 
-     return !strncmp(header->name, "TQ335x", HDR_NAME_LEN);  
 
- }
 
- 最后是修改enable_board_pin_mux(board/ti/am335x/mux.c)函数,具体的修改内容如下:
 
- void enable_board_pin_mux(struct am335x_baseboard_id *header)  
 
- {  
 
-     /* Do board-specific muxes. */  
 
-     if (board_is_bone(header) || board_is_tq335x(header)) {  
 
-         /* Beaglebone pinmux */  
 
-         configure_module_pin_mux(i2c1_pin_mux);  
 
-         configure_module_pin_mux(mii1_pin_mux);  
 
-         configure_module_pin_mux(mmc0_pin_mux);  
 
- #if defined(CONFIG_NAND)  
 
-         configure_module_pin_mux(nand_pin_mux);  
 
- #elif defined(CONFIG_NOR)  
 
-         configure_module_pin_mux(bone_norcape_pin_mux);  
 
- #else  
 
-         configure_module_pin_mux(mmc1_pin_mux);  
 
- #endif  
 
-     } else if (board_is_gp_evm(header)) {  
 
-         /* General Purpose EVM */  
 
-         unsigned short profile = detect_daughter_board_profile();  
 
-         configure_module_pin_mux(rgmii1_pin_mux);  
 
-         configure_module_pin_mux(mmc0_pin_mux);  
 
-         /* In profile #2 i2c1 and spi0 conflict. */  
 
-         if (profile & ~PROFILE_2)  
 
-             configure_module_pin_mux(i2c1_pin_mux);  
 
-         /* Profiles 2 & 3 don't have NAND */  
 
- #ifdef CONFIG_NAND  
 
-         if (profile & ~(PROFILE_2 | PROFILE_3))  
 
-             configure_module_pin_mux(nand_pin_mux);  
 
- #endif  
 
-         else if (profile == PROFILE_2) {  
 
-             configure_module_pin_mux(mmc1_pin_mux);  
 
-             configure_module_pin_mux(spi0_pin_mux);  
 
-         }  
 
-     } else if (board_is_idk(header)) {  
 
-         /* Industrial Motor Control (IDK) */  
 
-         configure_module_pin_mux(mii1_pin_mux);  
 
-         configure_module_pin_mux(mmc0_no_cd_pin_mux);  
 
-     } else if (board_is_evm_sk(header)) {  
 
-         /* Starter Kit EVM */  
 
-         configure_module_pin_mux(i2c1_pin_mux);  
 
-         configure_module_pin_mux(gpio0_7_pin_mux);  
 
-         configure_module_pin_mux(rgmii1_pin_mux);  
 
-         configure_module_pin_mux(mmc0_pin_mux_sk_evm);  
 
-     } else if (board_is_bone_lt(header)) {  
 
-         /* Beaglebone LT pinmux */  
 
-         configure_module_pin_mux(i2c1_pin_mux);  
 
-         configure_module_pin_mux(mii1_pin_mux);  
 
-         configure_module_pin_mux(mmc0_pin_mux);  
 
- #if defined(CONFIG_NAND)  
 
-         configure_module_pin_mux(nand_pin_mux);  
 
- #elif defined(CONFIG_NOR)  
 
-         configure_module_pin_mux(bone_norcape_pin_mux);  
 
- #else  
 
-         configure_module_pin_mux(mmc1_pin_mux);  
 
- #endif  
 
-     } else {  
 
-         puts("Unknown board, cannot configure pinmux.");  
 
-         hang();  
 
-     }  
 
- }
- int fat_register_device(block_dev_desc_t *dev_desc, int part_no)  
 
- {  
 
-     disk_partition_t info;  
 
-   
 
-     /* First close any currently found FAT filesystem */  
 
-     cur_dev = NULL;  
 
-   
 
-     /* Read the partition table, if present */  
 
-     if (get_partition_info(dev_desc, part_no, &info)) {  
 
-         /*if (part_no != 0) { 
 
-             printf("** Partition [%]d not valid on device [%]d **\n", 
 
-                     part_no, dev_desc->dev); 
 
-             return -1; 
 
-         }*/  
 
-   
 
-         info.start = 0;  
 
-         info.size = dev_desc->lba;  
 
-         info.blksz = dev_desc->blksz;  
 
-         info.name[0] = 0;  
 
-         info.type[0] = 0;  
 
-         info.bootable = 0;  
 
- #ifdef CONFIG_PARTITION_UUIDS  
 
-         info.uuid[0] = 0;  
 
- #endif  
 
-     }  
 
-   
 
-     return fat_set_blk_dev(dev_desc, &info);  
 
- }
 
- long file_fat_read_at(const char *filename, unsigned long pos, void *buffer,  
 
-               unsigned long maxsize)  
 
- {  
 
-     debug("reading [%]s\n", filename);  
 
-     return do_fat_read_at(filename, pos, buffer, maxsize, LS_NO, 0);  
 
- }
- #if defined CONFIG_SPL_OS_BOOT_ENABLE  
 
- #define CONFIG_SPL_OS_BOOT  
 
- #endif