From: Lorenzo Bianconi <lorenzo@kernel.org>
To: Shayne Chen <shayne.chen@mediatek.com>
Cc: Felix Fietkau <nbd@nbd.name>,
linux-wireless <linux-wireless@vger.kernel.org>,
Lorenzo Bianconi <lorenzo.bianconi@redhat.com>,
Ryder Lee <ryder.lee@mediatek.com>,
Evelyn Tsai <evelyn.tsai@mediatek.com>,
linux-mediatek <linux-mediatek@lists.infradead.org>
Subject: Re: [PATCH v4 2/2] mt76: mt7915: add debugfs knobs for MCU utilization
Date: Thu, 21 Oct 2021 09:57:05 +0200 [thread overview]
Message-ID: <YXEdUWqIUc7y5YoY@lore-desk> (raw)
In-Reply-To: <20211021060726.9291-2-shayne.chen@mediatek.com>
[-- Attachment #1.1: Type: text/plain, Size: 8467 bytes --]
> 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 <ryder.lee@mediatek.com>
> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
> Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
> ---
> v2: abbreviate utilization to util
> v3: rebase to staging tree
> v4: rebase to staging tree
> ---
> .../wireless/mediatek/mt76/mt7915/debugfs.c | 49 ++++++++++++++++++-
> .../net/wireless/mediatek/mt76/mt7915/mcu.c | 5 +-
> .../net/wireless/mediatek/mt76/mt7915/mcu.h | 2 +
> .../net/wireless/mediatek/mt76/mt7915/mmio.c | 3 ++
> .../wireless/mediatek/mt76/mt7915/mt7915.h | 1 +
> .../net/wireless/mediatek/mt76/mt7915/regs.h | 17 +++++++
> 6 files changed, 73 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
> index a829014..6823926 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
> @@ -100,6 +100,12 @@ mt7915_fw_debug_wm_set(void *data, u64 val)
> for (debug = DEBUG_TXCMD; debug <= DEBUG_RPT_RX; debug++)
> mt7915_mcu_fw_dbg_ctrl(dev, debug, !!dev->fw_debug_wm);
>
> + /* 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;
> }
>
> @@ -123,7 +129,11 @@ mt7915_fw_debug_wa_set(void *data, u64 val)
>
> 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);
> + mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw_debug_wa);
> + mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET), MCU_WA_PARAM_PDMA_RX,
> + !!dev->fw_debug_wa, 0);
I guess we should not drop cmd result here (for both mt7915_mcu_fw_log_2_host
and mt7915_mcu_wa_cmd)
> +
> + return 0;
> }
>
> static int
> @@ -139,6 +149,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)
> + mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(QUERY),
> + MCU_WA_PARAM_CPU_UTIL, 0, 0);
> +
same here
Regards,
Lorenzo
> + return 0;
> +}
> +
> +DEFINE_SHOW_ATTRIBUTE(mt7915_fw_util_wa);
> +
> static void
> mt7915_ampdu_stat_read_phy(struct mt7915_phy *phy,
> struct seq_file *file)
> @@ -485,6 +528,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,
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> index 70193bb..56ed550 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> @@ -416,8 +416,7 @@ exit:
> return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[qid], skb, 0);
> }
>
> -static int
> -mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
> +int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
> {
> struct {
> __le32 args[3];
> @@ -429,7 +428,7 @@ mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
> },
> };
>
> - return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), true);
> + return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), false);
> }
>
> static void
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> index 855fbee..f35fa97 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> @@ -310,6 +310,8 @@ enum {
> };
>
> enum {
> + MCU_WA_PARAM_PDMA_RX = 0x04,
> + MCU_WA_PARAM_CPU_UTIL = 0x0b,
> MCU_WA_PARAM_RED = 0x0e,
> };
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> index 7bbb38e..1f6ba30 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> @@ -34,6 +34,9 @@ static u32 __mt7915_reg_addr(struct mt7915_dev *dev, u32 addr)
> u32 mapped;
> u32 size;
> } fixed_map[] = {
> + { 0x00400000, 0x80000, 0x10000 }, /* WF_MCU_SYSRAM */
> + { 0x00410000, 0x90000, 0x10000 }, /* WF_MCU_SYSRAM (configure regs) */
> + { 0x40000000, 0x70000, 0x10000 }, /* WF_UMAC_SYSRAM */
> { 0x54000000, 0x02000, 0x1000 }, /* WFDMA PCIE0 MCU DMA0 */
> { 0x55000000, 0x03000, 0x1000 }, /* WFDMA PCIE0 MCU DMA1 */
> { 0x58000000, 0x06000, 0x1000 }, /* WFDMA PCIE1 MCU DMA0 (MEM_DMA) */
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
> index 070950b..b318b3d 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
> @@ -450,6 +450,7 @@ int mt7915_mcu_get_rx_rate(struct mt7915_phy *phy, struct ieee80211_vif *vif,
> struct ieee80211_sta *sta, struct rate_info *rate);
> int mt7915_mcu_rdd_cmd(struct mt7915_dev *dev, enum mt7915_rdd_cmd cmd,
> u8 index, u8 rx_sel, u8 val);
> +int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3);
> int mt7915_mcu_fw_log_2_host(struct mt7915_dev *dev, u8 type, u8 ctrl);
> int mt7915_mcu_fw_dbg_ctrl(struct mt7915_dev *dev, u32 module, u8 level);
> void mt7915_mcu_rx_event(struct mt7915_dev *dev, struct sk_buff *skb);
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h
> index 99574ed..ff71f56 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h
> @@ -528,6 +528,18 @@
> #define MT_HIF_REMAP_L2_BASE GENMASK(31, 12)
> #define MT_HIF_REMAP_BASE_L2 0x00000
>
> +#define MT_DIC_CMD_REG_BASE 0x41f000
> +#define MT_DIC_CMD_REG(ofs) (MT_DIC_CMD_REG_BASE + (ofs))
> +#define MT_DIC_CMD_REG_CMD MT_DIC_CMD_REG(0x10)
> +
> +#define MT_CPU_UTIL_BASE 0x41f030
> +#define MT_CPU_UTIL(ofs) (MT_CPU_UTIL_BASE + (ofs))
> +#define MT_CPU_UTIL_BUSY_PCT MT_CPU_UTIL(0x00)
> +#define MT_CPU_UTIL_PEAK_BUSY_PCT MT_CPU_UTIL(0x04)
> +#define MT_CPU_UTIL_IDLE_CNT MT_CPU_UTIL(0x08)
> +#define MT_CPU_UTIL_PEAK_IDLE_CNT MT_CPU_UTIL(0x0c)
> +#define MT_CPU_UTIL_CTRL MT_CPU_UTIL(0x1c)
> +
> #define MT_SWDEF_BASE 0x41f200
> #define MT_SWDEF(ofs) (MT_SWDEF_BASE + (ofs))
> #define MT_SWDEF_MODE MT_SWDEF(0x3c)
> @@ -591,4 +603,9 @@
> #define MT_WF_PHY_RXTD12_IRPI_SW_CLR_ONLY BIT(18)
> #define MT_WF_PHY_RXTD12_IRPI_SW_CLR BIT(29)
>
> +#define MT_MCU_WM_CIRQ_BASE 0x89010000
> +#define MT_MCU_WM_CIRQ(ofs) (MT_MCU_WM_CIRQ_BASE + (ofs))
> +#define MT_MCU_WM_CIRQ_IRQ_MASK_CLR_ADDR MT_MCU_WM_CIRQ(0x80)
> +#define MT_MCU_WM_CIRQ_IRQ_SOFT_ADDR MT_MCU_WM_CIRQ(0xc0)
> +
> #endif
> --
> 2.25.1
>
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
[-- Attachment #2: Type: text/plain, Size: 170 bytes --]
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
WARNING: multiple messages have this Message-ID (diff)
From: Lorenzo Bianconi <lorenzo@kernel.org>
To: Shayne Chen <shayne.chen@mediatek.com>
Cc: Felix Fietkau <nbd@nbd.name>,
linux-wireless <linux-wireless@vger.kernel.org>,
Lorenzo Bianconi <lorenzo.bianconi@redhat.com>,
Ryder Lee <ryder.lee@mediatek.com>,
Evelyn Tsai <evelyn.tsai@mediatek.com>,
linux-mediatek <linux-mediatek@lists.infradead.org>
Subject: Re: [PATCH v4 2/2] mt76: mt7915: add debugfs knobs for MCU utilization
Date: Thu, 21 Oct 2021 09:57:05 +0200 [thread overview]
Message-ID: <YXEdUWqIUc7y5YoY@lore-desk> (raw)
In-Reply-To: <20211021060726.9291-2-shayne.chen@mediatek.com>
[-- Attachment #1: Type: text/plain, Size: 8467 bytes --]
> 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 <ryder.lee@mediatek.com>
> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
> Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
> ---
> v2: abbreviate utilization to util
> v3: rebase to staging tree
> v4: rebase to staging tree
> ---
> .../wireless/mediatek/mt76/mt7915/debugfs.c | 49 ++++++++++++++++++-
> .../net/wireless/mediatek/mt76/mt7915/mcu.c | 5 +-
> .../net/wireless/mediatek/mt76/mt7915/mcu.h | 2 +
> .../net/wireless/mediatek/mt76/mt7915/mmio.c | 3 ++
> .../wireless/mediatek/mt76/mt7915/mt7915.h | 1 +
> .../net/wireless/mediatek/mt76/mt7915/regs.h | 17 +++++++
> 6 files changed, 73 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
> index a829014..6823926 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/debugfs.c
> @@ -100,6 +100,12 @@ mt7915_fw_debug_wm_set(void *data, u64 val)
> for (debug = DEBUG_TXCMD; debug <= DEBUG_RPT_RX; debug++)
> mt7915_mcu_fw_dbg_ctrl(dev, debug, !!dev->fw_debug_wm);
>
> + /* 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;
> }
>
> @@ -123,7 +129,11 @@ mt7915_fw_debug_wa_set(void *data, u64 val)
>
> 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);
> + mt7915_mcu_fw_log_2_host(dev, MCU_FW_LOG_WA, dev->fw_debug_wa);
> + mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET), MCU_WA_PARAM_PDMA_RX,
> + !!dev->fw_debug_wa, 0);
I guess we should not drop cmd result here (for both mt7915_mcu_fw_log_2_host
and mt7915_mcu_wa_cmd)
> +
> + return 0;
> }
>
> static int
> @@ -139,6 +149,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)
> + mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(QUERY),
> + MCU_WA_PARAM_CPU_UTIL, 0, 0);
> +
same here
Regards,
Lorenzo
> + return 0;
> +}
> +
> +DEFINE_SHOW_ATTRIBUTE(mt7915_fw_util_wa);
> +
> static void
> mt7915_ampdu_stat_read_phy(struct mt7915_phy *phy,
> struct seq_file *file)
> @@ -485,6 +528,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,
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> index 70193bb..56ed550 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> @@ -416,8 +416,7 @@ exit:
> return mt76_tx_queue_skb_raw(dev, mdev->q_mcu[qid], skb, 0);
> }
>
> -static int
> -mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
> +int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
> {
> struct {
> __le32 args[3];
> @@ -429,7 +428,7 @@ mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3)
> },
> };
>
> - return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), true);
> + return mt76_mcu_send_msg(&dev->mt76, cmd, &req, sizeof(req), false);
> }
>
> static void
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> index 855fbee..f35fa97 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
> @@ -310,6 +310,8 @@ enum {
> };
>
> enum {
> + MCU_WA_PARAM_PDMA_RX = 0x04,
> + MCU_WA_PARAM_CPU_UTIL = 0x0b,
> MCU_WA_PARAM_RED = 0x0e,
> };
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> index 7bbb38e..1f6ba30 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mmio.c
> @@ -34,6 +34,9 @@ static u32 __mt7915_reg_addr(struct mt7915_dev *dev, u32 addr)
> u32 mapped;
> u32 size;
> } fixed_map[] = {
> + { 0x00400000, 0x80000, 0x10000 }, /* WF_MCU_SYSRAM */
> + { 0x00410000, 0x90000, 0x10000 }, /* WF_MCU_SYSRAM (configure regs) */
> + { 0x40000000, 0x70000, 0x10000 }, /* WF_UMAC_SYSRAM */
> { 0x54000000, 0x02000, 0x1000 }, /* WFDMA PCIE0 MCU DMA0 */
> { 0x55000000, 0x03000, 0x1000 }, /* WFDMA PCIE0 MCU DMA1 */
> { 0x58000000, 0x06000, 0x1000 }, /* WFDMA PCIE1 MCU DMA0 (MEM_DMA) */
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
> index 070950b..b318b3d 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
> @@ -450,6 +450,7 @@ int mt7915_mcu_get_rx_rate(struct mt7915_phy *phy, struct ieee80211_vif *vif,
> struct ieee80211_sta *sta, struct rate_info *rate);
> int mt7915_mcu_rdd_cmd(struct mt7915_dev *dev, enum mt7915_rdd_cmd cmd,
> u8 index, u8 rx_sel, u8 val);
> +int mt7915_mcu_wa_cmd(struct mt7915_dev *dev, int cmd, u32 a1, u32 a2, u32 a3);
> int mt7915_mcu_fw_log_2_host(struct mt7915_dev *dev, u8 type, u8 ctrl);
> int mt7915_mcu_fw_dbg_ctrl(struct mt7915_dev *dev, u32 module, u8 level);
> void mt7915_mcu_rx_event(struct mt7915_dev *dev, struct sk_buff *skb);
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h
> index 99574ed..ff71f56 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/regs.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/regs.h
> @@ -528,6 +528,18 @@
> #define MT_HIF_REMAP_L2_BASE GENMASK(31, 12)
> #define MT_HIF_REMAP_BASE_L2 0x00000
>
> +#define MT_DIC_CMD_REG_BASE 0x41f000
> +#define MT_DIC_CMD_REG(ofs) (MT_DIC_CMD_REG_BASE + (ofs))
> +#define MT_DIC_CMD_REG_CMD MT_DIC_CMD_REG(0x10)
> +
> +#define MT_CPU_UTIL_BASE 0x41f030
> +#define MT_CPU_UTIL(ofs) (MT_CPU_UTIL_BASE + (ofs))
> +#define MT_CPU_UTIL_BUSY_PCT MT_CPU_UTIL(0x00)
> +#define MT_CPU_UTIL_PEAK_BUSY_PCT MT_CPU_UTIL(0x04)
> +#define MT_CPU_UTIL_IDLE_CNT MT_CPU_UTIL(0x08)
> +#define MT_CPU_UTIL_PEAK_IDLE_CNT MT_CPU_UTIL(0x0c)
> +#define MT_CPU_UTIL_CTRL MT_CPU_UTIL(0x1c)
> +
> #define MT_SWDEF_BASE 0x41f200
> #define MT_SWDEF(ofs) (MT_SWDEF_BASE + (ofs))
> #define MT_SWDEF_MODE MT_SWDEF(0x3c)
> @@ -591,4 +603,9 @@
> #define MT_WF_PHY_RXTD12_IRPI_SW_CLR_ONLY BIT(18)
> #define MT_WF_PHY_RXTD12_IRPI_SW_CLR BIT(29)
>
> +#define MT_MCU_WM_CIRQ_BASE 0x89010000
> +#define MT_MCU_WM_CIRQ(ofs) (MT_MCU_WM_CIRQ_BASE + (ofs))
> +#define MT_MCU_WM_CIRQ_IRQ_MASK_CLR_ADDR MT_MCU_WM_CIRQ(0x80)
> +#define MT_MCU_WM_CIRQ_IRQ_SOFT_ADDR MT_MCU_WM_CIRQ(0xc0)
> +
> #endif
> --
> 2.25.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2021-10-21 7:57 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-21 6:07 [PATCH v4 1/2] mt76: mt7915: add WA firmware log support Shayne Chen
2021-10-21 6:07 ` Shayne Chen
2021-10-21 6:07 ` [PATCH v4 2/2] mt76: mt7915: add debugfs knobs for MCU utilization Shayne Chen
2021-10-21 6:07 ` Shayne Chen
2021-10-21 7:57 ` Lorenzo Bianconi [this message]
2021-10-21 7:57 ` Lorenzo Bianconi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YXEdUWqIUc7y5YoY@lore-desk \
--to=lorenzo@kernel.org \
--cc=evelyn.tsai@mediatek.com \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-wireless@vger.kernel.org \
--cc=lorenzo.bianconi@redhat.com \
--cc=nbd@nbd.name \
--cc=ryder.lee@mediatek.com \
--cc=shayne.chen@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.