Created
June 9, 2014 15:06
-
-
Save Embedded-linux/8c37896c57a6b0243cdd to your computer and use it in GitHub Desktop.
u-boot porting
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| File Name: board/ti/am335x/board.c | |
| TPS65217 is chip which supplies power to Am335x. | |
| Adding fatures of TPS65217 IC | |
| The TPS65217 is an optimized and highly integrated power management solution for the AM335x | |
| processor. Features of the TPS65217 include: | |
| • Power path management for Lithium-ion battery, USB, and AC inputs | |
| • Linear Battery Charger | |
| • 3 DC/DC Step-Down Converters | |
| • 2 LDOs | |
| • 2 Load Switches (configure as LDOs) | |
| • White LED driver capable of driving up to 20 LEDs | |
| Reference : http://www.ti.com/lit/ug/slvu551h/slvu551h.pdf | |
| /* | |
| * Basic board specific setup. Pinmux has been handled already. | |
| */ | |
| int board_init(void) | |
| { | |
| i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); | |
| gd->bd->bi_boot_params = PHYS_DRAM_1 + 0x100; | |
| gpmc_init(); | |
| return 0; | |
| } | |
| -> Board initial setup | |
| /* | |
| * early system init of muxing and clocks. | |
| */ | |
| void s_init(void) | |
| { | |
| __maybe_unused struct am335x_baseboard_id header; | |
| /* WDT1 is already running when the bootloader gets control | |
| * Disable it to avoid "random" resets | |
| */ | |
| writel(0xAAAA, &wdtimer->wdtwspr); | |
| while (readl(&wdtimer->wdtwwps) != 0x0) | |
| ; | |
| writel(0x5555, &wdtimer->wdtwspr); | |
| while (readl(&wdtimer->wdtwwps) != 0x0) | |
| ; | |
| #if defined(CONFIG_SPL_BUILD) | |
| /* Setup the PLLs and the clocks for the peripherals */ | |
| pll_init(); | |
| /* Enable RTC32K clock */ | |
| rtc32k_enable(); | |
| /* UART softreset */ | |
| u32 regVal; | |
| #ifdef CONFIG_SERIAL1 | |
| enable_uart0_pin_mux(); | |
| #endif /* CONFIG_SERIAL1 */ | |
| #ifdef CONFIG_SERIAL2 | |
| enable_uart1_pin_mux();#endif /* CONFIG_SERIAL3 */ | |
| #ifdef CONFIG_SERIAL4 | |
| enable_uart3_pin_mux(); | |
| #endif /* CONFIG_SERIAL4 */ | |
| #ifdef CONFIG_SERIAL5 | |
| enable_uart4_pin_mux(); | |
| #endif /* CONFIG_SERIAL5 */ | |
| #ifdef CONFIG_SERIAL6 | |
| enable_uart5_pin_mux(); | |
| #endif /* CONFIG_SERIAL6 */ | |
| regVal = readl(&uart_base->uartsyscfg); | |
| regVal |= UART_RESET; | |
| writel(regVal, &uart_base->uartsyscfg); | |
| while ((readl(&uart_base->uartsyssts) & | |
| UART_CLK_RUNNING_MASK) != UART_CLK_RUNNING_MASK) | |
| ; | |
| /* Disable smart idle */ | |
| regVal = readl(&uart_base->uartsyscfg); | |
| regVal |= UART_SMART_IDLE_EN; | |
| writel(regVal, &uart_base->uartsyscfg); | |
| gd = &gdata; | |
| preloader_console_init(); | |
| enable_i2c0_pin_mux(); | |
| i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); | |
| config_ddr(266, MT47H128M16RT25E_IOCTRL_VALUE, &ddr2_data, | |
| &ddr2_cmd_ctrl_data, &ddr2_emif_reg_data); | |
| #endif | |
| } | |
| -> early system init which includes pll (Phased locked loop init), | |
| DDR(Adnced version of SDRAM/Faster than SDRAM), RTC, serial pin (uart0 to uart5) init, | |
| i2c_init and ddr_init and console_init. | |
| #ifdef CONFIG_BOARD_LATE_INIT | |
| int board_late_init(void) | |
| { | |
| #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG | |
| /* Now set variables based on board. */ | |
| setenv("board_name", "A335BONE\0"); | |
| #endif | |
| return 0; | |
| } | |
| #endif | |
| -> Board late init | |
| #if defined(CONFIG_DRIVER_TI_CPSW) || \ | |
| (defined(CONFIG_USB_ETHER) && defined(CONFIG_MUSB_GADGET)) | |
| int board_eth_init(bd_t *bis) | |
| { | |
| int rv, n = 0; | |
| uint8_t mac_addr[6]; | |
| uint32_t mac_hi, mac_lo; | |
| /* try reading mac address from efuse */ | |
| mac_lo = readl(&cdev->macid0l); | |
| mac_hi = readl(&cdev->macid0h); | |
| mac_addr[0] = mac_hi & 0xFF; | |
| mac_addr[1] = (mac_hi & 0xFF00) >> 8; | |
| mac_addr[2] = (mac_hi & 0xFF0000) >> 16; | |
| mac_addr[3] = (mac_hi & 0xFF000000) >> 24; | |
| mac_addr[4] = mac_lo & 0xFF; | |
| mac_addr[5] = (mac_lo & 0xFF00) >> 8; | |
| #if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \ | |
| (defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD)) | |
| if (!getenv("ethaddr")) { | |
| printf("<ethaddr> not set. Validating first E-fuse MAC\n"); | |
| if (is_valid_ether_addr(mac_addr)) | |
| eth_setenv_enetaddr("ethaddr", mac_addr); | |
| } | |
| writel(MII_MODE_ENABLE, &cdev->miisel); | |
| cpsw_slaves[0].phy_if = cpsw_slaves[1].phy_if = | |
| PHY_INTERFACE_MODE_MII; | |
| rv = cpsw_register(&cpsw_data); | |
| if (rv < 0) | |
| printf("Error %d registering CPSW switch\n", rv); | |
| else | |
| n += rv; | |
| #endif | |
| #if defined(CONFIG_USB_ETHER) && \ | |
| (!defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_USBETH_SUPPORT)) | |
| if (is_valid_ether_addr(mac_addr)) | |
| eth_setenv_enetaddr("usbnet_devaddr", mac_addr); | |
| rv = usb_eth_initialize(bis); | |
| if (rv < 0) | |
| printf("Error %d registering USB_ETHER\n", rv); | |
| else | |
| n += rv; | |
| #endif | |
| return n; | |
| } | |
| #endif | |
| -> Ether init, board init, system early init is done in this file. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment