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
get_external_clk(u32 clk)17ee3c6532SLokesh Vutla unsigned int get_external_clk(u32 clk)
18ee3c6532SLokesh Vutla {
19ee3c6532SLokesh Vutla unsigned int clk_freq;
20ee3c6532SLokesh Vutla
21ee3c6532SLokesh Vutla switch (clk) {
22ee3c6532SLokesh Vutla case sys_clk:
23ee3c6532SLokesh Vutla clk_freq = 100000000;
24ee3c6532SLokesh Vutla break;
25ee3c6532SLokesh Vutla case alt_core_clk:
26ee3c6532SLokesh Vutla clk_freq = 100000000;
27ee3c6532SLokesh Vutla break;
28ee3c6532SLokesh Vutla case pa_clk:
29ee3c6532SLokesh Vutla clk_freq = 100000000;
30ee3c6532SLokesh Vutla break;
31ee3c6532SLokesh Vutla case ddr3a_clk:
32ee3c6532SLokesh Vutla clk_freq = 100000000;
33ee3c6532SLokesh Vutla break;
34ee3c6532SLokesh Vutla default:
35ee3c6532SLokesh Vutla clk_freq = 0;
36ee3c6532SLokesh Vutla break;
37ee3c6532SLokesh Vutla }
38ee3c6532SLokesh Vutla
39ee3c6532SLokesh Vutla return clk_freq;
40ee3c6532SLokesh Vutla }
41a9068479SHao Zhang
427b50e159SLokesh Vutla static struct pll_init_data core_pll_config[NUM_SPDS] = {
437b50e159SLokesh Vutla [SPD800] = CORE_PLL_800,
447b50e159SLokesh Vutla [SPD850] = CORE_PLL_850,
457b50e159SLokesh Vutla [SPD1000] = CORE_PLL_1000,
467b50e159SLokesh Vutla [SPD1250] = CORE_PLL_1250,
477b50e159SLokesh Vutla [SPD1350] = CORE_PLL_1350,
487b50e159SLokesh Vutla [SPD1400] = CORE_PLL_1400,
497b50e159SLokesh Vutla [SPD1500] = CORE_PLL_1500,
507b50e159SLokesh Vutla };
517b50e159SLokesh Vutla
527b50e159SLokesh Vutla /* DEV and ARM speed definitions as specified in DEVSPEED register */
537b50e159SLokesh Vutla int speeds[DEVSPEED_NUMSPDS] = {
547b50e159SLokesh Vutla SPD850,
557b50e159SLokesh Vutla SPD1000,
567b50e159SLokesh Vutla SPD1250,
577b50e159SLokesh Vutla SPD1350,
587b50e159SLokesh Vutla SPD1400,
597b50e159SLokesh Vutla SPD1500,
607b50e159SLokesh Vutla SPD1400,
617b50e159SLokesh Vutla SPD1350,
627b50e159SLokesh Vutla SPD1250,
637b50e159SLokesh Vutla SPD1000,
647b50e159SLokesh Vutla SPD850,
657b50e159SLokesh Vutla SPD800,
66a9068479SHao Zhang };
67a9068479SHao Zhang
68c321a236SLokesh Vutla s16 divn_val[16] = {
69c321a236SLokesh Vutla 0, 0, 1, 4, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
70c321a236SLokesh Vutla };
71c321a236SLokesh Vutla
7261f66fd5SVitaly Andrianov static struct pll_init_data pa_pll_config =
7361f66fd5SVitaly Andrianov PASS_PLL_1000;
7461f66fd5SVitaly Andrianov
get_pll_init_data(int pll)7594069301SLokesh Vutla struct pll_init_data *get_pll_init_data(int pll)
7694069301SLokesh Vutla {
7794069301SLokesh Vutla int speed;
7894069301SLokesh Vutla struct pll_init_data *data;
7994069301SLokesh Vutla
8094069301SLokesh Vutla switch (pll) {
8194069301SLokesh Vutla case MAIN_PLL:
825cd1f6bdSLokesh Vutla speed = get_max_dev_speed(speeds);
8394069301SLokesh Vutla data = &core_pll_config[speed];
8494069301SLokesh Vutla break;
8594069301SLokesh Vutla case PASS_PLL:
8694069301SLokesh Vutla data = &pa_pll_config;
8794069301SLokesh Vutla break;
8894069301SLokesh Vutla default:
8994069301SLokesh Vutla data = NULL;
9094069301SLokesh Vutla }
9194069301SLokesh Vutla
9294069301SLokesh Vutla return data;
9394069301SLokesh Vutla }
9494069301SLokesh Vutla
9500b821f1SHao Zhang #ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
9600b821f1SHao Zhang struct eth_priv_t eth_priv_cfg[] = {
9700b821f1SHao Zhang {
9800b821f1SHao Zhang .int_name = "K2E_EMAC0",
9900b821f1SHao Zhang .rx_flow = 0,
10000b821f1SHao Zhang .phy_addr = 0,
10100b821f1SHao Zhang .slave_port = 1,
10200b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY,
103bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
10400b821f1SHao Zhang },
10500b821f1SHao Zhang {
10600b821f1SHao Zhang .int_name = "K2E_EMAC1",
10700b821f1SHao Zhang .rx_flow = 8,
10800b821f1SHao Zhang .phy_addr = 1,
10900b821f1SHao Zhang .slave_port = 2,
11000b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_PHY,
111bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
11200b821f1SHao Zhang },
11300b821f1SHao Zhang {
11400b821f1SHao Zhang .int_name = "K2E_EMAC2",
11500b821f1SHao Zhang .rx_flow = 16,
11600b821f1SHao Zhang .phy_addr = 2,
11700b821f1SHao Zhang .slave_port = 3,
11800b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
119bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
12000b821f1SHao Zhang },
12100b821f1SHao Zhang {
12200b821f1SHao Zhang .int_name = "K2E_EMAC3",
12300b821f1SHao Zhang .rx_flow = 24,
12400b821f1SHao Zhang .phy_addr = 3,
12500b821f1SHao Zhang .slave_port = 4,
12600b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
127bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
12800b821f1SHao Zhang },
12900b821f1SHao Zhang {
13000b821f1SHao Zhang .int_name = "K2E_EMAC4",
13100b821f1SHao Zhang .rx_flow = 32,
13200b821f1SHao Zhang .phy_addr = 4,
13300b821f1SHao Zhang .slave_port = 5,
13400b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
135bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
13600b821f1SHao Zhang },
13700b821f1SHao Zhang {
13800b821f1SHao Zhang .int_name = "K2E_EMAC5",
13900b821f1SHao Zhang .rx_flow = 40,
14000b821f1SHao Zhang .phy_addr = 5,
14100b821f1SHao Zhang .slave_port = 6,
14200b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
143bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
14400b821f1SHao Zhang },
14500b821f1SHao Zhang {
14600b821f1SHao Zhang .int_name = "K2E_EMAC6",
14700b821f1SHao Zhang .rx_flow = 48,
14800b821f1SHao Zhang .phy_addr = 6,
14900b821f1SHao Zhang .slave_port = 7,
15000b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
151bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
15200b821f1SHao Zhang },
15300b821f1SHao Zhang {
15400b821f1SHao Zhang .int_name = "K2E_EMAC7",
15500b821f1SHao Zhang .rx_flow = 56,
15600b821f1SHao Zhang .phy_addr = 7,
15700b821f1SHao Zhang .slave_port = 8,
15800b821f1SHao Zhang .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
159bf7bd4e7SMugunthan V N .phy_if = PHY_INTERFACE_MODE_SGMII,
16000b821f1SHao Zhang },
16100b821f1SHao Zhang };
16200b821f1SHao Zhang
get_num_eth_ports(void)16300b821f1SHao Zhang int get_num_eth_ports(void)
16400b821f1SHao Zhang {
16500b821f1SHao Zhang return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
16600b821f1SHao Zhang }
16700b821f1SHao Zhang #endif
16800b821f1SHao Zhang
169*2bbcffb1SJean-Jacques Hiblot #if defined(CONFIG_MULTI_DTB_FIT)
board_fit_config_name_match(const char * name)1707234f215SCooper Jr., Franklin int board_fit_config_name_match(const char *name)
1717234f215SCooper Jr., Franklin {
1727234f215SCooper Jr., Franklin if (!strcmp(name, "keystone-k2e-evm"))
1737234f215SCooper Jr., Franklin return 0;
1747234f215SCooper Jr., Franklin
1757234f215SCooper Jr., Franklin return -1;
1767234f215SCooper Jr., Franklin }
1777234f215SCooper Jr., Franklin #endif
1787234f215SCooper Jr., Franklin
179a9068479SHao Zhang #if defined(CONFIG_BOARD_EARLY_INIT_F)
board_early_init_f(void)180a9068479SHao Zhang int board_early_init_f(void)
181a9068479SHao Zhang {
18294069301SLokesh Vutla init_plls();
18361f66fd5SVitaly Andrianov
184a9068479SHao Zhang return 0;
185a9068479SHao Zhang }
186a9068479SHao Zhang #endif
1875ec66b14SHao Zhang
1885ec66b14SHao Zhang #ifdef CONFIG_SPL_BUILD
spl_init_keystone_plls(void)1895ec66b14SHao Zhang void spl_init_keystone_plls(void)
1905ec66b14SHao Zhang {
19194069301SLokesh Vutla init_plls();
1925ec66b14SHao Zhang }
1935ec66b14SHao Zhang #endif
194