On 11/14/2013 03:31 AM, Shengzhou Liu wrote: > 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....@freescale.com> > --- > Against master branch of upstream. > > arch/powerpc/include/asm/fsl_serdes.h | 2 ++ > arch/powerpc/include/asm/immap_85xx.h | 2 ++ > drivers/net/fm/eth.c | 8 ++++++-- > drivers/net/fm/fm.h | 2 ++ > drivers/net/fm/init.c | 18 ++++++++++++++---- > include/fm_eth.h | 18 ++++++++++++++++++ > 6 files changed, 44 insertions(+), 6 deletions(-) > > diff --git a/arch/powerpc/include/asm/fsl_serdes.h > b/arch/powerpc/include/asm/fsl_serdes.h > index cce892c..404ded4 100644 > --- a/arch/powerpc/include/asm/fsl_serdes.h > +++ b/arch/powerpc/include/asm/fsl_serdes.h > @@ -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, > diff --git a/arch/powerpc/include/asm/immap_85xx.h > b/arch/powerpc/include/asm/immap_85xx.h > index 060e0d7..e47da1d 100644 > --- a/arch/powerpc/include/asm/immap_85xx.h > +++ b/arch/powerpc/include/asm/immap_85xx.h > @@ -1717,6 +1717,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 > diff --git a/drivers/net/fm/eth.c b/drivers/net/fm/eth.c > index cb099cd..e346cd2 100644 > --- a/drivers/net/fm/eth.c > +++ b/drivers/net/fm/eth.c > @@ -557,8 +557,12 @@ 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) { > + if (fm_eth->num >= 2) > + num -= 2; > + else > + num += 8; > + }
It would be nice if you can add some comments here. > base = ®->memac[num].fm_memac; > phyregs = ®->memac[num].fm_memac_mdio; > #else > diff --git a/drivers/net/fm/fm.h b/drivers/net/fm/fm.h > index 3ec49a4..43de114 100644 > --- a/drivers/net/fm/fm.h > +++ b/drivers/net/fm/fm.h > @@ -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 { > diff --git a/drivers/net/fm/init.c b/drivers/net/fm/init.c > index 35edd7a..cd787f4 100644 > --- a/drivers/net/fm/init.c > +++ b/drivers/net/fm/init.c > @@ -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. > */ Revise this comment to match your change. > - 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))) York _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot