#define PROT_BUS_WIDTH_10              0x0
 #define PROT_BUS_WIDTH_20              0x1
 #define PROT_BUS_WIDTH_40              0x2
-#define PROT_BUS_WIDTH_SHIFT           2
+#define PROT_BUS_WIDTH_SHIFT(n)                ((n) * 2)
+#define PROT_BUS_WIDTH_MASK(n)         GENMASK((n) * 2 + 1, (n) * 2)
 
 /* Number of GT lanes */
 #define NUM_LANES                      4
 static void xpsgtr_phy_init_sgmii(struct xpsgtr_phy *gtr_phy)
 {
        struct xpsgtr_dev *gtr_dev = gtr_phy->dev;
+       u32 mask = PROT_BUS_WIDTH_MASK(gtr_phy->lane);
+       u32 val = PROT_BUS_WIDTH_10 << PROT_BUS_WIDTH_SHIFT(gtr_phy->lane);
 
        /* Set SGMII protocol TX and RX bus width to 10 bits. */
-       xpsgtr_write(gtr_dev, TX_PROT_BUS_WIDTH,
-                    PROT_BUS_WIDTH_10 << (gtr_phy->lane * PROT_BUS_WIDTH_SHIFT));
-       xpsgtr_write(gtr_dev, RX_PROT_BUS_WIDTH,
-                    PROT_BUS_WIDTH_10 << (gtr_phy->lane * PROT_BUS_WIDTH_SHIFT));
+       xpsgtr_clr_set(gtr_dev, TX_PROT_BUS_WIDTH, mask, val);
+       xpsgtr_clr_set(gtr_dev, RX_PROT_BUS_WIDTH, mask, val);
 
        xpsgtr_bypass_scrambler_8b10b(gtr_phy);
 }