net: renesas: rswitch: fix initial MPIC register setting

[ Upstream commit fb9e6039c325cc205a368046dc03c56c87df2310 ]

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: 3590918b5d ("net: ethernet: renesas: Add support for "Ethernet Switch"")
Signed-off-by: Nikita Yushchenko <nikita.yoush@cogentembedded.com>
Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Link: https://patch.msgid.link/20241211053012.368914-1-nikita.yoush@cogentembedded.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Nikita Yushchenko
2024-12-11 10:30:12 +05:00
committed by Greg Kroah-Hartman
parent ecdcaea0e4
commit f5fcb1ff9f
2 changed files with 33 additions and 18 deletions

View File

@@ -1047,25 +1047,40 @@ static int rswitch_etha_wait_link_verification(struct rswitch_etha *etha)
static void rswitch_rmac_setting(struct rswitch_etha *etha, const u8 *mac)
{
u32 val;
u32 pis, lsc;
rswitch_etha_write_mac_address(etha, mac);
switch (etha->speed) {
case 100:
val = MPIC_LSC_100M;
switch (etha->phy_interface) {
case PHY_INTERFACE_MODE_SGMII:
pis = MPIC_PIS_GMII;
break;
case 1000:
val = MPIC_LSC_1G;
break;
case 2500:
val = MPIC_LSC_2_5G;
case PHY_INTERFACE_MODE_USXGMII:
case PHY_INTERFACE_MODE_5GBASER:
pis = MPIC_PIS_XGMII;
break;
default:
return;
pis = FIELD_GET(MPIC_PIS, ioread32(etha->addr + MPIC));
break;
}
iowrite32(MPIC_PIS_GMII | val, etha->addr + MPIC);
switch (etha->speed) {
case 100:
lsc = MPIC_LSC_100M;
break;
case 1000:
lsc = MPIC_LSC_1G;
break;
case 2500:
lsc = MPIC_LSC_2_5G;
break;
default:
lsc = FIELD_GET(MPIC_LSC, ioread32(etha->addr + MPIC));
break;
}
rswitch_modify(etha->addr, MPIC, MPIC_PIS | MPIC_LSC,
FIELD_PREP(MPIC_PIS, pis) | FIELD_PREP(MPIC_LSC, lsc));
}
static void rswitch_etha_enable_mii(struct rswitch_etha *etha)

View File

@@ -723,13 +723,13 @@ enum rswitch_etha_mode {
#define EAVCC_VEM_SC_TAG (0x3 << 16)
#define MPIC_PIS_MII 0x00
#define MPIC_PIS_GMII 0x02
#define MPIC_PIS_XGMII 0x04
#define MPIC_LSC_SHIFT 3
#define MPIC_LSC_100M (1 << MPIC_LSC_SHIFT)
#define MPIC_LSC_1G (2 << MPIC_LSC_SHIFT)
#define MPIC_LSC_2_5G (3 << MPIC_LSC_SHIFT)
#define MPIC_PIS GENMASK(2, 0)
#define MPIC_PIS_GMII 2
#define MPIC_PIS_XGMII 4
#define MPIC_LSC GENMASK(5, 3)
#define MPIC_LSC_100M 1
#define MPIC_LSC_1G 2
#define MPIC_LSC_2_5G 3
#define MDIO_READ_C45 0x03
#define MDIO_WRITE_C45 0x01