@@ -443,6 +443,72 @@ static ssize_t counter_value_read(struct file *file, char __user *buf,
443
443
return simple_read_from_buffer (buf , count , ppos , debugfs_buf , pos );
444
444
}
445
445
446
+ static const char * ltssm_status_string (enum dw_pcie_ltssm ltssm )
447
+ {
448
+ const char * str ;
449
+
450
+ switch (ltssm ) {
451
+ #define DW_PCIE_LTSSM_NAME (n ) case n: str = #n; break
452
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_DETECT_QUIET );
453
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_DETECT_ACT );
454
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_POLL_ACTIVE );
455
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_POLL_COMPLIANCE );
456
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_POLL_CONFIG );
457
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_PRE_DETECT_QUIET );
458
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_DETECT_WAIT );
459
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_CFG_LINKWD_START );
460
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_CFG_LINKWD_ACEPT );
461
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_CFG_LANENUM_WAI );
462
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_CFG_LANENUM_ACEPT );
463
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_CFG_COMPLETE );
464
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_CFG_IDLE );
465
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_RCVRY_LOCK );
466
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_RCVRY_SPEED );
467
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_RCVRY_RCVRCFG );
468
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_RCVRY_IDLE );
469
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_L0 );
470
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_L0S );
471
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_L123_SEND_EIDLE );
472
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_L1_IDLE );
473
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_L2_IDLE );
474
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_L2_WAKE );
475
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_DISABLED_ENTRY );
476
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_DISABLED_IDLE );
477
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_DISABLED );
478
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_LPBK_ENTRY );
479
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_LPBK_ACTIVE );
480
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_LPBK_EXIT );
481
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_LPBK_EXIT_TIMEOUT );
482
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_HOT_RESET_ENTRY );
483
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_HOT_RESET );
484
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_RCVRY_EQ0 );
485
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_RCVRY_EQ1 );
486
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_RCVRY_EQ2 );
487
+ DW_PCIE_LTSSM_NAME (DW_PCIE_LTSSM_RCVRY_EQ3 );
488
+ default :
489
+ str = "DW_PCIE_LTSSM_UNKNOWN" ;
490
+ break ;
491
+ }
492
+
493
+ return str + strlen ("DW_PCIE_LTSSM_" );
494
+ }
495
+
496
+ static int ltssm_status_show (struct seq_file * s , void * v )
497
+ {
498
+ struct dw_pcie * pci = s -> private ;
499
+ enum dw_pcie_ltssm val ;
500
+
501
+ val = dw_pcie_get_ltssm (pci );
502
+ seq_printf (s , "%s (0x%02x)\n" , ltssm_status_string (val ), val );
503
+
504
+ return 0 ;
505
+ }
506
+
507
+ static int ltssm_status_open (struct inode * inode , struct file * file )
508
+ {
509
+ return single_open (file , ltssm_status_show , inode -> i_private );
510
+ }
511
+
446
512
#define dwc_debugfs_create (name ) \
447
513
debugfs_create_file(#name, 0644, rasdes_debug, pci, \
448
514
&dbg_ ## name ## _fops)
@@ -479,6 +545,11 @@ static const struct file_operations dwc_pcie_counter_value_ops = {
479
545
.read = counter_value_read ,
480
546
};
481
547
548
+ static const struct file_operations dwc_pcie_ltssm_status_ops = {
549
+ .open = ltssm_status_open ,
550
+ .read = seq_read ,
551
+ };
552
+
482
553
static void dwc_pcie_rasdes_debugfs_deinit (struct dw_pcie * pci )
483
554
{
484
555
struct dwc_pcie_rasdes_info * rinfo = pci -> debugfs -> rasdes_info ;
@@ -565,6 +636,12 @@ static int dwc_pcie_rasdes_debugfs_init(struct dw_pcie *pci, struct dentry *dir)
565
636
return ret ;
566
637
}
567
638
639
+ static void dwc_pcie_ltssm_debugfs_init (struct dw_pcie * pci , struct dentry * dir )
640
+ {
641
+ debugfs_create_file ("ltssm_status" , 0444 , dir , pci ,
642
+ & dwc_pcie_ltssm_status_ops );
643
+ }
644
+
568
645
void dwc_pcie_debugfs_deinit (struct dw_pcie * pci )
569
646
{
570
647
if (!pci -> debugfs )
@@ -595,4 +672,6 @@ void dwc_pcie_debugfs_init(struct dw_pcie *pci)
595
672
if (err )
596
673
dev_err (dev , "failed to initialize RAS DES debugfs, err=%d\n" ,
597
674
err );
675
+
676
+ dwc_pcie_ltssm_debugfs_init (pci , dir );
598
677
}
0 commit comments