Hi, According to Documentation/devicetree/bindings/net/dsa/dsa.txt, the phy-mode property should be specified on port nodes rather than the enclosing switch node.
In drivers/net/dsa/microchip/ksz_common.c, ksz_switch_register parses the phy-mode property from the switch node instead: | int ksz_switch_register(struct ksz_device *dev, | const struct ksz_dev_ops *ops) | { ... | /* Host port interface will be self detected, or specifically set in | * device tree. | */ | if (dev->dev->of_node) { | ret = of_get_phy_mode(dev->dev->of_node, &interface); | if (ret == 0) | dev->interface = interface; ... In drivers/net/dsa/microchip/ksz9477.c, this phy_interface_t is used to configure the MAC ports: | static void ksz9477_port_setup(struct ksz_device *dev, int port, bool cpu_port) | { ... | switch (dev->interface) { ... | } | ksz_pwrite8(dev, port, REG_PORT_XMII_CTRL_1, data8); KSZ9477 has two MAC interfaces (GMAC 6 -> RGMII/MII/RMII and GMAC 7 -> SGMII). Now we're trying to configure the same interface mode for both MACs here even though these MACs only support distinct interface modes. This may not be problematic in practice as GMAC 7 ignores most of the settings on the XMII Port Control 1 Register, but it still sounds wrong. If nothing else, it makes the device tree unintuitive to use. Is this placement of the phy-mode on the switch intentional? If yes: I think this should be prominently documented in Documentation/devicetree/bindings/net/dsa/ksz.txt. If no: The microchip driver should follow the documented dsa convention and place the phy-mode on the relevant port nodes. If no: Do we have to support old device trees that have the phy-mode property on the switch? Helmut