Lines Matching refs:ar
28 void ath10k_sdio_fw_crashed_dump(struct ath10k *ar);
132 static int ath10k_sdio_config(struct ath10k *ar) in ath10k_sdio_config() argument
134 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_config()
139 ath10k_dbg(ar, ATH10K_DBG_BOOT, "sdio configuration\n"); in ath10k_sdio_config()
170 ath10k_warn(ar, "failed to enable driver strength: %d\n", ret); in ath10k_sdio_config()
185 ath10k_warn(ar, "failed to enable 4-bit async irq mode: %d\n", in ath10k_sdio_config()
207 ath10k_warn(ar, "failed to set sdio block size to %d: %d\n", in ath10k_sdio_config()
217 static int ath10k_sdio_write32(struct ath10k *ar, u32 addr, u32 val) in ath10k_sdio_write32() argument
219 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_write32()
227 ath10k_warn(ar, "failed to write 0x%x to address 0x%x: %d\n", in ath10k_sdio_write32()
232 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio write32 addr 0x%x val 0x%x\n", in ath10k_sdio_write32()
241 static int ath10k_sdio_writesb32(struct ath10k *ar, u32 addr, u32 val) in ath10k_sdio_writesb32() argument
243 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_writesb32()
258 ath10k_warn(ar, "failed to write value 0x%x to fixed sb address 0x%x: %d\n", in ath10k_sdio_writesb32()
263 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio writesb32 addr 0x%x val 0x%x\n", in ath10k_sdio_writesb32()
274 static int ath10k_sdio_read32(struct ath10k *ar, u32 addr, u32 *val) in ath10k_sdio_read32() argument
276 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_read32()
283 ath10k_warn(ar, "failed to read from address 0x%x: %d\n", in ath10k_sdio_read32()
288 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio read32 addr 0x%x val 0x%x\n", in ath10k_sdio_read32()
297 static int ath10k_sdio_read(struct ath10k *ar, u32 addr, void *buf, size_t len) in ath10k_sdio_read() argument
299 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_read()
307 ath10k_warn(ar, "failed to read from address 0x%x: %d\n", in ath10k_sdio_read()
312 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio read addr 0x%x buf 0x%p len %zu\n", in ath10k_sdio_read()
314 ath10k_dbg_dump(ar, ATH10K_DBG_SDIO_DUMP, NULL, "sdio read ", buf, len); in ath10k_sdio_read()
322 static int ath10k_sdio_write(struct ath10k *ar, u32 addr, const void *buf, size_t len) in ath10k_sdio_write() argument
324 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_write()
335 ath10k_warn(ar, "failed to write to address 0x%x: %d\n", in ath10k_sdio_write()
340 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio write addr 0x%x buf 0x%p len %zu\n", in ath10k_sdio_write()
342 ath10k_dbg_dump(ar, ATH10K_DBG_SDIO_DUMP, NULL, "sdio write ", buf, len); in ath10k_sdio_write()
350 static int ath10k_sdio_readsb(struct ath10k *ar, u32 addr, void *buf, size_t len) in ath10k_sdio_readsb() argument
352 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_readsb()
362 ath10k_warn(ar, "failed to read from fixed (sb) address 0x%x: %d\n", in ath10k_sdio_readsb()
367 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio readsb addr 0x%x buf 0x%p len %zu\n", in ath10k_sdio_readsb()
369 ath10k_dbg_dump(ar, ATH10K_DBG_SDIO_DUMP, NULL, "sdio readsb ", buf, len); in ath10k_sdio_readsb()
379 static int ath10k_sdio_mbox_rx_process_packet(struct ath10k *ar, in ath10k_sdio_mbox_rx_process_packet() argument
384 struct ath10k_htc *htc = &ar->htc; in ath10k_sdio_mbox_rx_process_packet()
417 static int ath10k_sdio_mbox_rx_process_packets(struct ath10k *ar, in ath10k_sdio_mbox_rx_process_packets() argument
421 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rx_process_packets()
422 struct ath10k_htc *htc = &ar->htc; in ath10k_sdio_mbox_rx_process_packets()
439 ath10k_warn(ar, "invalid endpoint in look-ahead: %d\n", in ath10k_sdio_mbox_rx_process_packets()
448 ath10k_warn(ar, "ep %d is not connected\n", id); in ath10k_sdio_mbox_rx_process_packets()
464 ret = ath10k_sdio_mbox_rx_process_packet(ar, in ath10k_sdio_mbox_rx_process_packets()
476 queue_work(ar->workqueue_aux, in ath10k_sdio_mbox_rx_process_packets()
499 static int ath10k_sdio_mbox_alloc_bundle(struct ath10k *ar, in ath10k_sdio_mbox_alloc_bundle() argument
506 u8 max_msgs = ar->htc.max_msgs_per_htc_bundle; in ath10k_sdio_mbox_alloc_bundle()
511 ath10k_warn(ar, in ath10k_sdio_mbox_alloc_bundle()
537 static int ath10k_sdio_mbox_rx_alloc(struct ath10k *ar, in ath10k_sdio_mbox_rx_alloc() argument
540 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rx_alloc()
548 ath10k_warn(ar, "the total number of pkts to be fetched (%u) exceeds maximum %u\n", in ath10k_sdio_mbox_rx_alloc()
559 ath10k_warn(ar, "payload length %d exceeds max htc length: %zu\n", in ath10k_sdio_mbox_rx_alloc()
564 ath10k_core_start_recovery(ar); in ath10k_sdio_mbox_rx_alloc()
565 ath10k_warn(ar, "exceeds length, start recovery\n"); in ath10k_sdio_mbox_rx_alloc()
574 ath10k_warn(ar, "rx buffer requested with invalid htc_hdr length (%d, 0x%x): %d\n", in ath10k_sdio_mbox_rx_alloc()
582 ar->htc.max_msgs_per_htc_bundle, htc_hdr->flags)) { in ath10k_sdio_mbox_rx_alloc()
589 ret = ath10k_sdio_mbox_alloc_bundle(ar, in ath10k_sdio_mbox_rx_alloc()
597 ath10k_warn(ar, "failed to allocate a bundle: %d\n", in ath10k_sdio_mbox_rx_alloc()
621 ath10k_warn(ar, "alloc_rx_pkt error %d\n", ret); in ath10k_sdio_mbox_rx_alloc()
642 static int ath10k_sdio_mbox_rx_fetch(struct ath10k *ar) in ath10k_sdio_mbox_rx_fetch() argument
644 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rx_fetch()
650 ret = ath10k_sdio_readsb(ar, ar_sdio->mbox_info.htc_addr, in ath10k_sdio_mbox_rx_fetch()
673 static int ath10k_sdio_mbox_rx_fetch_bundle(struct ath10k *ar) in ath10k_sdio_mbox_rx_fetch_bundle() argument
675 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rx_fetch_bundle()
686 ath10k_warn(ar, "sdio vsg buffer size limit: %d\n", virt_pkt_len); in ath10k_sdio_mbox_rx_fetch_bundle()
691 ret = ath10k_sdio_readsb(ar, ar_sdio->mbox_info.htc_addr, in ath10k_sdio_mbox_rx_fetch_bundle()
694 ath10k_warn(ar, "failed to read bundle packets: %d", ret); in ath10k_sdio_mbox_rx_fetch_bundle()
732 static int ath10k_sdio_mbox_rxmsg_pending_handler(struct ath10k *ar, in ath10k_sdio_mbox_rxmsg_pending_handler() argument
735 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_rxmsg_pending_handler()
753 ret = ath10k_sdio_mbox_rx_alloc(ar, lookaheads, in ath10k_sdio_mbox_rxmsg_pending_handler()
765 ret = ath10k_sdio_mbox_rx_fetch_bundle(ar); in ath10k_sdio_mbox_rxmsg_pending_handler()
767 ret = ath10k_sdio_mbox_rx_fetch(ar); in ath10k_sdio_mbox_rxmsg_pending_handler()
774 ret = ath10k_sdio_mbox_rx_process_packets(ar, in ath10k_sdio_mbox_rxmsg_pending_handler()
791 ath10k_warn(ar, "failed to get pending recv messages: %d\n", in ath10k_sdio_mbox_rxmsg_pending_handler()
797 static int ath10k_sdio_mbox_proc_dbg_intr(struct ath10k *ar) in ath10k_sdio_mbox_proc_dbg_intr() argument
803 ath10k_warn(ar, "firmware crashed\n"); in ath10k_sdio_mbox_proc_dbg_intr()
808 ret = ath10k_sdio_read32(ar, MBOX_COUNT_DEC_ADDRESS, &val); in ath10k_sdio_mbox_proc_dbg_intr()
810 ath10k_warn(ar, "failed to clear debug interrupt: %d\n", ret); in ath10k_sdio_mbox_proc_dbg_intr()
815 static int ath10k_sdio_mbox_proc_counter_intr(struct ath10k *ar) in ath10k_sdio_mbox_proc_counter_intr() argument
817 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_proc_counter_intr()
831 ret = ath10k_sdio_mbox_proc_dbg_intr(ar); in ath10k_sdio_mbox_proc_counter_intr()
840 static int ath10k_sdio_mbox_proc_err_intr(struct ath10k *ar) in ath10k_sdio_mbox_proc_err_intr() argument
842 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_proc_err_intr()
847 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio error interrupt\n"); in ath10k_sdio_mbox_proc_err_intr()
851 ath10k_warn(ar, "invalid error interrupt status: 0x%x\n", in ath10k_sdio_mbox_proc_err_intr()
856 ath10k_dbg(ar, ATH10K_DBG_SDIO, in ath10k_sdio_mbox_proc_err_intr()
861 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio interrupt error wakeup\n"); in ath10k_sdio_mbox_proc_err_intr()
865 ath10k_warn(ar, "rx underflow interrupt error\n"); in ath10k_sdio_mbox_proc_err_intr()
869 ath10k_warn(ar, "tx overflow interrupt error\n"); in ath10k_sdio_mbox_proc_err_intr()
875 ret = ath10k_sdio_writesb32(ar, MBOX_ERROR_INT_STATUS_ADDRESS, in ath10k_sdio_mbox_proc_err_intr()
878 ath10k_warn(ar, "unable to write to error int status address: %d\n", in ath10k_sdio_mbox_proc_err_intr()
886 static int ath10k_sdio_mbox_proc_cpu_intr(struct ath10k *ar) in ath10k_sdio_mbox_proc_cpu_intr() argument
888 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_proc_cpu_intr()
897 ath10k_warn(ar, "CPU interrupt status is zero\n"); in ath10k_sdio_mbox_proc_cpu_intr()
912 ret = ath10k_sdio_writesb32(ar, MBOX_CPU_INT_STATUS_ADDRESS, in ath10k_sdio_mbox_proc_cpu_intr()
915 ath10k_warn(ar, "unable to write to cpu interrupt status address: %d\n", in ath10k_sdio_mbox_proc_cpu_intr()
923 ath10k_sdio_fw_crashed_dump(ar); in ath10k_sdio_mbox_proc_cpu_intr()
928 static int ath10k_sdio_mbox_read_int_status(struct ath10k *ar, in ath10k_sdio_mbox_read_int_status() argument
932 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_mbox_read_int_status()
960 ret = ath10k_sdio_read(ar, MBOX_HOST_INT_STATUS_ADDRESS, in ath10k_sdio_mbox_read_int_status()
963 ath10k_core_start_recovery(ar); in ath10k_sdio_mbox_read_int_status()
964 ath10k_warn(ar, "read int status fail, start recovery\n"); in ath10k_sdio_mbox_read_int_status()
987 ath10k_warn(ar, "sdio mbox lookahead is zero\n"); in ath10k_sdio_mbox_read_int_status()
995 static int ath10k_sdio_mbox_proc_pending_irqs(struct ath10k *ar, in ath10k_sdio_mbox_proc_pending_irqs() argument
1008 ret = ath10k_sdio_mbox_read_int_status(ar, in ath10k_sdio_mbox_proc_pending_irqs()
1023 ath10k_dbg(ar, ATH10K_DBG_SDIO, in ath10k_sdio_mbox_proc_pending_irqs()
1027 ret = ath10k_sdio_mbox_rxmsg_pending_handler(ar, in ath10k_sdio_mbox_proc_pending_irqs()
1035 ath10k_dbg(ar, ATH10K_DBG_SDIO, in ath10k_sdio_mbox_proc_pending_irqs()
1040 ret = ath10k_sdio_mbox_proc_cpu_intr(ar); in ath10k_sdio_mbox_proc_pending_irqs()
1047 ret = ath10k_sdio_mbox_proc_err_intr(ar); in ath10k_sdio_mbox_proc_pending_irqs()
1054 ret = ath10k_sdio_mbox_proc_counter_intr(ar); in ath10k_sdio_mbox_proc_pending_irqs()
1071 ath10k_dbg(ar, ATH10K_DBG_SDIO, in ath10k_sdio_mbox_proc_pending_irqs()
1078 static void ath10k_sdio_set_mbox_info(struct ath10k *ar) in ath10k_sdio_set_mbox_info() argument
1080 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_set_mbox_info()
1124 static int ath10k_sdio_bmi_credits(struct ath10k *ar) in ath10k_sdio_bmi_credits() argument
1141 ret = ath10k_sdio_read32(ar, addr, &cmd_credits); in ath10k_sdio_bmi_credits()
1143 ath10k_warn(ar, in ath10k_sdio_bmi_credits()
1156 ath10k_warn(ar, "bmi communication timeout\n"); in ath10k_sdio_bmi_credits()
1163 static int ath10k_sdio_bmi_get_rx_lookahead(struct ath10k *ar) in ath10k_sdio_bmi_get_rx_lookahead() argument
1173 ret = ath10k_sdio_read32(ar, in ath10k_sdio_bmi_get_rx_lookahead()
1177 ath10k_warn(ar, "unable to read RX_LOOKAHEAD_VALID: %d\n", ret); in ath10k_sdio_bmi_get_rx_lookahead()
1186 ath10k_warn(ar, "bmi_recv_buf FIFO empty\n"); in ath10k_sdio_bmi_get_rx_lookahead()
1193 static int ath10k_sdio_bmi_exchange_msg(struct ath10k *ar, in ath10k_sdio_bmi_exchange_msg() argument
1197 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_bmi_exchange_msg()
1202 ret = ath10k_sdio_bmi_credits(ar); in ath10k_sdio_bmi_exchange_msg()
1209 ret = ath10k_sdio_write(ar, addr, ar_sdio->bmi_buf, req_len); in ath10k_sdio_bmi_exchange_msg()
1211 ath10k_warn(ar, in ath10k_sdio_bmi_exchange_msg()
1267 ret = ath10k_sdio_bmi_get_rx_lookahead(ar); in ath10k_sdio_bmi_exchange_msg()
1273 ret = ath10k_sdio_read(ar, addr, ar_sdio->bmi_buf, *resp_len); in ath10k_sdio_bmi_exchange_msg()
1275 ath10k_warn(ar, in ath10k_sdio_bmi_exchange_msg()
1289 *ath10k_sdio_alloc_busreq(struct ath10k *ar) in ath10k_sdio_alloc_busreq() argument
1291 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_alloc_busreq()
1310 static void ath10k_sdio_free_bus_req(struct ath10k *ar, in ath10k_sdio_free_bus_req() argument
1313 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_free_bus_req()
1322 static void __ath10k_sdio_write_async(struct ath10k *ar, in __ath10k_sdio_write_async() argument
1330 ret = ath10k_sdio_write(ar, req->address, skb->data, skb->len); in __ath10k_sdio_write_async()
1332 ath10k_warn(ar, "failed to write skb to 0x%x asynchronously: %d", in __ath10k_sdio_write_async()
1336 ep = &ar->htc.endpoint[req->eid]; in __ath10k_sdio_write_async()
1342 ath10k_sdio_free_bus_req(ar, req); in __ath10k_sdio_write_async()
1352 struct ath10k *ar = ar_sdio->ar; in ath10k_rx_indication_async_work() local
1362 ep = &ar->htc.endpoint[cb->eid]; in ath10k_rx_indication_async_work()
1363 ep->ep_ops.ep_rx_complete(ar, skb); in ath10k_rx_indication_async_work()
1366 if (test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags)) { in ath10k_rx_indication_async_work()
1368 napi_schedule(&ar->napi); in ath10k_rx_indication_async_work()
1375 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_read_rtc_state() local
1381 ath10k_warn(ar, "failed to read rtc state: %d\n", ret); in ath10k_sdio_read_rtc_state()
1390 static int ath10k_sdio_set_mbox_sleep(struct ath10k *ar, bool enable_sleep) in ath10k_sdio_set_mbox_sleep() argument
1392 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_set_mbox_sleep()
1399 ret = ath10k_sdio_read32(ar, ATH10K_FIFO_TIMEOUT_AND_CHIP_CONTROL, &val); in ath10k_sdio_set_mbox_sleep()
1401 ath10k_warn(ar, "failed to read fifo/chip control register: %d\n", in ath10k_sdio_set_mbox_sleep()
1414 ret = ath10k_sdio_write32(ar, ATH10K_FIFO_TIMEOUT_AND_CHIP_CONTROL, val); in ath10k_sdio_set_mbox_sleep()
1416 ath10k_warn(ar, "failed to write to FIFO_TIMEOUT_AND_CHIP_CONTROL: %d", in ath10k_sdio_set_mbox_sleep()
1426 ath10k_warn(ar, "failed to disable mbox sleep: %d", ret); in ath10k_sdio_set_mbox_sleep()
1430 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio read rtc state: %d\n", in ath10k_sdio_set_mbox_sleep()
1459 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_write_async_work() local
1471 ath10k_sdio_set_mbox_sleep(ar, false); in ath10k_sdio_write_async_work()
1476 __ath10k_sdio_write_async(ar, req); in ath10k_sdio_write_async_work()
1483 ath10k_sdio_set_mbox_sleep(ar, true); in ath10k_sdio_write_async_work()
1486 static int ath10k_sdio_prep_async_req(struct ath10k *ar, u32 addr, in ath10k_sdio_prep_async_req() argument
1491 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_prep_async_req()
1497 bus_req = ath10k_sdio_alloc_busreq(ar); in ath10k_sdio_prep_async_req()
1499 ath10k_warn(ar, in ath10k_sdio_prep_async_req()
1522 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_irq_handler() local
1534 ret = ath10k_sdio_mbox_proc_pending_irqs(ar, &done); in ath10k_sdio_irq_handler()
1539 ath10k_mac_tx_push_pending(ar); in ath10k_sdio_irq_handler()
1544 ath10k_warn(ar, "failed to process pending SDIO interrupts: %d\n", in ath10k_sdio_irq_handler()
1550 static int ath10k_sdio_disable_intrs(struct ath10k *ar) in ath10k_sdio_disable_intrs() argument
1552 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_disable_intrs()
1560 ret = ath10k_sdio_write(ar, MBOX_INT_STATUS_ENABLE_ADDRESS, in ath10k_sdio_disable_intrs()
1563 ath10k_warn(ar, "unable to disable sdio interrupts: %d\n", ret); in ath10k_sdio_disable_intrs()
1570 static int ath10k_sdio_hif_power_up(struct ath10k *ar, in ath10k_sdio_hif_power_up() argument
1573 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_power_up()
1580 ath10k_dbg(ar, ATH10K_DBG_BOOT, "sdio power on\n"); in ath10k_sdio_hif_power_up()
1582 ret = ath10k_sdio_config(ar); in ath10k_sdio_hif_power_up()
1584 ath10k_err(ar, "failed to config sdio: %d\n", ret); in ath10k_sdio_hif_power_up()
1592 ath10k_warn(ar, "unable to enable sdio function: %d)\n", ret); in ath10k_sdio_hif_power_up()
1606 ret = ath10k_sdio_disable_intrs(ar); in ath10k_sdio_hif_power_up()
1613 static void ath10k_sdio_hif_power_down(struct ath10k *ar) in ath10k_sdio_hif_power_down() argument
1615 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_power_down()
1621 ath10k_dbg(ar, ATH10K_DBG_BOOT, "sdio power off\n"); in ath10k_sdio_hif_power_down()
1624 ath10k_sdio_set_mbox_sleep(ar, true); in ath10k_sdio_hif_power_down()
1631 ath10k_warn(ar, "unable to disable sdio function: %d\n", ret); in ath10k_sdio_hif_power_down()
1638 ath10k_warn(ar, "unable to reset sdio: %d\n", ret); in ath10k_sdio_hif_power_down()
1645 static int ath10k_sdio_hif_tx_sg(struct ath10k *ar, u8 pipe_id, in ath10k_sdio_hif_tx_sg() argument
1648 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_tx_sg()
1667 ret = ath10k_sdio_prep_async_req(ar, address, skb, in ath10k_sdio_hif_tx_sg()
1678 static int ath10k_sdio_enable_intrs(struct ath10k *ar) in ath10k_sdio_enable_intrs() argument
1680 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_enable_intrs()
1715 ret = ath10k_sdio_write(ar, MBOX_INT_STATUS_ENABLE_ADDRESS, in ath10k_sdio_enable_intrs()
1718 ath10k_warn(ar, in ath10k_sdio_enable_intrs()
1728 static int ath10k_sdio_hif_diag_read(struct ath10k *ar, u32 address, void *buf, in ath10k_sdio_hif_diag_read() argument
1739 ret = ath10k_sdio_write32(ar, MBOX_WINDOW_READ_ADDR_ADDRESS, address); in ath10k_sdio_hif_diag_read()
1741 ath10k_warn(ar, "failed to set mbox window read address: %d", ret); in ath10k_sdio_hif_diag_read()
1746 ret = ath10k_sdio_read(ar, MBOX_WINDOW_DATA_ADDRESS, mem, buf_len); in ath10k_sdio_hif_diag_read()
1748 ath10k_warn(ar, "failed to read from mbox window data address: %d\n", in ath10k_sdio_hif_diag_read()
1761 static int ath10k_sdio_diag_read32(struct ath10k *ar, u32 address, in ath10k_sdio_diag_read32() argument
1771 ret = ath10k_sdio_hif_diag_read(ar, address, val, sizeof(*val)); in ath10k_sdio_diag_read32()
1783 static int ath10k_sdio_hif_diag_write_mem(struct ath10k *ar, u32 address, in ath10k_sdio_hif_diag_write_mem() argument
1789 ret = ath10k_sdio_write(ar, MBOX_WINDOW_DATA_ADDRESS, data, nbytes); in ath10k_sdio_hif_diag_write_mem()
1791 ath10k_warn(ar, in ath10k_sdio_hif_diag_write_mem()
1798 ret = ath10k_sdio_write32(ar, MBOX_WINDOW_WRITE_ADDR_ADDRESS, address); in ath10k_sdio_hif_diag_write_mem()
1800 ath10k_warn(ar, "failed to set mbox window write address: %d", ret); in ath10k_sdio_hif_diag_write_mem()
1807 static int ath10k_sdio_hif_start_post(struct ath10k *ar) in ath10k_sdio_hif_start_post() argument
1809 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_start_post()
1815 ret = ath10k_sdio_diag_read32(ar, addr, &val); in ath10k_sdio_hif_start_post()
1817 ath10k_warn(ar, "unable to read hi_acs_flags : %d\n", ret); in ath10k_sdio_hif_start_post()
1822 ath10k_dbg(ar, ATH10K_DBG_SDIO, in ath10k_sdio_hif_start_post()
1826 ath10k_dbg(ar, ATH10K_DBG_SDIO, in ath10k_sdio_hif_start_post()
1831 ath10k_sdio_set_mbox_sleep(ar, true); in ath10k_sdio_hif_start_post()
1836 static int ath10k_sdio_get_htt_tx_complete(struct ath10k *ar) in ath10k_sdio_get_htt_tx_complete() argument
1843 ret = ath10k_sdio_diag_read32(ar, addr, &val); in ath10k_sdio_get_htt_tx_complete()
1845 ath10k_warn(ar, in ath10k_sdio_get_htt_tx_complete()
1852 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio reduce tx complete fw%sack\n", in ath10k_sdio_get_htt_tx_complete()
1860 static int ath10k_sdio_hif_start(struct ath10k *ar) in ath10k_sdio_hif_start() argument
1862 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_start()
1865 ath10k_core_napi_enable(ar); in ath10k_sdio_hif_start()
1872 ret = ath10k_sdio_disable_intrs(ar); in ath10k_sdio_hif_start()
1887 ath10k_warn(ar, "failed to claim sdio interrupt: %d\n", ret); in ath10k_sdio_hif_start()
1894 ret = ath10k_sdio_enable_intrs(ar); in ath10k_sdio_hif_start()
1896 ath10k_warn(ar, "failed to enable sdio interrupts: %d\n", ret); in ath10k_sdio_hif_start()
1899 ret = ath10k_sdio_set_mbox_sleep(ar, true); in ath10k_sdio_hif_start()
1906 ret = ath10k_sdio_set_mbox_sleep(ar, false); in ath10k_sdio_hif_start()
1915 static void ath10k_sdio_irq_disable(struct ath10k *ar) in ath10k_sdio_irq_disable() argument
1917 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_irq_disable()
1937 ret = ath10k_sdio_prep_async_req(ar, MBOX_INT_STATUS_ENABLE_ADDRESS, in ath10k_sdio_irq_disable()
1950 ath10k_warn(ar, "sdio irq disable request timed out\n"); in ath10k_sdio_irq_disable()
1956 ath10k_warn(ar, "failed to release sdio interrupt: %d\n", ret); in ath10k_sdio_irq_disable()
1964 static void ath10k_sdio_hif_stop(struct ath10k *ar) in ath10k_sdio_hif_stop() argument
1967 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_stop()
1970 ath10k_sdio_irq_disable(ar); in ath10k_sdio_hif_stop()
1988 ep = &ar->htc.endpoint[req->eid]; in ath10k_sdio_hif_stop()
1993 ath10k_sdio_free_bus_req(ar, req); in ath10k_sdio_hif_stop()
1998 ath10k_core_napi_sync_disable(ar); in ath10k_sdio_hif_stop()
2003 static int ath10k_sdio_hif_suspend(struct ath10k *ar) in ath10k_sdio_hif_suspend() argument
2008 static int ath10k_sdio_hif_resume(struct ath10k *ar) in ath10k_sdio_hif_resume() argument
2010 switch (ar->state) { in ath10k_sdio_hif_resume()
2012 ath10k_dbg(ar, ATH10K_DBG_SDIO, in ath10k_sdio_hif_resume()
2016 ath10k_sdio_config(ar); in ath10k_sdio_hif_resume()
2028 static int ath10k_sdio_hif_map_service_to_pipe(struct ath10k *ar, in ath10k_sdio_hif_map_service_to_pipe() argument
2032 struct ath10k_sdio *ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_hif_map_service_to_pipe()
2033 struct ath10k_htc *htc = &ar->htc; in ath10k_sdio_hif_map_service_to_pipe()
2086 ath10k_dbg(ar, ATH10K_DBG_SDIO, in ath10k_sdio_hif_map_service_to_pipe()
2093 ath10k_dbg(ar, ATH10K_DBG_SDIO, in ath10k_sdio_hif_map_service_to_pipe()
2098 ath10k_warn(ar, "unsupported HTC service id: %d\n", in ath10k_sdio_hif_map_service_to_pipe()
2106 static void ath10k_sdio_hif_get_default_pipe(struct ath10k *ar, in ath10k_sdio_hif_get_default_pipe() argument
2109 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio hif get default pipe\n"); in ath10k_sdio_hif_get_default_pipe()
2146 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_pm_suspend() local
2150 if (!device_may_wakeup(ar->dev)) in ath10k_sdio_pm_suspend()
2153 ath10k_sdio_set_mbox_sleep(ar, true); in ath10k_sdio_pm_suspend()
2160 ath10k_warn(ar, "failed to set sdio host pm flags (0x%x, 0x%x): %d\n", in ath10k_sdio_pm_suspend()
2186 struct ath10k *ar = container_of(ctx, struct ath10k, napi); in ath10k_sdio_napi_poll() local
2189 done = ath10k_htt_rx_hl_indication(ar, budget); in ath10k_sdio_napi_poll()
2190 ath10k_dbg(ar, ATH10K_DBG_SDIO, "napi poll: done: %d, budget:%d\n", done, budget); in ath10k_sdio_napi_poll()
2198 static int ath10k_sdio_read_host_interest_value(struct ath10k *ar, in ath10k_sdio_read_host_interest_value() argument
2207 ret = ath10k_sdio_diag_read32(ar, addr, val); in ath10k_sdio_read_host_interest_value()
2210 ath10k_warn(ar, "unable to read host interest offset %d value\n", in ath10k_sdio_read_host_interest_value()
2216 static int ath10k_sdio_read_mem(struct ath10k *ar, u32 address, void *buf, in ath10k_sdio_read_mem() argument
2223 ret = ath10k_sdio_diag_read32(ar, address + i, &val); in ath10k_sdio_read_mem()
2225 ath10k_warn(ar, "unable to read mem %d value\n", address + i); in ath10k_sdio_read_mem()
2234 static bool ath10k_sdio_is_fast_dump_supported(struct ath10k *ar) in ath10k_sdio_is_fast_dump_supported() argument
2238 ath10k_sdio_read_host_interest_value(ar, HI_ITEM(hi_option_flag2), ¶m); in ath10k_sdio_is_fast_dump_supported()
2240 ath10k_dbg(ar, ATH10K_DBG_SDIO, "sdio hi_option_flag2 %x\n", param); in ath10k_sdio_is_fast_dump_supported()
2245 static void ath10k_sdio_dump_registers(struct ath10k *ar, in ath10k_sdio_dump_registers() argument
2253 ret = ath10k_sdio_read_host_interest_value(ar, HI_ITEM(hi_failure_state), in ath10k_sdio_dump_registers()
2256 ath10k_warn(ar, "failed to read firmware dump area: %d\n", ret); in ath10k_sdio_dump_registers()
2261 ret = ath10k_bmi_read_memory(ar, reg_dump_area, reg_dump_values, in ath10k_sdio_dump_registers()
2264 ret = ath10k_sdio_read_mem(ar, reg_dump_area, reg_dump_values, in ath10k_sdio_dump_registers()
2268 ath10k_warn(ar, "failed to read firmware dump value: %d\n", ret); in ath10k_sdio_dump_registers()
2272 ath10k_err(ar, "firmware register dump:\n"); in ath10k_sdio_dump_registers()
2274 ath10k_err(ar, "[%02d]: 0x%08X 0x%08X 0x%08X 0x%08X\n", in ath10k_sdio_dump_registers()
2288 static int ath10k_sdio_dump_memory_section(struct ath10k *ar, in ath10k_sdio_dump_memory_section() argument
2302 ath10k_warn(ar, "incorrect memdump region 0x%x with section start address 0x%x.\n", in ath10k_sdio_dump_memory_section()
2323 ath10k_warn(ar, "incorrect ramdump format with start address 0x%x and stop address 0x%x\n", in ath10k_sdio_dump_memory_section()
2337 ath10k_warn(ar, "next ramdump section 0x%x is smaller than current end address 0x%x\n", in ath10k_sdio_dump_memory_section()
2347 ath10k_warn(ar, "ramdump buffer is too small: %zu\n", buf_len); in ath10k_sdio_dump_memory_section()
2354 ret = ath10k_sdio_read_mem(ar, cur_section->start, in ath10k_sdio_dump_memory_section()
2357 ath10k_warn(ar, "failed to read ramdump from section 0x%x: %d\n", in ath10k_sdio_dump_memory_section()
2378 static int ath10k_sdio_dump_memory_generic(struct ath10k *ar, in ath10k_sdio_dump_memory_generic() argument
2387 return ath10k_sdio_dump_memory_section(ar, in ath10k_sdio_dump_memory_generic()
2396 ret = ath10k_bmi_read_memory(ar, in ath10k_sdio_dump_memory_generic()
2401 ret = ath10k_sdio_read_mem(ar, in ath10k_sdio_dump_memory_generic()
2407 ath10k_warn(ar, "failed to copy ramdump region %s: %d\n", in ath10k_sdio_dump_memory_generic()
2415 static void ath10k_sdio_dump_memory(struct ath10k *ar, in ath10k_sdio_dump_memory() argument
2430 mem_layout = ath10k_coredump_get_mem_layout(ar); in ath10k_sdio_dump_memory()
2445 ath10k_warn(ar, "memory region %s size %d is larger that remaining ramdump buffer size %zu\n", in ath10k_sdio_dump_memory()
2457 ret = ath10k_sdio_dump_memory_generic(ar, current_region, buf, in ath10k_sdio_dump_memory()
2477 void ath10k_sdio_fw_crashed_dump(struct ath10k *ar) in ath10k_sdio_fw_crashed_dump() argument
2483 fast_dump = ath10k_sdio_is_fast_dump_supported(ar); in ath10k_sdio_fw_crashed_dump()
2486 ath10k_bmi_start(ar); in ath10k_sdio_fw_crashed_dump()
2488 ar->stats.fw_crash_counter++; in ath10k_sdio_fw_crashed_dump()
2490 ath10k_sdio_disable_intrs(ar); in ath10k_sdio_fw_crashed_dump()
2492 crash_data = ath10k_coredump_new(ar); in ath10k_sdio_fw_crashed_dump()
2499 ath10k_err(ar, "firmware crashed! (guid %s)\n", guid); in ath10k_sdio_fw_crashed_dump()
2500 ath10k_print_driver_info(ar); in ath10k_sdio_fw_crashed_dump()
2501 ath10k_sdio_dump_registers(ar, crash_data, fast_dump); in ath10k_sdio_fw_crashed_dump()
2502 ath10k_sdio_dump_memory(ar, crash_data, fast_dump); in ath10k_sdio_fw_crashed_dump()
2504 ath10k_sdio_enable_intrs(ar); in ath10k_sdio_fw_crashed_dump()
2506 ath10k_core_start_recovery(ar); in ath10k_sdio_fw_crashed_dump()
2513 struct ath10k *ar; in ath10k_sdio_probe() local
2527 ar = ath10k_core_create(sizeof(*ar_sdio), &func->dev, ATH10K_BUS_SDIO, in ath10k_sdio_probe()
2529 if (!ar) { in ath10k_sdio_probe()
2534 netif_napi_add(&ar->napi_dev, &ar->napi, ath10k_sdio_napi_poll); in ath10k_sdio_probe()
2536 ath10k_dbg(ar, ATH10K_DBG_BOOT, in ath10k_sdio_probe()
2541 ar_sdio = ath10k_sdio_priv(ar); in ath10k_sdio_probe()
2544 devm_kzalloc(ar->dev, sizeof(struct ath10k_sdio_irq_proc_regs), in ath10k_sdio_probe()
2551 ar_sdio->vsg_buffer = devm_kmalloc(ar->dev, ATH10K_SDIO_VSG_BUF_SIZE, GFP_KERNEL); in ath10k_sdio_probe()
2558 devm_kzalloc(ar->dev, sizeof(struct ath10k_sdio_irq_enable_regs), in ath10k_sdio_probe()
2565 ar_sdio->bmi_buf = devm_kzalloc(ar->dev, BMI_MAX_LARGE_CMDBUF_SIZE, GFP_KERNEL); in ath10k_sdio_probe()
2575 ar_sdio->ar = ar; in ath10k_sdio_probe()
2592 ath10k_sdio_free_bus_req(ar, &ar_sdio->bus_req[i]); in ath10k_sdio_probe()
2601 ath10k_err(ar, "unsupported device id %u (0x%x)\n", in ath10k_sdio_probe()
2606 ar->dev_id = QCA9377_1_0_DEVICE_ID; in ath10k_sdio_probe()
2607 ar->id.vendor = id->vendor; in ath10k_sdio_probe()
2608 ar->id.device = id->device; in ath10k_sdio_probe()
2610 ath10k_sdio_set_mbox_info(ar); in ath10k_sdio_probe()
2617 ar->hw->max_mtu = ETH_DATA_LEN; in ath10k_sdio_probe()
2619 ret = ath10k_core_register(ar, &bus_params); in ath10k_sdio_probe()
2621 ath10k_err(ar, "failed to register driver core: %d\n", ret); in ath10k_sdio_probe()
2632 ath10k_core_destroy(ar); in ath10k_sdio_probe()
2640 struct ath10k *ar = ar_sdio->ar; in ath10k_sdio_remove() local
2642 ath10k_dbg(ar, ATH10K_DBG_BOOT, in ath10k_sdio_remove()
2646 ath10k_core_unregister(ar); in ath10k_sdio_remove()
2648 netif_napi_del(&ar->napi); in ath10k_sdio_remove()
2650 ath10k_core_destroy(ar); in ath10k_sdio_remove()