1a9068479SHao Zhang /* 2a9068479SHao Zhang * K2E EVM : Board initialization 3a9068479SHao Zhang * 4a9068479SHao Zhang * (C) Copyright 2014 5a9068479SHao Zhang * Texas Instruments Incorporated, <www.ti.com> 6a9068479SHao Zhang * 7a9068479SHao Zhang * SPDX-License-Identifier: GPL-2.0+ 8a9068479SHao Zhang */ 9a9068479SHao Zhang 10a9068479SHao Zhang #include <common.h> 11a9068479SHao Zhang #include <asm/arch/ddr3.h> 12a9068479SHao Zhang #include <asm/arch/hardware.h> 1300b821f1SHao Zhang #include <asm/ti-common/keystone_net.h> 14a9068479SHao Zhang 15a9068479SHao Zhang DECLARE_GLOBAL_DATA_PTR; 16a9068479SHao Zhang 17a9068479SHao Zhang unsigned int external_clk[ext_clk_count] = { 18a9068479SHao Zhang [sys_clk] = 100000000, 19a9068479SHao Zhang [alt_core_clk] = 100000000, 20a9068479SHao Zhang [pa_clk] = 100000000, 217531122eSLokesh Vutla [ddr3a_clk] = 100000000, 22a9068479SHao Zhang }; 23a9068479SHao Zhang 247b50e159SLokesh Vutla static struct pll_init_data core_pll_config[NUM_SPDS] = { 257b50e159SLokesh Vutla [SPD800] = CORE_PLL_800, 267b50e159SLokesh Vutla [SPD850] = CORE_PLL_850, 277b50e159SLokesh Vutla [SPD1000] = CORE_PLL_1000, 287b50e159SLokesh Vutla [SPD1250] = CORE_PLL_1250, 297b50e159SLokesh Vutla [SPD1350] = CORE_PLL_1350, 307b50e159SLokesh Vutla [SPD1400] = CORE_PLL_1400, 317b50e159SLokesh Vutla [SPD1500] = CORE_PLL_1500, 327b50e159SLokesh Vutla }; 337b50e159SLokesh Vutla 347b50e159SLokesh Vutla /* DEV and ARM speed definitions as specified in DEVSPEED register */ 357b50e159SLokesh Vutla int speeds[DEVSPEED_NUMSPDS] = { 367b50e159SLokesh Vutla SPD850, 377b50e159SLokesh Vutla SPD1000, 387b50e159SLokesh Vutla SPD1250, 397b50e159SLokesh Vutla SPD1350, 407b50e159SLokesh Vutla SPD1400, 417b50e159SLokesh Vutla SPD1500, 427b50e159SLokesh Vutla SPD1400, 437b50e159SLokesh Vutla SPD1350, 447b50e159SLokesh Vutla SPD1250, 457b50e159SLokesh Vutla SPD1000, 467b50e159SLokesh Vutla SPD850, 477b50e159SLokesh Vutla SPD800, 48a9068479SHao Zhang }; 49a9068479SHao Zhang 50c321a236SLokesh Vutla s16 divn_val[16] = { 51c321a236SLokesh Vutla 0, 0, 1, 4, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 52c321a236SLokesh Vutla }; 53c321a236SLokesh Vutla 5461f66fd5SVitaly Andrianov static struct pll_init_data pa_pll_config = 5561f66fd5SVitaly Andrianov PASS_PLL_1000; 5661f66fd5SVitaly Andrianov 5794069301SLokesh Vutla struct pll_init_data *get_pll_init_data(int pll) 5894069301SLokesh Vutla { 5994069301SLokesh Vutla int speed; 6094069301SLokesh Vutla struct pll_init_data *data; 6194069301SLokesh Vutla 6294069301SLokesh Vutla switch (pll) { 6394069301SLokesh Vutla case MAIN_PLL: 6494069301SLokesh Vutla speed = get_max_dev_speed(); 6594069301SLokesh Vutla data = &core_pll_config[speed]; 6694069301SLokesh Vutla break; 6794069301SLokesh Vutla case PASS_PLL: 6894069301SLokesh Vutla data = &pa_pll_config; 6994069301SLokesh Vutla break; 7094069301SLokesh Vutla default: 7194069301SLokesh Vutla data = NULL; 7294069301SLokesh Vutla } 7394069301SLokesh Vutla 7494069301SLokesh Vutla return data; 7594069301SLokesh Vutla } 7694069301SLokesh Vutla 7700b821f1SHao Zhang #ifdef CONFIG_DRIVER_TI_KEYSTONE_NET 7800b821f1SHao Zhang struct eth_priv_t eth_priv_cfg[] = { 7900b821f1SHao Zhang { 8000b821f1SHao Zhang .int_name = "K2E_EMAC0", 8100b821f1SHao Zhang .rx_flow = 0, 8200b821f1SHao Zhang .phy_addr = 0, 8300b821f1SHao Zhang .slave_port = 1, 8400b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY, 85*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 8600b821f1SHao Zhang }, 8700b821f1SHao Zhang { 8800b821f1SHao Zhang .int_name = "K2E_EMAC1", 8900b821f1SHao Zhang .rx_flow = 8, 9000b821f1SHao Zhang .phy_addr = 1, 9100b821f1SHao Zhang .slave_port = 2, 9200b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY, 93*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 9400b821f1SHao Zhang }, 9500b821f1SHao Zhang { 9600b821f1SHao Zhang .int_name = "K2E_EMAC2", 9700b821f1SHao Zhang .rx_flow = 16, 9800b821f1SHao Zhang .phy_addr = 2, 9900b821f1SHao Zhang .slave_port = 3, 10000b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 101*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 10200b821f1SHao Zhang }, 10300b821f1SHao Zhang { 10400b821f1SHao Zhang .int_name = "K2E_EMAC3", 10500b821f1SHao Zhang .rx_flow = 24, 10600b821f1SHao Zhang .phy_addr = 3, 10700b821f1SHao Zhang .slave_port = 4, 10800b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 109*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 11000b821f1SHao Zhang }, 11100b821f1SHao Zhang { 11200b821f1SHao Zhang .int_name = "K2E_EMAC4", 11300b821f1SHao Zhang .rx_flow = 32, 11400b821f1SHao Zhang .phy_addr = 4, 11500b821f1SHao Zhang .slave_port = 5, 11600b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 117*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 11800b821f1SHao Zhang }, 11900b821f1SHao Zhang { 12000b821f1SHao Zhang .int_name = "K2E_EMAC5", 12100b821f1SHao Zhang .rx_flow = 40, 12200b821f1SHao Zhang .phy_addr = 5, 12300b821f1SHao Zhang .slave_port = 6, 12400b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 125*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 12600b821f1SHao Zhang }, 12700b821f1SHao Zhang { 12800b821f1SHao Zhang .int_name = "K2E_EMAC6", 12900b821f1SHao Zhang .rx_flow = 48, 13000b821f1SHao Zhang .phy_addr = 6, 13100b821f1SHao Zhang .slave_port = 7, 13200b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 133*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 13400b821f1SHao Zhang }, 13500b821f1SHao Zhang { 13600b821f1SHao Zhang .int_name = "K2E_EMAC7", 13700b821f1SHao Zhang .rx_flow = 56, 13800b821f1SHao Zhang .phy_addr = 7, 13900b821f1SHao Zhang .slave_port = 8, 14000b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 141*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 14200b821f1SHao Zhang }, 14300b821f1SHao Zhang }; 14400b821f1SHao Zhang 14500b821f1SHao Zhang int get_num_eth_ports(void) 14600b821f1SHao Zhang { 14700b821f1SHao Zhang return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t); 14800b821f1SHao Zhang } 14900b821f1SHao Zhang #endif 15000b821f1SHao Zhang 151a9068479SHao Zhang #if defined(CONFIG_BOARD_EARLY_INIT_F) 152a9068479SHao Zhang int board_early_init_f(void) 153a9068479SHao Zhang { 15494069301SLokesh Vutla init_plls(); 15561f66fd5SVitaly Andrianov 156a9068479SHao Zhang return 0; 157a9068479SHao Zhang } 158a9068479SHao Zhang #endif 1595ec66b14SHao Zhang 1605ec66b14SHao Zhang #ifdef CONFIG_SPL_BUILD 1615ec66b14SHao Zhang void spl_init_keystone_plls(void) 1625ec66b14SHao Zhang { 16394069301SLokesh Vutla init_plls(); 1645ec66b14SHao Zhang } 1655ec66b14SHao Zhang #endif 166