hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
....@@ -989,6 +989,7 @@
989989 u32 tsync_tx_ctl = IXGBE_TSYNCTXCTL_ENABLED;
990990 u32 tsync_rx_ctl = IXGBE_TSYNCRXCTL_ENABLED;
991991 u32 tsync_rx_mtrl = PTP_EV_PORT << 16;
992
+ u32 aflags = adapter->flags;
992993 bool is_l2 = false;
993994 u32 regval;
994995
....@@ -1009,20 +1010,20 @@
10091010 case HWTSTAMP_FILTER_NONE:
10101011 tsync_rx_ctl = 0;
10111012 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);
10141015 break;
10151016 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
10161017 tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_L4_V1;
10171018 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);
10201021 break;
10211022 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
10221023 tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_L4_V1;
10231024 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);
10261027 break;
10271028 case HWTSTAMP_FILTER_PTP_V2_EVENT:
10281029 case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
....@@ -1036,8 +1037,8 @@
10361037 tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_EVENT_V2;
10371038 is_l2 = true;
10381039 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);
10411042 break;
10421043 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
10431044 case HWTSTAMP_FILTER_NTP_ALL:
....@@ -1048,7 +1049,7 @@
10481049 if (hw->mac.type >= ixgbe_mac_X550) {
10491050 tsync_rx_ctl |= IXGBE_TSYNCRXCTL_TYPE_ALL;
10501051 config->rx_filter = HWTSTAMP_FILTER_ALL;
1051
- adapter->flags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED;
1052
+ aflags |= IXGBE_FLAG_RX_HWTSTAMP_ENABLED;
10521053 break;
10531054 }
10541055 fallthrough;
....@@ -1059,8 +1060,6 @@
10591060 * Delay_Req messages and hardware does not support
10601061 * timestamping all packets => return error
10611062 */
1062
- adapter->flags &= ~(IXGBE_FLAG_RX_HWTSTAMP_ENABLED |
1063
- IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER);
10641063 config->rx_filter = HWTSTAMP_FILTER_NONE;
10651064 return -ERANGE;
10661065 }
....@@ -1092,8 +1091,8 @@
10921091 IXGBE_TSYNCRXCTL_TYPE_ALL |
10931092 IXGBE_TSYNCRXCTL_TSIP_UT_EN;
10941093 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;
10971096 is_l2 = true;
10981097 break;
10991098 default:
....@@ -1126,6 +1125,9 @@
11261125
11271126 IXGBE_WRITE_FLUSH(hw);
11281127
1128
+ /* configure adapter flags only when HW is actually configured */
1129
+ adapter->flags = aflags;
1130
+
11291131 /* clear TX/RX time stamp registers, just to be sure */
11301132 ixgbe_ptp_clear_tx_timestamp(adapter);
11311133 IXGBE_READ_REG(hw, IXGBE_RXSTMPH);