@@ -51,12 +51,10 @@ static ssize_t
5151mt7996_sys_recovery_set (struct file * file , const char __user * user_buf ,
5252 size_t count , loff_t * ppos )
5353{
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 ;
5856 int ret = 0 ;
59- u16 val ;
57+ u16 band , val ;
6058
6159 if (count >= sizeof (buf ))
6260 return - EINVAL ;
@@ -69,21 +67,26 @@ mt7996_sys_recovery_set(struct file *file, const char __user *user_buf,
6967 else
7068 buf [count ] = '\0' ;
7169
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 ))
7376 return - EINVAL ;
7477
7578 switch (val ) {
7679 /*
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.
8790 */
8891 case UNI_CMD_SER_QUERY :
8992 ret = mt7996_mcu_set_ser (dev , UNI_CMD_SER_QUERY , 0 , band );
@@ -126,8 +129,7 @@ static ssize_t
126129mt7996_sys_recovery_get (struct file * file , char __user * user_buf ,
127130 size_t count , loff_t * ppos )
128131{
129- struct mt7996_phy * phy = file -> private_data ;
130- struct mt7996_dev * dev = phy -> dev ;
132+ struct mt7996_dev * dev = file -> private_data ;
131133 char * buff ;
132134 int desc = 0 ;
133135 ssize_t ret ;
@@ -141,25 +143,25 @@ mt7996_sys_recovery_get(struct file *file, char __user *user_buf,
141143 desc += scnprintf (buff + desc , bufsz - desc ,
142144 "Please echo the correct value ...\n" );
143145 desc += scnprintf (buff + desc , bufsz - desc ,
144- "0: grab firmware transient SER state\n" );
146+ "<band>, 0: grab firmware transient SER state\n" );
145147 desc += scnprintf (buff + desc , bufsz - desc ,
146- "1: trigger system error L1 recovery\n" );
148+ "<band>, 1: trigger system error L1 recovery\n" );
147149 desc += scnprintf (buff + desc , bufsz - desc ,
148- "2: trigger system error L2 recovery\n" );
150+ "<band>, 2: trigger system error L2 recovery\n" );
149151 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" );
151153 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" );
153155 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" );
155157 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" );
157159 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" );
159161 desc += scnprintf (buff + desc , bufsz - desc ,
160- "8: trigger system error full recovery\n" );
162+ "<band>, 8: trigger system error full recovery\n" );
161163 desc += scnprintf (buff + desc , bufsz - desc ,
162- "9: trigger firmware crash\n" );
164+ "<band>, 9: trigger firmware crash\n" );
163165
164166 /* SER statistics */
165167 desc += scnprintf (buff + desc , bufsz - desc ,
@@ -524,16 +526,12 @@ mt7996_txbf_stat_read_phy(struct mt7996_phy *phy, struct seq_file *s)
524526 seq_puts (s , "\n" );
525527}
526528
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 )
529531{
530- struct mt7996_phy * phy = file -> private ;
531- struct mt7996_dev * dev = phy -> dev ;
532532 struct mt76_mib_stats * mib = & phy -> mib ;
533- int i ;
534533 u32 attempts , success , per ;
535-
536- mutex_lock (& dev -> mt76 .mutex );
534+ int i ;
537535
538536 mt7996_mac_update_stats (phy );
539537 mt7996_ampdu_stat_read_phy (phy , file );
@@ -558,6 +556,23 @@ mt7996_tx_stats_show(struct seq_file *file, void *data)
558556 else
559557 seq_puts (file , "\n" );
560558 }
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 );
561576
562577 mutex_unlock (& dev -> mt76 .mutex );
563578
@@ -628,8 +643,8 @@ mt7996_sta_hw_queue_read(void *data, struct ieee80211_sta *sta)
628643static int
629644mt7996_hw_queues_show (struct seq_file * file , void * data )
630645{
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 ;
633648 static const struct hw_queue_map ple_queue_map [] = {
634649 { "CPU_Q0" , 0 , 1 , MT_CTX0 },
635650 { "CPU_Q1" , 1 , 1 , MT_CTX0 + 1 },
@@ -685,6 +700,15 @@ mt7996_hw_queues_show(struct seq_file *file, void *data)
685700 /* iterate per-sta ple queue */
686701 ieee80211_iterate_stations_atomic (phy -> mt76 -> hw ,
687702 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+
688712 /* pse queue */
689713 seq_puts (file , "PSE non-empty queue info:\n" );
690714 mt7996_hw_queue_read (file , ARRAY_SIZE (pse_queue_map ),
@@ -698,19 +722,29 @@ DEFINE_SHOW_ATTRIBUTE(mt7996_hw_queues);
698722static int
699723mt7996_xmit_queues_show (struct seq_file * file , void * data )
700724{
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 ;
703727 struct {
704728 struct mt76_queue * q ;
705729 char * queue ;
706730 } 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" },
708734 { dev -> mt76 .q_mcu [MT_MCUQ_WM ], " MCUWM" },
709735 { dev -> mt76 .q_mcu [MT_MCUQ_WA ], " MCUWA" },
710736 { dev -> mt76 .q_mcu [MT_MCUQ_FWDL ], "MCUFWDL" },
711737 };
712738 int i ;
713739
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+
714748 seq_puts (file , " queue | hw-queued | head | tail |\n" );
715749 for (i = 0 ; i < ARRAY_SIZE (queue_map ); i ++ ) {
716750 struct mt76_queue * q = queue_map [i ].q ;
@@ -785,20 +819,20 @@ mt7996_rf_regval_set(void *data, u64 val)
785819DEFINE_DEBUGFS_ATTRIBUTE (fops_rf_regval , mt7996_rf_regval_get ,
786820 mt7996_rf_regval_set , "0x%08llx\n" );
787821
788- int mt7996_init_debugfs (struct mt7996_phy * phy )
822+ int mt7996_init_debugfs (struct mt7996_dev * dev )
789823{
790- struct mt7996_dev * dev = phy -> dev ;
791824 struct dentry * dir ;
792825
793- dir = mt76_register_debugfs_fops (phy -> mt76 , NULL );
826+ dir = mt76_register_debugfs_fops (& dev -> mphy , NULL );
794827 if (!dir )
795828 return - ENOMEM ;
796- debugfs_create_file ("hw-queues" , 0400 , dir , phy ,
829+
830+ debugfs_create_file ("hw-queues" , 0400 , dir , dev ,
797831 & mt7996_hw_queues_fops );
798- debugfs_create_file ("xmit-queues" , 0400 , dir , phy ,
832+ debugfs_create_file ("xmit-queues" , 0400 , dir , dev ,
799833 & 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 ,
802836 & mt7996_sys_recovery_ops );
803837 debugfs_create_file ("fw_debug_wm" , 0600 , dir , dev , & fops_fw_debug_wm );
804838 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)
812846 mt7996_twt_stats );
813847 debugfs_create_file ("rf_regval" , 0600 , dir , dev , & fops_rf_regval );
814848
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 );
823854
824- if (phy == & dev -> phy )
825- dev -> debugfs_dir = dir ;
855+ dev -> debugfs_dir = dir ;
826856
827857 return 0 ;
828858}
0 commit comments