Skip to content

Commit f5fcb1f

Browse files
nikita-youshgregkh
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 ecdcaea commit f5fcb1f

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
@@ -1047,25 +1047,40 @@ static int rswitch_etha_wait_link_verification(struct rswitch_etha *etha)
10471047

10481048
static void rswitch_rmac_setting(struct rswitch_etha *etha, const u8 *mac)
10491049
{
1050-
u32 val;
1050+
u32 pis, lsc;
10511051

10521052
rswitch_etha_write_mac_address(etha, mac);
10531053

1054+
switch (etha->phy_interface) {
1055+
case PHY_INTERFACE_MODE_SGMII:
1056+
pis = MPIC_PIS_GMII;
1057+
break;
1058+
case PHY_INTERFACE_MODE_USXGMII:
1059+
case PHY_INTERFACE_MODE_5GBASER:
1060+
pis = MPIC_PIS_XGMII;
1061+
break;
1062+
default:
1063+
pis = FIELD_GET(MPIC_PIS, ioread32(etha->addr + MPIC));
1064+
break;
1065+
}
1066+
10541067
switch (etha->speed) {
10551068
case 100:
1056-
val = MPIC_LSC_100M;
1069+
lsc = MPIC_LSC_100M;
10571070
break;
10581071
case 1000:
1059-
val = MPIC_LSC_1G;
1072+
lsc = MPIC_LSC_1G;
10601073
break;
10611074
case 2500:
1062-
val = MPIC_LSC_2_5G;
1075+
lsc = MPIC_LSC_2_5G;
10631076
break;
10641077
default:
1065-
return;
1078+
lsc = FIELD_GET(MPIC_LSC, ioread32(etha->addr + MPIC));
1079+
break;
10661080
}
10671081

1068-
iowrite32(MPIC_PIS_GMII | val, etha->addr + MPIC);
1082+
rswitch_modify(etha->addr, MPIC, MPIC_PIS | MPIC_LSC,
1083+
FIELD_PREP(MPIC_PIS, pis) | FIELD_PREP(MPIC_LSC, lsc));
10691084
}
10701085

10711086
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
@@ -723,13 +723,13 @@ enum rswitch_etha_mode {
723723

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

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

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

0 commit comments

Comments
 (0)