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