Lines Matching defs:ab
1709 int ath11k_qmi_host_cap_send(struct ath11k_base *ab)
1721 req.mem_cfg_mode = ab->qmi.target_mem_mode;
1726 if (ab->hw_params.m3_fw_support) {
1739 req.cal_done = ab->qmi.cal_done;
1741 if (ab->hw_params.internal_sleep_clock) {
1755 if (ab->hw_params.global_reset)
1760 ath11k_dbg(ab, ATH11K_DBG_QMI, "host cap request\n");
1762 ret = qmi_txn_init(&ab->qmi.handle, &txn,
1767 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1773 ath11k_warn(ab, "failed to send host capability request: %d\n", ret);
1782 ath11k_warn(ab, "host capability request failed: %d %d\n",
1792 static int ath11k_qmi_fw_ind_register_send(struct ath11k_base *ab)
1796 struct qmi_handle *handle = &ab->qmi.handle;
1826 if (!ab->hw_params.fixed_fw_mem) {
1838 ath11k_dbg(ab, ATH11K_DBG_QMI, "indication register request\n");
1840 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1846 ath11k_warn(ab, "failed to send indication register request: %d\n",
1853 ath11k_warn(ab, "failed to register fw indication: %d\n", ret);
1858 ath11k_warn(ab, "firmware indication register request failed: %d %d\n",
1871 static int ath11k_qmi_respond_fw_mem_request(struct ath11k_base *ab)
1890 if (!(ab->hw_params.fixed_mem_region ||
1891 test_bit(ATH11K_FLAG_FIXED_MEM_RGN, &ab->dev_flags)) &&
1892 ab->qmi.target_mem_delayed) {
1894 ath11k_dbg(ab, ATH11K_DBG_QMI, "delays mem_request %d\n",
1895 ab->qmi.mem_seg_count);
1899 req->mem_seg_len = ab->qmi.mem_seg_count;
1902 req->mem_seg[i].addr = ab->qmi.target_mem[i].paddr;
1903 req->mem_seg[i].size = ab->qmi.target_mem[i].size;
1904 req->mem_seg[i].type = ab->qmi.target_mem[i].type;
1905 ath11k_dbg(ab, ATH11K_DBG_QMI,
1907 &ab->qmi.target_mem[i].paddr,
1908 ab->qmi.target_mem[i].size,
1909 ab->qmi.target_mem[i].type);
1913 ret = qmi_txn_init(&ab->qmi.handle, &txn,
1918 ath11k_dbg(ab, ATH11K_DBG_QMI, "respond memory request delayed %i\n",
1921 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
1927 ath11k_warn(ab, "failed to respond qmi memory request: %d\n",
1934 ath11k_warn(ab, "failed to wait qmi memory request: %d\n", ret);
1945 ath11k_warn(ab, "qmi respond memory request failed: %d %d\n",
1955 static void ath11k_qmi_free_target_mem_chunk(struct ath11k_base *ab)
1959 for (i = 0; i < ab->qmi.mem_seg_count; i++) {
1960 if (!ab->qmi.target_mem[i].anyaddr)
1963 if (ab->hw_params.fixed_mem_region ||
1964 test_bit(ATH11K_FLAG_FIXED_MEM_RGN, &ab->dev_flags)) {
1965 iounmap(ab->qmi.target_mem[i].iaddr);
1966 ab->qmi.target_mem[i].iaddr = NULL;
1970 dma_free_coherent(ab->dev,
1971 ab->qmi.target_mem[i].prev_size,
1972 ab->qmi.target_mem[i].vaddr,
1973 ab->qmi.target_mem[i].paddr);
1974 ab->qmi.target_mem[i].vaddr = NULL;
1978 static int ath11k_qmi_alloc_target_mem_chunk(struct ath11k_base *ab)
1983 ab->qmi.target_mem_delayed = false;
1985 for (i = 0; i < ab->qmi.mem_seg_count; i++) {
1986 chunk = &ab->qmi.target_mem[i];
1996 if (ab->qmi.mem_seg_count <= ATH11K_QMI_FW_MEM_REQ_SEGMENT_CNT) {
1997 ath11k_dbg(ab, ATH11K_DBG_QMI,
2001 ab->qmi.target_mem_delayed = true;
2006 dma_free_coherent(ab->dev, chunk->prev_size,
2011 chunk->vaddr = dma_alloc_coherent(ab->dev,
2016 if (ab->qmi.mem_seg_count <= ATH11K_QMI_FW_MEM_REQ_SEGMENT_CNT) {
2017 ath11k_dbg(ab, ATH11K_DBG_QMI,
2021 ath11k_qmi_free_target_mem_chunk(ab);
2022 ab->qmi.target_mem_delayed = true;
2026 ath11k_err(ab, "failed to allocate dma memory for qmi (%d B type %u)\n",
2038 static int ath11k_qmi_assign_target_mem_chunk(struct ath11k_base *ab)
2040 struct device *dev = ab->dev;
2046 for (i = 0, idx = 0; i < ab->qmi.mem_seg_count; i++) {
2047 switch (ab->qmi.target_mem[i].type) {
2051 ath11k_dbg(ab, ATH11K_DBG_QMI,
2059 ath11k_dbg(ab, ATH11K_DBG_QMI,
2064 if (res.end - res.start + 1 < ab->qmi.target_mem[i].size) {
2065 ath11k_dbg(ab, ATH11K_DBG_QMI,
2070 ab->qmi.target_mem[idx].paddr = res.start;
2071 ab->qmi.target_mem[idx].iaddr =
2072 ioremap(ab->qmi.target_mem[idx].paddr,
2073 ab->qmi.target_mem[i].size);
2074 if (!ab->qmi.target_mem[idx].iaddr)
2077 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
2078 host_ddr_sz = ab->qmi.target_mem[i].size;
2079 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
2083 ab->qmi.target_mem[idx].paddr = ab->hw_params.bdf_addr;
2084 ab->qmi.target_mem[idx].iaddr = NULL;
2085 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
2086 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
2090 if (ab->qmi.target_mem[i].size > ATH11K_QMI_CALDB_SIZE) {
2091 ath11k_warn(ab, "qmi mem size is low to load caldata\n");
2095 if (ath11k_core_coldboot_cal_support(ab)) {
2097 ab->qmi.target_mem[idx].paddr =
2099 ab->qmi.target_mem[idx].iaddr =
2100 ioremap(ab->qmi.target_mem[idx].paddr,
2101 ab->qmi.target_mem[i].size);
2102 if (!ab->qmi.target_mem[idx].iaddr)
2105 ab->qmi.target_mem[idx].paddr =
2107 ab->qmi.target_mem[idx].iaddr = NULL;
2110 ab->qmi.target_mem[idx].paddr = 0;
2111 ab->qmi.target_mem[idx].iaddr = NULL;
2113 ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
2114 ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
2118 ath11k_warn(ab, "qmi ignore invalid mem req type %d\n",
2119 ab->qmi.target_mem[i].type);
2123 ab->qmi.mem_seg_count = idx;
2128 static int ath11k_qmi_request_device_info(struct ath11k_base *ab)
2137 if (!ab->hw_params.hybrid_bus_type)
2140 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2145 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2151 ath11k_warn(ab, "failed to send qmi target device info request: %d\n",
2158 ath11k_warn(ab, "failed to wait qmi target device info request: %d\n",
2164 ath11k_warn(ab, "qmi device info request failed: %d %d\n",
2171 ath11k_warn(ab, "qmi device info response invalid: %d %d\n",
2179 ath11k_warn(ab, "qmi device info invalid address and size: %llu %u\n",
2185 bar_addr_va = devm_ioremap(ab->dev, resp.bar_addr, resp.bar_size);
2188 ath11k_warn(ab, "qmi device info ioremap failed\n");
2189 ab->mem_len = 0;
2194 ab->mem = bar_addr_va;
2195 ab->mem_len = resp.bar_size;
2197 if (!ab->hw_params.ce_remap)
2198 ab->mem_ce = ab->mem;
2205 static int ath11k_qmi_request_target_cap(struct ath11k_base *ab)
2218 ret = qmi_txn_init(&ab->qmi.handle, &txn, qmi_wlanfw_cap_resp_msg_v01_ei,
2223 ath11k_dbg(ab, ATH11K_DBG_QMI, "target cap request\n");
2225 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2231 ath11k_warn(ab, "failed to send qmi cap request: %d\n",
2238 ath11k_warn(ab, "failed to wait qmi cap request: %d\n", ret);
2243 ath11k_warn(ab, "qmi cap request failed: %d %d\n",
2250 ab->qmi.target.chip_id = resp.chip_info.chip_id;
2251 ab->qmi.target.chip_family = resp.chip_info.chip_family;
2255 ab->qmi.target.board_id = resp.board_info.board_id;
2257 ab->qmi.target.board_id = 0xFF;
2260 ab->qmi.target.soc_id = resp.soc_info.soc_id;
2263 ab->qmi.target.fw_version = resp.fw_version_info.fw_version;
2264 strscpy(ab->qmi.target.fw_build_timestamp,
2266 sizeof(ab->qmi.target.fw_build_timestamp));
2270 strscpy(ab->qmi.target.fw_build_id, resp.fw_build_id,
2271 sizeof(ab->qmi.target.fw_build_id));
2274 ab->qmi.target.eeprom_caldata =
2276 ath11k_dbg(ab, ATH11K_DBG_QMI, "cal data supported from eeprom\n");
2279 fw_build_id = ab->qmi.target.fw_build_id;
2284 ath11k_info(ab, "chip_id 0x%x chip_family 0x%x board_id 0x%x soc_id 0x%x\n",
2285 ab->qmi.target.chip_id, ab->qmi.target.chip_family,
2286 ab->qmi.target.board_id, ab->qmi.target.soc_id);
2288 ath11k_info(ab, "fw_version 0x%x fw_build_timestamp %s fw_build_id %s",
2289 ab->qmi.target.fw_version,
2290 ab->qmi.target.fw_build_timestamp,
2293 r = ath11k_core_check_smbios(ab);
2295 ath11k_dbg(ab, ATH11K_DBG_QMI, "SMBIOS bdf variant name not set.\n");
2297 r = ath11k_core_check_dt(ab);
2299 ath11k_dbg(ab, ATH11K_DBG_QMI, "DT bdf variant name not set.\n");
2305 static int ath11k_qmi_load_file_target_mem(struct ath11k_base *ab,
2322 if (ab->hw_params.fixed_bdf_addr) {
2323 bdf_addr = ioremap(ab->hw_params.bdf_addr, ab->hw_params.fw.board_size);
2325 ath11k_warn(ab, "qmi ioremap error for bdf_addr\n");
2334 req->file_id = ab->qmi.target.board_id;
2351 if (ab->hw_params.fixed_bdf_addr ||
2360 if (ab->hw_params.fixed_bdf_addr) {
2362 bdf_addr += ab->hw_params.fw.cal_offset;
2367 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2373 ath11k_dbg(ab, ATH11K_DBG_QMI, "bdf download req fixed addr type %d\n",
2376 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2387 ath11k_warn(ab, "failed to wait board file download request: %d\n",
2393 ath11k_warn(ab, "board file download request failed: %d %d\n",
2399 if (ab->hw_params.fixed_bdf_addr ||
2406 ath11k_dbg(ab, ATH11K_DBG_QMI, "bdf download request remaining %i\n",
2412 if (ab->hw_params.fixed_bdf_addr)
2421 static int ath11k_qmi_load_bdf_qmi(struct ath11k_base *ab,
2424 struct device *dev = ab->dev;
2435 ret = ath11k_core_fetch_regdb(ab, &bd);
2437 ret = ath11k_core_fetch_bdf(ab, &bd);
2439 ath11k_warn(ab, "qmi failed to fetch board file: %d\n", ret);
2452 ath11k_dbg(ab, ATH11K_DBG_QMI, "bdf_type %d\n", bdf_type);
2454 fw_size = min_t(u32, ab->hw_params.fw.board_size, bd.len);
2456 ret = ath11k_qmi_load_file_target_mem(ab, bd.data, fw_size, bdf_type);
2458 ath11k_warn(ab, "qmi failed to load bdf file\n");
2466 if (ab->qmi.target.eeprom_caldata) {
2475 ath11k_bus_str(ab->hif.bus), dev_name(dev));
2476 fw_entry = ath11k_core_firmware_request(ab, filename);
2480 fw_entry = ath11k_core_firmware_request(ab, ATH11K_DEFAULT_CAL_FILE);
2486 ath11k_info(ab,
2491 ath11k_warn(ab,
2497 fw_size = min_t(u32, ab->hw_params.fw.board_size, fw_entry->size);
2501 ret = ath11k_qmi_load_file_target_mem(ab, tmp, fw_size, file_type);
2503 ath11k_warn(ab, "qmi failed to load caldata\n");
2507 ath11k_dbg(ab, ATH11K_DBG_QMI, "caldata type: %u\n", file_type);
2510 if (!ab->qmi.target.eeprom_caldata)
2513 ath11k_core_free_bdf(ab, &bd);
2514 ath11k_dbg(ab, ATH11K_DBG_QMI, "BDF download sequence completed\n");
2519 static int ath11k_qmi_m3_load(struct ath11k_base *ab)
2521 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2532 if (ab->fw.m3_data && ab->fw.m3_len > 0) {
2534 m3_data = ab->fw.m3_data;
2535 m3_len = ab->fw.m3_len;
2540 fw = ath11k_core_firmware_request(ab, ATH11K_M3_FILE);
2543 ath11k_core_create_firmware_path(ab, ATH11K_M3_FILE,
2545 ath11k_err(ab, "failed to load %s: %d\n", path, ret);
2553 m3_mem->vaddr = dma_alloc_coherent(ab->dev,
2557 ath11k_err(ab, "failed to allocate memory for M3 with size %zu\n",
2574 static void ath11k_qmi_m3_free(struct ath11k_base *ab)
2576 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2578 if (!ab->hw_params.m3_fw_support || !m3_mem->vaddr)
2581 dma_free_coherent(ab->dev, m3_mem->size,
2589 int ath11k_qmi_wlanfw_m3_info_send(struct ath11k_base *ab)
2591 struct m3_mem_region *m3_mem = &ab->qmi.m3_mem;
2600 if (ab->hw_params.m3_fw_support) {
2601 ret = ath11k_qmi_m3_load(ab);
2603 ath11k_err(ab, "failed to load m3 firmware: %d", ret);
2614 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2619 ath11k_dbg(ab, ATH11K_DBG_QMI, "m3 info req\n");
2621 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2627 ath11k_warn(ab, "failed to send m3 information request: %d\n",
2634 ath11k_warn(ab, "failed to wait m3 information request: %d\n", ret);
2639 ath11k_warn(ab, "m3 info request failed: %d %d\n",
2648 static int ath11k_qmi_wlanfw_mode_send(struct ath11k_base *ab,
2663 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2668 ath11k_dbg(ab, ATH11K_DBG_QMI, "wlan mode req mode %d\n", mode);
2670 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2676 ath11k_warn(ab, "failed to send wlan mode request (mode %d): %d\n",
2684 ath11k_warn(ab, "WLFW service is dis-connected\n");
2687 ath11k_warn(ab, "failed to wait wlan mode request (mode %d): %d\n",
2693 ath11k_warn(ab, "wlan mode request failed (mode: %d): %d %d\n",
2703 static int ath11k_qmi_wlanfw_wlan_cfg_send(struct ath11k_base *ab)
2712 ce_cfg = (struct ce_pipe_config *)ab->qmi.ce_cfg.tgt_ce;
2713 svc_cfg = (struct service_to_pipe *)ab->qmi.ce_cfg.svc_to_ce_map;
2727 req->tgt_cfg_len = ab->qmi.ce_cfg.tgt_ce_len;
2738 req->svc_cfg_len = ab->qmi.ce_cfg.svc_to_ce_map_len;
2747 if (ab->hw_params.supports_shadow_regs) {
2750 ab->qmi.ce_cfg.shadow_reg_v2_len,
2752 memcpy(&req->shadow_reg_v2, ab->qmi.ce_cfg.shadow_reg_v2,
2758 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2763 ath11k_dbg(ab, ATH11K_DBG_QMI, "wlan cfg req\n");
2765 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2771 ath11k_warn(ab, "failed to send wlan config request: %d\n",
2778 ath11k_warn(ab, "failed to wait wlan config request: %d\n", ret);
2783 ath11k_warn(ab, "wlan config request failed: %d %d\n",
2794 static int ath11k_qmi_wlanfw_wlan_ini_send(struct ath11k_base *ab, bool enable)
2804 ret = qmi_txn_init(&ab->qmi.handle, &txn,
2809 ret = qmi_send_request(&ab->qmi.handle, NULL, &txn,
2814 ath11k_warn(ab, "qmi failed to send wlan ini request, err = %d\n",
2822 ath11k_warn(ab, "qmi failed wlan ini request, err = %d\n", ret);
2827 ath11k_warn(ab, "qmi wlan ini request failed, result: %d, err: %d\n",
2836 void ath11k_qmi_firmware_stop(struct ath11k_base *ab)
2840 ath11k_dbg(ab, ATH11K_DBG_QMI, "firmware stop\n");
2842 ret = ath11k_qmi_wlanfw_mode_send(ab, ATH11K_FIRMWARE_MODE_OFF);
2844 ath11k_warn(ab, "qmi failed to send wlan mode off: %d\n", ret);
2849 int ath11k_qmi_firmware_start(struct ath11k_base *ab,
2854 ath11k_dbg(ab, ATH11K_DBG_QMI, "firmware start\n");
2856 if (ab->hw_params.fw_wmi_diag_event) {
2857 ret = ath11k_qmi_wlanfw_wlan_ini_send(ab, true);
2859 ath11k_warn(ab, "qmi failed to send wlan fw ini:%d\n", ret);
2864 ret = ath11k_qmi_wlanfw_wlan_cfg_send(ab);
2866 ath11k_warn(ab, "qmi failed to send wlan cfg: %d\n", ret);
2870 ret = ath11k_qmi_wlanfw_mode_send(ab, mode);
2872 ath11k_warn(ab, "qmi failed to send wlan fw mode: %d\n", ret);
2879 int ath11k_qmi_fwreset_from_cold_boot(struct ath11k_base *ab)
2883 if (!ath11k_core_coldboot_cal_support(ab) ||
2884 ab->hw_params.cbcal_restart_fw == 0)
2887 ath11k_dbg(ab, ATH11K_DBG_QMI, "wait for cold boot done\n");
2889 time_left = wait_event_timeout(ab->qmi.cold_boot_waitq,
2890 (ab->qmi.cal_done == 1),
2894 ath11k_warn(ab, "Coldboot Calibration timed out\n");
2899 ath11k_hif_power_down(ab, false);
2900 ath11k_hif_power_up(ab);
2901 ath11k_dbg(ab, ATH11K_DBG_QMI, "exit wait for cold boot done\n");
2906 static int ath11k_qmi_process_coldboot_calibration(struct ath11k_base *ab)
2911 ret = ath11k_qmi_wlanfw_mode_send(ab, ATH11K_FIRMWARE_MODE_COLD_BOOT);
2913 ath11k_warn(ab, "qmi failed to send wlan fw mode: %d\n", ret);
2917 ath11k_dbg(ab, ATH11K_DBG_QMI, "Coldboot calibration wait started\n");
2919 time_left = wait_event_timeout(ab->qmi.cold_boot_waitq,
2920 (ab->qmi.cal_done == 1),
2923 ath11k_warn(ab, "coldboot calibration timed out\n");
2927 ath11k_dbg(ab, ATH11K_DBG_QMI, "Coldboot calibration done\n");
2957 struct ath11k_base *ab = qmi->ab;
2960 ret = ath11k_qmi_respond_fw_mem_request(ab);
2962 ath11k_warn(ab, "qmi failed to respond fw mem req: %d\n", ret);
2971 struct ath11k_base *ab = qmi->ab;
2974 ret = ath11k_qmi_request_target_cap(ab);
2976 ath11k_warn(ab, "failed to request qmi target capabilities: %d\n",
2981 ret = ath11k_qmi_request_device_info(ab);
2983 ath11k_warn(ab, "failed to request qmi device info: %d\n", ret);
2987 if (ab->hw_params.supports_regdb)
2988 ath11k_qmi_load_bdf_qmi(ab, true);
2990 ret = ath11k_qmi_load_bdf_qmi(ab, false);
2992 ath11k_warn(ab, "failed to load board data file: %d\n", ret);
3001 struct ath11k_base *ab = qmi->ab;
3004 ret = ath11k_qmi_fw_ind_register_send(ab);
3006 ath11k_warn(ab, "failed to send qmi firmware indication: %d\n",
3011 ret = ath11k_qmi_host_cap_send(ab);
3013 ath11k_warn(ab, "failed to send qmi host cap: %d\n", ret);
3017 if (!ab->hw_params.fixed_fw_mem)
3022 ath11k_warn(ab, "qmi failed to download BDF:%d\n", ret);
3035 struct ath11k_base *ab = qmi->ab;
3039 ath11k_dbg(ab, ATH11K_DBG_QMI, "firmware request memory request\n");
3043 ath11k_warn(ab, "invalid memory segment length: %u\n",
3046 ab->qmi.mem_seg_count = msg->mem_seg_len;
3049 ab->qmi.target_mem[i].type = msg->mem_seg[i].type;
3050 ab->qmi.target_mem[i].size = msg->mem_seg[i].size;
3051 ath11k_dbg(ab, ATH11K_DBG_QMI, "mem seg type %d size %d\n",
3055 if (ab->hw_params.fixed_mem_region ||
3056 test_bit(ATH11K_FLAG_FIXED_MEM_RGN, &ab->dev_flags)) {
3057 ret = ath11k_qmi_assign_target_mem_chunk(ab);
3059 ath11k_warn(ab, "failed to assign qmi target memory: %d\n",
3064 ret = ath11k_qmi_alloc_target_mem_chunk(ab);
3066 ath11k_warn(ab, "failed to allocate qmi target memory: %d\n",
3081 struct ath11k_base *ab = qmi->ab;
3083 ath11k_dbg(ab, ATH11K_DBG_QMI, "firmware memory ready indication\n");
3093 struct ath11k_base *ab = qmi->ab;
3095 ath11k_dbg(ab, ATH11K_DBG_QMI, "firmware ready\n");
3097 if (!ab->qmi.cal_done) {
3098 ab->qmi.cal_done = 1;
3099 wake_up(&ab->qmi.cold_boot_waitq);
3112 struct ath11k_base *ab = qmi->ab;
3114 ab->qmi.cal_done = 1;
3115 wake_up(&ab->qmi.cold_boot_waitq);
3116 ath11k_dbg(ab, ATH11K_DBG_QMI, "cold boot calibration done\n");
3126 struct ath11k_base *ab = qmi->ab;
3129 ath11k_dbg(ab, ATH11K_DBG_QMI, "firmware init done\n");
3179 struct ath11k_base *ab = qmi->ab;
3190 ath11k_warn(ab, "failed to connect to qmi remote service: %d\n", ret);
3194 ath11k_dbg(ab, ATH11K_DBG_QMI, "wifi fw qmi service connected\n");
3204 struct ath11k_base *ab = qmi->ab;
3206 ath11k_dbg(ab, ATH11K_DBG_QMI, "wifi fw del server\n");
3220 struct ath11k_base *ab = qmi->ab;
3230 if (test_bit(ATH11K_FLAG_UNREGISTERING, &ab->dev_flags)) {
3239 set_bit(ATH11K_FLAG_QMI_FAIL, &ab->dev_flags);
3242 set_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags);
3243 set_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags);
3245 if (!ab->is_reset)
3246 ath11k_core_pre_reconfigure_recovery(ab);
3251 set_bit(ATH11K_FLAG_QMI_FAIL, &ab->dev_flags);
3256 set_bit(ATH11K_FLAG_QMI_FAIL, &ab->dev_flags);
3260 ret = ath11k_qmi_wlanfw_m3_info_send(ab);
3262 ath11k_warn(ab,
3264 set_bit(ATH11K_FLAG_QMI_FAIL, &ab->dev_flags);
3269 clear_bit(ATH11K_FLAG_QMI_FAIL, &ab->dev_flags);
3270 if (test_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags)) {
3271 if (ab->is_reset)
3272 ath11k_hal_dump_srng_stats(ab);
3273 queue_work(ab->workqueue, &ab->restart_work);
3277 if (ab->qmi.cal_done == 0 &&
3278 ath11k_core_coldboot_cal_support(ab)) {
3279 ath11k_qmi_process_coldboot_calibration(ab);
3282 &ab->dev_flags);
3283 clear_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags);
3284 ret = ath11k_core_qmi_firmware_ready(ab);
3286 set_bit(ATH11K_FLAG_QMI_FAIL, &ab->dev_flags);
3289 set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags);
3299 if (ab->hw_params.cbcal_restart_fw)
3303 &ab->dev_flags);
3304 clear_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags);
3305 ath11k_core_qmi_firmware_ready(ab);
3306 set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags);
3312 ath11k_warn(ab, "invalid qmi event type: %d", event->type);
3321 int ath11k_qmi_init_service(struct ath11k_base *ab)
3325 memset(&ab->qmi.target, 0, sizeof(struct target_info));
3326 memset(&ab->qmi.target_mem, 0, sizeof(struct target_mem_chunk));
3327 ab->qmi.ab = ab;
3329 ab->qmi.target_mem_mode = ab->hw_params.fw_mem_mode;
3330 ret = qmi_handle_init(&ab->qmi.handle, ATH11K_QMI_RESP_LEN_MAX,
3333 ath11k_warn(ab, "failed to initialize qmi handle: %d\n", ret);
3337 ab->qmi.event_wq = alloc_ordered_workqueue("ath11k_qmi_driver_event", 0);
3338 if (!ab->qmi.event_wq) {
3339 ath11k_err(ab, "failed to allocate workqueue\n");
3343 INIT_LIST_HEAD(&ab->qmi.event_list);
3344 spin_lock_init(&ab->qmi.event_lock);
3345 INIT_WORK(&ab->qmi.event_work, ath11k_qmi_driver_event_work);
3347 ret = qmi_add_lookup(&ab->qmi.handle, ATH11K_QMI_WLFW_SERVICE_ID_V01,
3349 ab->qmi.service_ins_id);
3351 ath11k_warn(ab, "failed to add qmi lookup: %d\n", ret);
3352 destroy_workqueue(ab->qmi.event_wq);
3359 void ath11k_qmi_deinit_service(struct ath11k_base *ab)
3361 qmi_handle_release(&ab->qmi.handle);
3362 cancel_work_sync(&ab->qmi.event_work);
3363 destroy_workqueue(ab->qmi.event_wq);
3364 ath11k_qmi_m3_free(ab);
3365 ath11k_qmi_free_target_mem_chunk(ab);
3369 void ath11k_qmi_free_resource(struct ath11k_base *ab)
3371 ath11k_qmi_free_target_mem_chunk(ab);
3372 ath11k_qmi_m3_free(ab);