Lines Matching refs:dev

24 static inline int firmware_running(struct mt7601u_dev *dev)  in firmware_running()  argument
26 return mt7601u_rr(dev, MT_MCU_COM_REG0) == 1; in firmware_running()
42 static inline void trace_mt_mcu_msg_send_cs(struct mt7601u_dev *dev, in trace_mt_mcu_msg_send_cs() argument
50 trace_mt_mcu_msg_send(dev, skb, csum, need_resp); in trace_mt_mcu_msg_send_cs()
68 static int mt7601u_mcu_wait_resp(struct mt7601u_dev *dev, u8 seq) in mt7601u_mcu_wait_resp() argument
70 struct urb *urb = dev->mcu.resp.urb; in mt7601u_mcu_wait_resp()
75 if (!wait_for_completion_timeout(&dev->mcu.resp_cmpl, in mt7601u_mcu_wait_resp()
77 dev_warn(dev->dev, "Warning: %s retrying\n", __func__); in mt7601u_mcu_wait_resp()
82 rxfce = get_unaligned_le32(dev->mcu.resp.buf); in mt7601u_mcu_wait_resp()
85 ret = mt7601u_usb_submit_buf(dev, USB_DIR_IN, MT_EP_IN_CMD_RESP, in mt7601u_mcu_wait_resp()
86 &dev->mcu.resp, GFP_KERNEL, in mt7601u_mcu_wait_resp()
88 &dev->mcu.resp_cmpl); in mt7601u_mcu_wait_resp()
93 dev_err(dev->dev, "Error: MCU resp urb failed:%d\n", in mt7601u_mcu_wait_resp()
100 dev_err(dev->dev, "Error: MCU resp evt:%lx seq:%hhx-%lx!\n", in mt7601u_mcu_wait_resp()
105 dev_err(dev->dev, "Error: %s timed out\n", __func__); in mt7601u_mcu_wait_resp()
110 mt7601u_mcu_msg_send(struct mt7601u_dev *dev, struct sk_buff *skb, in mt7601u_mcu_msg_send() argument
113 struct usb_device *usb_dev = mt7601u_to_usb_dev(dev); in mt7601u_mcu_msg_send()
115 dev->out_eps[MT_EP_OUT_INBAND_CMD]); in mt7601u_mcu_msg_send()
119 if (test_bit(MT7601U_STATE_REMOVED, &dev->state)) { in mt7601u_mcu_msg_send()
124 mutex_lock(&dev->mcu.mutex); in mt7601u_mcu_msg_send()
128 seq = ++dev->mcu.msg_seq & 0xf; in mt7601u_mcu_msg_send()
132 if (dev->mcu.resp_cmpl.done) in mt7601u_mcu_msg_send()
133 dev_err(dev->dev, "Error: MCU response pre-completed!\n"); in mt7601u_mcu_msg_send()
135 trace_mt_mcu_msg_send_cs(dev, skb, wait_resp); in mt7601u_mcu_msg_send()
136 trace_mt_submit_urb_sync(dev, cmd_pipe, skb->len); in mt7601u_mcu_msg_send()
139 dev_err(dev->dev, "Error: send MCU cmd failed:%d\n", ret); in mt7601u_mcu_msg_send()
143 dev_err(dev->dev, "Error: %s sent != skb->len\n", __func__); in mt7601u_mcu_msg_send()
146 ret = mt7601u_mcu_wait_resp(dev, seq); in mt7601u_mcu_msg_send()
148 mutex_unlock(&dev->mcu.mutex); in mt7601u_mcu_msg_send()
155 static int mt7601u_mcu_function_select(struct mt7601u_dev *dev, in mt7601u_mcu_function_select() argument
170 return mt7601u_mcu_msg_send(dev, skb, CMD_FUN_SET_OP, func == 5); in mt7601u_mcu_function_select()
173 int mt7601u_mcu_tssi_read_kick(struct mt7601u_dev *dev, int use_hvga) in mt7601u_mcu_tssi_read_kick() argument
177 if (!test_bit(MT7601U_STATE_MCU_RUNNING, &dev->state)) in mt7601u_mcu_tssi_read_kick()
180 ret = mt7601u_mcu_function_select(dev, ATOMIC_TSSI_SETTING, in mt7601u_mcu_tssi_read_kick()
183 dev_warn(dev->dev, "Warning: MCU TSSI read kick failed\n"); in mt7601u_mcu_tssi_read_kick()
187 dev->tssi_read_trig = true; in mt7601u_mcu_tssi_read_kick()
193 mt7601u_mcu_calibrate(struct mt7601u_dev *dev, enum mcu_calibrate cal, u32 val) in mt7601u_mcu_calibrate() argument
207 return mt7601u_mcu_msg_send(dev, skb, CMD_CALIBRATION_OP, true); in mt7601u_mcu_calibrate()
210 int mt7601u_write_reg_pairs(struct mt7601u_dev *dev, u32 base, in mt7601u_write_reg_pairs() argument
232 ret = mt7601u_mcu_msg_send(dev, skb, CMD_RANDOM_WRITE, cnt == n); in mt7601u_write_reg_pairs()
236 return mt7601u_write_reg_pairs(dev, base, data + cnt, n - cnt); in mt7601u_write_reg_pairs()
239 int mt7601u_burst_write_regs(struct mt7601u_dev *dev, u32 offset, in mt7601u_burst_write_regs() argument
260 ret = mt7601u_mcu_msg_send(dev, skb, CMD_BURST_WRITE, cnt == n); in mt7601u_burst_write_regs()
264 return mt7601u_burst_write_regs(dev, offset + cnt * 4, in mt7601u_burst_write_regs()
283 static int __mt7601u_dma_fw(struct mt7601u_dev *dev, in __mt7601u_dma_fw() argument
300 ret = mt7601u_vendor_single_wr(dev, MT_VEND_WRITE_FCE, in __mt7601u_dma_fw()
305 ret = mt7601u_vendor_single_wr(dev, MT_VEND_WRITE_FCE, in __mt7601u_dma_fw()
311 ret = mt7601u_usb_submit_buf(dev, USB_DIR_OUT, MT_EP_OUT_INBAND_CMD, in __mt7601u_dma_fw()
318 dev_err(dev->dev, "Error: firmware upload timed out\n"); in __mt7601u_dma_fw()
323 dev_err(dev->dev, "Error: firmware upload urb failed:%d\n", in __mt7601u_dma_fw()
328 val = mt7601u_rr(dev, MT_TX_CPU_FROM_FCE_CPU_DESC_IDX); in __mt7601u_dma_fw()
330 mt7601u_wr(dev, MT_TX_CPU_FROM_FCE_CPU_DESC_IDX, val); in __mt7601u_dma_fw()
336 mt7601u_dma_fw(struct mt7601u_dev *dev, struct mt7601u_dma_buf *dma_buf, in mt7601u_dma_fw() argument
345 ret = __mt7601u_dma_fw(dev, dma_buf, data, n, dst_addr); in mt7601u_dma_fw()
349 if (!mt76_poll_msec(dev, MT_MCU_COM_REG1, BIT(31), BIT(31), 500)) in mt7601u_dma_fw()
352 return mt7601u_dma_fw(dev, dma_buf, data + n, len - n, dst_addr + n); in mt7601u_dma_fw()
356 mt7601u_upload_firmware(struct mt7601u_dev *dev, const struct mt76_fw *fw) in mt7601u_upload_firmware() argument
366 if (mt7601u_usb_alloc_buf(dev, MCU_FW_URB_SIZE, &dma_buf)) { in mt7601u_upload_firmware()
372 dev_dbg(dev->dev, "loading FW - ILM %u + IVB %zu\n", in mt7601u_upload_firmware()
374 ret = mt7601u_dma_fw(dev, &dma_buf, fw->ilm, ilm_len, sizeof(fw->ivb)); in mt7601u_upload_firmware()
379 dev_dbg(dev->dev, "loading FW - DLM %u\n", dlm_len); in mt7601u_upload_firmware()
380 ret = mt7601u_dma_fw(dev, &dma_buf, fw->ilm + ilm_len, in mt7601u_upload_firmware()
385 ret = mt7601u_vendor_request(dev, MT_VEND_DEV_MODE, USB_DIR_OUT, in mt7601u_upload_firmware()
391 for (i = 100; i && !firmware_running(dev); i--) in mt7601u_upload_firmware()
398 dev_dbg(dev->dev, "Firmware running!\n"); in mt7601u_upload_firmware()
401 mt7601u_usb_free_buf(dev, &dma_buf); in mt7601u_upload_firmware()
406 static int mt7601u_load_firmware(struct mt7601u_dev *dev) in mt7601u_load_firmware() argument
413 mt7601u_wr(dev, MT_USB_DMA_CFG, (MT_USB_DMA_CFG_RX_BULK_EN | in mt7601u_load_firmware()
416 if (firmware_running(dev)) in mt7601u_load_firmware()
417 return firmware_request_cache(dev->dev, MT7601U_FIRMWARE); in mt7601u_load_firmware()
419 ret = request_firmware(&fw, MT7601U_FIRMWARE, dev->dev); in mt7601u_load_firmware()
439 dev_info(dev->dev, in mt7601u_load_firmware()
446 mt7601u_wr(dev, 0x94c, 0); in mt7601u_load_firmware()
447 mt7601u_wr(dev, MT_FCE_PSE_CTRL, 0); in mt7601u_load_firmware()
449 mt7601u_vendor_reset(dev); in mt7601u_load_firmware()
452 mt7601u_wr(dev, 0xa44, 0); in mt7601u_load_firmware()
453 mt7601u_wr(dev, 0x230, 0x84210); in mt7601u_load_firmware()
454 mt7601u_wr(dev, 0x400, 0x80c00); in mt7601u_load_firmware()
455 mt7601u_wr(dev, 0x800, 1); in mt7601u_load_firmware()
457 mt7601u_rmw(dev, MT_PBF_CFG, 0, (MT_PBF_CFG_TX0Q_EN | in mt7601u_load_firmware()
462 mt7601u_wr(dev, MT_FCE_PSE_CTRL, 1); in mt7601u_load_firmware()
464 mt7601u_wr(dev, MT_USB_DMA_CFG, (MT_USB_DMA_CFG_RX_BULK_EN | in mt7601u_load_firmware()
466 val = mt76_set(dev, MT_USB_DMA_CFG, MT_USB_DMA_CFG_TX_CLR); in mt7601u_load_firmware()
468 mt7601u_wr(dev, MT_USB_DMA_CFG, val); in mt7601u_load_firmware()
471 mt7601u_wr(dev, MT_TX_CPU_FROM_FCE_BASE_PTR, 0x400230); in mt7601u_load_firmware()
473 mt7601u_wr(dev, MT_TX_CPU_FROM_FCE_MAX_COUNT, 1); in mt7601u_load_firmware()
475 mt7601u_wr(dev, MT_FCE_PDMA_GLOBAL_CONF, 0x44); in mt7601u_load_firmware()
477 mt7601u_wr(dev, MT_FCE_SKIP_FS, 3); in mt7601u_load_firmware()
479 ret = mt7601u_upload_firmware(dev, (const struct mt76_fw *)fw->data); in mt7601u_load_firmware()
486 dev_err(dev->dev, "Invalid firmware image\n"); in mt7601u_load_firmware()
491 int mt7601u_mcu_init(struct mt7601u_dev *dev) in mt7601u_mcu_init() argument
495 mutex_init(&dev->mcu.mutex); in mt7601u_mcu_init()
497 ret = mt7601u_load_firmware(dev); in mt7601u_mcu_init()
501 set_bit(MT7601U_STATE_MCU_RUNNING, &dev->state); in mt7601u_mcu_init()
506 int mt7601u_mcu_cmd_init(struct mt7601u_dev *dev) in mt7601u_mcu_cmd_init() argument
510 ret = mt7601u_mcu_function_select(dev, Q_SELECT, 1); in mt7601u_mcu_cmd_init()
514 init_completion(&dev->mcu.resp_cmpl); in mt7601u_mcu_cmd_init()
515 if (mt7601u_usb_alloc_buf(dev, MCU_RESP_URB_SIZE, &dev->mcu.resp)) { in mt7601u_mcu_cmd_init()
516 mt7601u_usb_free_buf(dev, &dev->mcu.resp); in mt7601u_mcu_cmd_init()
520 ret = mt7601u_usb_submit_buf(dev, USB_DIR_IN, MT_EP_IN_CMD_RESP, in mt7601u_mcu_cmd_init()
521 &dev->mcu.resp, GFP_KERNEL, in mt7601u_mcu_cmd_init()
522 mt7601u_complete_urb, &dev->mcu.resp_cmpl); in mt7601u_mcu_cmd_init()
524 mt7601u_usb_free_buf(dev, &dev->mcu.resp); in mt7601u_mcu_cmd_init()
531 void mt7601u_mcu_cmd_deinit(struct mt7601u_dev *dev) in mt7601u_mcu_cmd_deinit() argument
533 usb_kill_urb(dev->mcu.resp.urb); in mt7601u_mcu_cmd_deinit()
534 mt7601u_usb_free_buf(dev, &dev->mcu.resp); in mt7601u_mcu_cmd_deinit()