void fdt_fixup_board_enet(void *fdt) { int i; /* * P4080DS can be configured in many different ways, supporting a number * of combinations of ethernet devices and phy types. In order to * have just one device tree for all of those configurations, we fix up * the tree here. By default, the device tree configures FM1 and FM2 * for SGMII, and configures XAUI on both 10G interfaces. So we have * a number of different variables to track: * * 1) Whether the device is configured at all. Whichever devices are * not enabled should be disabled by setting the "status" property * to "disabled". * 2) What the PHY interface is. If this is an RGMII connection, * we should change the "phy-connection-type" property to * "rgmii" * 3) Which PHY is being used. Because the MDIO buses are muxed, * we need to redirect the "phy-handle" property to point at the * PHY on the right slot/bus. */ /* We've got six MDIO nodes that may or may not need to exist */ fdt_status_disabled_by_alias(fdt, "emi1_slot3"); fdt_status_disabled_by_alias(fdt, "emi1_slot4"); fdt_status_disabled_by_alias(fdt, "emi1_slot5"); fdt_status_disabled_by_alias(fdt, "emi2_slot4"); fdt_status_disabled_by_alias(fdt, "emi2_slot5"); for (i = 0; i < NUM_FM_PORTS; i++) { switch (mdio_mux[i]) { case EMI1_SLOT3: fdt_status_okay_by_alias(fdt, "emi1_slot3"); break; case EMI1_SLOT4: fdt_status_okay_by_alias(fdt, "emi1_slot4"); break; case EMI1_SLOT5: fdt_status_okay_by_alias(fdt, "emi1_slot5"); break; case EMI2_SLOT4: fdt_status_okay_by_alias(fdt, "emi2_slot4"); break; case EMI2_SLOT5: fdt_status_okay_by_alias(fdt, "emi2_slot5"); break; } } }
void board_ft_fman_fixup_port(void *fdt, char *compat, phys_addr_t addr, enum fm_port port, int offset) { #if defined(CONFIG_T1024RDB) if (((fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_SGMII_2500) || (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_SGMII)) && (port == FM1_DTSEC3)) { fdt_set_phy_handle(fdt, compat, addr, "sg_2500_aqr105_phy4"); fdt_setprop_string(fdt, offset, "phy-connection-type", "sgmii-2500"); fdt_status_disabled_by_alias(fdt, "xg_aqr105_phy3"); } #endif }
/* * Set status to disabled for unused ethernet node */ void fdt_fixup_board_enet(void *fdt) { int i; char alias[32]; for (i = FM1_DTSEC1; i <= FM1_10GEC2; i++) { switch (fm_info_get_enet_if(i)) { case PHY_INTERFACE_MODE_NONE: sprintf(alias, "ethernet%u", i); fdt_status_disabled_by_alias(fdt, alias); break; default: break; } } }