@@ -51,12 +51,10 @@ static ssize_t
51
51
mt7996_sys_recovery_set (struct file * file , const char __user * user_buf ,
52
52
size_t count , loff_t * ppos )
53
53
{
54
- struct mt7996_phy * phy = file -> private_data ;
55
- struct mt7996_dev * dev = phy -> dev ;
56
- bool band = phy -> mt76 -> band_idx ;
57
- char buf [16 ];
54
+ struct mt7996_dev * dev = file -> private_data ;
55
+ char buf [16 ], * sep ;
58
56
int ret = 0 ;
59
- u16 val ;
57
+ u16 band , val ;
60
58
61
59
if (count >= sizeof (buf ))
62
60
return - EINVAL ;
@@ -69,21 +67,26 @@ mt7996_sys_recovery_set(struct file *file, const char __user *user_buf,
69
67
else
70
68
buf [count ] = '\0' ;
71
69
72
- if (kstrtou16 (buf , 0 , & val ))
70
+ sep = strchr (buf , ',' );
71
+ if (!sep )
72
+ return - EINVAL ;
73
+
74
+ * sep = 0 ;
75
+ if (kstrtou16 (buf , 0 , & band ) || kstrtou16 (sep + 1 , 0 , & val ))
73
76
return - EINVAL ;
74
77
75
78
switch (val ) {
76
79
/*
77
- * 0: grab firmware current SER state.
78
- * 1: trigger & enable system error L1 recovery.
79
- * 2: trigger & enable system error L2 recovery.
80
- * 3: trigger & enable system error L3 rx abort.
81
- * 4: trigger & enable system error L3 tx abort
82
- * 5: trigger & enable system error L3 tx disable.
83
- * 6: trigger & enable system error L3 bf recovery.
84
- * 7: trigger & enable system error L4 mdp recovery.
85
- * 8: trigger & enable system error full recovery.
86
- * 9: trigger firmware crash.
80
+ * <band>, 0: grab firmware current SER state.
81
+ * <band>, 1: trigger & enable system error L1 recovery.
82
+ * <band>, 2: trigger & enable system error L2 recovery.
83
+ * <band>, 3: trigger & enable system error L3 rx abort.
84
+ * <band>, 4: trigger & enable system error L3 tx abort
85
+ * <band>, 5: trigger & enable system error L3 tx disable.
86
+ * <band>, 6: trigger & enable system error L3 bf recovery.
87
+ * <band>, 7: trigger & enable system error L4 mdp recovery.
88
+ * <band>, 8: trigger & enable system error full recovery.
89
+ * <band>, 9: trigger firmware crash.
87
90
*/
88
91
case UNI_CMD_SER_QUERY :
89
92
ret = mt7996_mcu_set_ser (dev , UNI_CMD_SER_QUERY , 0 , band );
@@ -126,8 +129,7 @@ static ssize_t
126
129
mt7996_sys_recovery_get (struct file * file , char __user * user_buf ,
127
130
size_t count , loff_t * ppos )
128
131
{
129
- struct mt7996_phy * phy = file -> private_data ;
130
- struct mt7996_dev * dev = phy -> dev ;
132
+ struct mt7996_dev * dev = file -> private_data ;
131
133
char * buff ;
132
134
int desc = 0 ;
133
135
ssize_t ret ;
@@ -141,25 +143,25 @@ mt7996_sys_recovery_get(struct file *file, char __user *user_buf,
141
143
desc += scnprintf (buff + desc , bufsz - desc ,
142
144
"Please echo the correct value ...\n" );
143
145
desc += scnprintf (buff + desc , bufsz - desc ,
144
- "0: grab firmware transient SER state\n" );
146
+ "<band>, 0: grab firmware transient SER state\n" );
145
147
desc += scnprintf (buff + desc , bufsz - desc ,
146
- "1: trigger system error L1 recovery\n" );
148
+ "<band>, 1: trigger system error L1 recovery\n" );
147
149
desc += scnprintf (buff + desc , bufsz - desc ,
148
- "2: trigger system error L2 recovery\n" );
150
+ "<band>, 2: trigger system error L2 recovery\n" );
149
151
desc += scnprintf (buff + desc , bufsz - desc ,
150
- "3: trigger system error L3 rx abort\n" );
152
+ "<band>, 3: trigger system error L3 rx abort\n" );
151
153
desc += scnprintf (buff + desc , bufsz - desc ,
152
- "4: trigger system error L3 tx abort\n" );
154
+ "<band>, 4: trigger system error L3 tx abort\n" );
153
155
desc += scnprintf (buff + desc , bufsz - desc ,
154
- "5: trigger system error L3 tx disable\n" );
156
+ "<band>, 5: trigger system error L3 tx disable\n" );
155
157
desc += scnprintf (buff + desc , bufsz - desc ,
156
- "6: trigger system error L3 bf recovery\n" );
158
+ "<band>, 6: trigger system error L3 bf recovery\n" );
157
159
desc += scnprintf (buff + desc , bufsz - desc ,
158
- "7: trigger system error L4 mdp recovery\n" );
160
+ "<band>, 7: trigger system error L4 mdp recovery\n" );
159
161
desc += scnprintf (buff + desc , bufsz - desc ,
160
- "8: trigger system error full recovery\n" );
162
+ "<band>, 8: trigger system error full recovery\n" );
161
163
desc += scnprintf (buff + desc , bufsz - desc ,
162
- "9: trigger firmware crash\n" );
164
+ "<band>, 9: trigger firmware crash\n" );
163
165
164
166
/* SER statistics */
165
167
desc += scnprintf (buff + desc , bufsz - desc ,
@@ -524,16 +526,12 @@ mt7996_txbf_stat_read_phy(struct mt7996_phy *phy, struct seq_file *s)
524
526
seq_puts (s , "\n" );
525
527
}
526
528
527
- static int
528
- mt7996_tx_stats_show (struct seq_file * file , void * data )
529
+ static void
530
+ mt7996_tx_stats_show_phy (struct seq_file * file , struct mt7996_phy * phy )
529
531
{
530
- struct mt7996_phy * phy = file -> private ;
531
- struct mt7996_dev * dev = phy -> dev ;
532
532
struct mt76_mib_stats * mib = & phy -> mib ;
533
- int i ;
534
533
u32 attempts , success , per ;
535
-
536
- mutex_lock (& dev -> mt76 .mutex );
534
+ int i ;
537
535
538
536
mt7996_mac_update_stats (phy );
539
537
mt7996_ampdu_stat_read_phy (phy , file );
@@ -558,6 +556,23 @@ mt7996_tx_stats_show(struct seq_file *file, void *data)
558
556
else
559
557
seq_puts (file , "\n" );
560
558
}
559
+ }
560
+
561
+ static int
562
+ mt7996_tx_stats_show (struct seq_file * file , void * data )
563
+ {
564
+ struct mt7996_dev * dev = file -> private ;
565
+ struct mt7996_phy * phy = & dev -> phy ;
566
+
567
+ mutex_lock (& dev -> mt76 .mutex );
568
+
569
+ mt7996_tx_stats_show_phy (file , phy );
570
+ phy = mt7996_phy2 (dev );
571
+ if (phy )
572
+ mt7996_tx_stats_show_phy (file , phy );
573
+ phy = mt7996_phy3 (dev );
574
+ if (phy )
575
+ mt7996_tx_stats_show_phy (file , phy );
561
576
562
577
mutex_unlock (& dev -> mt76 .mutex );
563
578
@@ -628,8 +643,8 @@ mt7996_sta_hw_queue_read(void *data, struct ieee80211_sta *sta)
628
643
static int
629
644
mt7996_hw_queues_show (struct seq_file * file , void * data )
630
645
{
631
- struct mt7996_phy * phy = file -> private ;
632
- struct mt7996_dev * dev = phy -> dev ;
646
+ struct mt7996_dev * dev = file -> private ;
647
+ struct mt7996_phy * phy = & dev -> phy ;
633
648
static const struct hw_queue_map ple_queue_map [] = {
634
649
{ "CPU_Q0" , 0 , 1 , MT_CTX0 },
635
650
{ "CPU_Q1" , 1 , 1 , MT_CTX0 + 1 },
@@ -685,6 +700,15 @@ mt7996_hw_queues_show(struct seq_file *file, void *data)
685
700
/* iterate per-sta ple queue */
686
701
ieee80211_iterate_stations_atomic (phy -> mt76 -> hw ,
687
702
mt7996_sta_hw_queue_read , file );
703
+ phy = mt7996_phy2 (dev );
704
+ if (phy )
705
+ ieee80211_iterate_stations_atomic (phy -> mt76 -> hw ,
706
+ mt7996_sta_hw_queue_read , file );
707
+ phy = mt7996_phy3 (dev );
708
+ if (phy )
709
+ ieee80211_iterate_stations_atomic (phy -> mt76 -> hw ,
710
+ mt7996_sta_hw_queue_read , file );
711
+
688
712
/* pse queue */
689
713
seq_puts (file , "PSE non-empty queue info:\n" );
690
714
mt7996_hw_queue_read (file , ARRAY_SIZE (pse_queue_map ),
@@ -698,19 +722,29 @@ DEFINE_SHOW_ATTRIBUTE(mt7996_hw_queues);
698
722
static int
699
723
mt7996_xmit_queues_show (struct seq_file * file , void * data )
700
724
{
701
- struct mt7996_phy * phy = file -> private ;
702
- struct mt7996_dev * dev = phy -> dev ;
725
+ struct mt7996_dev * dev = file -> private ;
726
+ struct mt7996_phy * phy ;
703
727
struct {
704
728
struct mt76_queue * q ;
705
729
char * queue ;
706
730
} queue_map [] = {
707
- { phy -> mt76 -> q_tx [MT_TXQ_BE ], " MAIN" },
731
+ { dev -> mphy .q_tx [MT_TXQ_BE ], " MAIN0" },
732
+ { NULL , " MAIN1" },
733
+ { NULL , " MAIN2" },
708
734
{ dev -> mt76 .q_mcu [MT_MCUQ_WM ], " MCUWM" },
709
735
{ dev -> mt76 .q_mcu [MT_MCUQ_WA ], " MCUWA" },
710
736
{ dev -> mt76 .q_mcu [MT_MCUQ_FWDL ], "MCUFWDL" },
711
737
};
712
738
int i ;
713
739
740
+ phy = mt7996_phy2 (dev );
741
+ if (phy )
742
+ queue_map [1 ].q = phy -> mt76 -> q_tx [MT_TXQ_BE ];
743
+
744
+ phy = mt7996_phy3 (dev );
745
+ if (phy )
746
+ queue_map [2 ].q = phy -> mt76 -> q_tx [MT_TXQ_BE ];
747
+
714
748
seq_puts (file , " queue | hw-queued | head | tail |\n" );
715
749
for (i = 0 ; i < ARRAY_SIZE (queue_map ); i ++ ) {
716
750
struct mt76_queue * q = queue_map [i ].q ;
@@ -785,20 +819,20 @@ mt7996_rf_regval_set(void *data, u64 val)
785
819
DEFINE_DEBUGFS_ATTRIBUTE (fops_rf_regval , mt7996_rf_regval_get ,
786
820
mt7996_rf_regval_set , "0x%08llx\n" );
787
821
788
- int mt7996_init_debugfs (struct mt7996_phy * phy )
822
+ int mt7996_init_debugfs (struct mt7996_dev * dev )
789
823
{
790
- struct mt7996_dev * dev = phy -> dev ;
791
824
struct dentry * dir ;
792
825
793
- dir = mt76_register_debugfs_fops (phy -> mt76 , NULL );
826
+ dir = mt76_register_debugfs_fops (& dev -> mphy , NULL );
794
827
if (!dir )
795
828
return - ENOMEM ;
796
- debugfs_create_file ("hw-queues" , 0400 , dir , phy ,
829
+
830
+ debugfs_create_file ("hw-queues" , 0400 , dir , dev ,
797
831
& mt7996_hw_queues_fops );
798
- debugfs_create_file ("xmit-queues" , 0400 , dir , phy ,
832
+ debugfs_create_file ("xmit-queues" , 0400 , dir , dev ,
799
833
& mt7996_xmit_queues_fops );
800
- debugfs_create_file ("tx_stats" , 0400 , dir , phy , & mt7996_tx_stats_fops );
801
- debugfs_create_file ("sys_recovery" , 0600 , dir , phy ,
834
+ debugfs_create_file ("tx_stats" , 0400 , dir , dev , & mt7996_tx_stats_fops );
835
+ debugfs_create_file ("sys_recovery" , 0600 , dir , dev ,
802
836
& mt7996_sys_recovery_ops );
803
837
debugfs_create_file ("fw_debug_wm" , 0600 , dir , dev , & fops_fw_debug_wm );
804
838
debugfs_create_file ("fw_debug_wa" , 0600 , dir , dev , & fops_fw_debug_wa );
@@ -812,17 +846,13 @@ int mt7996_init_debugfs(struct mt7996_phy *phy)
812
846
mt7996_twt_stats );
813
847
debugfs_create_file ("rf_regval" , 0600 , dir , dev , & fops_rf_regval );
814
848
815
- if (phy -> mt76 -> cap .has_5ghz ) {
816
- debugfs_create_u32 ("dfs_hw_pattern" , 0400 , dir ,
817
- & dev -> hw_pattern );
818
- debugfs_create_file ("radar_trigger" , 0200 , dir , dev ,
819
- & fops_radar_trigger );
820
- debugfs_create_devm_seqfile (dev -> mt76 .dev , "rdd_monitor" , dir ,
821
- mt7996_rdd_monitor );
822
- }
849
+ debugfs_create_u32 ("dfs_hw_pattern" , 0400 , dir , & dev -> hw_pattern );
850
+ debugfs_create_file ("radar_trigger" , 0200 , dir , dev ,
851
+ & fops_radar_trigger );
852
+ debugfs_create_devm_seqfile (dev -> mt76 .dev , "rdd_monitor" , dir ,
853
+ mt7996_rdd_monitor );
823
854
824
- if (phy == & dev -> phy )
825
- dev -> debugfs_dir = dir ;
855
+ dev -> debugfs_dir = dir ;
826
856
827
857
return 0 ;
828
858
}
0 commit comments