use standard signature for mt7603 mcu api
Subsystems (2)
Lorenzo Bianconi
maintainercover use standard signature for mt7603 mcu api
Introduce mt76_mcu_ops data structure in mt7603 mcu code in order to unify mcu code between mt7603 and mt7615 drivers
Lorenzo Bianconi (5):
mt7603: remove query from mt7603_mcu_msg_send signature
mt7603: use standard signature for mt7603_mcu_msg_send
mt7603: initialize mt76_mcu_ops data structure
mt76: introduce mt76_mcu_restart macro
mt7603: init mcu_restart function pointer
drivers/net/wireless/mediatek/mt76/mt76.h | 3 + .../net/wireless/mediatek/mt76/mt7603/init.c | 2 +- .../net/wireless/mediatek/mt76/mt7603/mcu.c | 102 +++++++++--------- .../wireless/mediatek/mt76/mt7603/mt7603.h | 2 +- .../net/wireless/mediatek/mt76/mt76x02_mmio.c | 2 +- 5 files changed, 55 insertions(+), 56 deletions(-)
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerRFC 1/5 mt7603: remove query from mt7603_mcu_msg_send signature
Remove query parameter from mt7603_mcu_msg_send/__mt7603_mcu_msg_send routine signature since it can be obtained from cmd value. This is a preliminary patch for mcu code unification between mt7615 and mt7603 drivers
--- .../net/wireless/mediatek/mt76/mt7603/mcu.c | 36 ++++++++----------- 1 file changed, 14 insertions(+), 22 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7603/mcu.c +14 -22
@@ -14,8 +14,8 @@ struct mt7603_fw_trailer { } __packed;static int -__mt7603_mcu_msg_send (struct mt7603_dev *dev,struct sk_buff *skb,int cmd, -int query,int *wait_seq) +__mt7603_mcu_msg_send (struct mt7603_dev *dev,struct sk_buff *skb, +int cmd,int *wait_seq) {int hdrlen = dev->mcu_running ?sizeof (struct mt7603_mcu_txd ) :12 ;struct mt76_dev *mdev = &dev->mt76;
@@ -42,15 +42,14 @@ __mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb, int cmd,if (cmd <0 ) { txd->cid = -cmd; + txd->set_query =MCU_Q_NA ; }else { txd->cid =MCU_CMD_EXT_CID ; txd->ext_cid = cmd; -if (query !=MCU_Q_NA ) - txd->ext_cid_ack =1 ; + txd->set_query =MCU_Q_SET ; + txd->ext_cid_ack =1 ; } - txd->set_query = query; -if (wait_seq) *wait_seq = seq;
@@ -58,8 +57,7 @@ __mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb, int cmd, }static int -mt7603_mcu_msg_send (struct mt7603_dev *dev,struct sk_buff *skb,int cmd, -int query) +mt7603_mcu_msg_send (struct mt7603_dev *dev,struct sk_buff *skb,int cmd) {struct mt76_dev *mdev = &dev->mt76;unsigned long expires = jiffies +3 *HZ ;
@@ -68,7 +66,7 @@ mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb, int cmd,mutex_lock (&mdev->mmio.mcu.mutex); - ret =__mt7603_mcu_msg_send (dev, skb, cmd, query, &seq); + ret =__mt7603_mcu_msg_send (dev, skb, cmd, &seq);if (ret) goto out;
@@ -115,8 +113,7 @@ mt7603_mcu_init_download(struct mt7603_dev *dev, u32 addr, u32 len) };struct sk_buff *skb =mt7603_mcu_msg_alloc (&req,sizeof (req)); -return mt7603_mcu_msg_send (dev, skb, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , -MCU_Q_NA ); +return mt7603_mcu_msg_send (dev, skb, -MCU_CMD_TARGET_ADDRESS_LEN_REQ ); } static int
@@ -134,7 +131,7 @@ mt7603_mcu_send_firmware(struct mt7603_dev *dev, const void *data, int len)return -ENOMEM ; ret =__mt7603_mcu_msg_send (dev, skb, -MCU_CMD_FW_SCATTER , -MCU_Q_NA ,NULL ); +NULL );if (ret)break ;
@@ -157,8 +154,7 @@ mt7603_mcu_start_firmware(struct mt7603_dev *dev, u32 addr) };struct sk_buff *skb =mt7603_mcu_msg_alloc (&req,sizeof (req)); -return mt7603_mcu_msg_send (dev, skb, -MCU_CMD_FW_START_REQ , -MCU_Q_NA ); +return mt7603_mcu_msg_send (dev, skb, -MCU_CMD_FW_START_REQ ); } static int
@@ -166,8 +162,7 @@ mt7603_mcu_restart(struct mt7603_dev *dev) {struct sk_buff *skb =mt7603_mcu_msg_alloc (NULL ,0 ); -return mt7603_mcu_msg_send (dev, skb, -MCU_CMD_RESTART_DL_REQ , -MCU_Q_NA ); +return mt7603_mcu_msg_send (dev, skb, -MCU_CMD_RESTART_DL_REQ ); }int mt7603_load_firmware (struct mt7603_dev *dev)
@@ -371,8 +366,7 @@ int mt7603_mcu_set_eeprom(struct mt7603_dev *dev) data[i].pad =0 ; } -return mt7603_mcu_msg_send (dev, skb,MCU_EXT_CMD_EFUSE_BUFFER_MODE , -MCU_Q_SET ); +return mt7603_mcu_msg_send (dev, skb,MCU_EXT_CMD_EFUSE_BUFFER_MODE ); }static int mt7603_mcu_set_tx_power (struct mt7603_dev *dev)
@@ -417,8 +411,7 @@ static int mt7603_mcu_set_tx_power(struct mt7603_dev *dev) sizeof(req.temp_comp_power)); skb =mt7603_mcu_msg_alloc (&req,sizeof (req)); -return mt7603_mcu_msg_send (dev, skb,MCU_EXT_CMD_SET_TX_POWER_CTRL , -MCU_Q_SET ); +return mt7603_mcu_msg_send (dev, skb,MCU_EXT_CMD_SET_TX_POWER_CTRL ); }int mt7603_mcu_set_channel (struct mt7603_dev *dev)
@@ -466,8 +459,7 @@ int mt7603_mcu_set_channel(struct mt7603_dev *dev) req.txpower[i] = tx_power; skb =mt7603_mcu_msg_alloc (&req,sizeof (req)); - ret =mt7603_mcu_msg_send (dev, skb,MCU_EXT_CMD_CHANNEL_SWITCH , -MCU_Q_SET ); + ret =mt7603_mcu_msg_send (dev, skb,MCU_EXT_CMD_CHANNEL_SWITCH );if (ret)return ret;
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerRFC 2/5 mt7603: use standard signature for mt7603_mcu_msg_send
In reply to Lorenzo BianconiUse mt76 common signature for mt7603_mcu_msg_send. Move skb allocation in mt7603_mcu_msg_send and remove duplicated code. This is a preliminary patch for mt7615-mt7603 mcu code unification
--- .../net/wireless/mediatek/mt76/mt7603/mcu.c | 61 ++++++++----------- 1 file changed, 27 insertions(+), 34 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7603/mcu.c +27 -34
@@ -22,9 +22,6 @@ __mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb,struct mt7603_mcu_txd *txd;u8 seq; -if (!skb) -return -EINVAL ; - seq = ++mdev->mmio.mcu.msg_seq &0xf ;if (!seq) seq = ++mdev->mmio.mcu.msg_seq &0xf ;
@@ -57,20 +54,26 @@ __mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb, }static int -mt7603_mcu_msg_send (struct mt7603_dev *dev,struct sk_buff *skb,int cmd) +mt7603_mcu_msg_send (struct mt7603_dev *dev,int cmd,const void *data, +int len,bool wait_resp) {struct mt76_dev *mdev = &dev->mt76;unsigned long expires = jiffies +3 *HZ ;struct mt7603_mcu_rxd *rxd; +struct sk_buff *skb;int ret, seq; + skb =mt7603_mcu_msg_alloc (data, len); +if (!skb) +return -ENOMEM ; +mutex_lock (&mdev->mmio.mcu.mutex); ret =__mt7603_mcu_msg_send (dev, skb, cmd, &seq);if (ret) goto out; -while (1 ) { +while (wait_resp) {bool check_seq = false; skb =mt76_mcu_get_response (&dev->mt76, expires);
@@ -111,9 +114,9 @@ mt7603_mcu_init_download(struct mt7603_dev *dev, u32 addr, u32 len) .len = cpu_to_le32(len), .mode = cpu_to_le32(BIT(31)), }; -struct sk_buff *skb =mt7603_mcu_msg_alloc (&req,sizeof (req)); -return mt7603_mcu_msg_send (dev, skb, -MCU_CMD_TARGET_ADDRESS_LEN_REQ ); +return mt7603_mcu_msg_send (dev, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , + &req,sizeof (req), true); } static int
@@ -152,17 +155,16 @@ mt7603_mcu_start_firmware(struct mt7603_dev *dev, u32 addr) .override = cpu_to_le32(addr ? 1 : 0), .addr = cpu_to_le32(addr), }; -struct sk_buff *skb =mt7603_mcu_msg_alloc (&req,sizeof (req)); -return mt7603_mcu_msg_send (dev, skb, -MCU_CMD_FW_START_REQ ); +return mt7603_mcu_msg_send (dev, -MCU_CMD_FW_START_REQ , + &req,sizeof (req), true); }static int mt7603_mcu_restart (struct mt7603_dev *dev) { -struct sk_buff *skb =mt7603_mcu_msg_alloc (NULL ,0 ); - -return mt7603_mcu_msg_send (dev, skb, -MCU_CMD_RESTART_DL_REQ ); +return mt7603_mcu_msg_send (dev, -MCU_CMD_RESTART_DL_REQ , +NULL ,0 , true); }int mt7603_load_firmware (struct mt7603_dev *dev)
@@ -343,30 +345,24 @@ int mt7603_mcu_set_eeprom(struct mt7603_dev *dev)u8 buffer_mode;u8 len;u8 pad[2 ]; - } req_hdr = { +struct req_data data[255 ]; + } req = { .buffer_mode = 1, .len =ARRAY_SIZE (req_fields) -1 , }; -struct sk_buff *skb; -struct req_data *data; -const int size =0xff *sizeof (struct req_data ); u8 *eep = (u8 *)dev->mt76.eeprom.data;int i; -BUILD_BUG_ON (ARRAY_SIZE (req_fields) *sizeof (*data) > size); - - skb =mt7603_mcu_msg_alloc (NULL , size +sizeof (req_hdr)); -memcpy (skb_put (skb,sizeof (req_hdr)), &req_hdr,sizeof (req_hdr)); - data = (struct req_data *)skb_put (skb, size); -memset (data,0 , size); +BUILD_BUG_ON (ARRAY_SIZE (req_fields) >ARRAY_SIZE (req.data));for (i =0 ; i <ARRAY_SIZE (req_fields); i++) { - data[i].addr =cpu_to_le16 (req_fields[i]); - data[i].val = eep[req_fields[i]]; - data[i].pad =0 ; + req.data[i].addr =cpu_to_le16 (req_fields[i]); + req.data[i].val = eep[req_fields[i]]; + req.data[i].pad =0 ; } -return mt7603_mcu_msg_send (dev, skb,MCU_EXT_CMD_EFUSE_BUFFER_MODE ); +return mt7603_mcu_msg_send (dev,MCU_EXT_CMD_EFUSE_BUFFER_MODE , + &req,sizeof (req), true); }static int mt7603_mcu_set_tx_power (struct mt7603_dev *dev)
@@ -401,7 +397,6 @@ static int mt7603_mcu_set_tx_power(struct mt7603_dev *dev) },#undef EEP_VAL }; -struct sk_buff *skb;u8 *eep = (u8 *)dev->mt76.eeprom.data; memcpy(req.rate_power_delta, eep + MT_EE_TX_POWER_CCK,
@@ -410,8 +405,8 @@ static int mt7603_mcu_set_tx_power(struct mt7603_dev *dev)memcpy (req.temp_comp_power, eep +MT_EE_STEP_NUM_NEG_6_7 ,sizeof (req.temp_comp_power)); - skb =mt7603_mcu_msg_alloc (&req,sizeof (req)); -return mt7603_mcu_msg_send (dev, skb,MCU_EXT_CMD_SET_TX_POWER_CTRL ); +return mt7603_mcu_msg_send (dev,MCU_EXT_CMD_SET_TX_POWER_CTRL , + &req,sizeof (req), true); }int mt7603_mcu_set_channel (struct mt7603_dev *dev)
@@ -435,10 +430,8 @@ int mt7603_mcu_set_channel(struct mt7603_dev *dev) .tx_streams = n_chains, .rx_streams = n_chains, }; -struct sk_buff *skb;s8 tx_power; -int ret; -int i; +int i, ret;if (dev->mt76.chandef.width ==NL80211_CHAN_WIDTH_40 ) { req.bw =MT_BW_40 ;
@@ -458,8 +451,8 @@ int mt7603_mcu_set_channel(struct mt7603_dev *dev)for (i =0 ; i <ARRAY_SIZE (req.txpower); i++) req.txpower[i] = tx_power; - skb =mt7603_mcu_msg_alloc (&req,sizeof (req)); - ret =mt7603_mcu_msg_send (dev, skb,MCU_EXT_CMD_CHANNEL_SWITCH ); + ret =mt7603_mcu_msg_send (dev,MCU_EXT_CMD_CHANNEL_SWITCH , + &req,sizeof (req), true);if (ret)return ret;
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerRFC 3/5 mt7603: initialize mt76_mcu_ops data structure
In reply to Lorenzo BianconiUse __mt76_mcu_send_msg wrapper instead of mt7603_mcu_msg_send. This is a preliminary patch for mt7615-mt7603 mcu code unification
--- drivers/net/wireless/mediatek/mt76/mt76.h | 1 + .../net/wireless/mediatek/mt76/mt7603/init.c | 2 +- .../net/wireless/mediatek/mt76/mt7603/mcu.c | 28 +++++++++++++------ .../wireless/mediatek/mt76/mt7603/mt7603.h | 2 +- 4 files changed, 22 insertions(+), 11 deletions(-)
drivers/net/wireless/mediatek/mt76/mt76.h +1 -0
@@ -536,6 +536,7 @@ struct mt76_rx_status {#define mt76_rd_rp (dev, ...) (dev)->mt76.bus->rd_rp(&((dev)->mt76), __VA_ARGS__)#define mt76_mcu_send_msg (dev, ...) (dev)->mt76.mcu_ops->mcu_send_msg(&((dev)->mt76), __VA_ARGS__) +#define __mt76_mcu_send_msg (dev, ...) (dev)->mcu_ops->mcu_send_msg((dev), __VA_ARGS__)#define mt76_set (dev, offset, val) mt76_rmw(dev, offset, 0, val)#define mt76_clear (dev, offset, val) mt76_rmw(dev, offset, val, 0)
drivers/net/wireless/mediatek/mt76/mt7603/init.c +1 -1
@@ -282,7 +282,7 @@ mt7603_init_hardware(struct mt7603_dev *dev)mt76_poll (dev,MT_PSE_RTA ,MT_PSE_RTA_BUSY ,0 ,5000 ); } - ret =mt7603_load_firmware (dev); + ret =mt7603_mcu_init (dev);if (ret)return ret;
drivers/net/wireless/mediatek/mt76/mt7603/mcu.c +19 -9
@@ -54,10 +54,10 @@ __mt7603_mcu_msg_send(struct mt7603_dev *dev, struct sk_buff *skb, }static int -mt7603_mcu_msg_send (struct mt7603_dev *dev,int cmd,const void *data, +mt7603_mcu_msg_send (struct mt76_dev *mdev,int cmd,const void *data,int len,bool wait_resp) { -struct mt76_dev *mdev = &dev->mt76; + struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);unsigned long expires = jiffies +3 *HZ ;struct mt7603_mcu_rxd *rxd;struct sk_buff *skb;
@@ -115,7 +115,7 @@ mt7603_mcu_init_download(struct mt7603_dev *dev, u32 addr, u32 len) .mode = cpu_to_le32(BIT(31)), }; -return mt7603_mcu_msg_send (dev, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , +return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_TARGET_ADDRESS_LEN_REQ , &req,sizeof (req), true); }
@@ -156,18 +156,18 @@ mt7603_mcu_start_firmware(struct mt7603_dev *dev, u32 addr) .addr = cpu_to_le32(addr), }; -return mt7603_mcu_msg_send (dev, -MCU_CMD_FW_START_REQ , +return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_FW_START_REQ , &req,sizeof (req), true); }static int mt7603_mcu_restart (struct mt7603_dev *dev) { -return mt7603_mcu_msg_send (dev, -MCU_CMD_RESTART_DL_REQ , +return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_RESTART_DL_REQ ,NULL ,0 , true); } -int mt7603_load_firmware (struct mt7603_dev *dev) +static int mt7603_load_firmware (struct mt7603_dev *dev) {const struct firmware *fw;const struct mt7603_fw_trailer *hdr;
@@ -265,6 +265,16 @@ int mt7603_load_firmware(struct mt7603_dev *dev)return ret; } +int mt7603_mcu_init (struct mt7603_dev *dev) +{ +static const struct mt76_mcu_ops mt7603_mcu_ops = { + .mcu_send_msg = mt7603_mcu_msg_send, + }; + + dev->mt76.mcu_ops = &mt7603_mcu_ops; +return mt7603_load_firmware (dev); +} +void mt7603_mcu_exit (struct mt7603_dev *dev) {mt7603_mcu_restart (dev);
@@ -361,7 +371,7 @@ int mt7603_mcu_set_eeprom(struct mt7603_dev *dev) req.data[i].pad =0 ; } -return mt7603_mcu_msg_send (dev,MCU_EXT_CMD_EFUSE_BUFFER_MODE , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_EFUSE_BUFFER_MODE , &req,sizeof (req), true); }
@@ -405,7 +415,7 @@ static int mt7603_mcu_set_tx_power(struct mt7603_dev *dev)memcpy (req.temp_comp_power, eep +MT_EE_STEP_NUM_NEG_6_7 ,sizeof (req.temp_comp_power)); -return mt7603_mcu_msg_send (dev,MCU_EXT_CMD_SET_TX_POWER_CTRL , +return __mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_SET_TX_POWER_CTRL , &req,sizeof (req), true); }
@@ -451,7 +461,7 @@ int mt7603_mcu_set_channel(struct mt7603_dev *dev)for (i =0 ; i <ARRAY_SIZE (req.txpower); i++) req.txpower[i] = tx_power; - ret =mt7603_mcu_msg_send (dev,MCU_EXT_CMD_CHANNEL_SWITCH , + ret =__mt76_mcu_send_msg (&dev->mt76,MCU_EXT_CMD_CHANNEL_SWITCH , &req,sizeof (req), true);if (ret)return ret;
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h +1 -1
@@ -176,7 +176,7 @@ void mt7603_unregister_device(struct mt7603_dev *dev);int mt7603_eeprom_init (struct mt7603_dev *dev);int mt7603_dma_init (struct mt7603_dev *dev);void mt7603_dma_cleanup (struct mt7603_dev *dev); -int mt7603_load_firmware (struct mt7603_dev *dev); +int mt7603_mcu_init (struct mt7603_dev *dev);void mt7603_init_debugfs (struct mt7603_dev *dev);static inline void mt7603_irq_enable (struct mt7603_dev *dev,u32 mask)
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerRFC 4/5 mt76: introduce mt76_mcu_restart macro
In reply to Lorenzo BianconiUse common function wrapper in mt76x02_watchdog_reset
--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-)
drivers/net/wireless/mediatek/mt76/mt76.h +2 -0
@@ -537,6 +537,8 @@ struct mt76_rx_status {#define mt76_mcu_send_msg (dev, ...) (dev)->mt76.mcu_ops->mcu_send_msg(&((dev)->mt76), __VA_ARGS__)#define __mt76_mcu_send_msg (dev, ...) (dev)->mcu_ops->mcu_send_msg((dev), __VA_ARGS__) +#define mt76_mcu_restart (dev, ...) (dev)->mt76.mcu_ops->mcu_restart(&((dev)->mt76)) +#define __mt76_mcu_restart (dev, ...) (dev)->mcu_ops->mcu_restart((dev))#define mt76_set (dev, offset, val) mt76_rmw(dev, offset, 0, val)#define mt76_clear (dev, offset, val) mt76_rmw(dev, offset, val, 0)
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c +1 -1
@@ -454,7 +454,7 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev)mt76_set (dev,0x734 ,0x3 );if (restart) - dev->mt76.mcu_ops->mcu_restart (&dev->mt76); +mt76_mcu_restart (dev);for (i =0 ; i <ARRAY_SIZE (dev->mt76.q_tx); i++)mt76_queue_tx_cleanup (dev, i, true);
Signature · 1 line
2.20.1
Lorenzo Bianconi
maintainerRFC 5/5 mt7603: init mcu_restart function pointer
In reply to Lorenzo BianconiUse common function wrapper in mt7603_mcu_exit since the code is shared with mt7615 driver
--- drivers/net/wireless/mediatek/mt76/mt7603/mcu.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7603/mcu.c +4 -3
@@ -161,9 +161,9 @@ mt7603_mcu_start_firmware(struct mt7603_dev *dev, u32 addr) }static int -mt7603_mcu_restart (struct mt7603_dev *dev) +mt7603_mcu_restart (struct mt76_dev *dev) { -return __mt76_mcu_send_msg (&dev->mt76, -MCU_CMD_RESTART_DL_REQ , +return __mt76_mcu_send_msg (dev, -MCU_CMD_RESTART_DL_REQ ,NULL ,0 , true); }
@@ -269,6 +269,7 @@ int mt7603_mcu_init(struct mt7603_dev *dev) {static const struct mt76_mcu_ops mt7603_mcu_ops = { .mcu_send_msg = mt7603_mcu_msg_send, + .mcu_restart = mt7603_mcu_restart, }; dev->mt76.mcu_ops = &mt7603_mcu_ops;
@@ -277,7 +278,7 @@ int mt7603_mcu_init(struct mt7603_dev *dev)void mt7603_mcu_exit (struct mt7603_dev *dev) { -mt7603_mcu_restart (dev); +__mt76_mcu_restart (&dev->mt76);skb_queue_purge (&dev->mt76.mmio.mcu.res_q); }
Signature · 1 line
2.20.1