@@ -796,14 +796,18 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
796796 GFP_KERNEL );
797797 if (!plat -> est )
798798 return - ENOMEM ;
799+
800+ mutex_init (& priv -> plat -> est -> lock );
799801 } else {
800802 memset (plat -> est , 0 , sizeof (* plat -> est ));
801803 }
802804
803805 size = qopt -> num_entries ;
804806
807+ mutex_lock (& priv -> plat -> est -> lock );
805808 priv -> plat -> est -> gcl_size = size ;
806809 priv -> plat -> est -> enable = qopt -> enable ;
810+ mutex_unlock (& priv -> plat -> est -> lock );
807811
808812 for (i = 0 ; i < size ; i ++ ) {
809813 s64 delta_ns = qopt -> entries [i ].interval ;
@@ -834,6 +838,7 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
834838 priv -> plat -> est -> gcl [i ] = delta_ns | (gates << wid );
835839 }
836840
841+ mutex_lock (& priv -> plat -> est -> lock );
837842 /* Adjust for real system time */
838843 priv -> ptp_clock_ops .gettime64 (& priv -> ptp_clock_ops , & current_time );
839844 current_time_ns = timespec64_to_ktime (current_time );
@@ -847,8 +852,10 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
847852 priv -> plat -> est -> ctr [0 ] = do_div (ctr , NSEC_PER_SEC );
848853 priv -> plat -> est -> ctr [1 ] = (u32 )ctr ;
849854
850- if (fpe && !priv -> dma_cap .fpesel )
855+ if (fpe && !priv -> dma_cap .fpesel ) {
856+ mutex_unlock (& priv -> plat -> est -> lock );
851857 return - EOPNOTSUPP ;
858+ }
852859
853860 /* Actual FPE register configuration will be done after FPE handshake
854861 * is success.
@@ -857,6 +864,7 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
857864
858865 ret = stmmac_est_configure (priv , priv -> ioaddr , priv -> plat -> est ,
859866 priv -> plat -> clk_ptp_rate );
867+ mutex_unlock (& priv -> plat -> est -> lock );
860868 if (ret ) {
861869 netdev_err (priv -> dev , "failed to configure EST\n" );
862870 goto disable ;
@@ -872,9 +880,11 @@ static int tc_setup_taprio(struct stmmac_priv *priv,
872880 return 0 ;
873881
874882disable :
883+ mutex_lock (& priv -> plat -> est -> lock );
875884 priv -> plat -> est -> enable = false;
876885 stmmac_est_configure (priv , priv -> ioaddr , priv -> plat -> est ,
877886 priv -> plat -> clk_ptp_rate );
887+ mutex_unlock (& priv -> plat -> est -> lock );
878888
879889 priv -> plat -> fpe_cfg -> enable = false;
880890 stmmac_fpe_configure (priv , priv -> ioaddr ,
0 commit comments