u32 tsync_tx_ctl = IXGBE_TSYNCTXCTL_ENABLED;
        u32 tsync_rx_ctl = IXGBE_TSYNCRXCTL_ENABLED;
        u32 tsync_rx_mtrl = PTP_EV_PORT << 16;
+       u32 aflags = adapter->flags;
        bool is_l2 = false;
        u32 regval;
 
        case HWTSTAMP_FILTER_NONE:
                tsync_rx_ctl = 0;
                tsync_rx_mtrl = 0;
-               adapter->flags &= ~(IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
-                                   IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
+               aflags &= ~(IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
+                           IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
                break;
        case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
                tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_L4_V1;
                tsync_rx_mtrl |= IXGBE_RXMTRL_V1_SYNC_MSG;
-               adapter->flags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
-                                  IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
+               aflags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
+                          IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
                break;
        case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
                tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_L4_V1;
                tsync_rx_mtrl |= IXGBE_RXMTRL_V1_DELAY_REQ_MSG;
-               adapter->flags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
-                                  IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
+               aflags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
+                          IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
                break;
        case HWTSTAMP_FILTER_PTP_V2_EVENT:
        case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
                tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_EVENT_V2;
                is_l2 = true;
                config->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
-               adapter->flags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
-                                  IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
+               aflags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
+                          IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
                break;
        case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
        case HWTSTAMP_FILTER_NTP_ALL:
                if (hw->mac.type >= ixgbe_mac_X550) {
                        tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_ALL;
                        config->rx_filter = HWTSTAMP_FILTER_ALL;
-                       adapter->flags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED;
+                       aflags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED;
                        break;
                }
                fallthrough;
                 * Delay_Req messages and hardware does not support
                 * timestamping all packets => return error
                 */
-               adapter->flags &= ~(IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
-                                   IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
                config->rx_filter = HWTSTAMP_FILTER_NONE;
                return -ERANGE;
        }
                               IXGBE_TSYNCRXCTL_TYPE_ALL |
                               IXGBE_TSYNCRXCTL_TSIP_UT_EN;
                config->rx_filter = HWTSTAMP_FILTER_ALL;
-               adapter->flags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED;
-               adapter->flags &= ~IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER;
+               aflags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED;
+               aflags &= ~IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER;
                is_l2 = true;
                break;
        default:
 
        IXGBE_WRITE_FLUSH(hw);
 
+       /* configure adapter flags only when HW is actually configured */
+       adapter->flags = aflags;
+
        /* clear TX/RX time stamp registers, just to be sure */
        ixgbe_ptp_clear_tx_timestamp(adapter);
        IXGBE_READ_REG(hw, IXGBE_RXSTMPH);