reg = readl(mmio + AMD_SMUACK_OFFSET);
        reg |= bit;
        writel(reg, mmio + AMD_SMUACK_OFFSET);
-
-       ndev->peer_sta |= bit;
 }
 
 static void amd_handle_event(struct amd_ntb_dev *ndev, int vec)
        status &= AMD_EVENT_INTMASK;
        switch (status) {
        case AMD_PEER_FLUSH_EVENT:
+               ndev->peer_sta |= AMD_PEER_FLUSH_EVENT;
                dev_info(dev, "Flush is done.\n");
                break;
        case AMD_PEER_RESET_EVENT:
+               ndev->peer_sta |= AMD_PEER_RESET_EVENT;
                amd_ack_smu(ndev, AMD_PEER_RESET_EVENT);
 
                /* link down first */
        case AMD_PEER_PMETO_EVENT:
        case AMD_LINK_UP_EVENT:
        case AMD_LINK_DOWN_EVENT:
+               ndev->peer_sta |= status;
                amd_ack_smu(ndev, status);
 
                /* link down */
                if (status & 0x1)
                        dev_info(dev, "Wakeup is done.\n");
 
+               ndev->peer_sta |= AMD_PEER_D0_EVENT;
                amd_ack_smu(ndev, AMD_PEER_D0_EVENT);
 
                /* start a timer to poll link status */