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->phy_interface) {
+       case PHY_INTERFACE_MODE_SGMII:
+               pis = MPIC_PIS_GMII;
+               break;
+       case PHY_INTERFACE_MODE_USXGMII:
+       case PHY_INTERFACE_MODE_5GBASER:
+               pis = MPIC_PIS_XGMII;
+               break;
+       default:
+               pis = FIELD_GET(MPIC_PIS, ioread32(etha->addr + MPIC));
+               break;
+       }
+
        switch (etha->speed) {
        case 100:
-               val = MPIC_LSC_100M;
+               lsc = MPIC_LSC_100M;
                break;
        case 1000:
-               val = MPIC_LSC_1G;
+               lsc = MPIC_LSC_1G;
                break;
        case 2500:
-               val = MPIC_LSC_2_5G;
+               lsc = MPIC_LSC_2_5G;
                break;
        default:
-               return;
+               lsc = FIELD_GET(MPIC_LSC, ioread32(etha->addr + MPIC));
+               break;
        }
 
-       iowrite32(MPIC_PIS_GMII | val, etha->addr + MPIC);
+       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)
 
 
 #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