@@ -931,9 +931,9 @@ static int tc_taprio_configure(struct stmmac_priv *priv,
931
931
struct tc_taprio_qopt_offload * qopt )
932
932
{
933
933
u32 size , wid = priv -> dma_cap .estwid , dep = priv -> dma_cap .estdep ;
934
+ struct netlink_ext_ack * extack = qopt -> mqprio .extack ;
934
935
struct timespec64 time , current_time , qopt_time ;
935
936
ktime_t current_time_ns ;
936
- bool fpe = false;
937
937
int i , ret = 0 ;
938
938
u64 ctr ;
939
939
@@ -1018,16 +1018,12 @@ static int tc_taprio_configure(struct stmmac_priv *priv,
1018
1018
1019
1019
switch (qopt -> entries [i ].command ) {
1020
1020
case TC_TAPRIO_CMD_SET_GATES :
1021
- if (fpe )
1022
- return - EINVAL ;
1023
1021
break ;
1024
1022
case TC_TAPRIO_CMD_SET_AND_HOLD :
1025
1023
gates |= BIT (0 );
1026
- fpe = true;
1027
1024
break ;
1028
1025
case TC_TAPRIO_CMD_SET_AND_RELEASE :
1029
1026
gates &= ~BIT (0 );
1030
- fpe = true;
1031
1027
break ;
1032
1028
default :
1033
1029
return - EOPNOTSUPP ;
@@ -1058,11 +1054,6 @@ static int tc_taprio_configure(struct stmmac_priv *priv,
1058
1054
1059
1055
tc_taprio_map_maxsdu_txq (priv , qopt );
1060
1056
1061
- if (fpe && !priv -> dma_cap .fpesel ) {
1062
- mutex_unlock (& priv -> est_lock );
1063
- return - EOPNOTSUPP ;
1064
- }
1065
-
1066
1057
ret = stmmac_est_configure (priv , priv , priv -> est ,
1067
1058
priv -> plat -> clk_ptp_rate );
1068
1059
mutex_unlock (& priv -> est_lock );
@@ -1071,6 +1062,11 @@ static int tc_taprio_configure(struct stmmac_priv *priv,
1071
1062
goto disable ;
1072
1063
}
1073
1064
1065
+ ret = stmmac_fpe_map_preemption_class (priv , priv -> dev , extack ,
1066
+ qopt -> mqprio .preemptible_tcs );
1067
+ if (ret )
1068
+ goto disable ;
1069
+
1074
1070
netdev_info (priv -> dev , "configured EST\n" );
1075
1071
1076
1072
return 0 ;
@@ -1089,11 +1085,8 @@ static int tc_taprio_configure(struct stmmac_priv *priv,
1089
1085
mutex_unlock (& priv -> est_lock );
1090
1086
}
1091
1087
1092
- stmmac_fpe_configure (priv , priv -> ioaddr ,
1093
- & priv -> fpe_cfg ,
1094
- priv -> plat -> tx_queues_to_use ,
1095
- priv -> plat -> rx_queues_to_use ,
1096
- false, false);
1088
+ stmmac_fpe_map_preemption_class (priv , priv -> dev , extack , 0 );
1089
+
1097
1090
netdev_info (priv -> dev , "disabled FPE\n" );
1098
1091
1099
1092
return ret ;
@@ -1150,6 +1143,18 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
1150
1143
return err ;
1151
1144
}
1152
1145
1146
+ static int tc_setup_taprio_without_fpe (struct stmmac_priv * priv ,
1147
+ struct tc_taprio_qopt_offload * qopt )
1148
+ {
1149
+ if (!qopt -> mqprio .preemptible_tcs )
1150
+ return tc_setup_taprio (priv , qopt );
1151
+
1152
+ NL_SET_ERR_MSG_MOD (qopt -> mqprio .extack ,
1153
+ "taprio with FPE is not implemented for this MAC" );
1154
+
1155
+ return - EOPNOTSUPP ;
1156
+ }
1157
+
1153
1158
static int tc_setup_etf (struct stmmac_priv * priv ,
1154
1159
struct tc_etf_qopt_offload * qopt )
1155
1160
{
@@ -1266,7 +1271,7 @@ const struct stmmac_tc_ops dwmac4_tc_ops = {
1266
1271
.setup_cls_u32 = tc_setup_cls_u32 ,
1267
1272
.setup_cbs = tc_setup_cbs ,
1268
1273
.setup_cls = tc_setup_cls ,
1269
- .setup_taprio = tc_setup_taprio ,
1274
+ .setup_taprio = tc_setup_taprio_without_fpe ,
1270
1275
.setup_etf = tc_setup_etf ,
1271
1276
.query_caps = tc_query_caps ,
1272
1277
.setup_mqprio = tc_setup_mqprio_unimplemented ,
@@ -1288,7 +1293,7 @@ const struct stmmac_tc_ops dwxgmac_tc_ops = {
1288
1293
.setup_cls_u32 = tc_setup_cls_u32 ,
1289
1294
.setup_cbs = tc_setup_cbs ,
1290
1295
.setup_cls = tc_setup_cls ,
1291
- .setup_taprio = tc_setup_taprio ,
1296
+ .setup_taprio = tc_setup_taprio_without_fpe ,
1292
1297
.setup_etf = tc_setup_etf ,
1293
1298
.query_caps = tc_query_caps ,
1294
1299
.setup_mqprio = tc_setup_mqprio_unimplemented ,
0 commit comments