@@ -796,14 +796,18 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
796
796
GFP_KERNEL );
797
797
if (!plat -> est )
798
798
return - ENOMEM ;
799
+
800
+ mutex_init (& priv -> plat -> est -> lock );
799
801
} else {
800
802
memset (plat -> est , 0 , sizeof (* plat -> est ));
801
803
}
802
804
803
805
size = qopt -> num_entries ;
804
806
807
+ mutex_lock (& priv -> plat -> est -> lock );
805
808
priv -> plat -> est -> gcl_size = size ;
806
809
priv -> plat -> est -> enable = qopt -> enable ;
810
+ mutex_unlock (& priv -> plat -> est -> lock );
807
811
808
812
for (i = 0 ; i < size ; i ++ ) {
809
813
s64 delta_ns = qopt -> entries [i ].interval ;
@@ -834,6 +838,7 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
834
838
priv -> plat -> est -> gcl [i ] = delta_ns | (gates << wid );
835
839
}
836
840
841
+ mutex_lock (& priv -> plat -> est -> lock );
837
842
/* Adjust for real system time */
838
843
priv -> ptp_clock_ops .gettime64 (& priv -> ptp_clock_ops , & current_time );
839
844
current_time_ns = timespec64_to_ktime (current_time );
@@ -847,8 +852,10 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
847
852
priv -> plat -> est -> ctr [0 ] = do_div (ctr , NSEC_PER_SEC );
848
853
priv -> plat -> est -> ctr [1 ] = (u32 )ctr ;
849
854
850
- if (fpe && !priv -> dma_cap .fpesel )
855
+ if (fpe && !priv -> dma_cap .fpesel ) {
856
+ mutex_unlock (& priv -> plat -> est -> lock );
851
857
return - EOPNOTSUPP ;
858
+ }
852
859
853
860
/* Actual FPE register configuration will be done after FPE handshake
854
861
* is success.
@@ -857,6 +864,7 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
857
864
858
865
ret = stmmac_est_configure (priv , priv -> ioaddr , priv -> plat -> est ,
859
866
priv -> plat -> clk_ptp_rate );
867
+ mutex_unlock (& priv -> plat -> est -> lock );
860
868
if (ret ) {
861
869
netdev_err (priv -> dev , "failed to configure EST\n" );
862
870
goto disable ;
@@ -872,9 +880,11 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
872
880
return 0 ;
873
881
874
882
disable :
883
+ mutex_lock (& priv -> plat -> est -> lock );
875
884
priv -> plat -> est -> enable = false;
876
885
stmmac_est_configure (priv , priv -> ioaddr , priv -> plat -> est ,
877
886
priv -> plat -> clk_ptp_rate );
887
+ mutex_unlock (& priv -> plat -> est -> lock );
878
888
879
889
priv -> plat -> fpe_cfg -> enable = false;
880
890
stmmac_fpe_configure (priv , priv -> ioaddr ,
0 commit comments