1e595107eSHao Zhang /* 2e595107eSHao Zhang * K2HK EVM : Board initialization 3e595107eSHao Zhang * 4e595107eSHao Zhang * (C) Copyright 2012-2014 5e595107eSHao Zhang * Texas Instruments Incorporated, <www.ti.com> 6e595107eSHao Zhang * 7e595107eSHao Zhang * SPDX-License-Identifier: GPL-2.0+ 8e595107eSHao Zhang */ 9e595107eSHao Zhang 10e595107eSHao Zhang #include <common.h> 1161f66fd5SVitaly Andrianov #include <asm/arch/clock.h> 12e595107eSHao Zhang #include <asm/arch/hardware.h> 130935cac6SKhoronzhuk, Ivan #include <asm/ti-common/keystone_net.h> 14e595107eSHao Zhang 15e595107eSHao Zhang DECLARE_GLOBAL_DATA_PTR; 16e595107eSHao Zhang 17e595107eSHao Zhang unsigned int external_clk[ext_clk_count] = { 18e595107eSHao Zhang [sys_clk] = 122880000, 19e595107eSHao Zhang [alt_core_clk] = 125000000, 20e595107eSHao Zhang [pa_clk] = 122880000, 21e595107eSHao Zhang [tetris_clk] = 125000000, 22e595107eSHao Zhang [ddr3a_clk] = 100000000, 23e595107eSHao Zhang [ddr3b_clk] = 100000000, 24e595107eSHao Zhang }; 25e595107eSHao Zhang 267b50e159SLokesh Vutla static struct pll_init_data core_pll_config[NUM_SPDS] = { 277b50e159SLokesh Vutla [SPD800] = CORE_PLL_799, 287b50e159SLokesh Vutla [SPD1000] = CORE_PLL_999, 297b50e159SLokesh Vutla [SPD1200] = CORE_PLL_1200, 30e595107eSHao Zhang }; 31e595107eSHao Zhang 32c321a236SLokesh Vutla s16 divn_val[16] = { 33c321a236SLokesh Vutla 0, 0, 1, 4, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 34c321a236SLokesh Vutla }; 35c321a236SLokesh Vutla 3661f66fd5SVitaly Andrianov static struct pll_init_data tetris_pll_config[] = { 377b50e159SLokesh Vutla [SPD800] = TETRIS_PLL_800, 387b50e159SLokesh Vutla [SPD1000] = TETRIS_PLL_1000, 397b50e159SLokesh Vutla [SPD1200] = TETRIS_PLL_1200, 407b50e159SLokesh Vutla [SPD1350] = TETRIS_PLL_1350, 417b50e159SLokesh Vutla [SPD1400] = TETRIS_PLL_1400, 4261f66fd5SVitaly Andrianov }; 4361f66fd5SVitaly Andrianov 4461f66fd5SVitaly Andrianov static struct pll_init_data pa_pll_config = 4561f66fd5SVitaly Andrianov PASS_PLL_983; 4661f66fd5SVitaly Andrianov 4794069301SLokesh Vutla struct pll_init_data *get_pll_init_data(int pll) 4894069301SLokesh Vutla { 4994069301SLokesh Vutla int speed; 5094069301SLokesh Vutla struct pll_init_data *data; 5194069301SLokesh Vutla 5294069301SLokesh Vutla switch (pll) { 5394069301SLokesh Vutla case MAIN_PLL: 5494069301SLokesh Vutla speed = get_max_dev_speed(); 5594069301SLokesh Vutla data = &core_pll_config[speed]; 5694069301SLokesh Vutla break; 5794069301SLokesh Vutla case TETRIS_PLL: 5894069301SLokesh Vutla speed = get_max_arm_speed(); 5994069301SLokesh Vutla data = &tetris_pll_config[speed]; 6094069301SLokesh Vutla break; 6194069301SLokesh Vutla case PASS_PLL: 6294069301SLokesh Vutla data = &pa_pll_config; 6394069301SLokesh Vutla break; 6494069301SLokesh Vutla default: 6594069301SLokesh Vutla data = NULL; 6694069301SLokesh Vutla } 6794069301SLokesh Vutla 6894069301SLokesh Vutla return data; 6994069301SLokesh Vutla } 7094069301SLokesh Vutla 71e595107eSHao Zhang #ifdef CONFIG_DRIVER_TI_KEYSTONE_NET 72e595107eSHao Zhang struct eth_priv_t eth_priv_cfg[] = { 73e595107eSHao Zhang { 74e595107eSHao Zhang .int_name = "K2HK_EMAC", 75e595107eSHao Zhang .rx_flow = 22, 76e595107eSHao Zhang .phy_addr = 0, 77e595107eSHao Zhang .slave_port = 1, 78e595107eSHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY, 79*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 80e595107eSHao Zhang }, 81e595107eSHao Zhang { 82e595107eSHao Zhang .int_name = "K2HK_EMAC1", 83e595107eSHao Zhang .rx_flow = 23, 84e595107eSHao Zhang .phy_addr = 1, 85e595107eSHao Zhang .slave_port = 2, 86e595107eSHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY, 87*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 88e595107eSHao Zhang }, 89e595107eSHao Zhang { 90e595107eSHao Zhang .int_name = "K2HK_EMAC2", 91e595107eSHao Zhang .rx_flow = 24, 92e595107eSHao Zhang .phy_addr = 2, 93e595107eSHao Zhang .slave_port = 3, 94e595107eSHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 95*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 96e595107eSHao Zhang }, 97e595107eSHao Zhang { 98e595107eSHao Zhang .int_name = "K2HK_EMAC3", 99e595107eSHao Zhang .rx_flow = 25, 100e595107eSHao Zhang .phy_addr = 3, 101e595107eSHao Zhang .slave_port = 4, 102e595107eSHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED, 103*bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII, 104e595107eSHao Zhang }, 105e595107eSHao Zhang }; 106e595107eSHao Zhang 107e595107eSHao Zhang int get_num_eth_ports(void) 108e595107eSHao Zhang { 109e595107eSHao Zhang return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t); 110e595107eSHao Zhang } 111e595107eSHao Zhang #endif 112e595107eSHao Zhang 113e595107eSHao Zhang #ifdef CONFIG_BOARD_EARLY_INIT_F 114e595107eSHao Zhang int board_early_init_f(void) 115e595107eSHao Zhang { 11694069301SLokesh Vutla init_plls(); 11761f66fd5SVitaly Andrianov 118e595107eSHao Zhang return 0; 119e595107eSHao Zhang } 120e595107eSHao Zhang #endif 1215ec66b14SHao Zhang 1225ec66b14SHao Zhang #ifdef CONFIG_SPL_BUILD 1235ec66b14SHao Zhang void spl_init_keystone_plls(void) 1245ec66b14SHao Zhang { 12594069301SLokesh Vutla init_plls(); 1265ec66b14SHao Zhang } 1275ec66b14SHao Zhang #endif 128