Skip to content

Commit 3ce10f5

Browse files
nikita-youshSasha Levin
authored andcommitted
net: renesas: rswitch: fix initial MPIC register setting
[ Upstream commit fb9e603 ] 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]> Signed-off-by: Sasha Levin <[email protected]>
1 parent ba499b2 commit 3ce10f5

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)