blob: 2a2e0057e24efd2fd4832f5e07c025de102c4a09 [file] [log] [blame]
Hao Zhangc13cbcf2014-10-22 16:32:33 +03001/*
2 * K2L EVM : Board initialization
3 *
4 * (C) Copyright 2014
5 * Texas Instruments Incorporated, <www.ti.com>
6 *
7 * SPDX-License-Identifier: GPL-2.0+
8 */
9
10#include <common.h>
11#include <asm/arch/ddr3.h>
12#include <asm/arch/hardware.h>
Hao Zhang7874b8a2014-10-29 13:09:34 +020013#include <asm/ti-common/keystone_net.h>
Hao Zhangc13cbcf2014-10-22 16:32:33 +030014
15DECLARE_GLOBAL_DATA_PTR;
16
17unsigned int external_clk[ext_clk_count] = {
18 [sys_clk] = 122880000,
19 [alt_core_clk] = 100000000,
20 [pa_clk] = 122880000,
21 [tetris_clk] = 122880000,
Lokesh Vutlac40f81d2015-07-28 14:16:47 +053022 [ddr3a_clk] = 100000000,
Hao Zhangc13cbcf2014-10-22 16:32:33 +030023};
24
Lokesh Vutla9da9afa2015-07-28 14:16:44 +053025static struct pll_init_data core_pll_config[NUM_SPDS] = {
26 [SPD800] = CORE_PLL_799,
27 [SPD1000] = CORE_PLL_1000,
Lokesh Vutlab4a96bd2015-08-17 19:58:34 +053028 [SPD1200] = CORE_PLL_1198,
Hao Zhangc13cbcf2014-10-22 16:32:33 +030029};
30
Lokesh Vutla70438fc2015-07-28 14:16:43 +053031s16 divn_val[16] = {
32 0, 0, 1, 4, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
33};
34
Hao Zhangc13cbcf2014-10-22 16:32:33 +030035static struct pll_init_data tetris_pll_config[] = {
Lokesh Vutla9da9afa2015-07-28 14:16:44 +053036 [SPD800] = TETRIS_PLL_799,
37 [SPD1000] = TETRIS_PLL_1000,
38 [SPD1200] = TETRIS_PLL_1198,
39 [SPD1350] = TETRIS_PLL_1352,
40 [SPD1400] = TETRIS_PLL_1401,
Hao Zhangc13cbcf2014-10-22 16:32:33 +030041};
42
43static struct pll_init_data pa_pll_config =
44 PASS_PLL_983;
45
Lokesh Vutla79a94a22015-07-28 14:16:46 +053046struct pll_init_data *get_pll_init_data(int pll)
47{
48 int speed;
49 struct pll_init_data *data;
50
51 switch (pll) {
52 case MAIN_PLL:
Lokesh Vutlab35410e2016-03-04 10:36:40 -060053 speed = get_max_dev_speed(speeds);
Lokesh Vutla79a94a22015-07-28 14:16:46 +053054 data = &core_pll_config[speed];
55 break;
56 case TETRIS_PLL:
Lokesh Vutlab35410e2016-03-04 10:36:40 -060057 speed = get_max_arm_speed(speeds);
Lokesh Vutla79a94a22015-07-28 14:16:46 +053058 data = &tetris_pll_config[speed];
59 break;
60 case PASS_PLL:
61 data = &pa_pll_config;
62 break;
63 default:
64 data = NULL;
65 }
66
67 return data;
68}
69
Hao Zhang7874b8a2014-10-29 13:09:34 +020070#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
71struct eth_priv_t eth_priv_cfg[] = {
72 {
73 .int_name = "K2L_EMAC",
74 .rx_flow = 0,
75 .phy_addr = 0,
76 .slave_port = 1,
77 .sgmii_link_type = SGMII_LINK_MAC_PHY,
Mugunthan V Nd44bb342015-09-19 16:26:48 +053078 .phy_if = PHY_INTERFACE_MODE_SGMII,
Hao Zhang7874b8a2014-10-29 13:09:34 +020079 },
80 {
81 .int_name = "K2L_EMAC1",
82 .rx_flow = 8,
83 .phy_addr = 1,
84 .slave_port = 2,
85 .sgmii_link_type = SGMII_LINK_MAC_PHY,
Mugunthan V Nd44bb342015-09-19 16:26:48 +053086 .phy_if = PHY_INTERFACE_MODE_SGMII,
Hao Zhang7874b8a2014-10-29 13:09:34 +020087 },
88 {
89 .int_name = "K2L_EMAC2",
90 .rx_flow = 16,
91 .phy_addr = 2,
92 .slave_port = 3,
93 .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
Mugunthan V Nd44bb342015-09-19 16:26:48 +053094 .phy_if = PHY_INTERFACE_MODE_SGMII,
Hao Zhang7874b8a2014-10-29 13:09:34 +020095 },
96 {
97 .int_name = "K2L_EMAC3",
98 .rx_flow = 32,
99 .phy_addr = 3,
100 .slave_port = 4,
101 .sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
Mugunthan V Nd44bb342015-09-19 16:26:48 +0530102 .phy_if = PHY_INTERFACE_MODE_SGMII,
Hao Zhang7874b8a2014-10-29 13:09:34 +0200103 },
104};
105
106int get_num_eth_ports(void)
107{
108 return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
109}
110#endif
111
Hao Zhangc13cbcf2014-10-22 16:32:33 +0300112#ifdef CONFIG_BOARD_EARLY_INIT_F
113int board_early_init_f(void)
114{
Lokesh Vutla79a94a22015-07-28 14:16:46 +0530115 init_plls();
Hao Zhangc13cbcf2014-10-22 16:32:33 +0300116
117 return 0;
118}
119#endif
120
121#ifdef CONFIG_SPL_BUILD
Hao Zhangc13cbcf2014-10-22 16:32:33 +0300122void spl_init_keystone_plls(void)
123{
Lokesh Vutla79a94a22015-07-28 14:16:46 +0530124 init_plls();
Hao Zhangc13cbcf2014-10-22 16:32:33 +0300125}
126#endif