.. | .. |
---|
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); |
---|