diff options
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/fm/init.c | 53 | ||||
| -rw-r--r-- | drivers/net/sh_eth.h | 8 | 
2 files changed, 58 insertions, 3 deletions
| diff --git a/drivers/net/fm/init.c b/drivers/net/fm/init.c index cd787f4ee..74c72d3ff 100644 --- a/drivers/net/fm/init.c +++ b/drivers/net/fm/init.c @@ -276,13 +276,64 @@ static void ft_fixup_port(void *blob, struct fm_eth_info *info, char *prop)  		"status", "disabled", strlen("disabled") + 1, 1);  } +#ifdef CONFIG_SYS_FMAN_V3 +static int ft_fixup_xgec(void *blob, struct fm_eth_info *info) +{ +	int off, i, ci; +#define FM1_10GEC3_RX_PORT_ADDR	(CONFIG_SYS_CCSRBAR_PHYS + 0x488000) +#define FM1_10GEC3_TX_PORT_ADDR	(CONFIG_SYS_CCSRBAR_PHYS + 0x4a8000) +#define FM1_10GEC3_MAC_ADDR	(CONFIG_SYS_CCSRBAR_PHYS + 0x4e0000) + +	if ((info->port == FM1_10GEC3) || (info->port == FM1_10GEC4)) { +		ci = (info->port == FM1_10GEC3) ? 2 : 3; +		i = (info->port == FM1_10GEC3) ? 0 : 1; + +		off = fdt_node_offset_by_compat_reg(blob, "fsl,fman-port-1g-rx", +						    FM1_10GEC3_RX_PORT_ADDR + +						    i * 0x1000); +		if (off > 0) { +			fdt_setprop(blob, off, "cell-index", &ci, sizeof(int)); +			fdt_setprop(blob, off, "compatible", +				    "fsl,fman-port-10g-rx", 20); +		} else { +			goto err; +		} + +		off = fdt_node_offset_by_compat_reg(blob, "fsl,fman-port-1g-tx", +						    FM1_10GEC3_TX_PORT_ADDR + +						    i * 0x1000); +		if (off > 0) { +			fdt_setprop(blob, off, "cell-index", &ci, sizeof(int)); +			fdt_setprop(blob, off, "compatible", +				    "fsl,fman-port-10g-tx", 20); +		} else { +			goto err; +		} + +		off = fdt_node_offset_by_compat_reg(blob, "fsl,fman-memac", +						    FM1_10GEC3_MAC_ADDR + +						    i * 0x2000); +		if (off > 0) +			fdt_setprop(blob, off, "cell-index", &ci, sizeof(int)); +		else +			goto err; +	} +	return 0; +err: +	printf("WARNING: Fail to find the node\n"); +	return -1; +} +#endif +  void fdt_fixup_fman_ethernet(void *blob)  {  	int i;  #ifdef CONFIG_SYS_FMAN_V3 -	for (i = 0; i < ARRAY_SIZE(fm_info); i++) +	for (i = 0; i < ARRAY_SIZE(fm_info); i++) {  		ft_fixup_port(blob, &fm_info[i], "fsl,fman-memac"); +		ft_fixup_xgec(blob, &fm_info[i]); +	}  #else  	for (i = 0; i < ARRAY_SIZE(fm_info); i++) {  		if (fm_info[i].type == FM_ETH_1G_E) diff --git a/drivers/net/sh_eth.h b/drivers/net/sh_eth.h index 8aa71098c..331c07cb5 100644 --- a/drivers/net/sh_eth.h +++ b/drivers/net/sh_eth.h @@ -287,7 +287,9 @@ static const u16 sh_eth_offset_fast_sh4[SH_ETH_MAX_REGISTER_OFFSET] = {  #if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)  #define SH_ETH_TYPE_GETHER  #define BASE_IO_ADDR	0xfee00000 -#elif defined(CONFIG_CPU_SH7757) || defined(CONFIG_CPU_SH7752) +#elif defined(CONFIG_CPU_SH7757) || \ +	defined(CONFIG_CPU_SH7752) || \ +	defined(CONFIG_CPU_SH7753)  #if defined(CONFIG_SH_ETHER_USE_GETHER)  #define SH_ETH_TYPE_GETHER  #define BASE_IO_ADDR	0xfee00000 @@ -356,7 +358,9 @@ enum DMAC_T_BIT {  /* GECMR */  enum GECMR_BIT { -#if defined(CONFIG_CPU_SH7757) || defined(CONFIG_CPU_SH7752) +#if defined(CONFIG_CPU_SH7757) || \ +	defined(CONFIG_CPU_SH7752) || \ +	defined(CONFIG_CPU_SH7753)  	GECMR_1000B = 0x20, GECMR_100B = 0x01, GECMR_10B = 0x00,  #else  	GECMR_1000B = 0x01, GECMR_100B = 0x04, GECMR_10B = 0x00, |