| .. | .. |
|---|
| 989 | 989 | u32 tsync_tx_ctl = IXGBE_TSYNCTXCTL_ENABLED; |
|---|
| 990 | 990 | u32 tsync_rx_ctl = IXGBE_TSYNCRXCTL_ENABLED; |
|---|
| 991 | 991 | u32 tsync_rx_mtrl = PTP_EV_PORT << 16; |
|---|
| 992 | + u32 aflags = adapter->flags; |
|---|
| 992 | 993 | bool is_l2 = false; |
|---|
| 993 | 994 | u32 regval; |
|---|
| 994 | 995 | |
|---|
| .. | .. |
|---|
| 1009 | 1010 | case HWTSTAMP_FILTER_NONE: |
|---|
| 1010 | 1011 | tsync_rx_ctl = 0; |
|---|
| 1011 | 1012 | tsync_rx_mtrl = 0; |
|---|
| 1012 | | - adapter->flags &= ~(IXGBE_FLAG_RX_HWTSTAMP_ENABLED | |
|---|
| 1013 | | - IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER); |
|---|
| 1013 | + aflags &= ~(IXGBE_FLAG_RX_HWTSTAMP_ENABLED | |
|---|
| 1014 | + IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER); |
|---|
| 1014 | 1015 | break; |
|---|
| 1015 | 1016 | case HWTSTAMP_FILTER_PTP_V1_L4_SYNC: |
|---|
| 1016 | 1017 | tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_L4_V1; |
|---|
| 1017 | 1018 | tsync_rx_mtrl |= IXGBE_RXMTRL_V1_SYNC_MSG; |
|---|
| 1018 | | - adapter->flags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED | |
|---|
| 1019 | | - IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER); |
|---|
| 1019 | + aflags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED | |
|---|
| 1020 | + IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER); |
|---|
| 1020 | 1021 | break; |
|---|
| 1021 | 1022 | case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ: |
|---|
| 1022 | 1023 | tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_L4_V1; |
|---|
| 1023 | 1024 | tsync_rx_mtrl |= IXGBE_RXMTRL_V1_DELAY_REQ_MSG; |
|---|
| 1024 | | - adapter->flags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED | |
|---|
| 1025 | | - IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER); |
|---|
| 1025 | + aflags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED | |
|---|
| 1026 | + IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER); |
|---|
| 1026 | 1027 | break; |
|---|
| 1027 | 1028 | case HWTSTAMP_FILTER_PTP_V2_EVENT: |
|---|
| 1028 | 1029 | case HWTSTAMP_FILTER_PTP_V2_L2_EVENT: |
|---|
| .. | .. |
|---|
| 1036 | 1037 | tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_EVENT_V2; |
|---|
| 1037 | 1038 | is_l2 = true; |
|---|
| 1038 | 1039 | config->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT; |
|---|
| 1039 | | - adapter->flags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED | |
|---|
| 1040 | | - IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER); |
|---|
| 1040 | + aflags |= (IXGBE_FLAG_RX_HWTSTAMP_ENABLED | |
|---|
| 1041 | + IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER); |
|---|
| 1041 | 1042 | break; |
|---|
| 1042 | 1043 | case HWTSTAMP_FILTER_PTP_V1_L4_EVENT: |
|---|
| 1043 | 1044 | case HWTSTAMP_FILTER_NTP_ALL: |
|---|
| .. | .. |
|---|
| 1048 | 1049 | if (hw->mac.type >= ixgbe_mac_X550) { |
|---|
| 1049 | 1050 | tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_ALL; |
|---|
| 1050 | 1051 | config->rx_filter = HWTSTAMP_FILTER_ALL; |
|---|
| 1051 | | - adapter->flags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED; |
|---|
| 1052 | + aflags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED; |
|---|
| 1052 | 1053 | break; |
|---|
| 1053 | 1054 | } |
|---|
| 1054 | 1055 | fallthrough; |
|---|
| .. | .. |
|---|
| 1059 | 1060 | * Delay_Req messages and hardware does not support |
|---|
| 1060 | 1061 | * timestamping all packets => return error |
|---|
| 1061 | 1062 | */ |
|---|
| 1062 | | - adapter->flags &= ~(IXGBE_FLAG_RX_HWTSTAMP_ENABLED | |
|---|
| 1063 | | - IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER); |
|---|
| 1064 | 1063 | config->rx_filter = HWTSTAMP_FILTER_NONE; |
|---|
| 1065 | 1064 | return -ERANGE; |
|---|
| 1066 | 1065 | } |
|---|
| .. | .. |
|---|
| 1092 | 1091 | IXGBE_TSYNCRXCTL_TYPE_ALL | |
|---|
| 1093 | 1092 | IXGBE_TSYNCRXCTL_TSIP_UT_EN; |
|---|
| 1094 | 1093 | config->rx_filter = HWTSTAMP_FILTER_ALL; |
|---|
| 1095 | | - adapter->flags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED; |
|---|
| 1096 | | - adapter->flags &= ~IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER; |
|---|
| 1094 | + aflags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED; |
|---|
| 1095 | + aflags &= ~IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER; |
|---|
| 1097 | 1096 | is_l2 = true; |
|---|
| 1098 | 1097 | break; |
|---|
| 1099 | 1098 | default: |
|---|
| .. | .. |
|---|
| 1126 | 1125 | |
|---|
| 1127 | 1126 | IXGBE_WRITE_FLUSH(hw); |
|---|
| 1128 | 1127 | |
|---|
| 1128 | + /* configure adapter flags only when HW is actually configured */ |
|---|
| 1129 | + adapter->flags = aflags; |
|---|
| 1130 | + |
|---|
| 1129 | 1131 | /* clear TX/RX time stamp registers, just to be sure */ |
|---|
| 1130 | 1132 | ixgbe_ptp_clear_tx_timestamp(adapter); |
|---|
| 1131 | 1133 | IXGBE_READ_REG(hw, IXGBE_RXSTMPH); |
|---|