mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
net/fman: add ft_fixup_xgec to support 3rd and 4th 10GEC
As mEMAC1 and mEMAC2 are dual-role MACs, which are used as 1G or 10G MAC. So we update dynamically 'cell-index' to '2' and '3' for 10GEC3 and 10GEC4. Also change 'fsl,fman-port-1g-rx' to 'fsl,fman-port-10g-rx', ditto for Tx. Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com> Acked-by: York Sun <yorksun@freescale.com>
This commit is contained in:
parent
c1015c67f4
commit
732dfe090d
1 changed files with 52 additions and 1 deletions
|
@ -276,13 +276,64 @@ static void ft_fixup_port(void *blob, struct fm_eth_info *info, char *prop)
|
||||||
"status", "disabled", strlen("disabled") + 1, 1);
|
"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)
|
void fdt_fixup_fman_ethernet(void *blob)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
#ifdef CONFIG_SYS_FMAN_V3
|
#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_port(blob, &fm_info[i], "fsl,fman-memac");
|
||||||
|
ft_fixup_xgec(blob, &fm_info[i]);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
for (i = 0; i < ARRAY_SIZE(fm_info); i++) {
|
for (i = 0; i < ARRAY_SIZE(fm_info); i++) {
|
||||||
if (fm_info[i].type == FM_ETH_1G_E)
|
if (fm_info[i].type == FM_ETH_1G_E)
|
||||||
|
|
Loading…
Reference in a new issue