struct ravb_private *priv = netdev_priv(ndev);
        int ret = 0;
 
-       /* If WoL is enabled set reset mode to rearm the WoL logic */
-       if (priv->wol_enabled)
+       if (priv->wol_enabled) {
+               /* Reduce the usecount of the clock to zero and then
+                * restore it to its original value. This is done to force
+                * the clock to be re-enabled which is a workaround
+                * for renesas-cpg-mssr driver which do not enable clocks
+                * when resuming from PSCI suspend/resume.
+                *
+                * Without this workaround the driver fails to communicate
+                * with the hardware if WoL was enabled when the system
+                * entered PSCI suspend. This is due to that if WoL is enabled
+                * we explicitly keep the clock from being turned off when
+                * suspending, but in PSCI sleep power is cut so the clock
+                * is disabled anyhow, the clock driver is not aware of this
+                * so the clock is not turned back on when resuming.
+                *
+                * TODO: once the renesas-cpg-mssr suspend/resume is working
+                *       this clock dance should be removed.
+                */
+               clk_disable(priv->clk);
+               clk_disable(priv->clk);
+               clk_enable(priv->clk);
+               clk_enable(priv->clk);
+
+               /* Set reset mode to rearm the WoL logic */
                ravb_write(ndev, CCC_OPC_RESET, CCC);
+       }
 
        /* All register have been reset to default values.
         * Restore all registers which where setup at probe time and