Lines Matching refs:ar

474 static void ath10k_snoc_write32(struct ath10k *ar, u32 offset, u32 value)
476 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
481 static u32 ath10k_snoc_read32(struct ath10k *ar, u32 offset)
483 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
494 struct ath10k *ar = pipe->hif_ce_state;
495 struct ath10k_ce *ce = ath10k_ce_priv(ar);
506 paddr = dma_map_single(ar->dev, skb->data,
509 if (unlikely(dma_mapping_error(ar->dev, paddr))) {
510 ath10k_warn(ar, "failed to dma map snoc rx buf\n");
521 dma_unmap_single(ar->dev, paddr, skb->len + skb_tailroom(skb),
532 struct ath10k *ar = pipe->hif_ce_state;
533 struct ath10k_ce *ce = ath10k_ce_priv(ar);
534 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
552 ath10k_warn(ar, "failed to post rx buf: %d\n", ret);
560 static void ath10k_snoc_rx_post(struct ath10k *ar)
562 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
570 void (*callback)(struct ath10k *ar,
573 struct ath10k *ar = ce_state->ar;
574 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
586 dma_unmap_single(ar->dev, ATH10K_SKB_RXCB(skb)->paddr,
590 ath10k_warn(ar, "rxed more than expected (nbytes %d, max %d)\n",
601 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc rx ce pipe %d len %d\n",
604 callback(ar, skb);
620 ath10k_ce_per_engine_service(ce_state->ar, CE_POLL_PIPE);
633 static void ath10k_snoc_htt_rx_deliver(struct ath10k *ar, struct sk_buff *skb)
636 ath10k_htt_t2h_msg_handler(ar, skb);
641 ath10k_ce_per_engine_service(ce_state->ar, CE_POLL_PIPE);
648 struct ath10k *ar = ar_snoc->ar;
650 ath10k_snoc_rx_post(ar);
655 struct ath10k *ar = ce_state->ar;
668 ath10k_htc_tx_completion_handler(ar, skb);
673 struct ath10k *ar = ce_state->ar;
680 dma_unmap_single(ar->dev, ATH10K_SKB_CB(skb)->paddr,
682 ath10k_htt_hif_tx_complete(ar, skb);
686 static int ath10k_snoc_hif_tx_sg(struct ath10k *ar, u8 pipe_id,
689 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
690 struct ath10k_ce *ce = ath10k_ce_priv(ar);
700 ath10k_dbg(ar, ATH10K_DBG_SNOC,
714 ath10k_dbg(ar, ATH10K_DBG_SNOC,
739 static int ath10k_snoc_hif_get_target_info(struct ath10k *ar,
748 static u16 ath10k_snoc_hif_get_free_queue_number(struct ath10k *ar, u8 pipe)
750 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
752 ath10k_dbg(ar, ATH10K_DBG_SNOC, "hif get free queue number\n");
757 static void ath10k_snoc_hif_send_complete_check(struct ath10k *ar, u8 pipe,
762 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc hif send complete check\n");
765 resources = ath10k_snoc_hif_get_free_queue_number(ar, pipe);
770 ath10k_ce_per_engine_service(ar, pipe);
773 static int ath10k_snoc_hif_map_service_to_pipe(struct ath10k *ar,
781 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc hif map service\n");
819 static void ath10k_snoc_hif_get_default_pipe(struct ath10k *ar,
822 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc hif get default pipe\n");
824 (void)ath10k_snoc_hif_map_service_to_pipe(ar,
829 static inline void ath10k_snoc_irq_disable(struct ath10k *ar)
831 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
838 static inline void ath10k_snoc_irq_enable(struct ath10k *ar)
840 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
852 struct ath10k *ar;
855 ar = snoc_pipe->hif_ce_state;
872 dma_unmap_single(ar->dev, ATH10K_SKB_RXCB(skb)->paddr,
884 struct ath10k *ar;
887 ar = snoc_pipe->hif_ce_state;
904 ath10k_htc_tx_completion_handler(ar, skb);
908 static void ath10k_snoc_buffer_cleanup(struct ath10k *ar)
910 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
922 static void ath10k_snoc_hif_stop(struct ath10k *ar)
924 if (!test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags))
925 ath10k_snoc_irq_disable(ar);
927 ath10k_core_napi_sync_disable(ar);
928 ath10k_snoc_buffer_cleanup(ar);
929 ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif stop\n");
932 static int ath10k_snoc_hif_start(struct ath10k *ar)
934 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
938 dev_set_threaded(ar->napi_dev, true);
939 ath10k_core_napi_enable(ar);
940 ath10k_snoc_irq_enable(ar);
941 ath10k_snoc_rx_post(ar);
945 ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif start\n");
950 static int ath10k_snoc_init_pipes(struct ath10k *ar)
955 ret = ath10k_ce_init_pipe(ar, i, &host_ce_config_wlan[i]);
957 ath10k_err(ar, "failed to initialize copy engine pipe %d: %d\n",
966 static int ath10k_snoc_wlan_enable(struct ath10k *ar,
1008 ath10k_err(ar, "invalid firmware mode %d\n", fw_mode);
1012 return ath10k_qmi_wlan_enable(ar, &cfg, mode,
1016 static int ath10k_hw_power_on(struct ath10k *ar)
1018 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1021 ath10k_dbg(ar, ATH10K_DBG_SNOC, "soc power on\n");
1038 static int ath10k_hw_power_off(struct ath10k *ar)
1040 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1042 ath10k_dbg(ar, ATH10K_DBG_SNOC, "soc power off\n");
1049 static void ath10k_snoc_wlan_disable(struct ath10k *ar)
1051 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1059 if (!test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags) ||
1061 ath10k_qmi_wlan_disable(ar);
1064 static void ath10k_snoc_hif_power_down(struct ath10k *ar)
1066 ath10k_dbg(ar, ATH10K_DBG_BOOT, "boot hif power down\n");
1068 ath10k_snoc_wlan_disable(ar);
1069 ath10k_ce_free_rri(ar);
1070 ath10k_hw_power_off(ar);
1073 static int ath10k_snoc_hif_power_up(struct ath10k *ar,
1078 ath10k_dbg(ar, ATH10K_DBG_SNOC, "%s:WCN3990 driver state = %d\n",
1079 __func__, ar->state);
1081 ret = ath10k_hw_power_on(ar);
1083 ath10k_err(ar, "failed to power on device: %d\n", ret);
1087 ret = ath10k_snoc_wlan_enable(ar, fw_mode);
1089 ath10k_err(ar, "failed to enable wcn3990: %d\n", ret);
1093 ath10k_ce_alloc_rri(ar);
1095 ret = ath10k_snoc_init_pipes(ar);
1097 ath10k_err(ar, "failed to initialize CE: %d\n", ret);
1101 ath10k_ce_enable_interrupts(ar);
1106 ath10k_ce_free_rri(ar);
1107 ath10k_snoc_wlan_disable(ar);
1110 ath10k_hw_power_off(ar);
1115 static int ath10k_snoc_hif_set_target_log_mode(struct ath10k *ar,
1125 return ath10k_qmi_set_fw_log_mode(ar, fw_dbg_mode);
1129 static int ath10k_snoc_hif_suspend(struct ath10k *ar)
1131 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1134 if (!device_may_wakeup(ar->dev))
1139 ath10k_err(ar, "failed to enable wakeup irq :%d\n", ret);
1143 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc device suspended\n");
1148 static int ath10k_snoc_hif_resume(struct ath10k *ar)
1150 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1153 if (!device_may_wakeup(ar->dev))
1158 ath10k_err(ar, "failed to disable wakeup irq: %d\n", ret);
1162 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc device resumed\n");
1194 static int ath10k_snoc_get_ce_id_from_irq(struct ath10k *ar, int irq)
1196 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1203 ath10k_err(ar, "No matching CE id for irq %d\n", irq);
1210 struct ath10k *ar = arg;
1211 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1212 int ce_id = ath10k_snoc_get_ce_id_from_irq(ar, irq);
1215 ath10k_warn(ar, "unexpected/invalid irq %d ce_id %d\n", irq,
1220 ath10k_ce_disable_interrupt(ar, ce_id);
1223 napi_schedule(&ar->napi);
1230 struct ath10k *ar = container_of(ctx, struct ath10k, napi);
1231 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1235 if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags)) {
1242 ath10k_ce_per_engine_service(ar, ce_id);
1243 ath10k_ce_enable_interrupt(ar, ce_id);
1246 done = ath10k_htt_txrx_compl_task(ar, budget);
1254 static void ath10k_snoc_init_napi(struct ath10k *ar)
1256 netif_napi_add(ar->napi_dev, &ar->napi, ath10k_snoc_napi_poll);
1259 static int ath10k_snoc_request_irq(struct ath10k *ar)
1261 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1267 IRQF_NO_AUTOEN, ce_name[id], ar);
1269 ath10k_err(ar,
1280 free_irq(ar_snoc->ce_irqs[id].irq_line, ar);
1285 static void ath10k_snoc_free_irq(struct ath10k *ar)
1287 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1291 free_irq(ar_snoc->ce_irqs[id].irq_line, ar);
1294 static int ath10k_snoc_resource_init(struct ath10k *ar)
1296 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1304 ath10k_err(ar, "Memory base not found in DT\n");
1312 ath10k_err(ar, "Memory base ioremap failed with physical address %pa\n",
1326 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc xo-cal-data return %d\n", ret);
1329 ath10k_dbg(ar, ATH10K_DBG_SNOC, "xo cal data %x\n",
1336 static void ath10k_snoc_quirks_init(struct ath10k *ar)
1338 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1342 of_property_read_string(dev->of_node, "firmware-name", &ar->board_name);
1348 int ath10k_snoc_fw_indication(struct ath10k *ar, u64 type)
1350 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1360 ath10k_core_start_recovery(ar);
1366 ret = ath10k_core_register(ar, &bus_params);
1368 ath10k_err(ar, "Failed to register driver core: %d\n",
1376 set_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags);
1379 ath10k_err(ar, "invalid fw indication: %llx\n", type);
1386 static int ath10k_snoc_setup_resource(struct ath10k *ar)
1388 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1389 struct ath10k_ce *ce = ath10k_ce_priv(ar);
1399 pipe->hif_ce_state = ar;
1401 ret = ath10k_ce_alloc_pipe(ar, i, &host_ce_config_wlan[i]);
1403 ath10k_err(ar, "failed to allocate copy engine pipe %d: %d\n",
1410 ath10k_snoc_init_napi(ar);
1415 static void ath10k_snoc_release_resource(struct ath10k *ar)
1419 netif_napi_del(&ar->napi);
1421 ath10k_ce_free_pipe(ar, i);
1424 static void ath10k_msa_dump_memory(struct ath10k *ar,
1436 mem_layout = ath10k_coredump_get_mem_layout(ar);
1452 hdr->start = cpu_to_le32((unsigned long)ar->msa.vaddr);
1453 hdr->length = cpu_to_le32(ar->msa.mem_size);
1455 if (current_region->len < ar->msa.mem_size) {
1456 memcpy(buf, ar->msa.vaddr, current_region->len);
1457 ath10k_warn(ar, "msa dump length is less than msa size %x, %x\n",
1458 current_region->len, ar->msa.mem_size);
1460 memcpy(buf, ar->msa.vaddr, ar->msa.mem_size);
1464 void ath10k_snoc_fw_crashed_dump(struct ath10k *ar)
1469 mutex_lock(&ar->dump_mutex);
1471 spin_lock_bh(&ar->data_lock);
1472 ar->stats.fw_crash_counter++;
1473 spin_unlock_bh(&ar->data_lock);
1475 crash_data = ath10k_coredump_new(ar);
1482 ath10k_err(ar, "firmware crashed! (guid %s)\n", guid);
1483 ath10k_print_driver_info(ar);
1484 ath10k_msa_dump_memory(ar, crash_data);
1485 mutex_unlock(&ar->dump_mutex);
1492 struct ath10k *ar = ar_snoc->ar;
1497 ath10k_dbg(ar, ATH10K_DBG_SNOC, "received modem starting event\n");
1502 ath10k_dbg(ar, ATH10K_DBG_SNOC, "received modem running event\n");
1506 ath10k_dbg(ar, ATH10K_DBG_SNOC, "received modem %s event\n",
1515 ath10k_dbg(ar, ATH10K_DBG_SNOC, "received modem offline event\n");
1519 ath10k_err(ar, "received unrecognized event %lu\n", action);
1526 static int ath10k_modem_init(struct ath10k *ar)
1528 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1537 ath10k_err(ar, "failed to initialize modem notifier: %d\n", ret);
1546 static void ath10k_modem_deinit(struct ath10k *ar)
1549 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1553 ath10k_err(ar, "error %d unregistering notifier\n", ret);
1556 static int ath10k_setup_msa_resources(struct ath10k *ar, u32 msa_size)
1558 struct device *dev = ar->dev;
1572 ar->msa.paddr = r.start;
1573 ar->msa.mem_size = resource_size(&r);
1574 ar->msa.vaddr = devm_memremap(dev, ar->msa.paddr,
1575 ar->msa.mem_size,
1577 if (IS_ERR(ar->msa.vaddr)) {
1580 return PTR_ERR(ar->msa.vaddr);
1583 ar->msa.vaddr = dmam_alloc_coherent(dev, msa_size,
1584 &ar->msa.paddr,
1586 if (!ar->msa.vaddr) {
1587 ath10k_err(ar, "failed to allocate dma memory for msa region\n");
1590 ar->msa.mem_size = msa_size;
1593 ath10k_dbg(ar, ATH10K_DBG_QMI, "qmi msa.paddr: %pad , msa.vaddr: 0x%p\n",
1594 &ar->msa.paddr,
1595 ar->msa.vaddr);
1600 static int ath10k_fw_init(struct ath10k *ar)
1602 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1632 ath10k_err(ar, "dma configure fail: %d\n", ret);
1640 ath10k_err(ar, "failed to allocate iommu domain\n");
1647 ath10k_err(ar, "could not attach device: %d\n", ret);
1652 ar_snoc->fw.fw_start_addr = ar->msa.paddr;
1655 ar->msa.paddr, ar->msa.mem_size,
1658 ath10k_err(ar, "failed to map firmware region: %d\n", ret);
1679 static int ath10k_fw_deinit(struct ath10k *ar)
1681 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1694 ath10k_err(ar, "failed to unmap firmware: %zu\n",
1718 struct ath10k *ar;
1736 ar = ath10k_core_create(sizeof(*ar_snoc), dev, ATH10K_BUS_SNOC,
1738 if (!ar) {
1743 ar_snoc = ath10k_snoc_priv(ar);
1745 platform_set_drvdata(pdev, ar);
1746 ar_snoc->ar = ar;
1748 ar->ce_priv = &ar_snoc->ce;
1751 ath10k_snoc_quirks_init(ar);
1753 ret = ath10k_snoc_resource_init(ar);
1755 ath10k_warn(ar, "failed to initialize resource: %d\n", ret);
1759 ret = ath10k_snoc_setup_resource(ar);
1761 ath10k_warn(ar, "failed to setup resource: %d\n", ret);
1764 ret = ath10k_snoc_request_irq(ar);
1766 ath10k_warn(ar, "failed to request irqs: %d\n", ret);
1801 ret = ath10k_setup_msa_resources(ar, msa_size);
1803 ath10k_warn(ar, "failed to setup msa resources: %d\n", ret);
1807 ret = ath10k_fw_init(ar);
1809 ath10k_err(ar, "failed to initialize firmware: %d\n", ret);
1813 ret = ath10k_qmi_init(ar, msa_size);
1815 ath10k_warn(ar, "failed to register wlfw qmi client: %d\n", ret);
1819 ret = ath10k_modem_init(ar);
1823 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc probe\n");
1828 ath10k_qmi_deinit(ar);
1831 ath10k_fw_deinit(ar);
1834 ath10k_snoc_free_irq(ar);
1837 ath10k_snoc_release_resource(ar);
1840 ath10k_core_destroy(ar);
1845 static int ath10k_snoc_free_resources(struct ath10k *ar)
1847 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1849 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc free resources\n");
1853 ath10k_core_unregister(ar);
1854 ath10k_fw_deinit(ar);
1855 ath10k_snoc_free_irq(ar);
1856 ath10k_snoc_release_resource(ar);
1857 ath10k_modem_deinit(ar);
1858 ath10k_qmi_deinit(ar);
1859 ath10k_core_destroy(ar);
1866 struct ath10k *ar = platform_get_drvdata(pdev);
1867 struct ath10k_snoc *ar_snoc = ath10k_snoc_priv(ar);
1869 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc remove\n");
1871 reinit_completion(&ar->driver_recovery);
1874 wait_for_completion_timeout(&ar->driver_recovery, 3 * HZ);
1876 ath10k_snoc_free_resources(ar);
1881 struct ath10k *ar = platform_get_drvdata(pdev);
1883 ath10k_dbg(ar, ATH10K_DBG_SNOC, "snoc shutdown\n");
1884 ath10k_snoc_free_resources(ar);