1 /* 2 * Copyright (c) 2005-2011 Atheros Communications Inc. 3 * Copyright (c) 2011-2013 Qualcomm Atheros, Inc. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #include <linux/pci.h> 19 #include <linux/module.h> 20 #include <linux/interrupt.h> 21 #include <linux/spinlock.h> 22 23 #include "core.h" 24 #include "debug.h" 25 26 #include "targaddrs.h" 27 #include "bmi.h" 28 29 #include "hif.h" 30 #include "htc.h" 31 32 #include "ce.h" 33 #include "pci.h" 34 35 static unsigned int ath10k_target_ps; 36 module_param(ath10k_target_ps, uint, 0644); 37 MODULE_PARM_DESC(ath10k_target_ps, "Enable ath10k Target (SoC) PS option"); 38 39 #define QCA988X_1_0_DEVICE_ID (0xabcd) 40 #define QCA988X_2_0_DEVICE_ID (0x003c) 41 42 static DEFINE_PCI_DEVICE_TABLE(ath10k_pci_id_table) = { 43 { PCI_VDEVICE(ATHEROS, QCA988X_1_0_DEVICE_ID) }, /* PCI-E QCA988X V1 */ 44 { PCI_VDEVICE(ATHEROS, QCA988X_2_0_DEVICE_ID) }, /* PCI-E QCA988X V2 */ 45 {0} 46 }; 47 48 static int ath10k_pci_diag_read_access(struct ath10k *ar, u32 address, 49 u32 *data); 50 51 static void ath10k_pci_process_ce(struct ath10k *ar); 52 static int ath10k_pci_post_rx(struct ath10k *ar); 53 static int ath10k_pci_post_rx_pipe(struct hif_ce_pipe_info *pipe_info, 54 int num); 55 static void ath10k_pci_rx_pipe_cleanup(struct hif_ce_pipe_info *pipe_info); 56 static void ath10k_pci_stop_ce(struct ath10k *ar); 57 static void ath10k_pci_device_reset(struct ath10k *ar); 58 static int ath10k_pci_reset_target(struct ath10k *ar); 59 static int ath10k_pci_start_intr(struct ath10k *ar); 60 static void ath10k_pci_stop_intr(struct ath10k *ar); 61 62 static const struct ce_attr host_ce_config_wlan[] = { 63 /* host->target HTC control and raw streams */ 64 { /* CE0 */ CE_ATTR_FLAGS, 0, 16, 256, 0, NULL,}, 65 /* could be moved to share CE3 */ 66 /* target->host HTT + HTC control */ 67 { /* CE1 */ CE_ATTR_FLAGS, 0, 0, 512, 512, NULL,}, 68 /* target->host WMI */ 69 { /* CE2 */ CE_ATTR_FLAGS, 0, 0, 2048, 32, NULL,}, 70 /* host->target WMI */ 71 { /* CE3 */ CE_ATTR_FLAGS, 0, 32, 2048, 0, NULL,}, 72 /* host->target HTT */ 73 { /* CE4 */ CE_ATTR_FLAGS | CE_ATTR_DIS_INTR, 0, 74 CE_HTT_H2T_MSG_SRC_NENTRIES, 256, 0, NULL,}, 75 /* unused */ 76 { /* CE5 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 77 /* Target autonomous hif_memcpy */ 78 { /* CE6 */ CE_ATTR_FLAGS, 0, 0, 0, 0, NULL,}, 79 /* ce_diag, the Diagnostic Window */ 80 { /* CE7 */ CE_ATTR_FLAGS, 0, 2, DIAG_TRANSFER_LIMIT, 2, NULL,}, 81 }; 82 83 /* Target firmware's Copy Engine configuration. */ 84 static const struct ce_pipe_config target_ce_config_wlan[] = { 85 /* host->target HTC control and raw streams */ 86 { /* CE0 */ 0, PIPEDIR_OUT, 32, 256, CE_ATTR_FLAGS, 0,}, 87 /* target->host HTT + HTC control */ 88 { /* CE1 */ 1, PIPEDIR_IN, 32, 512, CE_ATTR_FLAGS, 0,}, 89 /* target->host WMI */ 90 { /* CE2 */ 2, PIPEDIR_IN, 32, 2048, CE_ATTR_FLAGS, 0,}, 91 /* host->target WMI */ 92 { /* CE3 */ 3, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 93 /* host->target HTT */ 94 { /* CE4 */ 4, PIPEDIR_OUT, 256, 256, CE_ATTR_FLAGS, 0,}, 95 /* NB: 50% of src nentries, since tx has 2 frags */ 96 /* unused */ 97 { /* CE5 */ 5, PIPEDIR_OUT, 32, 2048, CE_ATTR_FLAGS, 0,}, 98 /* Reserved for target autonomous hif_memcpy */ 99 { /* CE6 */ 6, PIPEDIR_INOUT, 32, 4096, CE_ATTR_FLAGS, 0,}, 100 /* CE7 used only by Host */ 101 }; 102 103 /* 104 * Diagnostic read/write access is provided for startup/config/debug usage. 105 * Caller must guarantee proper alignment, when applicable, and single user 106 * at any moment. 107 */ 108 static int ath10k_pci_diag_read_mem(struct ath10k *ar, u32 address, void *data, 109 int nbytes) 110 { 111 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 112 int ret = 0; 113 u32 buf; 114 unsigned int completed_nbytes, orig_nbytes, remaining_bytes; 115 unsigned int id; 116 unsigned int flags; 117 struct ce_state *ce_diag; 118 /* Host buffer address in CE space */ 119 u32 ce_data; 120 dma_addr_t ce_data_base = 0; 121 void *data_buf = NULL; 122 int i; 123 124 /* 125 * This code cannot handle reads to non-memory space. Redirect to the 126 * register read fn but preserve the multi word read capability of 127 * this fn 128 */ 129 if (address < DRAM_BASE_ADDRESS) { 130 if (!IS_ALIGNED(address, 4) || 131 !IS_ALIGNED((unsigned long)data, 4)) 132 return -EIO; 133 134 while ((nbytes >= 4) && ((ret = ath10k_pci_diag_read_access( 135 ar, address, (u32 *)data)) == 0)) { 136 nbytes -= sizeof(u32); 137 address += sizeof(u32); 138 data += sizeof(u32); 139 } 140 return ret; 141 } 142 143 ce_diag = ar_pci->ce_diag; 144 145 /* 146 * Allocate a temporary bounce buffer to hold caller's data 147 * to be DMA'ed from Target. This guarantees 148 * 1) 4-byte alignment 149 * 2) Buffer in DMA-able space 150 */ 151 orig_nbytes = nbytes; 152 data_buf = (unsigned char *)pci_alloc_consistent(ar_pci->pdev, 153 orig_nbytes, 154 &ce_data_base); 155 156 if (!data_buf) { 157 ret = -ENOMEM; 158 goto done; 159 } 160 memset(data_buf, 0, orig_nbytes); 161 162 remaining_bytes = orig_nbytes; 163 ce_data = ce_data_base; 164 while (remaining_bytes) { 165 nbytes = min_t(unsigned int, remaining_bytes, 166 DIAG_TRANSFER_LIMIT); 167 168 ret = ath10k_ce_recv_buf_enqueue(ce_diag, NULL, ce_data); 169 if (ret != 0) 170 goto done; 171 172 /* Request CE to send from Target(!) address to Host buffer */ 173 /* 174 * The address supplied by the caller is in the 175 * Target CPU virtual address space. 176 * 177 * In order to use this address with the diagnostic CE, 178 * convert it from Target CPU virtual address space 179 * to CE address space 180 */ 181 ath10k_pci_wake(ar); 182 address = TARG_CPU_SPACE_TO_CE_SPACE(ar, ar_pci->mem, 183 address); 184 ath10k_pci_sleep(ar); 185 186 ret = ath10k_ce_send(ce_diag, NULL, (u32)address, nbytes, 0, 187 0); 188 if (ret) 189 goto done; 190 191 i = 0; 192 while (ath10k_ce_completed_send_next(ce_diag, NULL, &buf, 193 &completed_nbytes, 194 &id) != 0) { 195 mdelay(1); 196 if (i++ > DIAG_ACCESS_CE_TIMEOUT_MS) { 197 ret = -EBUSY; 198 goto done; 199 } 200 } 201 202 if (nbytes != completed_nbytes) { 203 ret = -EIO; 204 goto done; 205 } 206 207 if (buf != (u32) address) { 208 ret = -EIO; 209 goto done; 210 } 211 212 i = 0; 213 while (ath10k_ce_completed_recv_next(ce_diag, NULL, &buf, 214 &completed_nbytes, 215 &id, &flags) != 0) { 216 mdelay(1); 217 218 if (i++ > DIAG_ACCESS_CE_TIMEOUT_MS) { 219 ret = -EBUSY; 220 goto done; 221 } 222 } 223 224 if (nbytes != completed_nbytes) { 225 ret = -EIO; 226 goto done; 227 } 228 229 if (buf != ce_data) { 230 ret = -EIO; 231 goto done; 232 } 233 234 remaining_bytes -= nbytes; 235 address += nbytes; 236 ce_data += nbytes; 237 } 238 239 done: 240 if (ret == 0) { 241 /* Copy data from allocated DMA buf to caller's buf */ 242 WARN_ON_ONCE(orig_nbytes & 3); 243 for (i = 0; i < orig_nbytes / sizeof(__le32); i++) { 244 ((u32 *)data)[i] = 245 __le32_to_cpu(((__le32 *)data_buf)[i]); 246 } 247 } else 248 ath10k_dbg(ATH10K_DBG_PCI, "%s failure (0x%x)\n", 249 __func__, address); 250 251 if (data_buf) 252 pci_free_consistent(ar_pci->pdev, orig_nbytes, 253 data_buf, ce_data_base); 254 255 return ret; 256 } 257 258 /* Read 4-byte aligned data from Target memory or register */ 259 static int ath10k_pci_diag_read_access(struct ath10k *ar, u32 address, 260 u32 *data) 261 { 262 /* Assume range doesn't cross this boundary */ 263 if (address >= DRAM_BASE_ADDRESS) 264 return ath10k_pci_diag_read_mem(ar, address, data, sizeof(u32)); 265 266 ath10k_pci_wake(ar); 267 *data = ath10k_pci_read32(ar, address); 268 ath10k_pci_sleep(ar); 269 return 0; 270 } 271 272 static int ath10k_pci_diag_write_mem(struct ath10k *ar, u32 address, 273 const void *data, int nbytes) 274 { 275 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 276 int ret = 0; 277 u32 buf; 278 unsigned int completed_nbytes, orig_nbytes, remaining_bytes; 279 unsigned int id; 280 unsigned int flags; 281 struct ce_state *ce_diag; 282 void *data_buf = NULL; 283 u32 ce_data; /* Host buffer address in CE space */ 284 dma_addr_t ce_data_base = 0; 285 int i; 286 287 ce_diag = ar_pci->ce_diag; 288 289 /* 290 * Allocate a temporary bounce buffer to hold caller's data 291 * to be DMA'ed to Target. This guarantees 292 * 1) 4-byte alignment 293 * 2) Buffer in DMA-able space 294 */ 295 orig_nbytes = nbytes; 296 data_buf = (unsigned char *)pci_alloc_consistent(ar_pci->pdev, 297 orig_nbytes, 298 &ce_data_base); 299 if (!data_buf) { 300 ret = -ENOMEM; 301 goto done; 302 } 303 304 /* Copy caller's data to allocated DMA buf */ 305 WARN_ON_ONCE(orig_nbytes & 3); 306 for (i = 0; i < orig_nbytes / sizeof(__le32); i++) 307 ((__le32 *)data_buf)[i] = __cpu_to_le32(((u32 *)data)[i]); 308 309 /* 310 * The address supplied by the caller is in the 311 * Target CPU virtual address space. 312 * 313 * In order to use this address with the diagnostic CE, 314 * convert it from 315 * Target CPU virtual address space 316 * to 317 * CE address space 318 */ 319 ath10k_pci_wake(ar); 320 address = TARG_CPU_SPACE_TO_CE_SPACE(ar, ar_pci->mem, address); 321 ath10k_pci_sleep(ar); 322 323 remaining_bytes = orig_nbytes; 324 ce_data = ce_data_base; 325 while (remaining_bytes) { 326 /* FIXME: check cast */ 327 nbytes = min_t(int, remaining_bytes, DIAG_TRANSFER_LIMIT); 328 329 /* Set up to receive directly into Target(!) address */ 330 ret = ath10k_ce_recv_buf_enqueue(ce_diag, NULL, address); 331 if (ret != 0) 332 goto done; 333 334 /* 335 * Request CE to send caller-supplied data that 336 * was copied to bounce buffer to Target(!) address. 337 */ 338 ret = ath10k_ce_send(ce_diag, NULL, (u32) ce_data, 339 nbytes, 0, 0); 340 if (ret != 0) 341 goto done; 342 343 i = 0; 344 while (ath10k_ce_completed_send_next(ce_diag, NULL, &buf, 345 &completed_nbytes, 346 &id) != 0) { 347 mdelay(1); 348 349 if (i++ > DIAG_ACCESS_CE_TIMEOUT_MS) { 350 ret = -EBUSY; 351 goto done; 352 } 353 } 354 355 if (nbytes != completed_nbytes) { 356 ret = -EIO; 357 goto done; 358 } 359 360 if (buf != ce_data) { 361 ret = -EIO; 362 goto done; 363 } 364 365 i = 0; 366 while (ath10k_ce_completed_recv_next(ce_diag, NULL, &buf, 367 &completed_nbytes, 368 &id, &flags) != 0) { 369 mdelay(1); 370 371 if (i++ > DIAG_ACCESS_CE_TIMEOUT_MS) { 372 ret = -EBUSY; 373 goto done; 374 } 375 } 376 377 if (nbytes != completed_nbytes) { 378 ret = -EIO; 379 goto done; 380 } 381 382 if (buf != address) { 383 ret = -EIO; 384 goto done; 385 } 386 387 remaining_bytes -= nbytes; 388 address += nbytes; 389 ce_data += nbytes; 390 } 391 392 done: 393 if (data_buf) { 394 pci_free_consistent(ar_pci->pdev, orig_nbytes, data_buf, 395 ce_data_base); 396 } 397 398 if (ret != 0) 399 ath10k_dbg(ATH10K_DBG_PCI, "%s failure (0x%x)\n", __func__, 400 address); 401 402 return ret; 403 } 404 405 /* Write 4B data to Target memory or register */ 406 static int ath10k_pci_diag_write_access(struct ath10k *ar, u32 address, 407 u32 data) 408 { 409 /* Assume range doesn't cross this boundary */ 410 if (address >= DRAM_BASE_ADDRESS) 411 return ath10k_pci_diag_write_mem(ar, address, &data, 412 sizeof(u32)); 413 414 ath10k_pci_wake(ar); 415 ath10k_pci_write32(ar, address, data); 416 ath10k_pci_sleep(ar); 417 return 0; 418 } 419 420 static bool ath10k_pci_target_is_awake(struct ath10k *ar) 421 { 422 void __iomem *mem = ath10k_pci_priv(ar)->mem; 423 u32 val; 424 val = ioread32(mem + PCIE_LOCAL_BASE_ADDRESS + 425 RTC_STATE_ADDRESS); 426 return (RTC_STATE_V_GET(val) == RTC_STATE_V_ON); 427 } 428 429 static void ath10k_pci_wait(struct ath10k *ar) 430 { 431 int n = 100; 432 433 while (n-- && !ath10k_pci_target_is_awake(ar)) 434 msleep(10); 435 436 if (n < 0) 437 ath10k_warn("Unable to wakeup target\n"); 438 } 439 440 void ath10k_do_pci_wake(struct ath10k *ar) 441 { 442 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 443 void __iomem *pci_addr = ar_pci->mem; 444 int tot_delay = 0; 445 int curr_delay = 5; 446 447 if (atomic_read(&ar_pci->keep_awake_count) == 0) { 448 /* Force AWAKE */ 449 iowrite32(PCIE_SOC_WAKE_V_MASK, 450 pci_addr + PCIE_LOCAL_BASE_ADDRESS + 451 PCIE_SOC_WAKE_ADDRESS); 452 } 453 atomic_inc(&ar_pci->keep_awake_count); 454 455 if (ar_pci->verified_awake) 456 return; 457 458 for (;;) { 459 if (ath10k_pci_target_is_awake(ar)) { 460 ar_pci->verified_awake = true; 461 break; 462 } 463 464 if (tot_delay > PCIE_WAKE_TIMEOUT) { 465 ath10k_warn("target takes too long to wake up (awake count %d)\n", 466 atomic_read(&ar_pci->keep_awake_count)); 467 break; 468 } 469 470 udelay(curr_delay); 471 tot_delay += curr_delay; 472 473 if (curr_delay < 50) 474 curr_delay += 5; 475 } 476 } 477 478 void ath10k_do_pci_sleep(struct ath10k *ar) 479 { 480 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 481 void __iomem *pci_addr = ar_pci->mem; 482 483 if (atomic_dec_and_test(&ar_pci->keep_awake_count)) { 484 /* Allow sleep */ 485 ar_pci->verified_awake = false; 486 iowrite32(PCIE_SOC_WAKE_RESET, 487 pci_addr + PCIE_LOCAL_BASE_ADDRESS + 488 PCIE_SOC_WAKE_ADDRESS); 489 } 490 } 491 492 /* 493 * FIXME: Handle OOM properly. 494 */ 495 static inline 496 struct ath10k_pci_compl *get_free_compl(struct hif_ce_pipe_info *pipe_info) 497 { 498 struct ath10k_pci_compl *compl = NULL; 499 500 spin_lock_bh(&pipe_info->pipe_lock); 501 if (list_empty(&pipe_info->compl_free)) { 502 ath10k_warn("Completion buffers are full\n"); 503 goto exit; 504 } 505 compl = list_first_entry(&pipe_info->compl_free, 506 struct ath10k_pci_compl, list); 507 list_del(&compl->list); 508 exit: 509 spin_unlock_bh(&pipe_info->pipe_lock); 510 return compl; 511 } 512 513 /* Called by lower (CE) layer when a send to Target completes. */ 514 static void ath10k_pci_ce_send_done(struct ce_state *ce_state, 515 void *transfer_context, 516 u32 ce_data, 517 unsigned int nbytes, 518 unsigned int transfer_id) 519 { 520 struct ath10k *ar = ce_state->ar; 521 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 522 struct hif_ce_pipe_info *pipe_info = &ar_pci->pipe_info[ce_state->id]; 523 struct ath10k_pci_compl *compl; 524 bool process = false; 525 526 do { 527 /* 528 * For the send completion of an item in sendlist, just 529 * increment num_sends_allowed. The upper layer callback will 530 * be triggered when last fragment is done with send. 531 */ 532 if (transfer_context == CE_SENDLIST_ITEM_CTXT) { 533 spin_lock_bh(&pipe_info->pipe_lock); 534 pipe_info->num_sends_allowed++; 535 spin_unlock_bh(&pipe_info->pipe_lock); 536 continue; 537 } 538 539 compl = get_free_compl(pipe_info); 540 if (!compl) 541 break; 542 543 compl->send_or_recv = HIF_CE_COMPLETE_SEND; 544 compl->ce_state = ce_state; 545 compl->pipe_info = pipe_info; 546 compl->transfer_context = transfer_context; 547 compl->nbytes = nbytes; 548 compl->transfer_id = transfer_id; 549 compl->flags = 0; 550 551 /* 552 * Add the completion to the processing queue. 553 */ 554 spin_lock_bh(&ar_pci->compl_lock); 555 list_add_tail(&compl->list, &ar_pci->compl_process); 556 spin_unlock_bh(&ar_pci->compl_lock); 557 558 process = true; 559 } while (ath10k_ce_completed_send_next(ce_state, 560 &transfer_context, 561 &ce_data, &nbytes, 562 &transfer_id) == 0); 563 564 /* 565 * If only some of the items within a sendlist have completed, 566 * don't invoke completion processing until the entire sendlist 567 * has been sent. 568 */ 569 if (!process) 570 return; 571 572 ath10k_pci_process_ce(ar); 573 } 574 575 /* Called by lower (CE) layer when data is received from the Target. */ 576 static void ath10k_pci_ce_recv_data(struct ce_state *ce_state, 577 void *transfer_context, u32 ce_data, 578 unsigned int nbytes, 579 unsigned int transfer_id, 580 unsigned int flags) 581 { 582 struct ath10k *ar = ce_state->ar; 583 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 584 struct hif_ce_pipe_info *pipe_info = &ar_pci->pipe_info[ce_state->id]; 585 struct ath10k_pci_compl *compl; 586 struct sk_buff *skb; 587 588 do { 589 compl = get_free_compl(pipe_info); 590 if (!compl) 591 break; 592 593 compl->send_or_recv = HIF_CE_COMPLETE_RECV; 594 compl->ce_state = ce_state; 595 compl->pipe_info = pipe_info; 596 compl->transfer_context = transfer_context; 597 compl->nbytes = nbytes; 598 compl->transfer_id = transfer_id; 599 compl->flags = flags; 600 601 skb = transfer_context; 602 dma_unmap_single(ar->dev, ATH10K_SKB_CB(skb)->paddr, 603 skb->len + skb_tailroom(skb), 604 DMA_FROM_DEVICE); 605 /* 606 * Add the completion to the processing queue. 607 */ 608 spin_lock_bh(&ar_pci->compl_lock); 609 list_add_tail(&compl->list, &ar_pci->compl_process); 610 spin_unlock_bh(&ar_pci->compl_lock); 611 612 } while (ath10k_ce_completed_recv_next(ce_state, 613 &transfer_context, 614 &ce_data, &nbytes, 615 &transfer_id, 616 &flags) == 0); 617 618 ath10k_pci_process_ce(ar); 619 } 620 621 /* Send the first nbytes bytes of the buffer */ 622 static int ath10k_pci_hif_send_head(struct ath10k *ar, u8 pipe_id, 623 unsigned int transfer_id, 624 unsigned int bytes, struct sk_buff *nbuf) 625 { 626 struct ath10k_skb_cb *skb_cb = ATH10K_SKB_CB(nbuf); 627 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 628 struct hif_ce_pipe_info *pipe_info = &(ar_pci->pipe_info[pipe_id]); 629 struct ce_state *ce_hdl = pipe_info->ce_hdl; 630 struct ce_sendlist sendlist; 631 unsigned int len; 632 u32 flags = 0; 633 int ret; 634 635 memset(&sendlist, 0, sizeof(struct ce_sendlist)); 636 637 len = min(bytes, nbuf->len); 638 bytes -= len; 639 640 if (len & 3) 641 ath10k_warn("skb not aligned to 4-byte boundary (%d)\n", len); 642 643 ath10k_dbg(ATH10K_DBG_PCI, 644 "pci send data vaddr %p paddr 0x%llx len %d as %d bytes\n", 645 nbuf->data, (unsigned long long) skb_cb->paddr, 646 nbuf->len, len); 647 ath10k_dbg_dump(ATH10K_DBG_PCI_DUMP, NULL, 648 "ath10k tx: data: ", 649 nbuf->data, nbuf->len); 650 651 ath10k_ce_sendlist_buf_add(&sendlist, skb_cb->paddr, len, flags); 652 653 /* Make sure we have resources to handle this request */ 654 spin_lock_bh(&pipe_info->pipe_lock); 655 if (!pipe_info->num_sends_allowed) { 656 ath10k_warn("Pipe: %d is full\n", pipe_id); 657 spin_unlock_bh(&pipe_info->pipe_lock); 658 return -ENOSR; 659 } 660 pipe_info->num_sends_allowed--; 661 spin_unlock_bh(&pipe_info->pipe_lock); 662 663 ret = ath10k_ce_sendlist_send(ce_hdl, nbuf, &sendlist, transfer_id); 664 if (ret) 665 ath10k_warn("CE send failed: %p\n", nbuf); 666 667 return ret; 668 } 669 670 static u16 ath10k_pci_hif_get_free_queue_number(struct ath10k *ar, u8 pipe) 671 { 672 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 673 struct hif_ce_pipe_info *pipe_info = &(ar_pci->pipe_info[pipe]); 674 int ret; 675 676 spin_lock_bh(&pipe_info->pipe_lock); 677 ret = pipe_info->num_sends_allowed; 678 spin_unlock_bh(&pipe_info->pipe_lock); 679 680 return ret; 681 } 682 683 static void ath10k_pci_hif_dump_area(struct ath10k *ar) 684 { 685 u32 reg_dump_area = 0; 686 u32 reg_dump_values[REG_DUMP_COUNT_QCA988X] = {}; 687 u32 host_addr; 688 int ret; 689 u32 i; 690 691 ath10k_err("firmware crashed!\n"); 692 ath10k_err("hardware name %s version 0x%x\n", 693 ar->hw_params.name, ar->target_version); 694 ath10k_err("firmware version: %u.%u.%u.%u\n", ar->fw_version_major, 695 ar->fw_version_minor, ar->fw_version_release, 696 ar->fw_version_build); 697 698 host_addr = host_interest_item_address(HI_ITEM(hi_failure_state)); 699 if (ath10k_pci_diag_read_mem(ar, host_addr, 700 ®_dump_area, sizeof(u32)) != 0) { 701 ath10k_warn("could not read hi_failure_state\n"); 702 return; 703 } 704 705 ath10k_err("target register Dump Location: 0x%08X\n", reg_dump_area); 706 707 ret = ath10k_pci_diag_read_mem(ar, reg_dump_area, 708 ®_dump_values[0], 709 REG_DUMP_COUNT_QCA988X * sizeof(u32)); 710 if (ret != 0) { 711 ath10k_err("could not dump FW Dump Area\n"); 712 return; 713 } 714 715 BUILD_BUG_ON(REG_DUMP_COUNT_QCA988X % 4); 716 717 ath10k_err("target Register Dump\n"); 718 for (i = 0; i < REG_DUMP_COUNT_QCA988X; i += 4) 719 ath10k_err("[%02d]: 0x%08X 0x%08X 0x%08X 0x%08X\n", 720 i, 721 reg_dump_values[i], 722 reg_dump_values[i + 1], 723 reg_dump_values[i + 2], 724 reg_dump_values[i + 3]); 725 726 ieee80211_queue_work(ar->hw, &ar->restart_work); 727 } 728 729 static void ath10k_pci_hif_send_complete_check(struct ath10k *ar, u8 pipe, 730 int force) 731 { 732 if (!force) { 733 int resources; 734 /* 735 * Decide whether to actually poll for completions, or just 736 * wait for a later chance. 737 * If there seem to be plenty of resources left, then just wait 738 * since checking involves reading a CE register, which is a 739 * relatively expensive operation. 740 */ 741 resources = ath10k_pci_hif_get_free_queue_number(ar, pipe); 742 743 /* 744 * If at least 50% of the total resources are still available, 745 * don't bother checking again yet. 746 */ 747 if (resources > (host_ce_config_wlan[pipe].src_nentries >> 1)) 748 return; 749 } 750 ath10k_ce_per_engine_service(ar, pipe); 751 } 752 753 static void ath10k_pci_hif_set_callbacks(struct ath10k *ar, 754 struct ath10k_hif_cb *callbacks) 755 { 756 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 757 758 ath10k_dbg(ATH10K_DBG_PCI, "%s\n", __func__); 759 760 memcpy(&ar_pci->msg_callbacks_current, callbacks, 761 sizeof(ar_pci->msg_callbacks_current)); 762 } 763 764 static int ath10k_pci_start_ce(struct ath10k *ar) 765 { 766 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 767 struct ce_state *ce_diag = ar_pci->ce_diag; 768 const struct ce_attr *attr; 769 struct hif_ce_pipe_info *pipe_info; 770 struct ath10k_pci_compl *compl; 771 int i, pipe_num, completions, disable_interrupts; 772 773 spin_lock_init(&ar_pci->compl_lock); 774 INIT_LIST_HEAD(&ar_pci->compl_process); 775 776 for (pipe_num = 0; pipe_num < ar_pci->ce_count; pipe_num++) { 777 pipe_info = &ar_pci->pipe_info[pipe_num]; 778 779 spin_lock_init(&pipe_info->pipe_lock); 780 INIT_LIST_HEAD(&pipe_info->compl_free); 781 782 /* Handle Diagnostic CE specially */ 783 if (pipe_info->ce_hdl == ce_diag) 784 continue; 785 786 attr = &host_ce_config_wlan[pipe_num]; 787 completions = 0; 788 789 if (attr->src_nentries) { 790 disable_interrupts = attr->flags & CE_ATTR_DIS_INTR; 791 ath10k_ce_send_cb_register(pipe_info->ce_hdl, 792 ath10k_pci_ce_send_done, 793 disable_interrupts); 794 completions += attr->src_nentries; 795 pipe_info->num_sends_allowed = attr->src_nentries - 1; 796 } 797 798 if (attr->dest_nentries) { 799 ath10k_ce_recv_cb_register(pipe_info->ce_hdl, 800 ath10k_pci_ce_recv_data); 801 completions += attr->dest_nentries; 802 } 803 804 if (completions == 0) 805 continue; 806 807 for (i = 0; i < completions; i++) { 808 compl = kmalloc(sizeof(struct ath10k_pci_compl), 809 GFP_KERNEL); 810 if (!compl) { 811 ath10k_warn("No memory for completion state\n"); 812 ath10k_pci_stop_ce(ar); 813 return -ENOMEM; 814 } 815 816 compl->send_or_recv = HIF_CE_COMPLETE_FREE; 817 list_add_tail(&compl->list, &pipe_info->compl_free); 818 } 819 } 820 821 return 0; 822 } 823 824 static void ath10k_pci_stop_ce(struct ath10k *ar) 825 { 826 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 827 struct ath10k_pci_compl *compl; 828 struct sk_buff *skb; 829 int i; 830 831 ath10k_ce_disable_interrupts(ar); 832 833 /* Cancel the pending tasklet */ 834 tasklet_kill(&ar_pci->intr_tq); 835 836 for (i = 0; i < CE_COUNT; i++) 837 tasklet_kill(&ar_pci->pipe_info[i].intr); 838 839 /* Mark pending completions as aborted, so that upper layers free up 840 * their associated resources */ 841 spin_lock_bh(&ar_pci->compl_lock); 842 list_for_each_entry(compl, &ar_pci->compl_process, list) { 843 skb = (struct sk_buff *)compl->transfer_context; 844 ATH10K_SKB_CB(skb)->is_aborted = true; 845 } 846 spin_unlock_bh(&ar_pci->compl_lock); 847 } 848 849 static void ath10k_pci_cleanup_ce(struct ath10k *ar) 850 { 851 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 852 struct ath10k_pci_compl *compl, *tmp; 853 struct hif_ce_pipe_info *pipe_info; 854 struct sk_buff *netbuf; 855 int pipe_num; 856 857 /* Free pending completions. */ 858 spin_lock_bh(&ar_pci->compl_lock); 859 if (!list_empty(&ar_pci->compl_process)) 860 ath10k_warn("pending completions still present! possible memory leaks.\n"); 861 862 list_for_each_entry_safe(compl, tmp, &ar_pci->compl_process, list) { 863 list_del(&compl->list); 864 netbuf = (struct sk_buff *)compl->transfer_context; 865 dev_kfree_skb_any(netbuf); 866 kfree(compl); 867 } 868 spin_unlock_bh(&ar_pci->compl_lock); 869 870 /* Free unused completions for each pipe. */ 871 for (pipe_num = 0; pipe_num < ar_pci->ce_count; pipe_num++) { 872 pipe_info = &ar_pci->pipe_info[pipe_num]; 873 874 spin_lock_bh(&pipe_info->pipe_lock); 875 list_for_each_entry_safe(compl, tmp, 876 &pipe_info->compl_free, list) { 877 list_del(&compl->list); 878 kfree(compl); 879 } 880 spin_unlock_bh(&pipe_info->pipe_lock); 881 } 882 } 883 884 static void ath10k_pci_process_ce(struct ath10k *ar) 885 { 886 struct ath10k_pci *ar_pci = ar->hif.priv; 887 struct ath10k_hif_cb *cb = &ar_pci->msg_callbacks_current; 888 struct ath10k_pci_compl *compl; 889 struct sk_buff *skb; 890 unsigned int nbytes; 891 int ret, send_done = 0; 892 893 /* Upper layers aren't ready to handle tx/rx completions in parallel so 894 * we must serialize all completion processing. */ 895 896 spin_lock_bh(&ar_pci->compl_lock); 897 if (ar_pci->compl_processing) { 898 spin_unlock_bh(&ar_pci->compl_lock); 899 return; 900 } 901 ar_pci->compl_processing = true; 902 spin_unlock_bh(&ar_pci->compl_lock); 903 904 for (;;) { 905 spin_lock_bh(&ar_pci->compl_lock); 906 if (list_empty(&ar_pci->compl_process)) { 907 spin_unlock_bh(&ar_pci->compl_lock); 908 break; 909 } 910 compl = list_first_entry(&ar_pci->compl_process, 911 struct ath10k_pci_compl, list); 912 list_del(&compl->list); 913 spin_unlock_bh(&ar_pci->compl_lock); 914 915 if (compl->send_or_recv == HIF_CE_COMPLETE_SEND) { 916 cb->tx_completion(ar, 917 compl->transfer_context, 918 compl->transfer_id); 919 send_done = 1; 920 } else { 921 ret = ath10k_pci_post_rx_pipe(compl->pipe_info, 1); 922 if (ret) { 923 ath10k_warn("Unable to post recv buffer for pipe: %d\n", 924 compl->pipe_info->pipe_num); 925 break; 926 } 927 928 skb = (struct sk_buff *)compl->transfer_context; 929 nbytes = compl->nbytes; 930 931 ath10k_dbg(ATH10K_DBG_PCI, 932 "ath10k_pci_ce_recv_data netbuf=%p nbytes=%d\n", 933 skb, nbytes); 934 ath10k_dbg_dump(ATH10K_DBG_PCI_DUMP, NULL, 935 "ath10k rx: ", skb->data, nbytes); 936 937 if (skb->len + skb_tailroom(skb) >= nbytes) { 938 skb_trim(skb, 0); 939 skb_put(skb, nbytes); 940 cb->rx_completion(ar, skb, 941 compl->pipe_info->pipe_num); 942 } else { 943 ath10k_warn("rxed more than expected (nbytes %d, max %d)", 944 nbytes, 945 skb->len + skb_tailroom(skb)); 946 } 947 } 948 949 compl->send_or_recv = HIF_CE_COMPLETE_FREE; 950 951 /* 952 * Add completion back to the pipe's free list. 953 */ 954 spin_lock_bh(&compl->pipe_info->pipe_lock); 955 list_add_tail(&compl->list, &compl->pipe_info->compl_free); 956 compl->pipe_info->num_sends_allowed += send_done; 957 spin_unlock_bh(&compl->pipe_info->pipe_lock); 958 } 959 960 spin_lock_bh(&ar_pci->compl_lock); 961 ar_pci->compl_processing = false; 962 spin_unlock_bh(&ar_pci->compl_lock); 963 } 964 965 /* TODO - temporary mapping while we have too few CE's */ 966 static int ath10k_pci_hif_map_service_to_pipe(struct ath10k *ar, 967 u16 service_id, u8 *ul_pipe, 968 u8 *dl_pipe, int *ul_is_polled, 969 int *dl_is_polled) 970 { 971 int ret = 0; 972 973 /* polling for received messages not supported */ 974 *dl_is_polled = 0; 975 976 switch (service_id) { 977 case ATH10K_HTC_SVC_ID_HTT_DATA_MSG: 978 /* 979 * Host->target HTT gets its own pipe, so it can be polled 980 * while other pipes are interrupt driven. 981 */ 982 *ul_pipe = 4; 983 /* 984 * Use the same target->host pipe for HTC ctrl, HTC raw 985 * streams, and HTT. 986 */ 987 *dl_pipe = 1; 988 break; 989 990 case ATH10K_HTC_SVC_ID_RSVD_CTRL: 991 case ATH10K_HTC_SVC_ID_TEST_RAW_STREAMS: 992 /* 993 * Note: HTC_RAW_STREAMS_SVC is currently unused, and 994 * HTC_CTRL_RSVD_SVC could share the same pipe as the 995 * WMI services. So, if another CE is needed, change 996 * this to *ul_pipe = 3, which frees up CE 0. 997 */ 998 /* *ul_pipe = 3; */ 999 *ul_pipe = 0; 1000 *dl_pipe = 1; 1001 break; 1002 1003 case ATH10K_HTC_SVC_ID_WMI_DATA_BK: 1004 case ATH10K_HTC_SVC_ID_WMI_DATA_BE: 1005 case ATH10K_HTC_SVC_ID_WMI_DATA_VI: 1006 case ATH10K_HTC_SVC_ID_WMI_DATA_VO: 1007 1008 case ATH10K_HTC_SVC_ID_WMI_CONTROL: 1009 *ul_pipe = 3; 1010 *dl_pipe = 2; 1011 break; 1012 1013 /* pipe 5 unused */ 1014 /* pipe 6 reserved */ 1015 /* pipe 7 reserved */ 1016 1017 default: 1018 ret = -1; 1019 break; 1020 } 1021 *ul_is_polled = 1022 (host_ce_config_wlan[*ul_pipe].flags & CE_ATTR_DIS_INTR) != 0; 1023 1024 return ret; 1025 } 1026 1027 static void ath10k_pci_hif_get_default_pipe(struct ath10k *ar, 1028 u8 *ul_pipe, u8 *dl_pipe) 1029 { 1030 int ul_is_polled, dl_is_polled; 1031 1032 (void)ath10k_pci_hif_map_service_to_pipe(ar, 1033 ATH10K_HTC_SVC_ID_RSVD_CTRL, 1034 ul_pipe, 1035 dl_pipe, 1036 &ul_is_polled, 1037 &dl_is_polled); 1038 } 1039 1040 static int ath10k_pci_post_rx_pipe(struct hif_ce_pipe_info *pipe_info, 1041 int num) 1042 { 1043 struct ath10k *ar = pipe_info->hif_ce_state; 1044 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1045 struct ce_state *ce_state = pipe_info->ce_hdl; 1046 struct sk_buff *skb; 1047 dma_addr_t ce_data; 1048 int i, ret = 0; 1049 1050 if (pipe_info->buf_sz == 0) 1051 return 0; 1052 1053 for (i = 0; i < num; i++) { 1054 skb = dev_alloc_skb(pipe_info->buf_sz); 1055 if (!skb) { 1056 ath10k_warn("could not allocate skbuff for pipe %d\n", 1057 num); 1058 ret = -ENOMEM; 1059 goto err; 1060 } 1061 1062 WARN_ONCE((unsigned long)skb->data & 3, "unaligned skb"); 1063 1064 ce_data = dma_map_single(ar->dev, skb->data, 1065 skb->len + skb_tailroom(skb), 1066 DMA_FROM_DEVICE); 1067 1068 if (unlikely(dma_mapping_error(ar->dev, ce_data))) { 1069 ath10k_warn("could not dma map skbuff\n"); 1070 dev_kfree_skb_any(skb); 1071 ret = -EIO; 1072 goto err; 1073 } 1074 1075 ATH10K_SKB_CB(skb)->paddr = ce_data; 1076 1077 pci_dma_sync_single_for_device(ar_pci->pdev, ce_data, 1078 pipe_info->buf_sz, 1079 PCI_DMA_FROMDEVICE); 1080 1081 ret = ath10k_ce_recv_buf_enqueue(ce_state, (void *)skb, 1082 ce_data); 1083 if (ret) { 1084 ath10k_warn("could not enqueue to pipe %d (%d)\n", 1085 num, ret); 1086 goto err; 1087 } 1088 } 1089 1090 return ret; 1091 1092 err: 1093 ath10k_pci_rx_pipe_cleanup(pipe_info); 1094 return ret; 1095 } 1096 1097 static int ath10k_pci_post_rx(struct ath10k *ar) 1098 { 1099 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1100 struct hif_ce_pipe_info *pipe_info; 1101 const struct ce_attr *attr; 1102 int pipe_num, ret = 0; 1103 1104 for (pipe_num = 0; pipe_num < ar_pci->ce_count; pipe_num++) { 1105 pipe_info = &ar_pci->pipe_info[pipe_num]; 1106 attr = &host_ce_config_wlan[pipe_num]; 1107 1108 if (attr->dest_nentries == 0) 1109 continue; 1110 1111 ret = ath10k_pci_post_rx_pipe(pipe_info, 1112 attr->dest_nentries - 1); 1113 if (ret) { 1114 ath10k_warn("Unable to replenish recv buffers for pipe: %d\n", 1115 pipe_num); 1116 1117 for (; pipe_num >= 0; pipe_num--) { 1118 pipe_info = &ar_pci->pipe_info[pipe_num]; 1119 ath10k_pci_rx_pipe_cleanup(pipe_info); 1120 } 1121 return ret; 1122 } 1123 } 1124 1125 return 0; 1126 } 1127 1128 static int ath10k_pci_hif_start(struct ath10k *ar) 1129 { 1130 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1131 int ret; 1132 1133 ret = ath10k_pci_start_ce(ar); 1134 if (ret) { 1135 ath10k_warn("could not start CE (%d)\n", ret); 1136 return ret; 1137 } 1138 1139 /* Post buffers once to start things off. */ 1140 ret = ath10k_pci_post_rx(ar); 1141 if (ret) { 1142 ath10k_warn("could not post rx pipes (%d)\n", ret); 1143 return ret; 1144 } 1145 1146 ar_pci->started = 1; 1147 return 0; 1148 } 1149 1150 static void ath10k_pci_rx_pipe_cleanup(struct hif_ce_pipe_info *pipe_info) 1151 { 1152 struct ath10k *ar; 1153 struct ath10k_pci *ar_pci; 1154 struct ce_state *ce_hdl; 1155 u32 buf_sz; 1156 struct sk_buff *netbuf; 1157 u32 ce_data; 1158 1159 buf_sz = pipe_info->buf_sz; 1160 1161 /* Unused Copy Engine */ 1162 if (buf_sz == 0) 1163 return; 1164 1165 ar = pipe_info->hif_ce_state; 1166 ar_pci = ath10k_pci_priv(ar); 1167 1168 if (!ar_pci->started) 1169 return; 1170 1171 ce_hdl = pipe_info->ce_hdl; 1172 1173 while (ath10k_ce_revoke_recv_next(ce_hdl, (void **)&netbuf, 1174 &ce_data) == 0) { 1175 dma_unmap_single(ar->dev, ATH10K_SKB_CB(netbuf)->paddr, 1176 netbuf->len + skb_tailroom(netbuf), 1177 DMA_FROM_DEVICE); 1178 dev_kfree_skb_any(netbuf); 1179 } 1180 } 1181 1182 static void ath10k_pci_tx_pipe_cleanup(struct hif_ce_pipe_info *pipe_info) 1183 { 1184 struct ath10k *ar; 1185 struct ath10k_pci *ar_pci; 1186 struct ce_state *ce_hdl; 1187 struct sk_buff *netbuf; 1188 u32 ce_data; 1189 unsigned int nbytes; 1190 unsigned int id; 1191 u32 buf_sz; 1192 1193 buf_sz = pipe_info->buf_sz; 1194 1195 /* Unused Copy Engine */ 1196 if (buf_sz == 0) 1197 return; 1198 1199 ar = pipe_info->hif_ce_state; 1200 ar_pci = ath10k_pci_priv(ar); 1201 1202 if (!ar_pci->started) 1203 return; 1204 1205 ce_hdl = pipe_info->ce_hdl; 1206 1207 while (ath10k_ce_cancel_send_next(ce_hdl, (void **)&netbuf, 1208 &ce_data, &nbytes, &id) == 0) { 1209 if (netbuf != CE_SENDLIST_ITEM_CTXT) 1210 /* 1211 * Indicate the completion to higer layer to free 1212 * the buffer 1213 */ 1214 ATH10K_SKB_CB(netbuf)->is_aborted = true; 1215 ar_pci->msg_callbacks_current.tx_completion(ar, 1216 netbuf, 1217 id); 1218 } 1219 } 1220 1221 /* 1222 * Cleanup residual buffers for device shutdown: 1223 * buffers that were enqueued for receive 1224 * buffers that were to be sent 1225 * Note: Buffers that had completed but which were 1226 * not yet processed are on a completion queue. They 1227 * are handled when the completion thread shuts down. 1228 */ 1229 static void ath10k_pci_buffer_cleanup(struct ath10k *ar) 1230 { 1231 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1232 int pipe_num; 1233 1234 for (pipe_num = 0; pipe_num < ar_pci->ce_count; pipe_num++) { 1235 struct hif_ce_pipe_info *pipe_info; 1236 1237 pipe_info = &ar_pci->pipe_info[pipe_num]; 1238 ath10k_pci_rx_pipe_cleanup(pipe_info); 1239 ath10k_pci_tx_pipe_cleanup(pipe_info); 1240 } 1241 } 1242 1243 static void ath10k_pci_ce_deinit(struct ath10k *ar) 1244 { 1245 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1246 struct hif_ce_pipe_info *pipe_info; 1247 int pipe_num; 1248 1249 for (pipe_num = 0; pipe_num < ar_pci->ce_count; pipe_num++) { 1250 pipe_info = &ar_pci->pipe_info[pipe_num]; 1251 if (pipe_info->ce_hdl) { 1252 ath10k_ce_deinit(pipe_info->ce_hdl); 1253 pipe_info->ce_hdl = NULL; 1254 pipe_info->buf_sz = 0; 1255 } 1256 } 1257 } 1258 1259 static void ath10k_pci_disable_irqs(struct ath10k *ar) 1260 { 1261 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1262 int i; 1263 1264 for (i = 0; i < max(1, ar_pci->num_msi_intrs); i++) 1265 disable_irq(ar_pci->pdev->irq + i); 1266 } 1267 1268 static void ath10k_pci_hif_stop(struct ath10k *ar) 1269 { 1270 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1271 1272 ath10k_dbg(ATH10K_DBG_PCI, "%s\n", __func__); 1273 1274 /* Irqs are never explicitly re-enabled. They are implicitly re-enabled 1275 * by ath10k_pci_start_intr(). */ 1276 ath10k_pci_disable_irqs(ar); 1277 1278 ath10k_pci_stop_ce(ar); 1279 1280 /* At this point, asynchronous threads are stopped, the target should 1281 * not DMA nor interrupt. We process the leftovers and then free 1282 * everything else up. */ 1283 1284 ath10k_pci_process_ce(ar); 1285 ath10k_pci_cleanup_ce(ar); 1286 ath10k_pci_buffer_cleanup(ar); 1287 1288 ar_pci->started = 0; 1289 } 1290 1291 static int ath10k_pci_hif_exchange_bmi_msg(struct ath10k *ar, 1292 void *req, u32 req_len, 1293 void *resp, u32 *resp_len) 1294 { 1295 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1296 struct ce_state *ce_tx = ar_pci->pipe_info[BMI_CE_NUM_TO_TARG].ce_hdl; 1297 struct ce_state *ce_rx = ar_pci->pipe_info[BMI_CE_NUM_TO_HOST].ce_hdl; 1298 dma_addr_t req_paddr = 0; 1299 dma_addr_t resp_paddr = 0; 1300 struct bmi_xfer xfer = {}; 1301 void *treq, *tresp = NULL; 1302 int ret = 0; 1303 1304 if (resp && !resp_len) 1305 return -EINVAL; 1306 1307 if (resp && resp_len && *resp_len == 0) 1308 return -EINVAL; 1309 1310 treq = kmemdup(req, req_len, GFP_KERNEL); 1311 if (!treq) 1312 return -ENOMEM; 1313 1314 req_paddr = dma_map_single(ar->dev, treq, req_len, DMA_TO_DEVICE); 1315 ret = dma_mapping_error(ar->dev, req_paddr); 1316 if (ret) 1317 goto err_dma; 1318 1319 if (resp && resp_len) { 1320 tresp = kzalloc(*resp_len, GFP_KERNEL); 1321 if (!tresp) { 1322 ret = -ENOMEM; 1323 goto err_req; 1324 } 1325 1326 resp_paddr = dma_map_single(ar->dev, tresp, *resp_len, 1327 DMA_FROM_DEVICE); 1328 ret = dma_mapping_error(ar->dev, resp_paddr); 1329 if (ret) 1330 goto err_req; 1331 1332 xfer.wait_for_resp = true; 1333 xfer.resp_len = 0; 1334 1335 ath10k_ce_recv_buf_enqueue(ce_rx, &xfer, resp_paddr); 1336 } 1337 1338 init_completion(&xfer.done); 1339 1340 ret = ath10k_ce_send(ce_tx, &xfer, req_paddr, req_len, -1, 0); 1341 if (ret) 1342 goto err_resp; 1343 1344 ret = wait_for_completion_timeout(&xfer.done, 1345 BMI_COMMUNICATION_TIMEOUT_HZ); 1346 if (ret <= 0) { 1347 u32 unused_buffer; 1348 unsigned int unused_nbytes; 1349 unsigned int unused_id; 1350 1351 ret = -ETIMEDOUT; 1352 ath10k_ce_cancel_send_next(ce_tx, NULL, &unused_buffer, 1353 &unused_nbytes, &unused_id); 1354 } else { 1355 /* non-zero means we did not time out */ 1356 ret = 0; 1357 } 1358 1359 err_resp: 1360 if (resp) { 1361 u32 unused_buffer; 1362 1363 ath10k_ce_revoke_recv_next(ce_rx, NULL, &unused_buffer); 1364 dma_unmap_single(ar->dev, resp_paddr, 1365 *resp_len, DMA_FROM_DEVICE); 1366 } 1367 err_req: 1368 dma_unmap_single(ar->dev, req_paddr, req_len, DMA_TO_DEVICE); 1369 1370 if (ret == 0 && resp_len) { 1371 *resp_len = min(*resp_len, xfer.resp_len); 1372 memcpy(resp, tresp, xfer.resp_len); 1373 } 1374 err_dma: 1375 kfree(treq); 1376 kfree(tresp); 1377 1378 return ret; 1379 } 1380 1381 static void ath10k_pci_bmi_send_done(struct ce_state *ce_state, 1382 void *transfer_context, 1383 u32 data, 1384 unsigned int nbytes, 1385 unsigned int transfer_id) 1386 { 1387 struct bmi_xfer *xfer = transfer_context; 1388 1389 if (xfer->wait_for_resp) 1390 return; 1391 1392 complete(&xfer->done); 1393 } 1394 1395 static void ath10k_pci_bmi_recv_data(struct ce_state *ce_state, 1396 void *transfer_context, 1397 u32 data, 1398 unsigned int nbytes, 1399 unsigned int transfer_id, 1400 unsigned int flags) 1401 { 1402 struct bmi_xfer *xfer = transfer_context; 1403 1404 if (!xfer->wait_for_resp) { 1405 ath10k_warn("unexpected: BMI data received; ignoring\n"); 1406 return; 1407 } 1408 1409 xfer->resp_len = nbytes; 1410 complete(&xfer->done); 1411 } 1412 1413 /* 1414 * Map from service/endpoint to Copy Engine. 1415 * This table is derived from the CE_PCI TABLE, above. 1416 * It is passed to the Target at startup for use by firmware. 1417 */ 1418 static const struct service_to_pipe target_service_to_ce_map_wlan[] = { 1419 { 1420 ATH10K_HTC_SVC_ID_WMI_DATA_VO, 1421 PIPEDIR_OUT, /* out = UL = host -> target */ 1422 3, 1423 }, 1424 { 1425 ATH10K_HTC_SVC_ID_WMI_DATA_VO, 1426 PIPEDIR_IN, /* in = DL = target -> host */ 1427 2, 1428 }, 1429 { 1430 ATH10K_HTC_SVC_ID_WMI_DATA_BK, 1431 PIPEDIR_OUT, /* out = UL = host -> target */ 1432 3, 1433 }, 1434 { 1435 ATH10K_HTC_SVC_ID_WMI_DATA_BK, 1436 PIPEDIR_IN, /* in = DL = target -> host */ 1437 2, 1438 }, 1439 { 1440 ATH10K_HTC_SVC_ID_WMI_DATA_BE, 1441 PIPEDIR_OUT, /* out = UL = host -> target */ 1442 3, 1443 }, 1444 { 1445 ATH10K_HTC_SVC_ID_WMI_DATA_BE, 1446 PIPEDIR_IN, /* in = DL = target -> host */ 1447 2, 1448 }, 1449 { 1450 ATH10K_HTC_SVC_ID_WMI_DATA_VI, 1451 PIPEDIR_OUT, /* out = UL = host -> target */ 1452 3, 1453 }, 1454 { 1455 ATH10K_HTC_SVC_ID_WMI_DATA_VI, 1456 PIPEDIR_IN, /* in = DL = target -> host */ 1457 2, 1458 }, 1459 { 1460 ATH10K_HTC_SVC_ID_WMI_CONTROL, 1461 PIPEDIR_OUT, /* out = UL = host -> target */ 1462 3, 1463 }, 1464 { 1465 ATH10K_HTC_SVC_ID_WMI_CONTROL, 1466 PIPEDIR_IN, /* in = DL = target -> host */ 1467 2, 1468 }, 1469 { 1470 ATH10K_HTC_SVC_ID_RSVD_CTRL, 1471 PIPEDIR_OUT, /* out = UL = host -> target */ 1472 0, /* could be moved to 3 (share with WMI) */ 1473 }, 1474 { 1475 ATH10K_HTC_SVC_ID_RSVD_CTRL, 1476 PIPEDIR_IN, /* in = DL = target -> host */ 1477 1, 1478 }, 1479 { 1480 ATH10K_HTC_SVC_ID_TEST_RAW_STREAMS, /* not currently used */ 1481 PIPEDIR_OUT, /* out = UL = host -> target */ 1482 0, 1483 }, 1484 { 1485 ATH10K_HTC_SVC_ID_TEST_RAW_STREAMS, /* not currently used */ 1486 PIPEDIR_IN, /* in = DL = target -> host */ 1487 1, 1488 }, 1489 { 1490 ATH10K_HTC_SVC_ID_HTT_DATA_MSG, 1491 PIPEDIR_OUT, /* out = UL = host -> target */ 1492 4, 1493 }, 1494 { 1495 ATH10K_HTC_SVC_ID_HTT_DATA_MSG, 1496 PIPEDIR_IN, /* in = DL = target -> host */ 1497 1, 1498 }, 1499 1500 /* (Additions here) */ 1501 1502 { /* Must be last */ 1503 0, 1504 0, 1505 0, 1506 }, 1507 }; 1508 1509 /* 1510 * Send an interrupt to the device to wake up the Target CPU 1511 * so it has an opportunity to notice any changed state. 1512 */ 1513 static int ath10k_pci_wake_target_cpu(struct ath10k *ar) 1514 { 1515 int ret; 1516 u32 core_ctrl; 1517 1518 ret = ath10k_pci_diag_read_access(ar, SOC_CORE_BASE_ADDRESS | 1519 CORE_CTRL_ADDRESS, 1520 &core_ctrl); 1521 if (ret) { 1522 ath10k_warn("Unable to read core ctrl\n"); 1523 return ret; 1524 } 1525 1526 /* A_INUM_FIRMWARE interrupt to Target CPU */ 1527 core_ctrl |= CORE_CTRL_CPU_INTR_MASK; 1528 1529 ret = ath10k_pci_diag_write_access(ar, SOC_CORE_BASE_ADDRESS | 1530 CORE_CTRL_ADDRESS, 1531 core_ctrl); 1532 if (ret) 1533 ath10k_warn("Unable to set interrupt mask\n"); 1534 1535 return ret; 1536 } 1537 1538 static int ath10k_pci_init_config(struct ath10k *ar) 1539 { 1540 u32 interconnect_targ_addr; 1541 u32 pcie_state_targ_addr = 0; 1542 u32 pipe_cfg_targ_addr = 0; 1543 u32 svc_to_pipe_map = 0; 1544 u32 pcie_config_flags = 0; 1545 u32 ealloc_value; 1546 u32 ealloc_targ_addr; 1547 u32 flag2_value; 1548 u32 flag2_targ_addr; 1549 int ret = 0; 1550 1551 /* Download to Target the CE Config and the service-to-CE map */ 1552 interconnect_targ_addr = 1553 host_interest_item_address(HI_ITEM(hi_interconnect_state)); 1554 1555 /* Supply Target-side CE configuration */ 1556 ret = ath10k_pci_diag_read_access(ar, interconnect_targ_addr, 1557 &pcie_state_targ_addr); 1558 if (ret != 0) { 1559 ath10k_err("Failed to get pcie state addr: %d\n", ret); 1560 return ret; 1561 } 1562 1563 if (pcie_state_targ_addr == 0) { 1564 ret = -EIO; 1565 ath10k_err("Invalid pcie state addr\n"); 1566 return ret; 1567 } 1568 1569 ret = ath10k_pci_diag_read_access(ar, pcie_state_targ_addr + 1570 offsetof(struct pcie_state, 1571 pipe_cfg_addr), 1572 &pipe_cfg_targ_addr); 1573 if (ret != 0) { 1574 ath10k_err("Failed to get pipe cfg addr: %d\n", ret); 1575 return ret; 1576 } 1577 1578 if (pipe_cfg_targ_addr == 0) { 1579 ret = -EIO; 1580 ath10k_err("Invalid pipe cfg addr\n"); 1581 return ret; 1582 } 1583 1584 ret = ath10k_pci_diag_write_mem(ar, pipe_cfg_targ_addr, 1585 target_ce_config_wlan, 1586 sizeof(target_ce_config_wlan)); 1587 1588 if (ret != 0) { 1589 ath10k_err("Failed to write pipe cfg: %d\n", ret); 1590 return ret; 1591 } 1592 1593 ret = ath10k_pci_diag_read_access(ar, pcie_state_targ_addr + 1594 offsetof(struct pcie_state, 1595 svc_to_pipe_map), 1596 &svc_to_pipe_map); 1597 if (ret != 0) { 1598 ath10k_err("Failed to get svc/pipe map: %d\n", ret); 1599 return ret; 1600 } 1601 1602 if (svc_to_pipe_map == 0) { 1603 ret = -EIO; 1604 ath10k_err("Invalid svc_to_pipe map\n"); 1605 return ret; 1606 } 1607 1608 ret = ath10k_pci_diag_write_mem(ar, svc_to_pipe_map, 1609 target_service_to_ce_map_wlan, 1610 sizeof(target_service_to_ce_map_wlan)); 1611 if (ret != 0) { 1612 ath10k_err("Failed to write svc/pipe map: %d\n", ret); 1613 return ret; 1614 } 1615 1616 ret = ath10k_pci_diag_read_access(ar, pcie_state_targ_addr + 1617 offsetof(struct pcie_state, 1618 config_flags), 1619 &pcie_config_flags); 1620 if (ret != 0) { 1621 ath10k_err("Failed to get pcie config_flags: %d\n", ret); 1622 return ret; 1623 } 1624 1625 pcie_config_flags &= ~PCIE_CONFIG_FLAG_ENABLE_L1; 1626 1627 ret = ath10k_pci_diag_write_mem(ar, pcie_state_targ_addr + 1628 offsetof(struct pcie_state, config_flags), 1629 &pcie_config_flags, 1630 sizeof(pcie_config_flags)); 1631 if (ret != 0) { 1632 ath10k_err("Failed to write pcie config_flags: %d\n", ret); 1633 return ret; 1634 } 1635 1636 /* configure early allocation */ 1637 ealloc_targ_addr = host_interest_item_address(HI_ITEM(hi_early_alloc)); 1638 1639 ret = ath10k_pci_diag_read_access(ar, ealloc_targ_addr, &ealloc_value); 1640 if (ret != 0) { 1641 ath10k_err("Faile to get early alloc val: %d\n", ret); 1642 return ret; 1643 } 1644 1645 /* first bank is switched to IRAM */ 1646 ealloc_value |= ((HI_EARLY_ALLOC_MAGIC << HI_EARLY_ALLOC_MAGIC_SHIFT) & 1647 HI_EARLY_ALLOC_MAGIC_MASK); 1648 ealloc_value |= ((1 << HI_EARLY_ALLOC_IRAM_BANKS_SHIFT) & 1649 HI_EARLY_ALLOC_IRAM_BANKS_MASK); 1650 1651 ret = ath10k_pci_diag_write_access(ar, ealloc_targ_addr, ealloc_value); 1652 if (ret != 0) { 1653 ath10k_err("Failed to set early alloc val: %d\n", ret); 1654 return ret; 1655 } 1656 1657 /* Tell Target to proceed with initialization */ 1658 flag2_targ_addr = host_interest_item_address(HI_ITEM(hi_option_flag2)); 1659 1660 ret = ath10k_pci_diag_read_access(ar, flag2_targ_addr, &flag2_value); 1661 if (ret != 0) { 1662 ath10k_err("Failed to get option val: %d\n", ret); 1663 return ret; 1664 } 1665 1666 flag2_value |= HI_OPTION_EARLY_CFG_DONE; 1667 1668 ret = ath10k_pci_diag_write_access(ar, flag2_targ_addr, flag2_value); 1669 if (ret != 0) { 1670 ath10k_err("Failed to set option val: %d\n", ret); 1671 return ret; 1672 } 1673 1674 return 0; 1675 } 1676 1677 1678 1679 static int ath10k_pci_ce_init(struct ath10k *ar) 1680 { 1681 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1682 struct hif_ce_pipe_info *pipe_info; 1683 const struct ce_attr *attr; 1684 int pipe_num; 1685 1686 for (pipe_num = 0; pipe_num < ar_pci->ce_count; pipe_num++) { 1687 pipe_info = &ar_pci->pipe_info[pipe_num]; 1688 pipe_info->pipe_num = pipe_num; 1689 pipe_info->hif_ce_state = ar; 1690 attr = &host_ce_config_wlan[pipe_num]; 1691 1692 pipe_info->ce_hdl = ath10k_ce_init(ar, pipe_num, attr); 1693 if (pipe_info->ce_hdl == NULL) { 1694 ath10k_err("Unable to initialize CE for pipe: %d\n", 1695 pipe_num); 1696 1697 /* It is safe to call it here. It checks if ce_hdl is 1698 * valid for each pipe */ 1699 ath10k_pci_ce_deinit(ar); 1700 return -1; 1701 } 1702 1703 if (pipe_num == ar_pci->ce_count - 1) { 1704 /* 1705 * Reserve the ultimate CE for 1706 * diagnostic Window support 1707 */ 1708 ar_pci->ce_diag = 1709 ar_pci->pipe_info[ar_pci->ce_count - 1].ce_hdl; 1710 continue; 1711 } 1712 1713 pipe_info->buf_sz = (size_t) (attr->src_sz_max); 1714 } 1715 1716 /* 1717 * Initially, establish CE completion handlers for use with BMI. 1718 * These are overwritten with generic handlers after we exit BMI phase. 1719 */ 1720 pipe_info = &ar_pci->pipe_info[BMI_CE_NUM_TO_TARG]; 1721 ath10k_ce_send_cb_register(pipe_info->ce_hdl, 1722 ath10k_pci_bmi_send_done, 0); 1723 1724 pipe_info = &ar_pci->pipe_info[BMI_CE_NUM_TO_HOST]; 1725 ath10k_ce_recv_cb_register(pipe_info->ce_hdl, 1726 ath10k_pci_bmi_recv_data); 1727 1728 return 0; 1729 } 1730 1731 static void ath10k_pci_fw_interrupt_handler(struct ath10k *ar) 1732 { 1733 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1734 u32 fw_indicator_address, fw_indicator; 1735 1736 ath10k_pci_wake(ar); 1737 1738 fw_indicator_address = ar_pci->fw_indicator_address; 1739 fw_indicator = ath10k_pci_read32(ar, fw_indicator_address); 1740 1741 if (fw_indicator & FW_IND_EVENT_PENDING) { 1742 /* ACK: clear Target-side pending event */ 1743 ath10k_pci_write32(ar, fw_indicator_address, 1744 fw_indicator & ~FW_IND_EVENT_PENDING); 1745 1746 if (ar_pci->started) { 1747 ath10k_pci_hif_dump_area(ar); 1748 } else { 1749 /* 1750 * Probable Target failure before we're prepared 1751 * to handle it. Generally unexpected. 1752 */ 1753 ath10k_warn("early firmware event indicated\n"); 1754 } 1755 } 1756 1757 ath10k_pci_sleep(ar); 1758 } 1759 1760 static int ath10k_pci_hif_power_up(struct ath10k *ar) 1761 { 1762 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1763 int ret; 1764 1765 ret = ath10k_pci_start_intr(ar); 1766 if (ret) { 1767 ath10k_err("could not start interrupt handling (%d)\n", ret); 1768 goto err; 1769 } 1770 1771 /* 1772 * Bring the target up cleanly. 1773 * 1774 * The target may be in an undefined state with an AUX-powered Target 1775 * and a Host in WoW mode. If the Host crashes, loses power, or is 1776 * restarted (without unloading the driver) then the Target is left 1777 * (aux) powered and running. On a subsequent driver load, the Target 1778 * is in an unexpected state. We try to catch that here in order to 1779 * reset the Target and retry the probe. 1780 */ 1781 ath10k_pci_device_reset(ar); 1782 1783 ret = ath10k_pci_reset_target(ar); 1784 if (ret) 1785 goto err_irq; 1786 1787 if (!test_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features)) 1788 /* Force AWAKE forever */ 1789 ath10k_do_pci_wake(ar); 1790 1791 ret = ath10k_pci_ce_init(ar); 1792 if (ret) 1793 goto err_ps; 1794 1795 ret = ath10k_pci_init_config(ar); 1796 if (ret) 1797 goto err_ce; 1798 1799 ret = ath10k_pci_wake_target_cpu(ar); 1800 if (ret) { 1801 ath10k_err("could not wake up target CPU (%d)\n", ret); 1802 goto err_ce; 1803 } 1804 1805 return 0; 1806 1807 err_ce: 1808 ath10k_pci_ce_deinit(ar); 1809 err_ps: 1810 if (!test_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features)) 1811 ath10k_do_pci_sleep(ar); 1812 err_irq: 1813 ath10k_pci_stop_intr(ar); 1814 err: 1815 return ret; 1816 } 1817 1818 static void ath10k_pci_hif_power_down(struct ath10k *ar) 1819 { 1820 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1821 1822 ath10k_pci_stop_intr(ar); 1823 1824 ath10k_pci_ce_deinit(ar); 1825 if (!test_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features)) 1826 ath10k_do_pci_sleep(ar); 1827 } 1828 1829 #ifdef CONFIG_PM 1830 1831 #define ATH10K_PCI_PM_CONTROL 0x44 1832 1833 static int ath10k_pci_hif_suspend(struct ath10k *ar) 1834 { 1835 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1836 struct pci_dev *pdev = ar_pci->pdev; 1837 u32 val; 1838 1839 pci_read_config_dword(pdev, ATH10K_PCI_PM_CONTROL, &val); 1840 1841 if ((val & 0x000000ff) != 0x3) { 1842 pci_save_state(pdev); 1843 pci_disable_device(pdev); 1844 pci_write_config_dword(pdev, ATH10K_PCI_PM_CONTROL, 1845 (val & 0xffffff00) | 0x03); 1846 } 1847 1848 return 0; 1849 } 1850 1851 static int ath10k_pci_hif_resume(struct ath10k *ar) 1852 { 1853 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1854 struct pci_dev *pdev = ar_pci->pdev; 1855 u32 val; 1856 1857 pci_read_config_dword(pdev, ATH10K_PCI_PM_CONTROL, &val); 1858 1859 if ((val & 0x000000ff) != 0) { 1860 pci_restore_state(pdev); 1861 pci_write_config_dword(pdev, ATH10K_PCI_PM_CONTROL, 1862 val & 0xffffff00); 1863 /* 1864 * Suspend/Resume resets the PCI configuration space, 1865 * so we have to re-disable the RETRY_TIMEOUT register (0x41) 1866 * to keep PCI Tx retries from interfering with C3 CPU state 1867 */ 1868 pci_read_config_dword(pdev, 0x40, &val); 1869 1870 if ((val & 0x0000ff00) != 0) 1871 pci_write_config_dword(pdev, 0x40, val & 0xffff00ff); 1872 } 1873 1874 return 0; 1875 } 1876 #endif 1877 1878 static const struct ath10k_hif_ops ath10k_pci_hif_ops = { 1879 .send_head = ath10k_pci_hif_send_head, 1880 .exchange_bmi_msg = ath10k_pci_hif_exchange_bmi_msg, 1881 .start = ath10k_pci_hif_start, 1882 .stop = ath10k_pci_hif_stop, 1883 .map_service_to_pipe = ath10k_pci_hif_map_service_to_pipe, 1884 .get_default_pipe = ath10k_pci_hif_get_default_pipe, 1885 .send_complete_check = ath10k_pci_hif_send_complete_check, 1886 .set_callbacks = ath10k_pci_hif_set_callbacks, 1887 .get_free_queue_number = ath10k_pci_hif_get_free_queue_number, 1888 .power_up = ath10k_pci_hif_power_up, 1889 .power_down = ath10k_pci_hif_power_down, 1890 #ifdef CONFIG_PM 1891 .suspend = ath10k_pci_hif_suspend, 1892 .resume = ath10k_pci_hif_resume, 1893 #endif 1894 }; 1895 1896 static void ath10k_pci_ce_tasklet(unsigned long ptr) 1897 { 1898 struct hif_ce_pipe_info *pipe = (struct hif_ce_pipe_info *)ptr; 1899 struct ath10k_pci *ar_pci = pipe->ar_pci; 1900 1901 ath10k_ce_per_engine_service(ar_pci->ar, pipe->pipe_num); 1902 } 1903 1904 static void ath10k_msi_err_tasklet(unsigned long data) 1905 { 1906 struct ath10k *ar = (struct ath10k *)data; 1907 1908 ath10k_pci_fw_interrupt_handler(ar); 1909 } 1910 1911 /* 1912 * Handler for a per-engine interrupt on a PARTICULAR CE. 1913 * This is used in cases where each CE has a private MSI interrupt. 1914 */ 1915 static irqreturn_t ath10k_pci_per_engine_handler(int irq, void *arg) 1916 { 1917 struct ath10k *ar = arg; 1918 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1919 int ce_id = irq - ar_pci->pdev->irq - MSI_ASSIGN_CE_INITIAL; 1920 1921 if (ce_id < 0 || ce_id >= ARRAY_SIZE(ar_pci->pipe_info)) { 1922 ath10k_warn("unexpected/invalid irq %d ce_id %d\n", irq, ce_id); 1923 return IRQ_HANDLED; 1924 } 1925 1926 /* 1927 * NOTE: We are able to derive ce_id from irq because we 1928 * use a one-to-one mapping for CE's 0..5. 1929 * CE's 6 & 7 do not use interrupts at all. 1930 * 1931 * This mapping must be kept in sync with the mapping 1932 * used by firmware. 1933 */ 1934 tasklet_schedule(&ar_pci->pipe_info[ce_id].intr); 1935 return IRQ_HANDLED; 1936 } 1937 1938 static irqreturn_t ath10k_pci_msi_fw_handler(int irq, void *arg) 1939 { 1940 struct ath10k *ar = arg; 1941 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1942 1943 tasklet_schedule(&ar_pci->msi_fw_err); 1944 return IRQ_HANDLED; 1945 } 1946 1947 /* 1948 * Top-level interrupt handler for all PCI interrupts from a Target. 1949 * When a block of MSI interrupts is allocated, this top-level handler 1950 * is not used; instead, we directly call the correct sub-handler. 1951 */ 1952 static irqreturn_t ath10k_pci_interrupt_handler(int irq, void *arg) 1953 { 1954 struct ath10k *ar = arg; 1955 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1956 1957 if (ar_pci->num_msi_intrs == 0) { 1958 /* 1959 * IMPORTANT: INTR_CLR regiser has to be set after 1960 * INTR_ENABLE is set to 0, otherwise interrupt can not be 1961 * really cleared. 1962 */ 1963 iowrite32(0, ar_pci->mem + 1964 (SOC_CORE_BASE_ADDRESS | 1965 PCIE_INTR_ENABLE_ADDRESS)); 1966 iowrite32(PCIE_INTR_FIRMWARE_MASK | 1967 PCIE_INTR_CE_MASK_ALL, 1968 ar_pci->mem + (SOC_CORE_BASE_ADDRESS | 1969 PCIE_INTR_CLR_ADDRESS)); 1970 /* 1971 * IMPORTANT: this extra read transaction is required to 1972 * flush the posted write buffer. 1973 */ 1974 (void) ioread32(ar_pci->mem + 1975 (SOC_CORE_BASE_ADDRESS | 1976 PCIE_INTR_ENABLE_ADDRESS)); 1977 } 1978 1979 tasklet_schedule(&ar_pci->intr_tq); 1980 1981 return IRQ_HANDLED; 1982 } 1983 1984 static void ath10k_pci_tasklet(unsigned long data) 1985 { 1986 struct ath10k *ar = (struct ath10k *)data; 1987 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 1988 1989 ath10k_pci_fw_interrupt_handler(ar); /* FIXME: Handle FW error */ 1990 ath10k_ce_per_engine_service_any(ar); 1991 1992 if (ar_pci->num_msi_intrs == 0) { 1993 /* Enable Legacy PCI line interrupts */ 1994 iowrite32(PCIE_INTR_FIRMWARE_MASK | 1995 PCIE_INTR_CE_MASK_ALL, 1996 ar_pci->mem + (SOC_CORE_BASE_ADDRESS | 1997 PCIE_INTR_ENABLE_ADDRESS)); 1998 /* 1999 * IMPORTANT: this extra read transaction is required to 2000 * flush the posted write buffer 2001 */ 2002 (void) ioread32(ar_pci->mem + 2003 (SOC_CORE_BASE_ADDRESS | 2004 PCIE_INTR_ENABLE_ADDRESS)); 2005 } 2006 } 2007 2008 static int ath10k_pci_start_intr_msix(struct ath10k *ar, int num) 2009 { 2010 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 2011 int ret; 2012 int i; 2013 2014 ret = pci_enable_msi_block(ar_pci->pdev, num); 2015 if (ret) 2016 return ret; 2017 2018 ret = request_irq(ar_pci->pdev->irq + MSI_ASSIGN_FW, 2019 ath10k_pci_msi_fw_handler, 2020 IRQF_SHARED, "ath10k_pci", ar); 2021 if (ret) { 2022 ath10k_warn("request_irq(%d) failed %d\n", 2023 ar_pci->pdev->irq + MSI_ASSIGN_FW, ret); 2024 2025 pci_disable_msi(ar_pci->pdev); 2026 return ret; 2027 } 2028 2029 for (i = MSI_ASSIGN_CE_INITIAL; i <= MSI_ASSIGN_CE_MAX; i++) { 2030 ret = request_irq(ar_pci->pdev->irq + i, 2031 ath10k_pci_per_engine_handler, 2032 IRQF_SHARED, "ath10k_pci", ar); 2033 if (ret) { 2034 ath10k_warn("request_irq(%d) failed %d\n", 2035 ar_pci->pdev->irq + i, ret); 2036 2037 for (i--; i >= MSI_ASSIGN_CE_INITIAL; i--) 2038 free_irq(ar_pci->pdev->irq + i, ar); 2039 2040 free_irq(ar_pci->pdev->irq + MSI_ASSIGN_FW, ar); 2041 pci_disable_msi(ar_pci->pdev); 2042 return ret; 2043 } 2044 } 2045 2046 ath10k_info("MSI-X interrupt handling (%d intrs)\n", num); 2047 return 0; 2048 } 2049 2050 static int ath10k_pci_start_intr_msi(struct ath10k *ar) 2051 { 2052 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 2053 int ret; 2054 2055 ret = pci_enable_msi(ar_pci->pdev); 2056 if (ret < 0) 2057 return ret; 2058 2059 ret = request_irq(ar_pci->pdev->irq, 2060 ath10k_pci_interrupt_handler, 2061 IRQF_SHARED, "ath10k_pci", ar); 2062 if (ret < 0) { 2063 pci_disable_msi(ar_pci->pdev); 2064 return ret; 2065 } 2066 2067 ath10k_info("MSI interrupt handling\n"); 2068 return 0; 2069 } 2070 2071 static int ath10k_pci_start_intr_legacy(struct ath10k *ar) 2072 { 2073 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 2074 int ret; 2075 2076 ret = request_irq(ar_pci->pdev->irq, 2077 ath10k_pci_interrupt_handler, 2078 IRQF_SHARED, "ath10k_pci", ar); 2079 if (ret < 0) 2080 return ret; 2081 2082 /* 2083 * Make sure to wake the Target before enabling Legacy 2084 * Interrupt. 2085 */ 2086 iowrite32(PCIE_SOC_WAKE_V_MASK, 2087 ar_pci->mem + PCIE_LOCAL_BASE_ADDRESS + 2088 PCIE_SOC_WAKE_ADDRESS); 2089 2090 ath10k_pci_wait(ar); 2091 2092 /* 2093 * A potential race occurs here: The CORE_BASE write 2094 * depends on target correctly decoding AXI address but 2095 * host won't know when target writes BAR to CORE_CTRL. 2096 * This write might get lost if target has NOT written BAR. 2097 * For now, fix the race by repeating the write in below 2098 * synchronization checking. 2099 */ 2100 iowrite32(PCIE_INTR_FIRMWARE_MASK | 2101 PCIE_INTR_CE_MASK_ALL, 2102 ar_pci->mem + (SOC_CORE_BASE_ADDRESS | 2103 PCIE_INTR_ENABLE_ADDRESS)); 2104 iowrite32(PCIE_SOC_WAKE_RESET, 2105 ar_pci->mem + PCIE_LOCAL_BASE_ADDRESS + 2106 PCIE_SOC_WAKE_ADDRESS); 2107 2108 ath10k_info("legacy interrupt handling\n"); 2109 return 0; 2110 } 2111 2112 static int ath10k_pci_start_intr(struct ath10k *ar) 2113 { 2114 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 2115 int num = MSI_NUM_REQUEST; 2116 int ret; 2117 int i; 2118 2119 tasklet_init(&ar_pci->intr_tq, ath10k_pci_tasklet, (unsigned long) ar); 2120 tasklet_init(&ar_pci->msi_fw_err, ath10k_msi_err_tasklet, 2121 (unsigned long) ar); 2122 2123 for (i = 0; i < CE_COUNT; i++) { 2124 ar_pci->pipe_info[i].ar_pci = ar_pci; 2125 tasklet_init(&ar_pci->pipe_info[i].intr, 2126 ath10k_pci_ce_tasklet, 2127 (unsigned long)&ar_pci->pipe_info[i]); 2128 } 2129 2130 if (!test_bit(ATH10K_PCI_FEATURE_MSI_X, ar_pci->features)) 2131 num = 1; 2132 2133 if (num > 1) { 2134 ret = ath10k_pci_start_intr_msix(ar, num); 2135 if (ret == 0) 2136 goto exit; 2137 2138 ath10k_warn("MSI-X didn't succeed (%d), trying MSI\n", ret); 2139 num = 1; 2140 } 2141 2142 if (num == 1) { 2143 ret = ath10k_pci_start_intr_msi(ar); 2144 if (ret == 0) 2145 goto exit; 2146 2147 ath10k_warn("MSI didn't succeed (%d), trying legacy INTR\n", 2148 ret); 2149 num = 0; 2150 } 2151 2152 ret = ath10k_pci_start_intr_legacy(ar); 2153 2154 exit: 2155 ar_pci->num_msi_intrs = num; 2156 ar_pci->ce_count = CE_COUNT; 2157 return ret; 2158 } 2159 2160 static void ath10k_pci_stop_intr(struct ath10k *ar) 2161 { 2162 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 2163 int i; 2164 2165 /* There's at least one interrupt irregardless whether its legacy INTR 2166 * or MSI or MSI-X */ 2167 for (i = 0; i < max(1, ar_pci->num_msi_intrs); i++) 2168 free_irq(ar_pci->pdev->irq + i, ar); 2169 2170 if (ar_pci->num_msi_intrs > 0) 2171 pci_disable_msi(ar_pci->pdev); 2172 } 2173 2174 static int ath10k_pci_reset_target(struct ath10k *ar) 2175 { 2176 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 2177 int wait_limit = 300; /* 3 sec */ 2178 2179 /* Wait for Target to finish initialization before we proceed. */ 2180 iowrite32(PCIE_SOC_WAKE_V_MASK, 2181 ar_pci->mem + PCIE_LOCAL_BASE_ADDRESS + 2182 PCIE_SOC_WAKE_ADDRESS); 2183 2184 ath10k_pci_wait(ar); 2185 2186 while (wait_limit-- && 2187 !(ioread32(ar_pci->mem + FW_INDICATOR_ADDRESS) & 2188 FW_IND_INITIALIZED)) { 2189 if (ar_pci->num_msi_intrs == 0) 2190 /* Fix potential race by repeating CORE_BASE writes */ 2191 iowrite32(PCIE_INTR_FIRMWARE_MASK | 2192 PCIE_INTR_CE_MASK_ALL, 2193 ar_pci->mem + (SOC_CORE_BASE_ADDRESS | 2194 PCIE_INTR_ENABLE_ADDRESS)); 2195 mdelay(10); 2196 } 2197 2198 if (wait_limit < 0) { 2199 ath10k_err("Target stalled\n"); 2200 iowrite32(PCIE_SOC_WAKE_RESET, 2201 ar_pci->mem + PCIE_LOCAL_BASE_ADDRESS + 2202 PCIE_SOC_WAKE_ADDRESS); 2203 return -EIO; 2204 } 2205 2206 iowrite32(PCIE_SOC_WAKE_RESET, 2207 ar_pci->mem + PCIE_LOCAL_BASE_ADDRESS + 2208 PCIE_SOC_WAKE_ADDRESS); 2209 2210 return 0; 2211 } 2212 2213 static void ath10k_pci_device_reset(struct ath10k *ar) 2214 { 2215 struct ath10k_pci *ar_pci = ath10k_pci_priv(ar); 2216 void __iomem *mem = ar_pci->mem; 2217 int i; 2218 u32 val; 2219 2220 if (!SOC_GLOBAL_RESET_ADDRESS) 2221 return; 2222 2223 if (!mem) 2224 return; 2225 2226 ath10k_pci_reg_write32(mem, PCIE_SOC_WAKE_ADDRESS, 2227 PCIE_SOC_WAKE_V_MASK); 2228 for (i = 0; i < ATH_PCI_RESET_WAIT_MAX; i++) { 2229 if (ath10k_pci_target_is_awake(ar)) 2230 break; 2231 msleep(1); 2232 } 2233 2234 /* Put Target, including PCIe, into RESET. */ 2235 val = ath10k_pci_reg_read32(mem, SOC_GLOBAL_RESET_ADDRESS); 2236 val |= 1; 2237 ath10k_pci_reg_write32(mem, SOC_GLOBAL_RESET_ADDRESS, val); 2238 2239 for (i = 0; i < ATH_PCI_RESET_WAIT_MAX; i++) { 2240 if (ath10k_pci_reg_read32(mem, RTC_STATE_ADDRESS) & 2241 RTC_STATE_COLD_RESET_MASK) 2242 break; 2243 msleep(1); 2244 } 2245 2246 /* Pull Target, including PCIe, out of RESET. */ 2247 val &= ~1; 2248 ath10k_pci_reg_write32(mem, SOC_GLOBAL_RESET_ADDRESS, val); 2249 2250 for (i = 0; i < ATH_PCI_RESET_WAIT_MAX; i++) { 2251 if (!(ath10k_pci_reg_read32(mem, RTC_STATE_ADDRESS) & 2252 RTC_STATE_COLD_RESET_MASK)) 2253 break; 2254 msleep(1); 2255 } 2256 2257 ath10k_pci_reg_write32(mem, PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_RESET); 2258 } 2259 2260 static void ath10k_pci_dump_features(struct ath10k_pci *ar_pci) 2261 { 2262 int i; 2263 2264 for (i = 0; i < ATH10K_PCI_FEATURE_COUNT; i++) { 2265 if (!test_bit(i, ar_pci->features)) 2266 continue; 2267 2268 switch (i) { 2269 case ATH10K_PCI_FEATURE_MSI_X: 2270 ath10k_dbg(ATH10K_DBG_PCI, "device supports MSI-X\n"); 2271 break; 2272 case ATH10K_PCI_FEATURE_HW_1_0_WORKAROUND: 2273 ath10k_dbg(ATH10K_DBG_PCI, "QCA988X_1.0 workaround enabled\n"); 2274 break; 2275 case ATH10K_PCI_FEATURE_SOC_POWER_SAVE: 2276 ath10k_dbg(ATH10K_DBG_PCI, "QCA98XX SoC power save enabled\n"); 2277 break; 2278 } 2279 } 2280 } 2281 2282 static int ath10k_pci_probe(struct pci_dev *pdev, 2283 const struct pci_device_id *pci_dev) 2284 { 2285 void __iomem *mem; 2286 int ret = 0; 2287 struct ath10k *ar; 2288 struct ath10k_pci *ar_pci; 2289 u32 lcr_val; 2290 2291 ath10k_dbg(ATH10K_DBG_PCI, "%s\n", __func__); 2292 2293 ar_pci = kzalloc(sizeof(*ar_pci), GFP_KERNEL); 2294 if (ar_pci == NULL) 2295 return -ENOMEM; 2296 2297 ar_pci->pdev = pdev; 2298 ar_pci->dev = &pdev->dev; 2299 2300 switch (pci_dev->device) { 2301 case QCA988X_1_0_DEVICE_ID: 2302 set_bit(ATH10K_PCI_FEATURE_HW_1_0_WORKAROUND, ar_pci->features); 2303 break; 2304 case QCA988X_2_0_DEVICE_ID: 2305 set_bit(ATH10K_PCI_FEATURE_MSI_X, ar_pci->features); 2306 break; 2307 default: 2308 ret = -ENODEV; 2309 ath10k_err("Unkown device ID: %d\n", pci_dev->device); 2310 goto err_ar_pci; 2311 } 2312 2313 if (ath10k_target_ps) 2314 set_bit(ATH10K_PCI_FEATURE_SOC_POWER_SAVE, ar_pci->features); 2315 2316 ath10k_pci_dump_features(ar_pci); 2317 2318 ar = ath10k_core_create(ar_pci, ar_pci->dev, &ath10k_pci_hif_ops); 2319 if (!ar) { 2320 ath10k_err("ath10k_core_create failed!\n"); 2321 ret = -EINVAL; 2322 goto err_ar_pci; 2323 } 2324 2325 /* Enable QCA988X_1.0 HW workarounds */ 2326 if (test_bit(ATH10K_PCI_FEATURE_HW_1_0_WORKAROUND, ar_pci->features)) 2327 spin_lock_init(&ar_pci->hw_v1_workaround_lock); 2328 2329 ar_pci->ar = ar; 2330 ar_pci->fw_indicator_address = FW_INDICATOR_ADDRESS; 2331 atomic_set(&ar_pci->keep_awake_count, 0); 2332 2333 pci_set_drvdata(pdev, ar); 2334 2335 /* 2336 * Without any knowledge of the Host, the Target may have been reset or 2337 * power cycled and its Config Space may no longer reflect the PCI 2338 * address space that was assigned earlier by the PCI infrastructure. 2339 * Refresh it now. 2340 */ 2341 ret = pci_assign_resource(pdev, BAR_NUM); 2342 if (ret) { 2343 ath10k_err("cannot assign PCI space: %d\n", ret); 2344 goto err_ar; 2345 } 2346 2347 ret = pci_enable_device(pdev); 2348 if (ret) { 2349 ath10k_err("cannot enable PCI device: %d\n", ret); 2350 goto err_ar; 2351 } 2352 2353 /* Request MMIO resources */ 2354 ret = pci_request_region(pdev, BAR_NUM, "ath"); 2355 if (ret) { 2356 ath10k_err("PCI MMIO reservation error: %d\n", ret); 2357 goto err_device; 2358 } 2359 2360 /* 2361 * Target structures have a limit of 32 bit DMA pointers. 2362 * DMA pointers can be wider than 32 bits by default on some systems. 2363 */ 2364 ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 2365 if (ret) { 2366 ath10k_err("32-bit DMA not available: %d\n", ret); 2367 goto err_region; 2368 } 2369 2370 ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); 2371 if (ret) { 2372 ath10k_err("cannot enable 32-bit consistent DMA\n"); 2373 goto err_region; 2374 } 2375 2376 /* Set bus master bit in PCI_COMMAND to enable DMA */ 2377 pci_set_master(pdev); 2378 2379 /* 2380 * Temporary FIX: disable ASPM 2381 * Will be removed after the OTP is programmed 2382 */ 2383 pci_read_config_dword(pdev, 0x80, &lcr_val); 2384 pci_write_config_dword(pdev, 0x80, (lcr_val & 0xffffff00)); 2385 2386 /* Arrange for access to Target SoC registers. */ 2387 mem = pci_iomap(pdev, BAR_NUM, 0); 2388 if (!mem) { 2389 ath10k_err("PCI iomap error\n"); 2390 ret = -EIO; 2391 goto err_master; 2392 } 2393 2394 ar_pci->mem = mem; 2395 2396 spin_lock_init(&ar_pci->ce_lock); 2397 2398 ar_pci->cacheline_sz = dma_get_cache_alignment(); 2399 2400 ret = ath10k_core_register(ar); 2401 if (ret) { 2402 ath10k_err("could not register driver core (%d)\n", ret); 2403 goto err_iomap; 2404 } 2405 2406 return 0; 2407 2408 err_iomap: 2409 pci_iounmap(pdev, mem); 2410 err_master: 2411 pci_clear_master(pdev); 2412 err_region: 2413 pci_release_region(pdev, BAR_NUM); 2414 err_device: 2415 pci_disable_device(pdev); 2416 err_ar: 2417 pci_set_drvdata(pdev, NULL); 2418 ath10k_core_destroy(ar); 2419 err_ar_pci: 2420 /* call HIF PCI free here */ 2421 kfree(ar_pci); 2422 2423 return ret; 2424 } 2425 2426 static void ath10k_pci_remove(struct pci_dev *pdev) 2427 { 2428 struct ath10k *ar = pci_get_drvdata(pdev); 2429 struct ath10k_pci *ar_pci; 2430 2431 ath10k_dbg(ATH10K_DBG_PCI, "%s\n", __func__); 2432 2433 if (!ar) 2434 return; 2435 2436 ar_pci = ath10k_pci_priv(ar); 2437 2438 if (!ar_pci) 2439 return; 2440 2441 tasklet_kill(&ar_pci->msi_fw_err); 2442 2443 ath10k_core_unregister(ar); 2444 2445 pci_set_drvdata(pdev, NULL); 2446 pci_iounmap(pdev, ar_pci->mem); 2447 pci_release_region(pdev, BAR_NUM); 2448 pci_clear_master(pdev); 2449 pci_disable_device(pdev); 2450 2451 ath10k_core_destroy(ar); 2452 kfree(ar_pci); 2453 } 2454 2455 MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table); 2456 2457 static struct pci_driver ath10k_pci_driver = { 2458 .name = "ath10k_pci", 2459 .id_table = ath10k_pci_id_table, 2460 .probe = ath10k_pci_probe, 2461 .remove = ath10k_pci_remove, 2462 }; 2463 2464 static int __init ath10k_pci_init(void) 2465 { 2466 int ret; 2467 2468 ret = pci_register_driver(&ath10k_pci_driver); 2469 if (ret) 2470 ath10k_err("pci_register_driver failed [%d]\n", ret); 2471 2472 return ret; 2473 } 2474 module_init(ath10k_pci_init); 2475 2476 static void __exit ath10k_pci_exit(void) 2477 { 2478 pci_unregister_driver(&ath10k_pci_driver); 2479 } 2480 2481 module_exit(ath10k_pci_exit); 2482 2483 MODULE_AUTHOR("Qualcomm Atheros"); 2484 MODULE_DESCRIPTION("Driver support for Atheros QCA988X PCIe devices"); 2485 MODULE_LICENSE("Dual BSD/GPL"); 2486 MODULE_FIRMWARE(QCA988X_HW_1_0_FW_DIR "/" QCA988X_HW_1_0_FW_FILE); 2487 MODULE_FIRMWARE(QCA988X_HW_1_0_FW_DIR "/" QCA988X_HW_1_0_OTP_FILE); 2488 MODULE_FIRMWARE(QCA988X_HW_1_0_FW_DIR "/" QCA988X_HW_1_0_BOARD_DATA_FILE); 2489 MODULE_FIRMWARE(QCA988X_HW_2_0_FW_DIR "/" QCA988X_HW_2_0_FW_FILE); 2490 MODULE_FIRMWARE(QCA988X_HW_2_0_FW_DIR "/" QCA988X_HW_2_0_OTP_FILE); 2491 MODULE_FIRMWARE(QCA988X_HW_2_0_FW_DIR "/" QCA988X_HW_2_0_BOARD_DATA_FILE); 2492