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