#define RTL8211F_INSR                          0x1d
 
 #define RTL8211F_TX_DELAY                      BIT(8)
+#define RTL8211F_RX_DELAY                      BIT(3)
+
 #define RTL8211E_TX_DELAY                      BIT(1)
 #define RTL8211E_RX_DELAY                      BIT(2)
 #define RTL8211E_MODE_MII_GMII                 BIT(3)
 static int rtl8211f_config_init(struct phy_device *phydev)
 {
        struct device *dev = &phydev->mdio.dev;
-       u16 val;
+       u16 val_txdly, val_rxdly;
        int ret;
 
-       /* enable TX-delay for rgmii-{id,txid}, and disable it for rgmii and
-        * rgmii-rxid. The RX-delay can be enabled by the external RXDLY pin.
-        */
        switch (phydev->interface) {
        case PHY_INTERFACE_MODE_RGMII:
+               val_txdly = 0;
+               val_rxdly = 0;
+               break;
+
        case PHY_INTERFACE_MODE_RGMII_RXID:
-               val = 0;
+               val_txdly = 0;
+               val_rxdly = RTL8211F_RX_DELAY;
                break;
-       case PHY_INTERFACE_MODE_RGMII_ID:
+
        case PHY_INTERFACE_MODE_RGMII_TXID:
-               val = RTL8211F_TX_DELAY;
+               val_txdly = RTL8211F_TX_DELAY;
+               val_rxdly = 0;
+               break;
+
+       case PHY_INTERFACE_MODE_RGMII_ID:
+               val_txdly = RTL8211F_TX_DELAY;
+               val_rxdly = RTL8211F_RX_DELAY;
                break;
+
        default: /* the rest of the modes imply leaving delay as is. */
                return 0;
        }
 
        ret = phy_modify_paged_changed(phydev, 0xd08, 0x11, RTL8211F_TX_DELAY,
-                                      val);
+                                      val_txdly);
        if (ret < 0) {
                dev_err(dev, "Failed to update the TX delay register\n");
                return ret;
        } else if (ret) {
                dev_dbg(dev,
                        "%s 2ns TX delay (and changing the value from pin-strapping RXD1 or the bootloader)\n",
-                       val ? "Enabling" : "Disabling");
+                       val_txdly ? "Enabling" : "Disabling");
        } else {
                dev_dbg(dev,
                        "2ns TX delay was already %s (by pin-strapping RXD1 or bootloader configuration)\n",
-                       val ? "enabled" : "disabled");
+                       val_txdly ? "enabled" : "disabled");
+       }
+
+       ret = phy_modify_paged_changed(phydev, 0xd08, 0x15, RTL8211F_RX_DELAY,
+                                      val_rxdly);
+       if (ret < 0) {
+               dev_err(dev, "Failed to update the RX delay register\n");
+               return ret;
+       } else if (ret) {
+               dev_dbg(dev,
+                       "%s 2ns RX delay (and changing the value from pin-strapping RXD0 or the bootloader)\n",
+                       val_rxdly ? "Enabling" : "Disabling");
+       } else {
+               dev_dbg(dev,
+                       "2ns RX delay was already %s (by pin-strapping RXD0 or bootloader configuration)\n",
+                       val_rxdly ? "enabled" : "disabled");
        }
 
        return 0;