net/fman: Add support for 10GEC3 and 10GEC4
There are more than two 10GEC in single FMAN in some SoCs(e.g. T2080). This patch adds support for 10GEC3 and 10GEC4. Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
This commit is contained in:
parent
0b66513b27
commit
82a55c1ef8
@ -62,6 +62,8 @@ enum srds_prtcl {
|
||||
QSGMII_FM1_B, /* B indicates MACs 5,6,9,10 */
|
||||
QSGMII_FM2_A,
|
||||
QSGMII_FM2_B,
|
||||
XFI_FM1_MAC1,
|
||||
XFI_FM1_MAC2,
|
||||
XFI_FM1_MAC9,
|
||||
XFI_FM1_MAC10,
|
||||
XFI_FM2_MAC9,
|
||||
|
@ -1621,6 +1621,8 @@ typedef struct ccsr_gur {
|
||||
#define FSL_CORENET_DEVDISR2_DTSEC1_10 0x00400000
|
||||
#define FSL_CORENET_DEVDISR2_10GEC1_1 0x00800000
|
||||
#define FSL_CORENET_DEVDISR2_10GEC1_2 0x00400000
|
||||
#define FSL_CORENET_DEVDISR2_10GEC1_3 0x80000000
|
||||
#define FSL_CORENET_DEVDISR2_10GEC1_4 0x40000000
|
||||
#define FSL_CORENET_DEVDISR2_DTSEC2_1 0x00080000
|
||||
#define FSL_CORENET_DEVDISR2_DTSEC2_2 0x00040000
|
||||
#define FSL_CORENET_DEVDISR2_DTSEC2_3 0x00020000
|
||||
|
@ -557,8 +557,16 @@ static int fm_eth_init_mac(struct fm_eth *fm_eth, struct ccsr_fman *reg)
|
||||
num = fm_eth->num;
|
||||
|
||||
#ifdef CONFIG_SYS_FMAN_V3
|
||||
if (fm_eth->type == FM_ETH_10G_E)
|
||||
num += 8;
|
||||
if (fm_eth->type == FM_ETH_10G_E) {
|
||||
/* 10GEC1/10GEC2 use mEMAC9/mEMAC10
|
||||
* 10GEC3/10GEC4 use mEMAC1/mEMAC2
|
||||
* so it needs to change the num.
|
||||
*/
|
||||
if (fm_eth->num >= 2)
|
||||
num -= 2;
|
||||
else
|
||||
num += 8;
|
||||
}
|
||||
base = ®->memac[num].fm_memac;
|
||||
phyregs = ®->memac[num].fm_memac_mdio;
|
||||
#else
|
||||
|
@ -18,9 +18,11 @@
|
||||
#define RX_PORT_1G_BASE 0x08
|
||||
#define MAX_NUM_RX_PORT_1G CONFIG_SYS_NUM_FM1_DTSEC
|
||||
#define RX_PORT_10G_BASE 0x10
|
||||
#define RX_PORT_10G_BASE2 0x08
|
||||
#define TX_PORT_1G_BASE 0x28
|
||||
#define MAX_NUM_TX_PORT_1G CONFIG_SYS_NUM_FM1_DTSEC
|
||||
#define TX_PORT_10G_BASE 0x30
|
||||
#define TX_PORT_10G_BASE2 0x28
|
||||
#define MIIM_TIMEOUT 0xFFFF
|
||||
|
||||
struct fm_muram {
|
||||
|
@ -64,6 +64,12 @@ struct fm_eth_info fm_info[] = {
|
||||
#if (CONFIG_SYS_NUM_FM1_10GEC >= 2)
|
||||
FM_TGEC_INFO_INITIALIZER(1, 2),
|
||||
#endif
|
||||
#if (CONFIG_SYS_NUM_FM1_10GEC >= 3)
|
||||
FM_TGEC_INFO_INITIALIZER2(1, 3),
|
||||
#endif
|
||||
#if (CONFIG_SYS_NUM_FM1_10GEC >= 4)
|
||||
FM_TGEC_INFO_INITIALIZER2(1, 4),
|
||||
#endif
|
||||
#if (CONFIG_SYS_NUM_FM2_10GEC >= 1)
|
||||
FM_TGEC_INFO_INITIALIZER(2, 1),
|
||||
#endif
|
||||
@ -239,10 +245,14 @@ static void ft_fixup_port(void *blob, struct fm_eth_info *info, char *prop)
|
||||
* FM1_10GEC1 is enabled and FM1_DTSEC9 is disabled, ensure that the
|
||||
* dual-role MAC is not disabled, ditto for other dual-role MACs.
|
||||
*/
|
||||
if (((info->port == FM1_DTSEC9) && (PORT_IS_ENABLED(FM1_10GEC1))) ||
|
||||
((info->port == FM1_DTSEC10) && (PORT_IS_ENABLED(FM1_10GEC2))) ||
|
||||
((info->port == FM1_10GEC1) && (PORT_IS_ENABLED(FM1_DTSEC9))) ||
|
||||
((info->port == FM1_10GEC2) && (PORT_IS_ENABLED(FM1_DTSEC10)))
|
||||
if (((info->port == FM1_DTSEC9) && (PORT_IS_ENABLED(FM1_10GEC1))) ||
|
||||
((info->port == FM1_DTSEC10) && (PORT_IS_ENABLED(FM1_10GEC2))) ||
|
||||
((info->port == FM1_DTSEC1) && (PORT_IS_ENABLED(FM1_10GEC3))) ||
|
||||
((info->port == FM1_DTSEC2) && (PORT_IS_ENABLED(FM1_10GEC4))) ||
|
||||
((info->port == FM1_10GEC1) && (PORT_IS_ENABLED(FM1_DTSEC9))) ||
|
||||
((info->port == FM1_10GEC2) && (PORT_IS_ENABLED(FM1_DTSEC10))) ||
|
||||
((info->port == FM1_10GEC3) && (PORT_IS_ENABLED(FM1_DTSEC1))) ||
|
||||
((info->port == FM1_10GEC4) && (PORT_IS_ENABLED(FM1_DTSEC2)))
|
||||
#if (CONFIG_SYS_NUM_FMAN == 2)
|
||||
||
|
||||
((info->port == FM2_DTSEC9) && (PORT_IS_ENABLED(FM2_10GEC1))) ||
|
||||
|
@ -22,6 +22,8 @@ enum fm_port {
|
||||
FM1_DTSEC10,
|
||||
FM1_10GEC1,
|
||||
FM1_10GEC2,
|
||||
FM1_10GEC3,
|
||||
FM1_10GEC4,
|
||||
FM2_DTSEC1,
|
||||
FM2_DTSEC2,
|
||||
FM2_DTSEC3,
|
||||
@ -85,6 +87,22 @@ enum fm_eth_type {
|
||||
.compat_offset = CONFIG_SYS_FSL_FM##idx##_OFFSET + \
|
||||
offsetof(struct ccsr_fman, memac[n-1+8]),\
|
||||
}
|
||||
|
||||
#if (CONFIG_SYS_NUM_FM1_10GEC >= 3)
|
||||
#define FM_TGEC_INFO_INITIALIZER2(idx, n) \
|
||||
{ \
|
||||
FM_ETH_INFO_INITIALIZER(idx, CONFIG_SYS_FM1_TGEC_MDIO_ADDR) \
|
||||
.index = idx, \
|
||||
.num = n - 1, \
|
||||
.type = FM_ETH_10G_E, \
|
||||
.port = FM##idx##_10GEC##n, \
|
||||
.rx_port_id = RX_PORT_10G_BASE2 + n - 3, \
|
||||
.tx_port_id = TX_PORT_10G_BASE2 + n - 3, \
|
||||
.compat_offset = CONFIG_SYS_FSL_FM##idx##_OFFSET + \
|
||||
offsetof(struct ccsr_fman, memac[n-1-2]),\
|
||||
}
|
||||
#endif
|
||||
|
||||
#else
|
||||
#define FM_DTSEC_INFO_INITIALIZER(idx, n) \
|
||||
{ \
|
||||
|
Loading…
Reference in New Issue
Block a user