blob: 61151428416c871b1694e896d0e1ef0b60ef0a39 [file] [log] [blame]
developerd0c89452024-10-11 16:53:27 +08001From 3ee40687fd7064508306f1008c14433ccf7253d4 Mon Sep 17 00:00:00 2001
developer66e89bc2024-04-23 14:50:01 +08002From: Howard Hsu <howard-yh.hsu@mediatek.com>
3Date: Thu, 4 Jan 2024 19:53:37 +0800
developerd0c89452024-10-11 16:53:27 +08004Subject: [PATCH 072/223] mtk: mt76: mt7996: support thermal recal debug
developer66e89bc2024-04-23 14:50:01 +08005 command
6
7Add support thermal recal debug command.
8
9Usage:
10$ echo val > debugfs/thermal_recal
11
12The val can be the following values:
130 = disable
141 = enable
152 = manual trigger
16
developerd0c89452024-10-11 16:53:27 +080017Change-Id: Ief064633dd7ab0faeb298ac3902ca1b399e70365
developer66e89bc2024-04-23 14:50:01 +080018Signed-off-by: Howard Hsu <howard-yh.hsu@mediatek.com>
19---
20 mt76_connac_mcu.h | 1 +
21 mt7996/mt7996.h | 1 +
22 mt7996/mtk_debugfs.c | 17 +++++++++++++++++
23 mt7996/mtk_mcu.c | 21 +++++++++++++++++++++
24 4 files changed, 40 insertions(+)
25
26diff --git a/mt76_connac_mcu.h b/mt76_connac_mcu.h
developerd0c89452024-10-11 16:53:27 +080027index c9cea5bb..11a1224a 100644
developer66e89bc2024-04-23 14:50:01 +080028--- a/mt76_connac_mcu.h
29+++ b/mt76_connac_mcu.h
developerd0c89452024-10-11 16:53:27 +080030@@ -1302,6 +1302,7 @@ enum {
developer66e89bc2024-04-23 14:50:01 +080031 MCU_UNI_CMD_TESTMODE_TRX_PARAM = 0x42,
32 MCU_UNI_CMD_TESTMODE_CTRL = 0x46,
33 MCU_UNI_CMD_PRECAL_RESULT = 0x47,
34+ MCU_UNI_CMD_THERMAL_CAL = 0x4c,
35 MCU_UNI_CMD_RRO = 0x57,
36 MCU_UNI_CMD_OFFCH_SCAN_CTRL = 0x58,
37 MCU_UNI_CMD_PER_STA_INFO = 0x6d,
38diff --git a/mt7996/mt7996.h b/mt7996/mt7996.h
developerd0c89452024-10-11 16:53:27 +080039index 94735872..82ff4e99 100644
developer66e89bc2024-04-23 14:50:01 +080040--- a/mt7996/mt7996.h
41+++ b/mt7996/mt7996.h
developerd0c89452024-10-11 16:53:27 +080042@@ -1037,6 +1037,7 @@ void mt7996_mcu_set_cert(struct mt7996_phy *phy, u8 type);
developer66e89bc2024-04-23 14:50:01 +080043 void mt7996_tm_update_channel(struct mt7996_phy *phy);
44
45 int mt7996_mcu_set_vow_drr_dbg(struct mt7996_dev *dev, u32 val);
46+int mt7996_mcu_thermal_debug(struct mt7996_dev *dev, u8 mode, u8 action);
47 #endif
48
49 #ifdef CONFIG_NET_MEDIATEK_SOC_WED
50diff --git a/mt7996/mtk_debugfs.c b/mt7996/mtk_debugfs.c
developerd0c89452024-10-11 16:53:27 +080051index 196038d4..bc9a0f04 100644
developer66e89bc2024-04-23 14:50:01 +080052--- a/mt7996/mtk_debugfs.c
53+++ b/mt7996/mtk_debugfs.c
developerd0c89452024-10-11 16:53:27 +080054@@ -3170,6 +3170,22 @@ out:
developer66e89bc2024-04-23 14:50:01 +080055 DEFINE_DEBUGFS_ATTRIBUTE(fops_thermal_enable, mt7996_thermal_enable_get,
56 mt7996_thermal_enable_set, "%lld\n");
57
58+static int
59+mt7996_thermal_recal_set(void *data, u64 val)
60+{
61+#define THERMAL_DEBUG_OPERATION_MANUAL_TRIGGER 2
62+#define THERMAL_DEBUG_MODE_RECAL 1
63+ struct mt7996_dev *dev = data;
64+
65+ if (val > THERMAL_DEBUG_OPERATION_MANUAL_TRIGGER)
66+ return -EINVAL;
67+
68+ return mt7996_mcu_thermal_debug(dev, THERMAL_DEBUG_MODE_RECAL, val);
69+}
70+
71+DEFINE_DEBUGFS_ATTRIBUTE(fops_thermal_recal, NULL,
72+ mt7996_thermal_recal_set, "%llu\n");
73+
74 int mt7996_mtk_init_debugfs(struct mt7996_phy *phy, struct dentry *dir)
75 {
76 struct mt7996_dev *dev = phy->dev;
developerd0c89452024-10-11 16:53:27 +080077@@ -3277,6 +3293,7 @@ int mt7996_mtk_init_debugfs(struct mt7996_phy *phy, struct dentry *dir)
developer66e89bc2024-04-23 14:50:01 +080078 }
79
80 debugfs_create_file("thermal_enable", 0600, dir, phy, &fops_thermal_enable);
81+ debugfs_create_file("thermal_recal", 0200, dir, dev, &fops_thermal_recal);
82
83 return 0;
84 }
85diff --git a/mt7996/mtk_mcu.c b/mt7996/mtk_mcu.c
developer05f3b2b2024-08-19 19:17:34 +080086index 967ee874..809181e0 100644
developer66e89bc2024-04-23 14:50:01 +080087--- a/mt7996/mtk_mcu.c
88+++ b/mt7996/mtk_mcu.c
developer05f3b2b2024-08-19 19:17:34 +080089@@ -1343,4 +1343,25 @@ int mt7996_mcu_set_vow_drr_dbg(struct mt7996_dev *dev, u32 val)
developer66e89bc2024-04-23 14:50:01 +080090 sizeof(req), true);
91 }
92
93+int mt7996_mcu_thermal_debug(struct mt7996_dev *dev, u8 mode, u8 action)
94+{
95+ struct {
96+ u8 __rsv1[4];
97+
98+ __le16 tag;
99+ __le16 len;
100+
101+ u8 mode;
102+ u8 action;
103+ u8 __rsv2[2];
104+ } __packed req = {
105+ .tag = cpu_to_le16(mode),
106+ .len = cpu_to_le16(sizeof(req) - 4),
107+ .mode = mode,
108+ .action = action,
109+ };
110+
111+ return mt76_mcu_send_msg(&dev->mt76, MCU_WM_UNI_CMD(THERMAL_CAL), &req,
112+ sizeof(req), true);
113+}
114 #endif
115--
developerd0c89452024-10-11 16:53:27 +08001162.45.2
developer66e89bc2024-04-23 14:50:01 +0800117