mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 15:19:51 +00:00
Merge branch 'fixes-for-q-usgmii-speeds-and-autoneg'
Maxime Chevallier says: ==================== fixes for Q-USGMII speeds and autoneg This is the second version of a small changeset for QUSGMII support, fixing inconsistencies in reported max speed and control word parsing. As reported here [1], there are some inconsistencies for the Q-USGMII mode speeds and configuration. The first patch in this fixup series makes so that we correctly report the max speed of 1Gbps for this mode. The second patch uses a dedicated helper to decode the control word. This is necessary as although USGMII control words are close to USXGMII, they don't support the same speeds. [1] : https://lore.kernel.org/netdev/ZHnd+6FUO77XFJvQ@shell.armlinux.org.uk/ ==================== Link: https://lore.kernel.org/r/20230609080305.546028-1-maxime.chevallier@bootlin.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
4d17beb66b
@ -188,6 +188,7 @@ static int phylink_interface_max_speed(phy_interface_t interface)
|
||||
case PHY_INTERFACE_MODE_RGMII_ID:
|
||||
case PHY_INTERFACE_MODE_RGMII:
|
||||
case PHY_INTERFACE_MODE_QSGMII:
|
||||
case PHY_INTERFACE_MODE_QUSGMII:
|
||||
case PHY_INTERFACE_MODE_SGMII:
|
||||
case PHY_INTERFACE_MODE_GMII:
|
||||
return SPEED_1000;
|
||||
@ -204,7 +205,6 @@ static int phylink_interface_max_speed(phy_interface_t interface)
|
||||
case PHY_INTERFACE_MODE_10GBASER:
|
||||
case PHY_INTERFACE_MODE_10GKR:
|
||||
case PHY_INTERFACE_MODE_USXGMII:
|
||||
case PHY_INTERFACE_MODE_QUSGMII:
|
||||
return SPEED_10000;
|
||||
|
||||
case PHY_INTERFACE_MODE_25GBASER:
|
||||
@ -3298,6 +3298,41 @@ void phylink_decode_usxgmii_word(struct phylink_link_state *state,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(phylink_decode_usxgmii_word);
|
||||
|
||||
/**
|
||||
* phylink_decode_usgmii_word() - decode the USGMII word from a MAC PCS
|
||||
* @state: a pointer to a struct phylink_link_state.
|
||||
* @lpa: a 16 bit value which stores the USGMII auto-negotiation word
|
||||
*
|
||||
* Helper for MAC PCS supporting the USGMII protocol and the auto-negotiation
|
||||
* code word. Decode the USGMII code word and populate the corresponding fields
|
||||
* (speed, duplex) into the phylink_link_state structure. The structure for this
|
||||
* word is the same as the USXGMII word, except it only supports speeds up to
|
||||
* 1Gbps.
|
||||
*/
|
||||
static void phylink_decode_usgmii_word(struct phylink_link_state *state,
|
||||
uint16_t lpa)
|
||||
{
|
||||
switch (lpa & MDIO_USXGMII_SPD_MASK) {
|
||||
case MDIO_USXGMII_10:
|
||||
state->speed = SPEED_10;
|
||||
break;
|
||||
case MDIO_USXGMII_100:
|
||||
state->speed = SPEED_100;
|
||||
break;
|
||||
case MDIO_USXGMII_1000:
|
||||
state->speed = SPEED_1000;
|
||||
break;
|
||||
default:
|
||||
state->link = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (lpa & MDIO_USXGMII_FULL_DUPLEX)
|
||||
state->duplex = DUPLEX_FULL;
|
||||
else
|
||||
state->duplex = DUPLEX_HALF;
|
||||
}
|
||||
|
||||
/**
|
||||
* phylink_mii_c22_pcs_decode_state() - Decode MAC PCS state from MII registers
|
||||
* @state: a pointer to a &struct phylink_link_state.
|
||||
@ -3335,9 +3370,11 @@ void phylink_mii_c22_pcs_decode_state(struct phylink_link_state *state,
|
||||
|
||||
case PHY_INTERFACE_MODE_SGMII:
|
||||
case PHY_INTERFACE_MODE_QSGMII:
|
||||
case PHY_INTERFACE_MODE_QUSGMII:
|
||||
phylink_decode_sgmii_word(state, lpa);
|
||||
break;
|
||||
case PHY_INTERFACE_MODE_QUSGMII:
|
||||
phylink_decode_usgmii_word(state, lpa);
|
||||
break;
|
||||
|
||||
default:
|
||||
state->link = false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user