diff options
| author | Shengzhou Liu <Shengzhou.Liu@freescale.com> | 2013-03-25 07:39:29 +0000 | 
|---|---|---|
| committer | Andy Fleming <afleming@freescale.com> | 2013-05-14 16:13:24 -0500 | 
| commit | ae8a5d10f34c8ab6421d5204956de18c9defbf1d (patch) | |
| tree | 887c21630b824799ef65cdc6cfb6b8a4969f0e5a | |
| parent | 959278083db4a2f104e56069ca031ecc3213c728 (diff) | |
| download | olio-uboot-2014.01-ae8a5d10f34c8ab6421d5204956de18c9defbf1d.tar.xz olio-uboot-2014.01-ae8a5d10f34c8ab6421d5204956de18c9defbf1d.zip | |
net/fm: fixup ethernet for mEMAC
- set proper compatible property name for mEMAC.
- fixed ft_fixup_port for dual-role mEMAC, which will lead to
  MAC node disabled incorrectly.
Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com>
Signed-off-by: Andy Fleming <afleming@freescale.com>
| -rw-r--r-- | drivers/net/fm/fm.h | 2 | ||||
| -rw-r--r-- | drivers/net/fm/init.c | 25 | 
2 files changed, 27 insertions, 0 deletions
| diff --git a/drivers/net/fm/fm.h b/drivers/net/fm/fm.h index 228df330f..ba581e9ef 100644 --- a/drivers/net/fm/fm.h +++ b/drivers/net/fm/fm.h @@ -152,4 +152,6 @@ struct fm_eth {  #define MAX_RXBUF_LOG2		11  #define MAX_RXBUF_LEN		(1 << MAX_RXBUF_LOG2) +#define PORT_IS_ENABLED(port)	fm_info[fm_port_to_index(port)].enabled +  #endif /* __FM_H__ */ diff --git a/drivers/net/fm/init.c b/drivers/net/fm/init.c index d12ec9b5e..5908c3254 100644 --- a/drivers/net/fm/init.c +++ b/drivers/net/fm/init.c @@ -238,6 +238,26 @@ static void ft_fixup_port(void *blob, struct fm_eth_info *info, char *prop)  		return ;  	} +#ifdef CONFIG_SYS_FMAN_V3 +	/* +	 * Physically FM1_DTSEC9 and FM1_10GEC1 use the same dual-role MAC, when +	 * 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 (CONFIG_SYS_NUM_FMAN == 2) +										|| +	    ((info->port == FM2_DTSEC9) && (PORT_IS_ENABLED(FM2_10GEC1)))	|| +	    ((info->port == FM2_DTSEC10) && (PORT_IS_ENABLED(FM2_10GEC2)))	|| +	    ((info->port == FM2_10GEC1) && (PORT_IS_ENABLED(FM2_DTSEC9)))	|| +	    ((info->port == FM2_10GEC2) && (PORT_IS_ENABLED(FM2_DTSEC10))) +#endif +	) +		return; +#endif  	/* board code might have caused offset to change */  	off = fdt_node_offset_by_compat_reg(blob, prop, paddr); @@ -255,10 +275,15 @@ void fdt_fixup_fman_ethernet(void *blob)  {  	int i; +#ifdef CONFIG_SYS_FMAN_V3 +	for (i = 0; i < ARRAY_SIZE(fm_info); i++) +		ft_fixup_port(blob, &fm_info[i], "fsl,fman-memac"); +#else  	for (i = 0; i < ARRAY_SIZE(fm_info); i++) {  		if (fm_info[i].type == FM_ETH_1G_E)  			ft_fixup_port(blob, &fm_info[i], "fsl,fman-1g-mac");  		else  			ft_fixup_port(blob, &fm_info[i], "fsl,fman-10g-mac");  	} +#endif  } |