Skip to content

Commit abb45a2

Browse files
Ansueldavem330
authored andcommitted
net: stmmac: dwmac-ipq806x: account for rgmii-txid/rxid/id phy-mode
Currently the ipq806x dwmac driver is almost always used attached to the CPU port of a switch and phy-mode was always set to "rgmii" or "sgmii". Some device came up with a special configuration where the PHY is directly attached to the GMAC port and in those case phy-mode needs to be set to "rgmii-id" to make the PHY correctly work and receive packets. Since the driver supports only "rgmii" and "sgmii" mode, when "rgmii-id" (or variants) mode is set, the mode is rejected and probe fails. Add support also for these phy-modes to correctly setup PHYs that requires delay applied to tx/rx. Signed-off-by: Christian Marangi <[email protected]> Reviewed-by: Andrew Lunn <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent b7ffab2 commit abb45a2

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

drivers/net/ethernet/stmicro/stmmac/dwmac-ipq806x.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ static int ipq806x_gmac_set_speed(struct ipq806x_gmac *gmac, unsigned int speed)
171171

172172
switch (gmac->phy_mode) {
173173
case PHY_INTERFACE_MODE_RGMII:
174+
case PHY_INTERFACE_MODE_RGMII_ID:
175+
case PHY_INTERFACE_MODE_RGMII_RXID:
176+
case PHY_INTERFACE_MODE_RGMII_TXID:
174177
div = get_clk_div_rgmii(gmac, speed);
175178
clk_bits = NSS_COMMON_CLK_GATE_RGMII_RX_EN(gmac->id) |
176179
NSS_COMMON_CLK_GATE_RGMII_TX_EN(gmac->id);
@@ -410,6 +413,9 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)
410413
val |= NSS_COMMON_GMAC_CTL_CSYS_REQ;
411414
switch (gmac->phy_mode) {
412415
case PHY_INTERFACE_MODE_RGMII:
416+
case PHY_INTERFACE_MODE_RGMII_ID:
417+
case PHY_INTERFACE_MODE_RGMII_RXID:
418+
case PHY_INTERFACE_MODE_RGMII_TXID:
413419
val |= NSS_COMMON_GMAC_CTL_PHY_IFACE_SEL;
414420
break;
415421
case PHY_INTERFACE_MODE_SGMII:
@@ -425,6 +431,9 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)
425431
val &= ~(1 << NSS_COMMON_CLK_SRC_CTRL_OFFSET(gmac->id));
426432
switch (gmac->phy_mode) {
427433
case PHY_INTERFACE_MODE_RGMII:
434+
case PHY_INTERFACE_MODE_RGMII_ID:
435+
case PHY_INTERFACE_MODE_RGMII_RXID:
436+
case PHY_INTERFACE_MODE_RGMII_TXID:
428437
val |= NSS_COMMON_CLK_SRC_CTRL_RGMII(gmac->id) <<
429438
NSS_COMMON_CLK_SRC_CTRL_OFFSET(gmac->id);
430439
break;
@@ -442,6 +451,9 @@ static int ipq806x_gmac_probe(struct platform_device *pdev)
442451
val |= NSS_COMMON_CLK_GATE_PTP_EN(gmac->id);
443452
switch (gmac->phy_mode) {
444453
case PHY_INTERFACE_MODE_RGMII:
454+
case PHY_INTERFACE_MODE_RGMII_ID:
455+
case PHY_INTERFACE_MODE_RGMII_RXID:
456+
case PHY_INTERFACE_MODE_RGMII_TXID:
445457
val |= NSS_COMMON_CLK_GATE_RGMII_RX_EN(gmac->id) |
446458
NSS_COMMON_CLK_GATE_RGMII_TX_EN(gmac->id);
447459
break;

0 commit comments

Comments
 (0)