mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt76: mt7915: add debugfs knobs for MCU utilization
Add debugfs knobs to read MCU utilization, which helps user know firmware status more easily to narrow down CPU bottleneck issues. Co-developed-by: Ryder Lee <[email protected]> Signed-off-by: Ryder Lee <[email protected]> Signed-off-by: Shayne Chen <[email protected]> Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
committed by
Felix Fietkau
parent
b52adf9815
commit
ed3d8569c4
+50
-1
@@ -106,6 +106,12 @@ mt7915_fw_debug_wm_set(void *data, u64 val)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* WM CPU info record control */
|
||||
mt76_clear(dev, MT_CPU_UTIL_CTRL, BIT(0));
|
||||
mt76_wr(dev, MT_DIC_CMD_REG_CMD, BIT(2) | BIT(13) | !dev->fw_debug_wm);
|
||||
mt76_wr(dev, MT_MCU_WM_CIRQ_IRQ_MASK_CLR_ADDR, BIT(5));
|
||||
mt76_wr(dev, MT_MCU_WM_CIRQ_IRQ_SOFT_ADDR, BIT(5));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -126,10 +132,16 @@ static int
|
||||
mt7915_fw_debug_wa_set(void *data, u64 val)
|
||||
{
|
||||
struct mt7915_dev *dev = data;
|
||||
int ret;
|
||||
|
||||
dev->fw_debug_wa = val ? MCU_FW_LOG_TO_HOST : 0;
|
||||
|
||||
return mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw_debug_wa);
|
||||
ret = mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw_debug_wa);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET), MCU_WA_PARAM_PDMA_RX,
|
||||
!!dev->fw_debug_wa, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -145,6 +157,39 @@ mt7915_fw_debug_wa_get(void *data, u64 *val)
|
||||
DEFINE_DEBUGFS_ATTRIBUTE(fops_fw_debug_wa, mt7915_fw_debug_wa_get,
|
||||
mt7915_fw_debug_wa_set, "%lld\n");
|
||||
|
||||
static int
|
||||
mt7915_fw_util_wm_show(struct seq_file *file, void *data)
|
||||
{
|
||||
struct mt7915_dev *dev = file->private;
|
||||
|
||||
if (dev->fw_debug_wm) {
|
||||
seq_printf(file, "Busy: %u%% Peak busy: %u%%\n",
|
||||
mt76_rr(dev, MT_CPU_UTIL_BUSY_PCT),
|
||||
mt76_rr(dev, MT_CPU_UTIL_PEAK_BUSY_PCT));
|
||||
seq_printf(file, "Idle count: %u Peak idle count: %u\n",
|
||||
mt76_rr(dev, MT_CPU_UTIL_IDLE_CNT),
|
||||
mt76_rr(dev, MT_CPU_UTIL_PEAK_IDLE_CNT));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_SHOW_ATTRIBUTE(mt7915_fw_util_wm);
|
||||
|
||||
static int
|
||||
mt7915_fw_util_wa_show(struct seq_file *file, void *data)
|
||||
{
|
||||
struct mt7915_dev *dev = file->private;
|
||||
|
||||
if (dev->fw_debug_wa)
|
||||
return mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(QUERY),
|
||||
MCU_WA_PARAM_CPU_UTIL, 0, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_SHOW_ATTRIBUTE(mt7915_fw_util_wa);
|
||||
|
||||
static void
|
||||
mt7915_ampdu_stat_read_phy(struct mt7915_phy *phy,
|
||||
struct seq_file *file)
|
||||
@@ -491,6 +536,10 @@ int mt7915_init_debugfs(struct mt7915_phy *phy)
|
||||
debugfs_create_file("tx_stats", 0400, dir, phy, &mt7915_tx_stats_fops);
|
||||
debugfs_create_file("fw_debug_wm", 0600, dir, dev, &fops_fw_debug_wm);
|
||||
debugfs_create_file("fw_debug_wa", 0600, dir, dev, &fops_fw_debug_wa);
|
||||
debugfs_create_file("fw_util_wm", 0400, dir, dev,
|
||||
&mt7915_fw_util_wm_fops);
|
||||
debugfs_create_file("fw_util_wa", 0400, dir, dev,
|
||||
&mt7915_fw_util_wa_fops);
|
||||
debugfs_create_file("implicit_txbf", 0600, dir, dev,
|
||||
&fops_implicit_txbf);
|
||||
debugfs_create_file("txpower_sku", 0400, dir, phy,
|
||||
|
||||
Reference in New Issue
Block a user