@@ -365,21 +365,19 @@ static int fec_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
365
365
*/
366
366
static int fec_ptp_gettime (struct ptp_clock_info * ptp , struct timespec64 * ts )
367
367
{
368
- struct fec_enet_private * adapter =
368
+ struct fec_enet_private * fep =
369
369
container_of (ptp , struct fec_enet_private , ptp_caps );
370
370
u64 ns ;
371
371
unsigned long flags ;
372
372
373
- mutex_lock ( & adapter -> ptp_clk_mutex );
373
+ spin_lock_irqsave ( & fep -> tmreg_lock , flags );
374
374
/* Check the ptp clock */
375
- if (!adapter -> ptp_clk_on ) {
376
- mutex_unlock ( & adapter -> ptp_clk_mutex );
375
+ if (!fep -> ptp_clk_on ) {
376
+ spin_unlock_irqrestore ( & fep -> tmreg_lock , flags );
377
377
return - EINVAL ;
378
378
}
379
- spin_lock_irqsave (& adapter -> tmreg_lock , flags );
380
- ns = timecounter_read (& adapter -> tc );
381
- spin_unlock_irqrestore (& adapter -> tmreg_lock , flags );
382
- mutex_unlock (& adapter -> ptp_clk_mutex );
379
+ ns = timecounter_read (& fep -> tc );
380
+ spin_unlock_irqrestore (& fep -> tmreg_lock , flags );
383
381
384
382
* ts = ns_to_timespec64 (ns );
385
383
@@ -404,10 +402,10 @@ static int fec_ptp_settime(struct ptp_clock_info *ptp,
404
402
unsigned long flags ;
405
403
u32 counter ;
406
404
407
- mutex_lock (& fep -> ptp_clk_mutex );
405
+ spin_lock_irqsave (& fep -> tmreg_lock , flags );
408
406
/* Check the ptp clock */
409
407
if (!fep -> ptp_clk_on ) {
410
- mutex_unlock (& fep -> ptp_clk_mutex );
408
+ spin_unlock_irqrestore (& fep -> tmreg_lock , flags );
411
409
return - EINVAL ;
412
410
}
413
411
@@ -417,11 +415,9 @@ static int fec_ptp_settime(struct ptp_clock_info *ptp,
417
415
*/
418
416
counter = ns & fep -> cc .mask ;
419
417
420
- spin_lock_irqsave (& fep -> tmreg_lock , flags );
421
418
writel (counter , fep -> hwp + FEC_ATIME );
422
419
timecounter_init (& fep -> tc , & fep -> cc , ns );
423
420
spin_unlock_irqrestore (& fep -> tmreg_lock , flags );
424
- mutex_unlock (& fep -> ptp_clk_mutex );
425
421
return 0 ;
426
422
}
427
423
@@ -518,13 +514,11 @@ static void fec_time_keep(struct work_struct *work)
518
514
struct fec_enet_private * fep = container_of (dwork , struct fec_enet_private , time_keep );
519
515
unsigned long flags ;
520
516
521
- mutex_lock (& fep -> ptp_clk_mutex );
517
+ spin_lock_irqsave (& fep -> tmreg_lock , flags );
522
518
if (fep -> ptp_clk_on ) {
523
- spin_lock_irqsave (& fep -> tmreg_lock , flags );
524
519
timecounter_read (& fep -> tc );
525
- spin_unlock_irqrestore (& fep -> tmreg_lock , flags );
526
520
}
527
- mutex_unlock (& fep -> ptp_clk_mutex );
521
+ spin_unlock_irqrestore (& fep -> tmreg_lock , flags );
528
522
529
523
schedule_delayed_work (& fep -> time_keep , HZ );
530
524
}
@@ -599,8 +593,6 @@ void fec_ptp_init(struct platform_device *pdev, int irq_idx)
599
593
}
600
594
fep -> ptp_inc = NSEC_PER_SEC / fep -> cycle_speed ;
601
595
602
- spin_lock_init (& fep -> tmreg_lock );
603
-
604
596
fec_ptp_start_cyclecounter (ndev );
605
597
606
598
INIT_DELAYED_WORK (& fep -> time_keep , fec_time_keep );
0 commit comments