Lines Matching full:data

106 static int btintel_pcie_setup_dbgc(struct btintel_pcie_data *data)  in btintel_pcie_setup_dbgc()  argument
112 data->dbgc.count = BTINTEL_PCIE_DBGC_BUFFER_COUNT; in btintel_pcie_setup_dbgc()
113 data->dbgc.bufs = devm_kcalloc(&data->pdev->dev, data->dbgc.count, in btintel_pcie_setup_dbgc()
115 if (!data->dbgc.bufs) in btintel_pcie_setup_dbgc()
118 data->dbgc.buf_v_addr = dmam_alloc_coherent(&data->pdev->dev, in btintel_pcie_setup_dbgc()
119 data->dbgc.count * in btintel_pcie_setup_dbgc()
121 &data->dbgc.buf_p_addr, in btintel_pcie_setup_dbgc()
123 if (!data->dbgc.buf_v_addr) in btintel_pcie_setup_dbgc()
126 data->dbgc.frag_v_addr = dmam_alloc_coherent(&data->pdev->dev, in btintel_pcie_setup_dbgc()
128 &data->dbgc.frag_p_addr, in btintel_pcie_setup_dbgc()
130 if (!data->dbgc.frag_v_addr) in btintel_pcie_setup_dbgc()
133 data->dbgc.frag_size = sizeof(struct btintel_pcie_dbgc_ctxt); in btintel_pcie_setup_dbgc()
140 for (i = 0; i < data->dbgc.count; i++) { in btintel_pcie_setup_dbgc()
141 buf = &data->dbgc.bufs[i]; in btintel_pcie_setup_dbgc()
142 buf->data_p_addr = data->dbgc.buf_p_addr + i * BTINTEL_PCIE_DBGC_BUFFER_SIZE; in btintel_pcie_setup_dbgc()
143 buf->data = data->dbgc.buf_v_addr + i * BTINTEL_PCIE_DBGC_BUFFER_SIZE; in btintel_pcie_setup_dbgc()
149 memcpy(data->dbgc.frag_v_addr, &db_frag, sizeof(db_frag)); in btintel_pcie_setup_dbgc()
180 static void btintel_pcie_set_tx_db(struct btintel_pcie_data *data, u16 index) in btintel_pcie_set_tx_db() argument
187 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_HBUS_TARG_WRPTR, val); in btintel_pcie_set_tx_db()
190 /* Copy the data to next(@tfd_index) data buffer and update the TFD(transfer
191 * descriptor) with the data length and the DMA address of the data buffer.
207 /* Copy the outgoing data to DMA buffer */ in btintel_pcie_prepare_tx()
208 memcpy(buf->data, skb->data, tfd->size); in btintel_pcie_prepare_tx()
211 static int btintel_pcie_send_sync(struct btintel_pcie_data *data, in btintel_pcie_send_sync() argument
216 struct txq *txq = &data->txq; in btintel_pcie_send_sync()
218 tfd_index = data->ia.tr_hia[BTINTEL_PCIE_TXQ_NUM]; in btintel_pcie_send_sync()
223 /* Prepare for TX. It updates the TFD with the length of data and in btintel_pcie_send_sync()
224 * address of the DMA buffer, and copy the data to the DMA buffer in btintel_pcie_send_sync()
229 data->ia.tr_hia[BTINTEL_PCIE_TXQ_NUM] = tfd_index; in btintel_pcie_send_sync()
232 data->tx_wait_done = false; in btintel_pcie_send_sync()
235 btintel_pcie_set_tx_db(data, tfd_index); in btintel_pcie_send_sync()
238 ret = wait_event_timeout(data->tx_wait_q, data->tx_wait_done, in btintel_pcie_send_sync()
247 * is available to receive the data
249 static void btintel_pcie_set_rx_db(struct btintel_pcie_data *data, u16 index) in btintel_pcie_set_rx_db() argument
256 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_HBUS_TARG_WRPTR, val); in btintel_pcie_set_rx_db()
278 static int btintel_pcie_submit_rx(struct btintel_pcie_data *data) in btintel_pcie_submit_rx() argument
281 struct rxq *rxq = &data->rxq; in btintel_pcie_submit_rx()
283 frbd_index = data->ia.tr_hia[BTINTEL_PCIE_RXQ_NUM]; in btintel_pcie_submit_rx()
294 data->ia.tr_hia[BTINTEL_PCIE_RXQ_NUM] = frbd_index; in btintel_pcie_submit_rx()
295 ipc_print_ia_ring(data->hdev, &data->ia, BTINTEL_PCIE_RXQ_NUM); in btintel_pcie_submit_rx()
298 btintel_pcie_set_rx_db(data, frbd_index); in btintel_pcie_submit_rx()
303 static int btintel_pcie_start_rx(struct btintel_pcie_data *data) in btintel_pcie_start_rx() argument
308 ret = btintel_pcie_submit_rx(data); in btintel_pcie_start_rx()
316 static void btintel_pcie_reset_ia(struct btintel_pcie_data *data) in btintel_pcie_reset_ia() argument
318 memset(data->ia.tr_hia, 0, sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES); in btintel_pcie_reset_ia()
319 memset(data->ia.tr_tia, 0, sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES); in btintel_pcie_reset_ia()
320 memset(data->ia.cr_hia, 0, sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES); in btintel_pcie_reset_ia()
321 memset(data->ia.cr_tia, 0, sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES); in btintel_pcie_reset_ia()
324 static int btintel_pcie_reset_bt(struct btintel_pcie_data *data) in btintel_pcie_reset_bt() argument
329 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_reset_bt()
336 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_reset_bt()
339 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_reset_bt()
347 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_reset_bt()
353 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_reset_bt()
356 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_reset_bt()
357 bt_dev_dbg(data->hdev, "csr register after reset: 0x%8.8x", reg); in btintel_pcie_reset_bt()
359 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_BOOT_STAGE_REG); in btintel_pcie_reset_bt()
367 static void btintel_pcie_mac_init(struct btintel_pcie_data *data) in btintel_pcie_mac_init() argument
372 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_mac_init()
378 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_mac_init()
381 static int btintel_pcie_add_dmp_data(struct hci_dev *hdev, const void *data, int size) in btintel_pcie_add_dmp_data() argument
390 skb_put_data(skb, data, size); in btintel_pcie_add_dmp_data()
393 bt_dev_err(hdev, "Failed to append data in the coredump"); in btintel_pcie_add_dmp_data()
400 static int btintel_pcie_get_mac_access(struct btintel_pcie_data *data) in btintel_pcie_get_mac_access() argument
405 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_get_mac_access()
412 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_get_mac_access()
415 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_get_mac_access()
426 static void btintel_pcie_release_mac_access(struct btintel_pcie_data *data) in btintel_pcie_release_mac_access() argument
430 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_release_mac_access()
441 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_release_mac_access()
445 void *data, int size) in btintel_pcie_copy_tlv() argument
452 memcpy(tlv->val, data, tlv->len); in btintel_pcie_copy_tlv()
455 static int btintel_pcie_read_dram_buffers(struct btintel_pcie_data *data) in btintel_pcie_read_dram_buffers() argument
458 struct btintel_pcie_dbgc *dbgc = &data->dbgc; in btintel_pcie_read_dram_buffers()
460 struct hci_dev *hdev = data->hdev; in btintel_pcie_read_dram_buffers()
469 wr_ptr_status = btintel_pcie_rd_dev_mem(data, BTINTEL_PCIE_DBGC_CUR_DBGBUFF_STATUS); in btintel_pcie_read_dram_buffers()
480 data->dmp_hdr.write_ptr = prev_size + offset; in btintel_pcie_read_dram_buffers()
492 2000 + (data->dmp_hdr.fw_timestamp >> 8), in btintel_pcie_read_dram_buffers()
493 data->dmp_hdr.fw_timestamp & 0xff, data->dmp_hdr.fw_build_type, in btintel_pcie_read_dram_buffers()
494 data->dmp_hdr.fw_build_num); in btintel_pcie_read_dram_buffers()
496 hdr_len = sizeof(*tlv) + sizeof(data->dmp_hdr.cnvi_bt) + in btintel_pcie_read_dram_buffers()
497 sizeof(*tlv) + sizeof(data->dmp_hdr.write_ptr) + in btintel_pcie_read_dram_buffers()
498 sizeof(*tlv) + sizeof(data->dmp_hdr.wrap_ctr) + in btintel_pcie_read_dram_buffers()
499 sizeof(*tlv) + sizeof(data->dmp_hdr.trigger_reason) + in btintel_pcie_read_dram_buffers()
500 sizeof(*tlv) + sizeof(data->dmp_hdr.fw_git_sha1) + in btintel_pcie_read_dram_buffers()
501 sizeof(*tlv) + sizeof(data->dmp_hdr.cnvr_top) + in btintel_pcie_read_dram_buffers()
502 sizeof(*tlv) + sizeof(data->dmp_hdr.cnvi_top) + in btintel_pcie_read_dram_buffers()
512 /* Add debug buffers data length to dump size */ in btintel_pcie_read_dram_buffers()
524 btintel_pcie_copy_tlv(skb, BTINTEL_CNVI_BT, &data->dmp_hdr.cnvi_bt, in btintel_pcie_read_dram_buffers()
525 sizeof(data->dmp_hdr.cnvi_bt)); in btintel_pcie_read_dram_buffers()
527 btintel_pcie_copy_tlv(skb, BTINTEL_WRITE_PTR, &data->dmp_hdr.write_ptr, in btintel_pcie_read_dram_buffers()
528 sizeof(data->dmp_hdr.write_ptr)); in btintel_pcie_read_dram_buffers()
530 data->dmp_hdr.wrap_ctr = btintel_pcie_rd_dev_mem(data, in btintel_pcie_read_dram_buffers()
533 btintel_pcie_copy_tlv(skb, BTINTEL_WRAP_CTR, &data->dmp_hdr.wrap_ctr, in btintel_pcie_read_dram_buffers()
534 sizeof(data->dmp_hdr.wrap_ctr)); in btintel_pcie_read_dram_buffers()
536 btintel_pcie_copy_tlv(skb, BTINTEL_TRIGGER_REASON, &data->dmp_hdr.trigger_reason, in btintel_pcie_read_dram_buffers()
537 sizeof(data->dmp_hdr.trigger_reason)); in btintel_pcie_read_dram_buffers()
539 btintel_pcie_copy_tlv(skb, BTINTEL_FW_SHA, &data->dmp_hdr.fw_git_sha1, in btintel_pcie_read_dram_buffers()
540 sizeof(data->dmp_hdr.fw_git_sha1)); in btintel_pcie_read_dram_buffers()
542 btintel_pcie_copy_tlv(skb, BTINTEL_CNVR_TOP, &data->dmp_hdr.cnvr_top, in btintel_pcie_read_dram_buffers()
543 sizeof(data->dmp_hdr.cnvr_top)); in btintel_pcie_read_dram_buffers()
545 btintel_pcie_copy_tlv(skb, BTINTEL_CNVI_TOP, &data->dmp_hdr.cnvi_top, in btintel_pcie_read_dram_buffers()
546 sizeof(data->dmp_hdr.cnvi_top)); in btintel_pcie_read_dram_buffers()
557 ret = btintel_pcie_add_dmp_data(hdev, dbgc->bufs[i].data, in btintel_pcie_read_dram_buffers()
570 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_dump_traces() local
573 ret = btintel_pcie_get_mac_access(data); in btintel_pcie_dump_traces()
579 ret = btintel_pcie_read_dram_buffers(data); in btintel_pcie_dump_traces()
581 btintel_pcie_release_mac_access(data); in btintel_pcie_dump_traces()
589 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_dump_hdr() local
597 INTEL_HW_VARIANT(data->dmp_hdr.cnvi_bt)); in btintel_pcie_dump_hdr()
601 data->dmp_hdr.fw_build_num); in btintel_pcie_dump_hdr()
604 snprintf(buf, sizeof(buf), "Driver: %s\n", data->dmp_hdr.driver_name); in btintel_pcie_dump_hdr()
615 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_dump_notify() local
619 data->dmp_hdr.state = HCI_DEVCOREDUMP_IDLE; in btintel_pcie_dump_notify()
622 data->dmp_hdr.state = HCI_DEVCOREDUMP_ACTIVE; in btintel_pcie_dump_notify()
627 data->dmp_hdr.state = HCI_DEVCOREDUMP_IDLE; in btintel_pcie_dump_notify()
638 static int btintel_pcie_enable_bt(struct btintel_pcie_data *data) in btintel_pcie_enable_bt() argument
643 data->gp0_received = false; in btintel_pcie_enable_bt()
646 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_CI_ADDR_LSB_REG, in btintel_pcie_enable_bt()
647 data->ci_p_addr & 0xffffffff); in btintel_pcie_enable_bt()
648 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_CI_ADDR_MSB_REG, in btintel_pcie_enable_bt()
649 (u64)data->ci_p_addr >> 32); in btintel_pcie_enable_bt()
654 data->boot_stage_cache = 0x0; in btintel_pcie_enable_bt()
657 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_enable_bt()
664 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, reg); in btintel_pcie_enable_bt()
667 btintel_pcie_set_reg_bits(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG, in btintel_pcie_enable_bt()
670 btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_FUNC_CTRL_REG); in btintel_pcie_enable_bt()
675 data->alive_intr_ctxt = BTINTEL_PCIE_ROM; in btintel_pcie_enable_bt()
676 err = wait_event_timeout(data->gp0_wait_q, data->gp0_received, in btintel_pcie_enable_bt()
682 if (~data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_ROM) in btintel_pcie_enable_bt()
688 static inline bool btintel_pcie_in_op(struct btintel_pcie_data *data) in btintel_pcie_in_op() argument
690 return data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_OPFW; in btintel_pcie_in_op()
693 static inline bool btintel_pcie_in_iml(struct btintel_pcie_data *data) in btintel_pcie_in_iml() argument
695 return data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_IML && in btintel_pcie_in_iml()
696 !(data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_OPFW); in btintel_pcie_in_iml()
699 static inline bool btintel_pcie_in_d3(struct btintel_pcie_data *data) in btintel_pcie_in_d3() argument
701 return data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_D3_STATE_READY; in btintel_pcie_in_d3()
704 static inline bool btintel_pcie_in_d0(struct btintel_pcie_data *data) in btintel_pcie_in_d0() argument
706 return !(data->boot_stage_cache & BTINTEL_PCIE_CSR_BOOT_STAGE_D3_STATE_READY); in btintel_pcie_in_d0()
709 static void btintel_pcie_wr_sleep_cntrl(struct btintel_pcie_data *data, in btintel_pcie_wr_sleep_cntrl() argument
712 bt_dev_dbg(data->hdev, "writing sleep_ctl_reg: 0x%8.8x", dxstate); in btintel_pcie_wr_sleep_cntrl()
713 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_IPC_SLEEP_CTL_REG, dxstate); in btintel_pcie_wr_sleep_cntrl()
738 static int btintel_pcie_read_device_mem(struct btintel_pcie_data *data, in btintel_pcie_read_device_mem() argument
745 err = btintel_pcie_get_mac_access(data); in btintel_pcie_read_device_mem()
747 bt_dev_err(data->hdev, "Failed to get mac access %d", err); in btintel_pcie_read_device_mem()
752 *val = btintel_pcie_rd_dev_mem(data, dev_addr); in btintel_pcie_read_device_mem()
754 btintel_pcie_release_mac_access(data); in btintel_pcie_read_device_mem()
762 static void btintel_pcie_msix_gp0_handler(struct btintel_pcie_data *data) in btintel_pcie_msix_gp0_handler() argument
771 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_BOOT_STAGE_REG); in btintel_pcie_msix_gp0_handler()
772 if (reg != data->boot_stage_cache) in btintel_pcie_msix_gp0_handler()
773 data->boot_stage_cache = reg; in btintel_pcie_msix_gp0_handler()
775 bt_dev_dbg(data->hdev, "Alive context: %s old_boot_stage: 0x%8.8x new_boot_stage: 0x%8.8x", in btintel_pcie_msix_gp0_handler()
776 btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt), in btintel_pcie_msix_gp0_handler()
777 data->boot_stage_cache, reg); in btintel_pcie_msix_gp0_handler()
778 reg = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_IMG_RESPONSE_REG); in btintel_pcie_msix_gp0_handler()
779 if (reg != data->img_resp_cache) in btintel_pcie_msix_gp0_handler()
780 data->img_resp_cache = reg; in btintel_pcie_msix_gp0_handler()
782 data->gp0_received = true; in btintel_pcie_msix_gp0_handler()
784 old_ctxt = data->alive_intr_ctxt; in btintel_pcie_msix_gp0_handler()
788 switch (data->alive_intr_ctxt) { in btintel_pcie_msix_gp0_handler()
790 data->alive_intr_ctxt = BTINTEL_PCIE_FW_DL; in btintel_pcie_msix_gp0_handler()
799 if (btintel_pcie_in_op(data)) { in btintel_pcie_msix_gp0_handler()
804 if (btintel_pcie_in_iml(data)) { in btintel_pcie_msix_gp0_handler()
806 data->alive_intr_ctxt = BTINTEL_PCIE_FW_DL; in btintel_pcie_msix_gp0_handler()
811 if (btintel_test_and_clear_flag(data->hdev, INTEL_WAIT_FOR_D0)) { in btintel_pcie_msix_gp0_handler()
812 btintel_wake_up_flag(data->hdev, INTEL_WAIT_FOR_D0); in btintel_pcie_msix_gp0_handler()
813 data->alive_intr_ctxt = BTINTEL_PCIE_D0; in btintel_pcie_msix_gp0_handler()
817 if (btintel_pcie_in_d3(data)) { in btintel_pcie_msix_gp0_handler()
818 data->alive_intr_ctxt = BTINTEL_PCIE_D3; in btintel_pcie_msix_gp0_handler()
824 if (btintel_pcie_in_d0(data)) { in btintel_pcie_msix_gp0_handler()
825 data->alive_intr_ctxt = BTINTEL_PCIE_D0; in btintel_pcie_msix_gp0_handler()
832 data->alive_intr_ctxt = BTINTEL_PCIE_D0; in btintel_pcie_msix_gp0_handler()
837 bt_dev_err(data->hdev, "Unknown state: 0x%2.2x", in btintel_pcie_msix_gp0_handler()
838 data->alive_intr_ctxt); in btintel_pcie_msix_gp0_handler()
843 btintel_pcie_reset_ia(data); in btintel_pcie_msix_gp0_handler()
844 btintel_pcie_start_rx(data); in btintel_pcie_msix_gp0_handler()
848 bt_dev_dbg(data->hdev, "wake up gp0 wait_q"); in btintel_pcie_msix_gp0_handler()
849 wake_up(&data->gp0_wait_q); in btintel_pcie_msix_gp0_handler()
852 if (old_ctxt != data->alive_intr_ctxt) in btintel_pcie_msix_gp0_handler()
853 bt_dev_dbg(data->hdev, "alive context changed: %s -> %s", in btintel_pcie_msix_gp0_handler()
855 btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt)); in btintel_pcie_msix_gp0_handler()
860 static void btintel_pcie_msix_tx_handle(struct btintel_pcie_data *data) in btintel_pcie_msix_tx_handle() argument
866 cr_tia = data->ia.cr_tia[BTINTEL_PCIE_TXQ_NUM]; in btintel_pcie_msix_tx_handle()
867 cr_hia = data->ia.cr_hia[BTINTEL_PCIE_TXQ_NUM]; in btintel_pcie_msix_tx_handle()
872 txq = &data->txq; in btintel_pcie_msix_tx_handle()
875 data->tx_wait_done = true; in btintel_pcie_msix_tx_handle()
876 wake_up(&data->tx_wait_q); in btintel_pcie_msix_tx_handle()
884 data->ia.cr_tia[BTINTEL_PCIE_TXQ_NUM] = cr_tia; in btintel_pcie_msix_tx_handle()
885 ipc_print_ia_ring(data->hdev, &data->ia, BTINTEL_PCIE_TXQ_NUM); in btintel_pcie_msix_tx_handle()
891 struct hci_event_hdr *hdr = (void *)skb->data; in btintel_pcie_recv_event()
893 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_recv_event() local
897 const void *ptr = skb->data + HCI_EVENT_HDR_SIZE + 1; in btintel_pcie_recv_event()
901 switch (skb->data[2]) { in btintel_pcie_recv_event()
913 if (btintel_pcie_in_op(data)) { in btintel_pcie_recv_event()
914 btintel_pcie_wr_sleep_cntrl(data, BTINTEL_PCIE_STATE_D0); in btintel_pcie_recv_event()
915 data->alive_intr_ctxt = BTINTEL_PCIE_INTEL_HCI_RESET2; in btintel_pcie_recv_event()
920 if (btintel_pcie_in_iml(data)) { in btintel_pcie_recv_event()
929 if (btintel_test_and_clear_flag(data->hdev, in btintel_pcie_recv_event()
931 btintel_wake_up_flag(data->hdev, in btintel_pcie_recv_event()
952 memcmp(&skb->data[2], diagnostics_hdr, in btintel_pcie_recv_event()
960 if (skb->data[2] == 0x97) in btintel_pcie_recv_event()
966 /* Process the received rx data
967 * It check the frame header to identify the data type and create skb
970 static int btintel_pcie_recv_frame(struct btintel_pcie_data *data, in btintel_pcie_recv_frame() argument
979 struct hci_dev *hdev = data->hdev; in btintel_pcie_recv_frame()
981 spin_lock(&data->hci_rx_lock); in btintel_pcie_recv_frame()
1063 skb_put_data(new_skb, skb->data, plen); in btintel_pcie_recv_frame()
1075 spin_unlock(&data->hci_rx_lock); in btintel_pcie_recv_frame()
1080 static void btintel_pcie_read_hwexp(struct btintel_pcie_data *data) in btintel_pcie_read_hwexp() argument
1096 switch (data->dmp_hdr.cnvi_top & 0xfff) { in btintel_pcie_read_hwexp()
1100 if (INTEL_CNVX_TOP_STEP(data->dmp_hdr.cnvi_top) != 0x01) in btintel_pcie_read_hwexp()
1102 len = BTINTEL_PCIE_BLZR_HWEXP_SIZE; /* exception data length */ in btintel_pcie_read_hwexp()
1110 bt_dev_err(data->hdev, "Unsupported cnvi 0x%8.8x", data->dmp_hdr.cnvi_top); in btintel_pcie_read_hwexp()
1118 btintel_pcie_mac_init(data); in btintel_pcie_read_hwexp()
1120 err = btintel_pcie_read_device_mem(data, buf, addr, len); in btintel_pcie_read_hwexp()
1126 bt_dev_err(data->hdev, "Invalid exception dump signature: 0x%8.8x", in btintel_pcie_read_hwexp()
1131 snprintf(prefix, sizeof(prefix), "Bluetooth: %s: ", bt_dev_name(data->hdev)); in btintel_pcie_read_hwexp()
1142 bt_dev_dbg(data->hdev, "Invalid TLV type 0"); in btintel_pcie_read_hwexp()
1159 bt_dev_dbg(data->hdev, "TLV packet length: %u", pkt_len); in btintel_pcie_read_hwexp()
1176 btintel_pcie_recv_frame(data, skb); in btintel_pcie_read_hwexp()
1183 static void btintel_pcie_msix_hw_exp_handler(struct btintel_pcie_data *data) in btintel_pcie_msix_hw_exp_handler() argument
1185 bt_dev_err(data->hdev, "Received hw exception interrupt"); in btintel_pcie_msix_hw_exp_handler()
1187 if (test_and_set_bit(BTINTEL_PCIE_CORE_HALTED, &data->flags)) in btintel_pcie_msix_hw_exp_handler()
1190 if (test_and_set_bit(BTINTEL_PCIE_HWEXP_INPROGRESS, &data->flags)) in btintel_pcie_msix_hw_exp_handler()
1194 if (!test_and_set_bit(BTINTEL_PCIE_COREDUMP_INPROGRESS, &data->flags)) in btintel_pcie_msix_hw_exp_handler()
1195 data->dmp_hdr.trigger_reason = BTINTEL_PCIE_TRIGGER_REASON_FW_ASSERT; in btintel_pcie_msix_hw_exp_handler()
1197 queue_work(data->workqueue, &data->rx_work); in btintel_pcie_msix_hw_exp_handler()
1202 struct btintel_pcie_data *data = container_of(work, in btintel_pcie_rx_work() local
1206 struct hci_dev *hdev = data->hdev; in btintel_pcie_rx_work()
1208 if (test_bit(BTINTEL_PCIE_HWEXP_INPROGRESS, &data->flags)) { in btintel_pcie_rx_work()
1216 btintel_pcie_read_hwexp(data); in btintel_pcie_rx_work()
1217 clear_bit(BTINTEL_PCIE_HWEXP_INPROGRESS, &data->flags); in btintel_pcie_rx_work()
1220 if (test_bit(BTINTEL_PCIE_COREDUMP_INPROGRESS, &data->flags)) { in btintel_pcie_rx_work()
1221 btintel_pcie_dump_traces(data->hdev); in btintel_pcie_rx_work()
1222 clear_bit(BTINTEL_PCIE_COREDUMP_INPROGRESS, &data->flags); in btintel_pcie_rx_work()
1226 while ((skb = skb_dequeue(&data->rx_skb_q))) { in btintel_pcie_rx_work()
1227 err = btintel_pcie_recv_frame(data, skb); in btintel_pcie_rx_work()
1235 /* create sk_buff with data and save it to queue and start RX work */
1236 static int btintel_pcie_submit_rx_work(struct btintel_pcie_data *data, u8 status, in btintel_pcie_submit_rx_work() argument
1259 skb_queue_tail(&data->rx_skb_q, skb); in btintel_pcie_submit_rx_work()
1260 queue_work(data->workqueue, &data->rx_work); in btintel_pcie_submit_rx_work()
1263 ret = btintel_pcie_submit_rx(data); in btintel_pcie_submit_rx_work()
1269 static void btintel_pcie_msix_rx_handle(struct btintel_pcie_data *data) in btintel_pcie_msix_rx_handle() argument
1276 struct hci_dev *hdev = data->hdev; in btintel_pcie_msix_rx_handle()
1278 cr_hia = data->ia.cr_hia[BTINTEL_PCIE_RXQ_NUM]; in btintel_pcie_msix_rx_handle()
1279 cr_tia = data->ia.cr_tia[BTINTEL_PCIE_RXQ_NUM]; in btintel_pcie_msix_rx_handle()
1289 rxq = &data->rxq; in btintel_pcie_msix_rx_handle()
1296 ipc_print_urbd1(data->hdev, urbd1, cr_tia); in btintel_pcie_msix_rx_handle()
1305 ret = btintel_pcie_submit_rx_work(data, urbd1->status, in btintel_pcie_msix_rx_handle()
1306 buf->data); in btintel_pcie_msix_rx_handle()
1313 data->ia.cr_tia[BTINTEL_PCIE_RXQ_NUM] = cr_tia; in btintel_pcie_msix_rx_handle()
1314 ipc_print_ia_ring(data->hdev, &data->ia, BTINTEL_PCIE_RXQ_NUM); in btintel_pcie_msix_rx_handle()
1318 static irqreturn_t btintel_pcie_msix_isr(int irq, void *data) in btintel_pcie_msix_isr() argument
1326 struct btintel_pcie_data *data = btintel_pcie_get_data(entry); in btintel_pcie_irq_msix_handler() local
1329 spin_lock(&data->irq_lock); in btintel_pcie_irq_msix_handler()
1330 intr_fh = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_CAUSES); in btintel_pcie_irq_msix_handler()
1331 intr_hw = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_CAUSES); in btintel_pcie_irq_msix_handler()
1334 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_CAUSES, intr_fh); in btintel_pcie_irq_msix_handler()
1335 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_CAUSES, intr_hw); in btintel_pcie_irq_msix_handler()
1336 spin_unlock(&data->irq_lock); in btintel_pcie_irq_msix_handler()
1345 btintel_pcie_msix_hw_exp_handler(data); in btintel_pcie_irq_msix_handler()
1351 btintel_pcie_msix_gp0_handler(data); in btintel_pcie_irq_msix_handler()
1355 btintel_pcie_msix_tx_handle(data); in btintel_pcie_irq_msix_handler()
1359 btintel_pcie_msix_rx_handle(data); in btintel_pcie_irq_msix_handler()
1369 btintel_pcie_wr_reg32(data, BTINTEL_PCIE_CSR_MSIX_AUTOMASK_ST, in btintel_pcie_irq_msix_handler()
1378 static int btintel_pcie_setup_irq(struct btintel_pcie_data *data) in btintel_pcie_setup_irq() argument
1384 data->msix_entries[i].entry = i; in btintel_pcie_setup_irq()
1386 num_irqs = pci_alloc_irq_vectors(data->pdev, BTINTEL_PCIE_MSIX_VEC_MIN, in btintel_pcie_setup_irq()
1391 data->alloc_vecs = num_irqs; in btintel_pcie_setup_irq()
1392 data->msix_enabled = 1; in btintel_pcie_setup_irq()
1393 data->def_irq = 0; in btintel_pcie_setup_irq()
1396 for (i = 0; i < data->alloc_vecs; i++) { in btintel_pcie_setup_irq()
1399 msix_entry = &data->msix_entries[i]; in btintel_pcie_setup_irq()
1400 msix_entry->vector = pci_irq_vector(data->pdev, i); in btintel_pcie_setup_irq()
1402 err = devm_request_threaded_irq(&data->pdev->dev, in btintel_pcie_setup_irq()
1410 pci_free_irq_vectors(data->pdev); in btintel_pcie_setup_irq()
1411 data->alloc_vecs = 0; in btintel_pcie_setup_irq()
1438 static void btintel_pcie_config_msix(struct btintel_pcie_data *data) in btintel_pcie_config_msix() argument
1441 int val = data->def_irq | BTINTEL_PCIE_MSIX_NON_AUTO_CLEAR_CAUSE; in btintel_pcie_config_msix()
1445 btintel_pcie_wr_reg8(data, in btintel_pcie_config_msix()
1448 btintel_pcie_clr_reg_bits(data, in btintel_pcie_config_msix()
1454 data->fh_init_mask = ~btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_MSIX_FH_INT_MASK); in btintel_pcie_config_msix()
1455 data->hw_init_mask = ~btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_MSIX_HW_INT_MASK); in btintel_pcie_config_msix()
1459 struct btintel_pcie_data *data) in btintel_pcie_config_pcie() argument
1476 data->base_addr = pcim_iomap_region(pdev, 0, KBUILD_MODNAME); in btintel_pcie_config_pcie()
1477 if (IS_ERR(data->base_addr)) in btintel_pcie_config_pcie()
1478 return PTR_ERR(data->base_addr); in btintel_pcie_config_pcie()
1480 err = btintel_pcie_setup_irq(data); in btintel_pcie_config_pcie()
1485 btintel_pcie_config_msix(data); in btintel_pcie_config_pcie()
1490 static void btintel_pcie_init_ci(struct btintel_pcie_data *data, in btintel_pcie_init_ci() argument
1496 ci->addr_cr_hia = data->ia.cr_hia_p_addr; in btintel_pcie_init_ci()
1497 ci->addr_tr_tia = data->ia.tr_tia_p_addr; in btintel_pcie_init_ci()
1498 ci->addr_cr_tia = data->ia.cr_tia_p_addr; in btintel_pcie_init_ci()
1499 ci->addr_tr_hia = data->ia.tr_hia_p_addr; in btintel_pcie_init_ci()
1502 ci->addr_urbdq0 = data->txq.urbd0s_p_addr; in btintel_pcie_init_ci()
1503 ci->addr_tfdq = data->txq.tfds_p_addr; in btintel_pcie_init_ci()
1504 ci->num_tfdq = data->txq.count; in btintel_pcie_init_ci()
1505 ci->num_urbdq0 = data->txq.count; in btintel_pcie_init_ci()
1509 ci->addr_frbdq = data->rxq.frbds_p_addr; in btintel_pcie_init_ci()
1510 ci->num_frbdq = data->rxq.count; in btintel_pcie_init_ci()
1512 ci->addr_urbdq1 = data->rxq.urbd1s_p_addr; in btintel_pcie_init_ci()
1513 ci->num_urbdq1 = data->rxq.count; in btintel_pcie_init_ci()
1517 ci->dbgc_addr = data->dbgc.frag_p_addr; in btintel_pcie_init_ci()
1518 ci->dbgc_size = data->dbgc.frag_size; in btintel_pcie_init_ci()
1522 static void btintel_pcie_free_txq_bufs(struct btintel_pcie_data *data, in btintel_pcie_free_txq_bufs() argument
1525 /* Free data buffers first */ in btintel_pcie_free_txq_bufs()
1526 dma_free_coherent(&data->pdev->dev, txq->count * BTINTEL_PCIE_BUFFER_SIZE, in btintel_pcie_free_txq_bufs()
1531 static int btintel_pcie_setup_txq_bufs(struct btintel_pcie_data *data, in btintel_pcie_setup_txq_bufs() argument
1542 /* Allocate full chunk of data buffer for DMA first and do indexing and in btintel_pcie_setup_txq_bufs()
1545 txq->buf_v_addr = dma_alloc_coherent(&data->pdev->dev, in btintel_pcie_setup_txq_bufs()
1560 buf->data = txq->buf_v_addr + (i * BTINTEL_PCIE_BUFFER_SIZE); in btintel_pcie_setup_txq_bufs()
1566 static void btintel_pcie_free_rxq_bufs(struct btintel_pcie_data *data, in btintel_pcie_free_rxq_bufs() argument
1569 /* Free data buffers first */ in btintel_pcie_free_rxq_bufs()
1570 dma_free_coherent(&data->pdev->dev, rxq->count * BTINTEL_PCIE_BUFFER_SIZE, in btintel_pcie_free_rxq_bufs()
1575 static int btintel_pcie_setup_rxq_bufs(struct btintel_pcie_data *data, in btintel_pcie_setup_rxq_bufs() argument
1586 /* Allocate full chunk of data buffer for DMA first and do indexing and in btintel_pcie_setup_rxq_bufs()
1589 rxq->buf_v_addr = dma_alloc_coherent(&data->pdev->dev, in btintel_pcie_setup_rxq_bufs()
1604 buf->data = rxq->buf_v_addr + (i * BTINTEL_PCIE_BUFFER_SIZE); in btintel_pcie_setup_rxq_bufs()
1610 static void btintel_pcie_setup_ia(struct btintel_pcie_data *data, in btintel_pcie_setup_ia() argument
1631 static void btintel_pcie_free(struct btintel_pcie_data *data) in btintel_pcie_free() argument
1633 btintel_pcie_free_rxq_bufs(data, &data->rxq); in btintel_pcie_free()
1634 btintel_pcie_free_txq_bufs(data, &data->txq); in btintel_pcie_free()
1636 dma_pool_free(data->dma_pool, data->dma_v_addr, data->dma_p_addr); in btintel_pcie_free()
1637 dma_pool_destroy(data->dma_pool); in btintel_pcie_free()
1640 /* Allocate tx and rx queues, any related data structures and buffers.
1642 static int btintel_pcie_alloc(struct btintel_pcie_data *data) in btintel_pcie_alloc() argument
1651 * The DMA memory for data buffer is allocated while setting up the in btintel_pcie_alloc()
1669 data->dma_pool = dma_pool_create(KBUILD_MODNAME, &data->pdev->dev, in btintel_pcie_alloc()
1671 if (!data->dma_pool) { in btintel_pcie_alloc()
1676 v_addr = dma_pool_zalloc(data->dma_pool, GFP_KERNEL | __GFP_NOWARN, in btintel_pcie_alloc()
1679 dma_pool_destroy(data->dma_pool); in btintel_pcie_alloc()
1684 data->dma_p_addr = p_addr; in btintel_pcie_alloc()
1685 data->dma_v_addr = v_addr; in btintel_pcie_alloc()
1688 data->txq.count = BTINTEL_DESCS_COUNT; in btintel_pcie_alloc()
1689 data->rxq.count = BTINTEL_DESCS_COUNT; in btintel_pcie_alloc()
1692 data->txq.tfds_p_addr = p_addr; in btintel_pcie_alloc()
1693 data->txq.tfds = v_addr; in btintel_pcie_alloc()
1699 data->txq.urbd0s_p_addr = p_addr; in btintel_pcie_alloc()
1700 data->txq.urbd0s = v_addr; in btintel_pcie_alloc()
1706 data->rxq.frbds_p_addr = p_addr; in btintel_pcie_alloc()
1707 data->rxq.frbds = v_addr; in btintel_pcie_alloc()
1713 data->rxq.urbd1s_p_addr = p_addr; in btintel_pcie_alloc()
1714 data->rxq.urbd1s = v_addr; in btintel_pcie_alloc()
1719 /* Setup data buffers for txq */ in btintel_pcie_alloc()
1720 err = btintel_pcie_setup_txq_bufs(data, &data->txq); in btintel_pcie_alloc()
1724 /* Setup data buffers for rxq */ in btintel_pcie_alloc()
1725 err = btintel_pcie_setup_rxq_bufs(data, &data->rxq); in btintel_pcie_alloc()
1730 btintel_pcie_setup_ia(data, p_addr, v_addr, &data->ia); in btintel_pcie_alloc()
1732 /* Setup data buffers for dbgc */ in btintel_pcie_alloc()
1733 err = btintel_pcie_setup_dbgc(data); in btintel_pcie_alloc()
1741 data->ci = v_addr; in btintel_pcie_alloc()
1742 data->ci_p_addr = p_addr; in btintel_pcie_alloc()
1745 btintel_pcie_init_ci(data, data->ci); in btintel_pcie_alloc()
1750 btintel_pcie_free_txq_bufs(data, &data->txq); in btintel_pcie_alloc()
1752 dma_pool_free(data->dma_pool, data->dma_v_addr, data->dma_p_addr); in btintel_pcie_alloc()
1753 dma_pool_destroy(data->dma_pool); in btintel_pcie_alloc()
1800 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_send_frame() local
1809 * the first byte to get the packet type and redirect the rest of data in btintel_pcie_send_frame()
1812 * But for PCIe, THF(Transfer Flow Handler) fetches the 4 bytes of data in btintel_pcie_send_frame()
1818 * head room for profile and driver use, and before sending the data in btintel_pcie_send_frame()
1824 cmd = (void *)skb->data; in btintel_pcie_send_frame()
1827 struct hci_command_hdr *cmd = (void *)skb->data; in btintel_pcie_send_frame()
1840 data->gp0_received = false; in btintel_pcie_send_frame()
1862 ret = btintel_pcie_send_sync(data, skb); in btintel_pcie_send_frame()
1871 old_ctxt = data->alive_intr_ctxt; in btintel_pcie_send_frame()
1872 data->alive_intr_ctxt = in btintel_pcie_send_frame()
1875 bt_dev_dbg(data->hdev, "sent cmd: 0x%4.4x alive context changed: %s -> %s", in btintel_pcie_send_frame()
1877 btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt)); in btintel_pcie_send_frame()
1879 ret = wait_event_timeout(data->gp0_wait_q, in btintel_pcie_send_frame()
1880 data->gp0_received, in btintel_pcie_send_frame()
1885 btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt)); in btintel_pcie_send_frame()
1898 static void btintel_pcie_release_hdev(struct btintel_pcie_data *data) in btintel_pcie_release_hdev() argument
1902 hdev = data->hdev; in btintel_pcie_release_hdev()
1905 data->hdev = NULL; in btintel_pcie_release_hdev()
1910 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_setup_internal() local
1926 if (skb->data[0]) { in btintel_pcie_setup_internal()
1928 skb->data[0]); in btintel_pcie_setup_internal()
1942 /* For TLV type device, parse the tlv data */ in btintel_pcie_setup_internal()
1994 data->dmp_hdr.cnvi_top = ver_tlv.cnvi_top; in btintel_pcie_setup_internal()
1995 data->dmp_hdr.cnvr_top = ver_tlv.cnvr_top; in btintel_pcie_setup_internal()
1996 data->dmp_hdr.fw_timestamp = ver_tlv.timestamp; in btintel_pcie_setup_internal()
1997 data->dmp_hdr.fw_build_type = ver_tlv.build_type; in btintel_pcie_setup_internal()
1998 data->dmp_hdr.fw_build_num = ver_tlv.build_num; in btintel_pcie_setup_internal()
1999 data->dmp_hdr.cnvi_bt = ver_tlv.cnvi_bt; in btintel_pcie_setup_internal()
2002 data->dmp_hdr.fw_git_sha1 = ver_tlv.git_sha1; in btintel_pcie_setup_internal()
2021 struct btintel_pcie_data *data = hci_get_drvdata(hdev); in btintel_pcie_setup() local
2026 err = btintel_pcie_reset_bt(data); in btintel_pcie_setup()
2032 btintel_pcie_reset_ia(data); in btintel_pcie_setup()
2033 btintel_pcie_config_msix(data); in btintel_pcie_setup()
2034 err = btintel_pcie_enable_bt(data); in btintel_pcie_setup()
2039 btintel_pcie_start_rx(data); in btintel_pcie_setup()
2044 static int btintel_pcie_setup_hdev(struct btintel_pcie_data *data) in btintel_pcie_setup_hdev() argument
2054 hci_set_drvdata(hdev, data); in btintel_pcie_setup_hdev()
2056 data->hdev = hdev; in btintel_pcie_setup_hdev()
2057 SET_HCIDEV_DEV(hdev, &data->pdev->dev); in btintel_pcie_setup_hdev()
2075 data->dmp_hdr.driver_name = KBUILD_MODNAME; in btintel_pcie_setup_hdev()
2087 struct btintel_pcie_data *data; in btintel_pcie_probe() local
2092 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); in btintel_pcie_probe()
2093 if (!data) in btintel_pcie_probe()
2096 data->pdev = pdev; in btintel_pcie_probe()
2098 spin_lock_init(&data->irq_lock); in btintel_pcie_probe()
2099 spin_lock_init(&data->hci_rx_lock); in btintel_pcie_probe()
2101 init_waitqueue_head(&data->gp0_wait_q); in btintel_pcie_probe()
2102 data->gp0_received = false; in btintel_pcie_probe()
2104 init_waitqueue_head(&data->tx_wait_q); in btintel_pcie_probe()
2105 data->tx_wait_done = false; in btintel_pcie_probe()
2107 data->workqueue = alloc_ordered_workqueue(KBUILD_MODNAME, WQ_HIGHPRI); in btintel_pcie_probe()
2108 if (!data->workqueue) in btintel_pcie_probe()
2111 skb_queue_head_init(&data->rx_skb_q); in btintel_pcie_probe()
2112 INIT_WORK(&data->rx_work, btintel_pcie_rx_work); in btintel_pcie_probe()
2114 data->boot_stage_cache = 0x00; in btintel_pcie_probe()
2115 data->img_resp_cache = 0x00; in btintel_pcie_probe()
2117 err = btintel_pcie_config_pcie(pdev, data); in btintel_pcie_probe()
2121 pci_set_drvdata(pdev, data); in btintel_pcie_probe()
2123 err = btintel_pcie_alloc(data); in btintel_pcie_probe()
2127 err = btintel_pcie_enable_bt(data); in btintel_pcie_probe()
2132 data->cnvi = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_HW_REV_REG); in btintel_pcie_probe()
2134 data->cnvr = btintel_pcie_rd_reg32(data, BTINTEL_PCIE_CSR_RF_ID_REG); in btintel_pcie_probe()
2136 err = btintel_pcie_start_rx(data); in btintel_pcie_probe()
2140 err = btintel_pcie_setup_hdev(data); in btintel_pcie_probe()
2144 bt_dev_dbg(data->hdev, "cnvi: 0x%8.8x cnvr: 0x%8.8x", data->cnvi, in btintel_pcie_probe()
2145 data->cnvr); in btintel_pcie_probe()
2150 btintel_pcie_reset_bt(data); in btintel_pcie_probe()
2161 struct btintel_pcie_data *data; in btintel_pcie_remove() local
2163 data = pci_get_drvdata(pdev); in btintel_pcie_remove()
2165 btintel_pcie_reset_bt(data); in btintel_pcie_remove()
2166 for (int i = 0; i < data->alloc_vecs; i++) { in btintel_pcie_remove()
2169 msix_entry = &data->msix_entries[i]; in btintel_pcie_remove()
2175 btintel_pcie_release_hdev(data); in btintel_pcie_remove()
2177 flush_work(&data->rx_work); in btintel_pcie_remove()
2179 destroy_workqueue(data->workqueue); in btintel_pcie_remove()
2181 btintel_pcie_free(data); in btintel_pcie_remove()
2192 struct btintel_pcie_data *data = pci_get_drvdata(pdev); in btintel_pcie_coredump() local
2194 if (test_and_set_bit(BTINTEL_PCIE_COREDUMP_INPROGRESS, &data->flags)) in btintel_pcie_coredump()
2197 data->dmp_hdr.trigger_reason = BTINTEL_PCIE_TRIGGER_REASON_USER_TRIGGER; in btintel_pcie_coredump()
2198 queue_work(data->workqueue, &data->rx_work); in btintel_pcie_coredump()