2021-09-08 09:44:33

by Shayne Chen

[permalink] [raw]
Subject: [PATCH v3 8/8] mt76: mt7915: set muru platform type

Set muru platform type by mcu cmd to notify fw to init corresponding
algorithm.

Suggested-by: Money Wang <[email protected]>
Reviewed-by: Ryder Lee <[email protected]>
Signed-off-by: Shayne Chen <[email protected]>
---
v3: - fix endianess
- rework muru ctrl function
---
drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 17 +++++++++++++++++
drivers/net/wireless/mediatek/mt76/mt7915/mcu.h | 5 +++++
.../net/wireless/mediatek/mt76/mt7915/mt7915.h | 1 +
.../wireless/mediatek/mt76/mt7915/testmode.c | 16 +++++-----------
.../wireless/mediatek/mt76/mt7915/testmode.h | 4 ----
5 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index 229ba3c469d1..afafc47264cd 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -2949,6 +2949,21 @@ static int mt7915_mcu_set_mwds(struct mt7915_dev *dev, bool enabled)
sizeof(req), false);
}

+int mt7915_mcu_set_muru_ctrl(struct mt7915_dev *dev, u32 cmd, u8 *val)
+{
+ struct {
+ __le32 cmd;
+ u8 val[4];
+ } __packed req = {
+ .cmd = cpu_to_le32(cmd),
+ };
+
+ memcpy(req.val, val, sizeof(req.val));
+
+ return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(MURU_CTRL), &req,
+ sizeof(req), false);
+}
+
int mt7915_mcu_init(struct mt7915_dev *dev)
{
static const struct mt76_mcu_ops mt7915_mcu_ops = {
@@ -2957,6 +2972,7 @@ int mt7915_mcu_init(struct mt7915_dev *dev)
.mcu_parse_response = mt7915_mcu_parse_response,
.mcu_restart = mt7915_mcu_restart,
};
+ u8 ptype = 2;
int ret;

dev->mt76.mcu_ops = &mt7915_mcu_ops;
@@ -2973,6 +2989,7 @@ int mt7915_mcu_init(struct mt7915_dev *dev)
mt7915_mcu_fw_log_2_host(dev, 0);
mt7915_mcu_set_mwds(dev, 1);
mt7915_mcu_wa_cmd(dev, MCU_WA_PARAM_CMD(SET), MCU_WA_PARAM_RED, 0, 0);
+ mt7915_mcu_set_muru_ctrl(dev, MURU_SET_PLATFORM_TYPE, &ptype);

return 0;
}
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
index 6344faf3f394..57be9262ec2a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.h
@@ -1086,6 +1086,11 @@ enum {
MT_BF_MODULE_UPDATE = 25
};

+enum {
+ MURU_SET_ARB_OP_MODE = 14,
+ MURU_SET_PLATFORM_TYPE = 25,
+};
+
#define MT7915_WTBL_UPDATE_MAX_SIZE (sizeof(struct wtbl_req_hdr) + \
sizeof(struct wtbl_generic) + \
sizeof(struct wtbl_rx) + \
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
index f8f0bb3ca7cd..5bf1192bab36 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h
@@ -351,6 +351,7 @@ int mt7915_mcu_set_pulse_th(struct mt7915_dev *dev,
const struct mt7915_dfs_pulse *pulse);
int mt7915_mcu_set_radar_th(struct mt7915_dev *dev, int index,
const struct mt7915_dfs_pattern *pattern);
+int mt7915_mcu_set_muru_ctrl(struct mt7915_dev *dev, u32 cmd, u8 *val);
int mt7915_mcu_apply_group_cal(struct mt7915_dev *dev);
int mt7915_mcu_apply_tx_dpd(struct mt7915_phy *phy);
int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
index 00dcc46b9082..4fc284cb3401 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.c
@@ -169,22 +169,16 @@ static int
mt7915_tm_set_tam_arb(struct mt7915_phy *phy, bool enable, bool mu)
{
struct mt7915_dev *dev = phy->dev;
- struct {
- __le32 cmd;
- u8 op_mode;
- } __packed req = {
- .cmd = cpu_to_le32(MURU_SET_ARB_OP_MODE),
- };
+ u8 op_mode;

if (!enable)
- req.op_mode = TAM_ARB_OP_MODE_NORMAL;
+ op_mode = TAM_ARB_OP_MODE_NORMAL;
else if (mu)
- req.op_mode = TAM_ARB_OP_MODE_TEST;
+ op_mode = TAM_ARB_OP_MODE_TEST;
else
- req.op_mode = TAM_ARB_OP_MODE_FORCE_SU;
+ op_mode = TAM_ARB_OP_MODE_FORCE_SU;

- return mt76_mcu_send_msg(&dev->mt76, MCU_EXT_CMD(MURU_CTRL), &req,
- sizeof(req), false);
+ return mt7915_mcu_set_muru_ctrl(dev, MURU_SET_ARB_OP_MODE, &op_mode);
}

static int
diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.h b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.h
index 107f0cf2505e..5573ac309363 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/testmode.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/testmode.h
@@ -102,8 +102,4 @@ enum {
TAM_ARB_OP_MODE_FORCE_SU = 5,
};

-enum {
- MURU_SET_ARB_OP_MODE = 14,
-};
-
#endif
--
2.25.1


2021-09-08 19:07:00

by Ryder Lee

[permalink] [raw]
Subject: Re: [PATCH v3 8/8] mt76: mt7915: set muru platform type

On Wed, 2021-09-08 at 17:41 +0800, Shayne Chen wrote:
> Set muru platform type by mcu cmd to notify fw to init corresponding
> algorithm.
>
> Suggested-by: Money Wang <[email protected]>
> Reviewed-by: Ryder Lee <[email protected]>
> Signed-off-by: Shayne Chen <[email protected]>
> ---
> v3: - fix endianess
> - rework muru ctrl function
> ---
> drivers/net/wireless/mediatek/mt76/mt7915/mcu.c | 17
> +++++++++++++++++
> drivers/net/wireless/mediatek/mt76/mt7915/mcu.h | 5 +++++
> .../net/wireless/mediatek/mt76/mt7915/mt7915.h | 1 +
> .../wireless/mediatek/mt76/mt7915/testmode.c | 16 +++++--------
> ---
> .../wireless/mediatek/mt76/mt7915/testmode.h | 4 ----
> 5 files changed, 28 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> index 229ba3c469d1..afafc47264cd 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> @@ -2949,6 +2949,21 @@ static int mt7915_mcu_set_mwds(struct
> mt7915_dev *dev, bool enabled)
> sizeof(req), false);
> }
>
> +int mt7915_mcu_set_muru_ctrl(struct mt7915_dev *dev, u32 cmd, u8
> *val)
> +{
> + struct {
> + __le32 cmd;
> + u8 val[4];
> + } __packed req = {
> + .cmd = cpu_to_le32(cmd),
> + };
> +
> + memcpy(req.val, val, sizeof(req.val));

Will this lead to undefined behavior if memcpy size larger than source?
what about passing u32 and using put_unaligned_le32?

Ryder