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
get_external_clk(u32 clk)26ee3c6532SLokesh Vutla unsigned int get_external_clk(u32 clk)
27ee3c6532SLokesh Vutla {
28ee3c6532SLokesh Vutla unsigned int clk_freq;
29ee3c6532SLokesh Vutla
30ee3c6532SLokesh Vutla switch (clk) {
31ee3c6532SLokesh Vutla case sys_clk:
32ee3c6532SLokesh Vutla clk_freq = 122880000;
33ee3c6532SLokesh Vutla break;
34ee3c6532SLokesh Vutla case alt_core_clk:
35ee3c6532SLokesh Vutla clk_freq = 125000000;
36ee3c6532SLokesh Vutla break;
37ee3c6532SLokesh Vutla case pa_clk:
38ee3c6532SLokesh Vutla clk_freq = 122880000;
39ee3c6532SLokesh Vutla break;
40ee3c6532SLokesh Vutla case tetris_clk:
41ee3c6532SLokesh Vutla clk_freq = 125000000;
42ee3c6532SLokesh Vutla break;
43ee3c6532SLokesh Vutla case ddr3a_clk:
44ee3c6532SLokesh Vutla clk_freq = 100000000;
45ee3c6532SLokesh Vutla break;
46ee3c6532SLokesh Vutla case ddr3b_clk:
47ee3c6532SLokesh Vutla clk_freq = 100000000;
48ee3c6532SLokesh Vutla break;
49ee3c6532SLokesh Vutla default:
50ee3c6532SLokesh Vutla clk_freq = 0;
51ee3c6532SLokesh Vutla break;
52ee3c6532SLokesh Vutla }
53ee3c6532SLokesh Vutla
54ee3c6532SLokesh Vutla return clk_freq;
55ee3c6532SLokesh Vutla }
56ee3c6532SLokesh Vutla
577b50e159SLokesh Vutla static struct pll_init_data core_pll_config[NUM_SPDS] = {
587b50e159SLokesh Vutla [SPD800] = CORE_PLL_799,
597b50e159SLokesh Vutla [SPD1000] = CORE_PLL_999,
607b50e159SLokesh Vutla [SPD1200] = CORE_PLL_1200,
61e595107eSHao Zhang };
62e595107eSHao Zhang
63c321a236SLokesh Vutla s16 divn_val[16] = {
64c321a236SLokesh Vutla 0, 0, 1, 4, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
65c321a236SLokesh Vutla };
66c321a236SLokesh Vutla
6761f66fd5SVitaly Andrianov static struct pll_init_data tetris_pll_config[] = {
687b50e159SLokesh Vutla [SPD800] = TETRIS_PLL_800,
697b50e159SLokesh Vutla [SPD1000] = TETRIS_PLL_1000,
707b50e159SLokesh Vutla [SPD1200] = TETRIS_PLL_1200,
717b50e159SLokesh Vutla [SPD1350] = TETRIS_PLL_1350,
727b50e159SLokesh Vutla [SPD1400] = TETRIS_PLL_1400,
7361f66fd5SVitaly Andrianov };
7461f66fd5SVitaly Andrianov
7561f66fd5SVitaly Andrianov static struct pll_init_data pa_pll_config =
7661f66fd5SVitaly Andrianov PASS_PLL_983;
7761f66fd5SVitaly Andrianov
get_pll_init_data(int pll)7894069301SLokesh Vutla struct pll_init_data *get_pll_init_data(int pll)
7994069301SLokesh Vutla {
8094069301SLokesh Vutla int speed;
8194069301SLokesh Vutla struct pll_init_data *data;
8294069301SLokesh Vutla
8394069301SLokesh Vutla switch (pll) {
8494069301SLokesh Vutla case MAIN_PLL:
855cd1f6bdSLokesh Vutla speed = get_max_dev_speed(speeds);
8694069301SLokesh Vutla data = &core_pll_config[speed];
8794069301SLokesh Vutla break;
8894069301SLokesh Vutla case TETRIS_PLL:
895cd1f6bdSLokesh Vutla speed = get_max_arm_speed(speeds);
9094069301SLokesh Vutla data = &tetris_pll_config[speed];
9194069301SLokesh Vutla break;
9294069301SLokesh Vutla case PASS_PLL:
9394069301SLokesh Vutla data = &pa_pll_config;
9494069301SLokesh Vutla break;
9594069301SLokesh Vutla default:
9694069301SLokesh Vutla data = NULL;
9794069301SLokesh Vutla }
9894069301SLokesh Vutla
9994069301SLokesh Vutla return data;
10094069301SLokesh Vutla }
10194069301SLokesh Vutla
102e595107eSHao Zhang #ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
103e595107eSHao Zhang struct eth_priv_t eth_priv_cfg[] = {
104e595107eSHao Zhang {
105e595107eSHao Zhang .int_name = "K2HK_EMAC",
106e595107eSHao Zhang .rx_flow = 22,
107e595107eSHao Zhang .phy_addr = 0,
108e595107eSHao Zhang .slave_port = 1,
109e595107eSHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY,
110bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
111e595107eSHao Zhang },
112e595107eSHao Zhang {
113e595107eSHao Zhang .int_name = "K2HK_EMAC1",
114e595107eSHao Zhang .rx_flow = 23,
115e595107eSHao Zhang .phy_addr = 1,
116e595107eSHao Zhang .slave_port = 2,
117e595107eSHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY,
118bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
119e595107eSHao Zhang },
120e595107eSHao Zhang {
121e595107eSHao Zhang .int_name = "K2HK_EMAC2",
122e595107eSHao Zhang .rx_flow = 24,
123e595107eSHao Zhang .phy_addr = 2,
124e595107eSHao Zhang .slave_port = 3,
125e595107eSHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
126bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
127e595107eSHao Zhang },
128e595107eSHao Zhang {
129e595107eSHao Zhang .int_name = "K2HK_EMAC3",
130e595107eSHao Zhang .rx_flow = 25,
131e595107eSHao Zhang .phy_addr = 3,
132e595107eSHao Zhang .slave_port = 4,
133e595107eSHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
134bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
135e595107eSHao Zhang },
136e595107eSHao Zhang };
137e595107eSHao Zhang
get_num_eth_ports(void)138e595107eSHao Zhang int get_num_eth_ports(void)
139e595107eSHao Zhang {
140e595107eSHao Zhang return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
141e595107eSHao Zhang }
142e595107eSHao Zhang #endif
143e595107eSHao Zhang
144e595107eSHao Zhang #ifdef CONFIG_BOARD_EARLY_INIT_F
board_early_init_f(void)145e595107eSHao Zhang int board_early_init_f(void)
146e595107eSHao Zhang {
14794069301SLokesh Vutla init_plls();
14861f66fd5SVitaly Andrianov
149e595107eSHao Zhang return 0;
150e595107eSHao Zhang }
151e595107eSHao Zhang #endif
1525ec66b14SHao Zhang
153*2bbcffb1SJean-Jacques Hiblot #if defined(CONFIG_MULTI_DTB_FIT)
board_fit_config_name_match(const char * name)1547234f215SCooper Jr., Franklin int board_fit_config_name_match(const char *name)
1557234f215SCooper Jr., Franklin {
1567234f215SCooper Jr., Franklin if (!strcmp(name, "keystone-k2hk-evm"))
1577234f215SCooper Jr., Franklin return 0;
1587234f215SCooper Jr., Franklin
1597234f215SCooper Jr., Franklin return -1;
1607234f215SCooper Jr., Franklin }
1617234f215SCooper Jr., Franklin #endif
1627234f215SCooper Jr., Franklin
1635ec66b14SHao Zhang #ifdef CONFIG_SPL_BUILD
spl_init_keystone_plls(void)1645ec66b14SHao Zhang void spl_init_keystone_plls(void)
1655ec66b14SHao Zhang {
16694069301SLokesh Vutla init_plls();
1675ec66b14SHao Zhang }
1685ec66b14SHao Zhang #endif
169