]>
Commit | Line | Data |
---|---|---|
c916d7c9 KG |
1 | /* |
2 | * Copyright 2009-2011 Freescale Semiconductor, Inc. | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or | |
5 | * modify it under the terms of the GNU General Public License as | |
6 | * published by the Free Software Foundation; either version 2 of | |
7 | * the License, or (at your option) any later version. | |
8 | * | |
9 | * This program is distributed in the hope that it will be useful, | |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | * GNU General Public License for more details. | |
13 | * | |
14 | * You should have received a copy of the GNU General Public License | |
15 | * along with this program; if not, write to the Free Software | |
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | |
17 | * MA 02111-1307 USA | |
18 | */ | |
19 | ||
20 | #ifndef __FM_ETH_H__ | |
21 | #define __FM_ETH_H__ | |
22 | ||
23 | #include <common.h> | |
24 | #include <asm/types.h> | |
25 | #include <asm/fsl_enet.h> | |
26 | ||
27 | enum fm_port { | |
28 | FM1_DTSEC1, | |
29 | FM1_DTSEC2, | |
30 | FM1_DTSEC3, | |
31 | FM1_DTSEC4, | |
32 | FM1_DTSEC5, | |
33 | FM1_10GEC1, | |
34 | FM2_DTSEC1, | |
35 | FM2_DTSEC2, | |
36 | FM2_DTSEC3, | |
37 | FM2_DTSEC4, | |
38 | FM2_10GEC1, | |
39 | NUM_FM_PORTS, | |
40 | }; | |
41 | ||
42 | enum fm_eth_type { | |
43 | FM_ETH_1G_E, | |
44 | FM_ETH_10G_E, | |
45 | }; | |
46 | ||
47 | #define CONFIG_SYS_FM1_DTSEC1_MDIO_ADDR (CONFIG_SYS_FSL_FM1_ADDR + 0xe1120) | |
48 | #define CONFIG_SYS_FM1_TGEC_MDIO_ADDR (CONFIG_SYS_FSL_FM1_ADDR + 0xf1000) | |
49 | ||
50 | #define DEFAULT_FM_MDIO_NAME "FSL_MDIO0" | |
51 | #define DEFAULT_FM_TGEC_MDIO_NAME "FM_TGEC_MDIO" | |
52 | ||
53 | /* Fman ethernet info struct */ | |
54 | #define FM_ETH_INFO_INITIALIZER(idx, pregs) \ | |
55 | .fm = idx, \ | |
56 | .phy_regs = (void *)pregs, \ | |
57 | .enet_if = PHY_INTERFACE_MODE_NONE, \ | |
58 | ||
59 | #define FM_DTSEC_INFO_INITIALIZER(idx, n) \ | |
60 | { \ | |
61 | FM_ETH_INFO_INITIALIZER(idx, CONFIG_SYS_FM1_DTSEC1_MDIO_ADDR) \ | |
62 | .index = idx, \ | |
63 | .num = n - 1, \ | |
64 | .type = FM_ETH_1G_E, \ | |
65 | .port = FM##idx##_DTSEC##n, \ | |
66 | .rx_port_id = RX_PORT_1G_BASE + n - 1, \ | |
67 | .tx_port_id = TX_PORT_1G_BASE + n - 1, \ | |
68 | .compat_offset = CONFIG_SYS_FSL_FM##idx##_OFFSET + \ | |
69 | offsetof(struct ccsr_fman, mac_1g[n-1]),\ | |
70 | } | |
71 | ||
72 | #define FM_TGEC_INFO_INITIALIZER(idx, n) \ | |
73 | { \ | |
74 | FM_ETH_INFO_INITIALIZER(idx, CONFIG_SYS_FM1_TGEC_MDIO_ADDR) \ | |
75 | .index = idx, \ | |
76 | .num = n - 1, \ | |
77 | .type = FM_ETH_10G_E, \ | |
78 | .port = FM##idx##_10GEC##n, \ | |
79 | .rx_port_id = RX_PORT_10G_BASE + n - 1, \ | |
80 | .tx_port_id = TX_PORT_10G_BASE + n - 1, \ | |
81 | .compat_offset = CONFIG_SYS_FSL_FM##idx##_OFFSET + \ | |
82 | offsetof(struct ccsr_fman, mac_10g[n-1]),\ | |
83 | } | |
84 | ||
85 | struct fm_eth_info { | |
86 | u8 enabled; | |
87 | u8 fm; | |
88 | u8 num; | |
89 | u8 phy_addr; | |
90 | int index; | |
91 | u16 rx_port_id; | |
92 | u16 tx_port_id; | |
93 | enum fm_port port; | |
94 | enum fm_eth_type type; | |
95 | void *phy_regs; | |
96 | phy_interface_t enet_if; | |
97 | u32 compat_offset; | |
98 | struct mii_dev *bus; | |
99 | }; | |
100 | ||
101 | struct tgec_mdio_info { | |
102 | struct tgec_mdio_controller *regs; | |
103 | char *name; | |
104 | }; | |
105 | ||
106 | int fm_tgec_mdio_init(bd_t *bis, struct tgec_mdio_info *info); | |
107 | int fm_standard_init(bd_t *bis); | |
108 | void fman_enet_init(void); | |
109 | void fdt_fixup_fman_ethernet(void *fdt); | |
110 | phy_interface_t fm_info_get_enet_if(enum fm_port port); | |
111 | void fm_info_set_phy_address(enum fm_port port, int address); | |
112 | void fm_info_set_mdio(enum fm_port port, struct mii_dev *bus); | |
69a85242 | 113 | void fm_disable_port(enum fm_port port); |
c916d7c9 KG |
114 | |
115 | #endif |