PSGMII (the Qualcomm 5-port SGMII) conveys the link negotiation result from the PHY back to the MAC through per-channel in-band SGMII words, exactly like SGMII and QSGMII. However, PHY_INTERFACE_MODE_PSGMII is missing from phylink_get_inband_type(), so phylink reports INBAND_NONE for it and phylink_pcs_neg_mode() falls back to PHYLINK_PCS_NEG_NONE. The PCS is then programmed in force mode and its control-register speed bits (which default to 1000base) are used, so a slower copper link - e.g. 100base-T - is reported as 1Gbps and cannot pass traffic. Classify PSGMII alongside SGMII and QSGMII as INBAND_CISCO_SGMII so the PCS negotiates in-band and the resolved link speed comes from the PHY in-band word. Also add PSGMII to the generic clause 22 PCS helper functions which handle the SGMII in-band word. Without this, a PCS using these helpers would still fall through to the default handling and force the link state to false in phylink_mii_c22_pcs_decode_state(), fail to encode the SGMII advertisement, and get rejected by phylink_get_link_timer_ns().
Showing the changes to include (1 of 2 files). Show all
Unified · Split
| @@ -791,6 +791,7 @@ static inline int phylink_get_link_timer_ns(phy_interface_t interface) · 790 unmodified lines | ||
| 791 | 791 | { |
| 792 | 792 | switch (interface) { |
| 793 | 793 | case PHY_INTERFACE_MODE_SGMII: |
| 794 | + case PHY_INTERFACE_MODE_PSGMII: | |
| 794 | 795 | case PHY_INTERFACE_MODE_QSGMII: |
| 795 | 796 | case PHY_INTERFACE_MODE_USXGMII: |
| 796 | 797 | case PHY_INTERFACE_MODE_10G_QXGMII: |