unsigned no_avb_link:1;
        unsigned avb_link_active_low:1;
        unsigned wol_enabled:1;
-       int num_tx_desc;        /* TX descriptors per packet */
+       unsigned rxcidm:1;              /* RX Clock Internal Delay Mode */
+       unsigned txcidm:1;              /* TX Clock Internal Delay Mode */
+       int num_tx_desc;                /* TX descriptors per packet */
 };
 
 static inline u32 ravb_read(struct net_device *ndev, enum ravb_reg reg)
 
 };
 
 /* Set tx and rx clock internal delay modes */
-static void ravb_set_delay_mode(struct net_device *ndev)
+static void ravb_parse_delay_mode(struct net_device *ndev)
 {
        struct ravb_private *priv = netdev_priv(ndev);
-       int set = 0;
 
        if (priv->phy_interface == PHY_INTERFACE_MODE_RGMII_ID ||
            priv->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID)
-               set |= APSR_DM_RDM;
+               priv->rxcidm = 1;
 
        if (priv->phy_interface == PHY_INTERFACE_MODE_RGMII_ID ||
            priv->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID) {
                if (!WARN(soc_device_match(ravb_delay_mode_quirk_match),
                          "phy-mode %s requires TX clock internal delay mode which is not supported by this hardware revision. Please update device tree",
                          phy_modes(priv->phy_interface)))
-                       set |= APSR_DM_TDM;
+                       priv->txcidm = 1;
        }
+}
 
+static void ravb_set_delay_mode(struct net_device *ndev)
+{
+       struct ravb_private *priv = netdev_priv(ndev);
+       u32 set = 0;
+
+       if (priv->rxcidm)
+               set |= APSR_DM_RDM;
+       if (priv->txcidm)
+               set |= APSR_DM_TDM;
        ravb_modify(ndev, APSR, APSR_DM, set);
 }
 
        /* Request GTI loading */
        ravb_modify(ndev, GCCR, GCCR_LTI, GCCR_LTI);
 
-       if (priv->chip_id != RCAR_GEN2)
+       if (priv->chip_id != RCAR_GEN2) {
+               ravb_parse_delay_mode(ndev);
                ravb_set_delay_mode(ndev);
+       }
 
        /* Allocate descriptor base address table */
        priv->desc_bat_size = sizeof(struct ravb_desc) * DBAT_ENTRY_NUM;