xref: /rk3399_rockchip-uboot/board/ti/ks2_evm/board_k2e.c (revision 00b821f16e65d1242b026dcc9834ddeab2fffcab)
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