Skip to content

Commit fb9e603

Browse files
nikita-youshPaolo Abeni
authored andcommitted
net: renesas: rswitch: fix initial MPIC register setting
MPIC.PIS must be set per phy interface type. MPIC.LSC must be set per speed. Do that strictly per datasheet, instead of hardcoding MPIC.PIS to GMII. Fixes: 3590918 ("net: ethernet: renesas: Add support for "Ethernet Switch"") Signed-off-by: Nikita Yushchenko <[email protected]> Reviewed-by: Michal Swiatkowski <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
1 parent 3d64c3d commit fb9e603

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

drivers/net/ethernet/renesas/rswitch.c

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,25 +1116,40 @@ static int rswitch_etha_wait_link_verification(struct rswitch_etha *etha)
11161116

11171117
static void rswitch_rmac_setting(struct rswitch_etha *etha, const u8 *mac)
11181118
{
1119-
u32 val;
1119+
u32 pis, lsc;
11201120

11211121
rswitch_etha_write_mac_address(etha, mac);
11221122

1123+
switch (etha->phy_interface) {
1124+
case PHY_INTERFACE_MODE_SGMII:
1125+
pis = MPIC_PIS_GMII;
1126+
break;
1127+
case PHY_INTERFACE_MODE_USXGMII:
1128+
case PHY_INTERFACE_MODE_5GBASER:
1129+
pis = MPIC_PIS_XGMII;
1130+
break;
1131+
default:
1132+
pis = FIELD_GET(MPIC_PIS, ioread32(etha->addr + MPIC));
1133+
break;
1134+
}
1135+
11231136
switch (etha->speed) {
11241137
case 100:
1125-
val = MPIC_LSC_100M;
1138+
lsc = MPIC_LSC_100M;
11261139
break;
11271140
case 1000:
1128-
val = MPIC_LSC_1G;
1141+
lsc = MPIC_LSC_1G;
11291142
break;
11301143
case 2500:
1131-
val = MPIC_LSC_2_5G;
1144+
lsc = MPIC_LSC_2_5G;
11321145
break;
11331146
default:
1134-
return;
1147+
lsc = FIELD_GET(MPIC_LSC, ioread32(etha->addr + MPIC));
1148+
break;
11351149
}
11361150

1137-
iowrite32(MPIC_PIS_GMII | val, etha->addr + MPIC);
1151+
rswitch_modify(etha->addr, MPIC, MPIC_PIS | MPIC_LSC,
1152+
FIELD_PREP(MPIC_PIS, pis) | FIELD_PREP(MPIC_LSC, lsc));
11381153
}
11391154

11401155
static void rswitch_etha_enable_mii(struct rswitch_etha *etha)

drivers/net/ethernet/renesas/rswitch.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -724,13 +724,13 @@ enum rswitch_etha_mode {
724724

725725
#define EAVCC_VEM_SC_TAG (0x3 << 16)
726726

727-
#define MPIC_PIS_MII 0x00
728-
#define MPIC_PIS_GMII 0x02
729-
#define MPIC_PIS_XGMII 0x04
730-
#define MPIC_LSC_SHIFT 3
731-
#define MPIC_LSC_100M (1 << MPIC_LSC_SHIFT)
732-
#define MPIC_LSC_1G (2 << MPIC_LSC_SHIFT)
733-
#define MPIC_LSC_2_5G (3 << MPIC_LSC_SHIFT)
727+
#define MPIC_PIS GENMASK(2, 0)
728+
#define MPIC_PIS_GMII 2
729+
#define MPIC_PIS_XGMII 4
730+
#define MPIC_LSC GENMASK(5, 3)
731+
#define MPIC_LSC_100M 1
732+
#define MPIC_LSC_1G 2
733+
#define MPIC_LSC_2_5G 3
734734

735735
#define MDIO_READ_C45 0x03
736736
#define MDIO_WRITE_C45 0x01

0 commit comments

Comments
 (0)