|
@@ -2320,6 +2320,9 @@ static irqreturn_t stmmac_interrupt(int irq, void *dev_id)
|
|
|
struct net_device *dev = (struct net_device *)dev_id;
|
|
|
struct stmmac_priv *priv = netdev_priv(dev);
|
|
|
|
|
|
+ if (priv->irq_wake)
|
|
|
+ pm_wakeup_event(priv->device, 0);
|
|
|
+
|
|
|
if (unlikely(!dev)) {
|
|
|
pr_err("%s: invalid dev pointer\n", __func__);
|
|
|
return IRQ_NONE;
|
|
@@ -2861,9 +2864,10 @@ int stmmac_suspend(struct net_device *ndev)
|
|
|
stmmac_clear_descriptors(priv);
|
|
|
|
|
|
/* Enable Power down mode by programming the PMT regs */
|
|
|
- if (device_may_wakeup(priv->device))
|
|
|
+ if (device_may_wakeup(priv->device)) {
|
|
|
priv->hw->mac->pmt(priv->ioaddr, priv->wolopts);
|
|
|
- else {
|
|
|
+ priv->irq_wake = 1;
|
|
|
+ } else {
|
|
|
stmmac_set_mac(priv->ioaddr, false);
|
|
|
pinctrl_pm_select_sleep_state(priv->device);
|
|
|
/* Disable clock in case of PWM is off */
|
|
@@ -2891,6 +2895,7 @@ int stmmac_resume(struct net_device *ndev)
|
|
|
*/
|
|
|
if (device_may_wakeup(priv->device)) {
|
|
|
priv->hw->mac->pmt(priv->ioaddr, 0);
|
|
|
+ priv->irq_wake = 0;
|
|
|
} else {
|
|
|
pinctrl_pm_select_default_state(priv->device);
|
|
|
/* enable the clk prevously disabled */
|