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> 13*00b821f1SHao 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, 21a9068479SHao Zhang [ddr3_clk] = 100000000, 22a9068479SHao Zhang [mcm_clk] = 312500000, 23a9068479SHao Zhang [pcie_clk] = 100000000, 24a9068479SHao Zhang [sgmii_clk] = 156250000, 25a9068479SHao Zhang [xgmii_clk] = 156250000, 26a9068479SHao Zhang [usb_clk] = 100000000, 27a9068479SHao Zhang }; 28a9068479SHao Zhang 2961f66fd5SVitaly Andrianov static struct pll_init_data core_pll_config[] = { 3061f66fd5SVitaly Andrianov CORE_PLL_800, 3161f66fd5SVitaly Andrianov CORE_PLL_850, 3261f66fd5SVitaly Andrianov CORE_PLL_1000, 3361f66fd5SVitaly Andrianov CORE_PLL_1250, 3461f66fd5SVitaly Andrianov CORE_PLL_1350, 3561f66fd5SVitaly Andrianov CORE_PLL_1400, 3661f66fd5SVitaly Andrianov CORE_PLL_1500, 37a9068479SHao Zhang }; 38a9068479SHao Zhang 3961f66fd5SVitaly Andrianov static struct pll_init_data pa_pll_config = 4061f66fd5SVitaly Andrianov PASS_PLL_1000; 4161f66fd5SVitaly Andrianov 42*00b821f1SHao Zhang #ifdef CONFIG_DRIVER_TI_KEYSTONE_NET 43*00b821f1SHao Zhang struct eth_priv_t eth_priv_cfg[] = { 44*00b821f1SHao Zhang { 45*00b821f1SHao Zhang .int_name = "K2E_EMAC0", 46*00b821f1SHao Zhang .rx_flow = 0, 47*00b821f1SHao Zhang .phy_addr = 0, 48*00b821f1SHao Zhang .slave_port = 1, 49*00b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY, 50*00b821f1SHao Zhang }, 51*00b821f1SHao Zhang { 52*00b821f1SHao Zhang .int_name = "K2E_EMAC1", 53*00b821f1SHao Zhang .rx_flow = 8, 54*00b821f1SHao Zhang .phy_addr = 1, 55*00b821f1SHao Zhang .slave_port = 2, 56*00b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY, 57*00b821f1SHao Zhang }, 58*00b821f1SHao Zhang { 59*00b821f1SHao Zhang .int_name = "K2E_EMAC2", 60*00b821f1SHao Zhang .rx_flow = 16, 61*00b821f1SHao Zhang .phy_addr = 2, 62*00b821f1SHao Zhang .slave_port = 3, 63*00b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 64*00b821f1SHao Zhang }, 65*00b821f1SHao Zhang { 66*00b821f1SHao Zhang .int_name = "K2E_EMAC3", 67*00b821f1SHao Zhang .rx_flow = 24, 68*00b821f1SHao Zhang .phy_addr = 3, 69*00b821f1SHao Zhang .slave_port = 4, 70*00b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 71*00b821f1SHao Zhang }, 72*00b821f1SHao Zhang { 73*00b821f1SHao Zhang .int_name = "K2E_EMAC4", 74*00b821f1SHao Zhang .rx_flow = 32, 75*00b821f1SHao Zhang .phy_addr = 4, 76*00b821f1SHao Zhang .slave_port = 5, 77*00b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 78*00b821f1SHao Zhang }, 79*00b821f1SHao Zhang { 80*00b821f1SHao Zhang .int_name = "K2E_EMAC5", 81*00b821f1SHao Zhang .rx_flow = 40, 82*00b821f1SHao Zhang .phy_addr = 5, 83*00b821f1SHao Zhang .slave_port = 6, 84*00b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 85*00b821f1SHao Zhang }, 86*00b821f1SHao Zhang { 87*00b821f1SHao Zhang .int_name = "K2E_EMAC6", 88*00b821f1SHao Zhang .rx_flow = 48, 89*00b821f1SHao Zhang .phy_addr = 6, 90*00b821f1SHao Zhang .slave_port = 7, 91*00b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 92*00b821f1SHao Zhang }, 93*00b821f1SHao Zhang { 94*00b821f1SHao Zhang .int_name = "K2E_EMAC7", 95*00b821f1SHao Zhang .rx_flow = 56, 96*00b821f1SHao Zhang .phy_addr = 7, 97*00b821f1SHao Zhang .slave_port = 8, 98*00b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 99*00b821f1SHao Zhang }, 100*00b821f1SHao Zhang }; 101*00b821f1SHao Zhang 102*00b821f1SHao Zhang int get_num_eth_ports(void) 103*00b821f1SHao Zhang { 104*00b821f1SHao Zhang return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t); 105*00b821f1SHao Zhang } 106*00b821f1SHao Zhang #endif 107*00b821f1SHao Zhang 108a9068479SHao Zhang #if defined(CONFIG_BOARD_EARLY_INIT_F) 109a9068479SHao Zhang int board_early_init_f(void) 110a9068479SHao Zhang { 11161f66fd5SVitaly Andrianov int speed; 11261f66fd5SVitaly Andrianov 11361f66fd5SVitaly Andrianov speed = get_max_dev_speed(); 11461f66fd5SVitaly Andrianov init_pll(&core_pll_config[speed]); 11561f66fd5SVitaly Andrianov 11661f66fd5SVitaly Andrianov init_pll(&pa_pll_config); 11761f66fd5SVitaly Andrianov 118a9068479SHao Zhang return 0; 119a9068479SHao Zhang } 120a9068479SHao Zhang #endif 1215ec66b14SHao Zhang 1225ec66b14SHao Zhang #ifdef CONFIG_SPL_BUILD 1235ec66b14SHao Zhang static struct pll_init_data spl_pll_config[] = { 1245ec66b14SHao Zhang CORE_PLL_800, 1255ec66b14SHao Zhang }; 1265ec66b14SHao Zhang 1275ec66b14SHao Zhang void spl_init_keystone_plls(void) 1285ec66b14SHao Zhang { 1295ec66b14SHao Zhang init_plls(ARRAY_SIZE(spl_pll_config), spl_pll_config); 1305ec66b14SHao Zhang } 1315ec66b14SHao Zhang #endif 132