1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * linux/drivers/net/wireless/libertas/if_sdio.c 4 * 5 * Copyright 2007-2008 Pierre Ossman 6 * 7 * Inspired by if_cs.c, Copyright 2007 Holger Schurig 8 * 9 * This hardware has more or less no CMD53 support, so all registers 10 * must be accessed using sdio_readb()/sdio_writeb(). 11 * 12 * Transfers must be in one transaction or the firmware goes bonkers. 13 * This means that the transfer must either be small enough to do a 14 * byte based transfer or it must be padded to a multiple of the 15 * current block size. 16 * 17 * As SDIO is still new to the kernel, it is unfortunately common with 18 * bugs in the host controllers related to that. One such bug is that 19 * controllers cannot do transfers that aren't a multiple of 4 bytes. 20 * If you don't have time to fix the host controller driver, you can 21 * work around the problem by modifying if_sdio_host_to_card() and 22 * if_sdio_card_to_host() to pad the data. 23 */ 24 25 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 26 27 #include <linux/kernel.h> 28 #include <linux/module.h> 29 #include <linux/slab.h> 30 #include <linux/firmware.h> 31 #include <linux/netdevice.h> 32 #include <linux/delay.h> 33 #include <linux/mmc/card.h> 34 #include <linux/mmc/sdio_func.h> 35 #include <linux/mmc/sdio_ids.h> 36 #include <linux/mmc/sdio.h> 37 #include <linux/mmc/host.h> 38 #include <linux/pm_runtime.h> 39 40 #include "host.h" 41 #include "decl.h" 42 #include "defs.h" 43 #include "dev.h" 44 #include "cmd.h" 45 #include "if_sdio.h" 46 47 static void if_sdio_interrupt(struct sdio_func *func); 48 49 /* The if_sdio_remove() callback function is called when 50 * user removes this module from kernel space or ejects 51 * the card from the slot. The driver handles these 2 cases 52 * differently for SD8688 combo chip. 53 * If the user is removing the module, the FUNC_SHUTDOWN 54 * command for SD8688 is sent to the firmware. 55 * If the card is removed, there is no need to send this command. 56 * 57 * The variable 'user_rmmod' is used to distinguish these two 58 * scenarios. This flag is initialized as FALSE in case the card 59 * is removed, and will be set to TRUE for module removal when 60 * module_exit function is called. 61 */ 62 static u8 user_rmmod; 63 64 static const struct sdio_device_id if_sdio_ids[] = { 65 { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 66 SDIO_DEVICE_ID_MARVELL_LIBERTAS) }, 67 { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, 68 SDIO_DEVICE_ID_MARVELL_8688WLAN) }, 69 { /* end: all zeroes */ }, 70 }; 71 72 MODULE_DEVICE_TABLE(sdio, if_sdio_ids); 73 74 #define MODEL_8385 0x04 75 #define MODEL_8686 0x0b 76 #define MODEL_8688 0x10 77 78 static const struct lbs_fw_table fw_table[] = { 79 { MODEL_8385, "libertas/sd8385_helper.bin", "libertas/sd8385.bin" }, 80 { MODEL_8385, "sd8385_helper.bin", "sd8385.bin" }, 81 { MODEL_8686, "libertas/sd8686_v9_helper.bin", "libertas/sd8686_v9.bin" }, 82 { MODEL_8686, "libertas/sd8686_v8_helper.bin", "libertas/sd8686_v8.bin" }, 83 { MODEL_8686, "sd8686_helper.bin", "sd8686.bin" }, 84 { MODEL_8688, "libertas/sd8688_helper.bin", "libertas/sd8688.bin" }, 85 { MODEL_8688, "sd8688_helper.bin", "sd8688.bin" }, 86 { 0, NULL, NULL } 87 }; 88 MODULE_FIRMWARE("libertas/sd8385_helper.bin"); 89 MODULE_FIRMWARE("libertas/sd8385.bin"); 90 MODULE_FIRMWARE("sd8385_helper.bin"); 91 MODULE_FIRMWARE("sd8385.bin"); 92 MODULE_FIRMWARE("libertas/sd8686_v9_helper.bin"); 93 MODULE_FIRMWARE("libertas/sd8686_v9.bin"); 94 MODULE_FIRMWARE("libertas/sd8686_v8_helper.bin"); 95 MODULE_FIRMWARE("libertas/sd8686_v8.bin"); 96 MODULE_FIRMWARE("sd8686_helper.bin"); 97 MODULE_FIRMWARE("sd8686.bin"); 98 MODULE_FIRMWARE("libertas/sd8688_helper.bin"); 99 MODULE_FIRMWARE("libertas/sd8688.bin"); 100 MODULE_FIRMWARE("sd8688_helper.bin"); 101 MODULE_FIRMWARE("sd8688.bin"); 102 103 struct if_sdio_packet { 104 struct if_sdio_packet *next; 105 u16 nb; 106 u8 buffer[] __aligned(4); 107 }; 108 109 struct if_sdio_card { 110 struct sdio_func *func; 111 struct lbs_private *priv; 112 113 int model; 114 unsigned long ioport; 115 unsigned int scratch_reg; 116 bool started; 117 wait_queue_head_t pwron_waitq; 118 119 u8 buffer[65536] __attribute__((aligned(4))); 120 121 spinlock_t lock; 122 struct if_sdio_packet *packets; 123 124 struct workqueue_struct *workqueue; 125 struct work_struct packet_worker; 126 127 u8 rx_unit; 128 }; 129 130 static void if_sdio_finish_power_on(struct if_sdio_card *card); 131 static int if_sdio_power_off(struct if_sdio_card *card); 132 133 /********************************************************************/ 134 /* I/O */ 135 /********************************************************************/ 136 137 /* 138 * For SD8385/SD8686, this function reads firmware status after 139 * the image is downloaded, or reads RX packet length when 140 * interrupt (with IF_SDIO_H_INT_UPLD bit set) is received. 141 * For SD8688, this function reads firmware status only. 142 */ 143 static u16 if_sdio_read_scratch(struct if_sdio_card *card, int *err) 144 { 145 int ret; 146 u16 scratch; 147 148 scratch = sdio_readb(card->func, card->scratch_reg, &ret); 149 if (!ret) 150 scratch |= sdio_readb(card->func, card->scratch_reg + 1, 151 &ret) << 8; 152 153 if (err) 154 *err = ret; 155 156 if (ret) 157 return 0xffff; 158 159 return scratch; 160 } 161 162 static u8 if_sdio_read_rx_unit(struct if_sdio_card *card) 163 { 164 int ret; 165 u8 rx_unit; 166 167 rx_unit = sdio_readb(card->func, IF_SDIO_RX_UNIT, &ret); 168 169 if (ret) 170 rx_unit = 0; 171 172 return rx_unit; 173 } 174 175 static u16 if_sdio_read_rx_len(struct if_sdio_card *card, int *err) 176 { 177 int ret; 178 u16 rx_len; 179 180 switch (card->model) { 181 case MODEL_8385: 182 case MODEL_8686: 183 rx_len = if_sdio_read_scratch(card, &ret); 184 break; 185 case MODEL_8688: 186 default: /* for newer chipsets */ 187 rx_len = sdio_readb(card->func, IF_SDIO_RX_LEN, &ret); 188 if (!ret) 189 rx_len <<= card->rx_unit; 190 else 191 rx_len = 0xffff; /* invalid length */ 192 193 break; 194 } 195 196 if (err) 197 *err = ret; 198 199 return rx_len; 200 } 201 202 static int if_sdio_handle_cmd(struct if_sdio_card *card, 203 u8 *buffer, unsigned size) 204 { 205 struct lbs_private *priv = card->priv; 206 int ret; 207 unsigned long flags; 208 u8 i; 209 210 if (size > LBS_CMD_BUFFER_SIZE) { 211 lbs_deb_sdio("response packet too large (%d bytes)\n", 212 (int)size); 213 ret = -E2BIG; 214 goto out; 215 } 216 217 spin_lock_irqsave(&priv->driver_lock, flags); 218 219 i = (priv->resp_idx == 0) ? 1 : 0; 220 BUG_ON(priv->resp_len[i]); 221 priv->resp_len[i] = size; 222 memcpy(priv->resp_buf[i], buffer, size); 223 lbs_notify_command_response(priv, i); 224 225 spin_unlock_irqrestore(&priv->driver_lock, flags); 226 227 ret = 0; 228 229 out: 230 return ret; 231 } 232 233 static int if_sdio_handle_data(struct if_sdio_card *card, 234 u8 *buffer, unsigned size) 235 { 236 int ret; 237 struct sk_buff *skb; 238 239 if (size > MRVDRV_ETH_RX_PACKET_BUFFER_SIZE) { 240 lbs_deb_sdio("response packet too large (%d bytes)\n", 241 (int)size); 242 ret = -E2BIG; 243 goto out; 244 } 245 246 skb = dev_alloc_skb(MRVDRV_ETH_RX_PACKET_BUFFER_SIZE + NET_IP_ALIGN); 247 if (!skb) { 248 ret = -ENOMEM; 249 goto out; 250 } 251 252 skb_reserve(skb, NET_IP_ALIGN); 253 254 skb_put_data(skb, buffer, size); 255 256 lbs_process_rxed_packet(card->priv, skb); 257 258 ret = 0; 259 260 out: 261 return ret; 262 } 263 264 static int if_sdio_handle_event(struct if_sdio_card *card, 265 u8 *buffer, unsigned size) 266 { 267 int ret; 268 u32 event; 269 270 if (card->model == MODEL_8385) { 271 event = sdio_readb(card->func, IF_SDIO_EVENT, &ret); 272 if (ret) 273 goto out; 274 275 /* right shift 3 bits to get the event id */ 276 event >>= 3; 277 } else { 278 if (size < 4) { 279 lbs_deb_sdio("event packet too small (%d bytes)\n", 280 (int)size); 281 ret = -EINVAL; 282 goto out; 283 } 284 event = buffer[3] << 24; 285 event |= buffer[2] << 16; 286 event |= buffer[1] << 8; 287 event |= buffer[0] << 0; 288 } 289 290 lbs_queue_event(card->priv, event & 0xFF); 291 ret = 0; 292 293 out: 294 return ret; 295 } 296 297 static int if_sdio_wait_status(struct if_sdio_card *card, const u8 condition) 298 { 299 u8 status; 300 unsigned long timeout; 301 int ret = 0; 302 303 timeout = jiffies + HZ; 304 while (1) { 305 status = sdio_readb(card->func, IF_SDIO_STATUS, &ret); 306 if (ret) 307 return ret; 308 if ((status & condition) == condition) 309 break; 310 if (time_after(jiffies, timeout)) 311 return -ETIMEDOUT; 312 mdelay(1); 313 } 314 return ret; 315 } 316 317 static int if_sdio_card_to_host(struct if_sdio_card *card) 318 { 319 int ret; 320 u16 size, type, chunk; 321 322 size = if_sdio_read_rx_len(card, &ret); 323 if (ret) 324 goto out; 325 326 if (size < 4) { 327 lbs_deb_sdio("invalid packet size (%d bytes) from firmware\n", 328 (int)size); 329 ret = -EINVAL; 330 goto out; 331 } 332 333 ret = if_sdio_wait_status(card, IF_SDIO_IO_RDY); 334 if (ret) 335 goto out; 336 337 /* 338 * The transfer must be in one transaction or the firmware 339 * goes suicidal. There's no way to guarantee that for all 340 * controllers, but we can at least try. 341 */ 342 chunk = sdio_align_size(card->func, size); 343 344 ret = sdio_readsb(card->func, card->buffer, card->ioport, chunk); 345 if (ret) 346 goto out; 347 348 chunk = card->buffer[0] | (card->buffer[1] << 8); 349 type = card->buffer[2] | (card->buffer[3] << 8); 350 351 lbs_deb_sdio("packet of type %d and size %d bytes\n", 352 (int)type, (int)chunk); 353 354 if (chunk > size) { 355 lbs_deb_sdio("packet fragment (%d > %d)\n", 356 (int)chunk, (int)size); 357 ret = -EINVAL; 358 goto out; 359 } 360 361 if (chunk < size) { 362 lbs_deb_sdio("packet fragment (%d < %d)\n", 363 (int)chunk, (int)size); 364 } 365 366 switch (type) { 367 case MVMS_CMD: 368 ret = if_sdio_handle_cmd(card, card->buffer + 4, chunk - 4); 369 if (ret) 370 goto out; 371 break; 372 case MVMS_DAT: 373 ret = if_sdio_handle_data(card, card->buffer + 4, chunk - 4); 374 if (ret) 375 goto out; 376 break; 377 case MVMS_EVENT: 378 ret = if_sdio_handle_event(card, card->buffer + 4, chunk - 4); 379 if (ret) 380 goto out; 381 break; 382 default: 383 lbs_deb_sdio("invalid type (%d) from firmware\n", 384 (int)type); 385 ret = -EINVAL; 386 goto out; 387 } 388 389 out: 390 if (ret) 391 pr_err("problem fetching packet from firmware\n"); 392 393 return ret; 394 } 395 396 static void if_sdio_host_to_card_worker(struct work_struct *work) 397 { 398 struct if_sdio_card *card; 399 struct if_sdio_packet *packet; 400 int ret; 401 unsigned long flags; 402 403 card = container_of(work, struct if_sdio_card, packet_worker); 404 405 while (1) { 406 spin_lock_irqsave(&card->lock, flags); 407 packet = card->packets; 408 if (packet) 409 card->packets = packet->next; 410 spin_unlock_irqrestore(&card->lock, flags); 411 412 if (!packet) 413 break; 414 415 sdio_claim_host(card->func); 416 417 ret = if_sdio_wait_status(card, IF_SDIO_IO_RDY); 418 if (ret == 0) { 419 ret = sdio_writesb(card->func, card->ioport, 420 packet->buffer, packet->nb); 421 } 422 423 if (ret) 424 pr_err("error %d sending packet to firmware\n", ret); 425 426 sdio_release_host(card->func); 427 428 kfree(packet); 429 } 430 } 431 432 /********************************************************************/ 433 /* Firmware */ 434 /********************************************************************/ 435 436 #define FW_DL_READY_STATUS (IF_SDIO_IO_RDY | IF_SDIO_DL_RDY) 437 438 static int if_sdio_prog_helper(struct if_sdio_card *card, 439 const struct firmware *fw) 440 { 441 int ret; 442 unsigned long timeout; 443 u8 *chunk_buffer; 444 u32 chunk_size; 445 const u8 *firmware; 446 size_t size; 447 448 chunk_buffer = kzalloc(64, GFP_KERNEL); 449 if (!chunk_buffer) { 450 ret = -ENOMEM; 451 goto out; 452 } 453 454 sdio_claim_host(card->func); 455 456 ret = sdio_set_block_size(card->func, 32); 457 if (ret) 458 goto release; 459 460 firmware = fw->data; 461 size = fw->size; 462 463 while (size) { 464 ret = if_sdio_wait_status(card, FW_DL_READY_STATUS); 465 if (ret) 466 goto release; 467 468 /* On some platforms (like Davinci) the chip needs more time 469 * between helper blocks. 470 */ 471 mdelay(2); 472 473 chunk_size = min_t(size_t, size, 60); 474 475 *((__le32*)chunk_buffer) = cpu_to_le32(chunk_size); 476 memcpy(chunk_buffer + 4, firmware, chunk_size); 477 /* 478 lbs_deb_sdio("sending %d bytes chunk\n", chunk_size); 479 */ 480 ret = sdio_writesb(card->func, card->ioport, 481 chunk_buffer, 64); 482 if (ret) 483 goto release; 484 485 firmware += chunk_size; 486 size -= chunk_size; 487 } 488 489 /* an empty block marks the end of the transfer */ 490 memset(chunk_buffer, 0, 4); 491 ret = sdio_writesb(card->func, card->ioport, chunk_buffer, 64); 492 if (ret) 493 goto release; 494 495 lbs_deb_sdio("waiting for helper to boot...\n"); 496 497 /* wait for the helper to boot by looking at the size register */ 498 timeout = jiffies + HZ; 499 while (1) { 500 u16 req_size; 501 502 req_size = sdio_readb(card->func, IF_SDIO_RD_BASE, &ret); 503 if (ret) 504 goto release; 505 506 req_size |= sdio_readb(card->func, IF_SDIO_RD_BASE + 1, &ret) << 8; 507 if (ret) 508 goto release; 509 510 if (req_size != 0) 511 break; 512 513 if (time_after(jiffies, timeout)) { 514 ret = -ETIMEDOUT; 515 goto release; 516 } 517 518 msleep(10); 519 } 520 521 ret = 0; 522 523 release: 524 sdio_release_host(card->func); 525 kfree(chunk_buffer); 526 527 out: 528 if (ret) 529 pr_err("failed to load helper firmware\n"); 530 531 return ret; 532 } 533 534 static int if_sdio_prog_real(struct if_sdio_card *card, 535 const struct firmware *fw) 536 { 537 int ret; 538 unsigned long timeout; 539 u8 *chunk_buffer; 540 u32 chunk_size; 541 const u8 *firmware; 542 size_t size, req_size; 543 544 chunk_buffer = kzalloc(512, GFP_KERNEL); 545 if (!chunk_buffer) { 546 ret = -ENOMEM; 547 goto out; 548 } 549 550 sdio_claim_host(card->func); 551 552 ret = sdio_set_block_size(card->func, 32); 553 if (ret) 554 goto release; 555 556 firmware = fw->data; 557 size = fw->size; 558 559 while (size) { 560 timeout = jiffies + HZ; 561 while (1) { 562 ret = if_sdio_wait_status(card, FW_DL_READY_STATUS); 563 if (ret) 564 goto release; 565 566 req_size = sdio_readb(card->func, IF_SDIO_RD_BASE, 567 &ret); 568 if (ret) 569 goto release; 570 571 req_size |= sdio_readb(card->func, IF_SDIO_RD_BASE + 1, 572 &ret) << 8; 573 if (ret) 574 goto release; 575 576 /* 577 * For SD8688 wait until the length is not 0, 1 or 2 578 * before downloading the first FW block, 579 * since BOOT code writes the register to indicate the 580 * helper/FW download winner, 581 * the value could be 1 or 2 (Func1 or Func2). 582 */ 583 if ((size != fw->size) || (req_size > 2)) 584 break; 585 if (time_after(jiffies, timeout)) { 586 ret = -ETIMEDOUT; 587 goto release; 588 } 589 mdelay(1); 590 } 591 592 /* 593 lbs_deb_sdio("firmware wants %d bytes\n", (int)req_size); 594 */ 595 if (req_size == 0) { 596 lbs_deb_sdio("firmware helper gave up early\n"); 597 ret = -EIO; 598 goto release; 599 } 600 601 if (req_size & 0x01) { 602 lbs_deb_sdio("firmware helper signalled error\n"); 603 ret = -EIO; 604 goto release; 605 } 606 607 if (req_size > size) 608 req_size = size; 609 610 while (req_size) { 611 chunk_size = min_t(size_t, req_size, 512); 612 613 memcpy(chunk_buffer, firmware, chunk_size); 614 /* 615 lbs_deb_sdio("sending %d bytes (%d bytes) chunk\n", 616 chunk_size, (chunk_size + 31) / 32 * 32); 617 */ 618 ret = sdio_writesb(card->func, card->ioport, 619 chunk_buffer, roundup(chunk_size, 32)); 620 if (ret) 621 goto release; 622 623 firmware += chunk_size; 624 size -= chunk_size; 625 req_size -= chunk_size; 626 } 627 } 628 629 ret = 0; 630 631 lbs_deb_sdio("waiting for firmware to boot...\n"); 632 633 /* wait for the firmware to boot */ 634 timeout = jiffies + HZ; 635 while (1) { 636 u16 scratch; 637 638 scratch = if_sdio_read_scratch(card, &ret); 639 if (ret) 640 goto release; 641 642 if (scratch == IF_SDIO_FIRMWARE_OK) 643 break; 644 645 if (time_after(jiffies, timeout)) { 646 ret = -ETIMEDOUT; 647 goto release; 648 } 649 650 msleep(10); 651 } 652 653 ret = 0; 654 655 release: 656 sdio_release_host(card->func); 657 kfree(chunk_buffer); 658 659 out: 660 if (ret) 661 pr_err("failed to load firmware\n"); 662 663 return ret; 664 } 665 666 static void if_sdio_do_prog_firmware(struct lbs_private *priv, int ret, 667 const struct firmware *helper, 668 const struct firmware *mainfw) 669 { 670 struct if_sdio_card *card = priv->card; 671 672 if (ret) { 673 pr_err("failed to find firmware (%d)\n", ret); 674 return; 675 } 676 677 ret = if_sdio_prog_helper(card, helper); 678 if (ret) 679 return; 680 681 lbs_deb_sdio("Helper firmware loaded\n"); 682 683 ret = if_sdio_prog_real(card, mainfw); 684 if (ret) 685 return; 686 687 lbs_deb_sdio("Firmware loaded\n"); 688 if_sdio_finish_power_on(card); 689 } 690 691 static int if_sdio_prog_firmware(struct if_sdio_card *card) 692 { 693 int ret; 694 u16 scratch; 695 696 /* 697 * Disable interrupts 698 */ 699 sdio_claim_host(card->func); 700 sdio_writeb(card->func, 0x00, IF_SDIO_H_INT_MASK, &ret); 701 sdio_release_host(card->func); 702 703 sdio_claim_host(card->func); 704 scratch = if_sdio_read_scratch(card, &ret); 705 sdio_release_host(card->func); 706 707 lbs_deb_sdio("firmware status = %#x\n", scratch); 708 lbs_deb_sdio("scratch ret = %d\n", ret); 709 710 if (ret) 711 goto out; 712 713 714 /* 715 * The manual clearly describes that FEDC is the right code to use 716 * to detect firmware presence, but for SD8686 it is not that simple. 717 * Scratch is also used to store the RX packet length, so we lose 718 * the FEDC value early on. So we use a non-zero check in order 719 * to validate firmware presence. 720 * Additionally, the SD8686 in the Gumstix always has the high scratch 721 * bit set, even when the firmware is not loaded. So we have to 722 * exclude that from the test. 723 */ 724 if (scratch == IF_SDIO_FIRMWARE_OK) { 725 lbs_deb_sdio("firmware already loaded\n"); 726 if_sdio_finish_power_on(card); 727 return 0; 728 } else if ((card->model == MODEL_8686) && (scratch & 0x7fff)) { 729 lbs_deb_sdio("firmware may be running\n"); 730 if_sdio_finish_power_on(card); 731 return 0; 732 } 733 734 ret = lbs_get_firmware_async(card->priv, &card->func->dev, card->model, 735 fw_table, if_sdio_do_prog_firmware); 736 737 out: 738 return ret; 739 } 740 741 /********************************************************************/ 742 /* Power management */ 743 /********************************************************************/ 744 745 /* Finish power on sequence (after firmware is loaded) */ 746 static void if_sdio_finish_power_on(struct if_sdio_card *card) 747 { 748 struct sdio_func *func = card->func; 749 struct lbs_private *priv = card->priv; 750 int ret; 751 752 sdio_claim_host(func); 753 sdio_set_block_size(card->func, IF_SDIO_BLOCK_SIZE); 754 755 /* 756 * Get rx_unit if the chip is SD8688 or newer. 757 * SD8385 & SD8686 do not have rx_unit. 758 */ 759 if ((card->model != MODEL_8385) 760 && (card->model != MODEL_8686)) 761 card->rx_unit = if_sdio_read_rx_unit(card); 762 else 763 card->rx_unit = 0; 764 765 /* 766 * Set up the interrupt handler late. 767 * 768 * If we set it up earlier, the (buggy) hardware generates a spurious 769 * interrupt, even before the interrupt has been enabled, with 770 * CCCR_INTx = 0. 771 * 772 * We register the interrupt handler late so that we can handle any 773 * spurious interrupts, and also to avoid generation of that known 774 * spurious interrupt in the first place. 775 */ 776 ret = sdio_claim_irq(func, if_sdio_interrupt); 777 if (ret) 778 goto release; 779 780 /* 781 * Enable interrupts now that everything is set up 782 */ 783 sdio_writeb(func, 0x0f, IF_SDIO_H_INT_MASK, &ret); 784 if (ret) 785 goto release_irq; 786 787 sdio_release_host(func); 788 789 /* Set fw_ready before queuing any commands so that 790 * lbs_thread won't block from sending them to firmware. 791 */ 792 priv->fw_ready = 1; 793 794 /* 795 * FUNC_INIT is required for SD8688 WLAN/BT multiple functions 796 */ 797 if (card->model == MODEL_8688) { 798 struct cmd_header cmd; 799 800 memset(&cmd, 0, sizeof(cmd)); 801 802 lbs_deb_sdio("send function INIT command\n"); 803 if (__lbs_cmd(priv, CMD_FUNC_INIT, &cmd, sizeof(cmd), 804 lbs_cmd_copyback, (unsigned long) &cmd)) 805 netdev_alert(priv->dev, "CMD_FUNC_INIT cmd failed\n"); 806 } 807 808 wake_up(&card->pwron_waitq); 809 810 if (!card->started) { 811 ret = lbs_start_card(priv); 812 if_sdio_power_off(card); 813 if (ret == 0) { 814 card->started = true; 815 /* Tell PM core that we don't need the card to be 816 * powered now */ 817 pm_runtime_put(&func->dev); 818 } 819 } 820 821 return; 822 823 release_irq: 824 sdio_release_irq(func); 825 release: 826 sdio_release_host(func); 827 } 828 829 static int if_sdio_power_on(struct if_sdio_card *card) 830 { 831 struct sdio_func *func = card->func; 832 struct mmc_host *host = func->card->host; 833 int ret; 834 835 sdio_claim_host(func); 836 837 ret = sdio_enable_func(func); 838 if (ret) 839 goto release; 840 841 /* For 1-bit transfers to the 8686 model, we need to enable the 842 * interrupt flag in the CCCR register. Set the MMC_QUIRK_LENIENT_FN0 843 * bit to allow access to non-vendor registers. */ 844 if ((card->model == MODEL_8686) && 845 (host->caps & MMC_CAP_SDIO_IRQ) && 846 (host->ios.bus_width == MMC_BUS_WIDTH_1)) { 847 u8 reg; 848 849 func->card->quirks |= MMC_QUIRK_LENIENT_FN0; 850 reg = sdio_f0_readb(func, SDIO_CCCR_IF, &ret); 851 if (ret) 852 goto disable; 853 854 reg |= SDIO_BUS_ECSI; 855 sdio_f0_writeb(func, reg, SDIO_CCCR_IF, &ret); 856 if (ret) 857 goto disable; 858 } 859 860 card->ioport = sdio_readb(func, IF_SDIO_IOPORT, &ret); 861 if (ret) 862 goto disable; 863 864 card->ioport |= sdio_readb(func, IF_SDIO_IOPORT + 1, &ret) << 8; 865 if (ret) 866 goto disable; 867 868 card->ioport |= sdio_readb(func, IF_SDIO_IOPORT + 2, &ret) << 16; 869 if (ret) 870 goto disable; 871 872 sdio_release_host(func); 873 ret = if_sdio_prog_firmware(card); 874 if (ret) { 875 sdio_claim_host(func); 876 goto disable; 877 } 878 879 return 0; 880 881 disable: 882 sdio_disable_func(func); 883 release: 884 sdio_release_host(func); 885 return ret; 886 } 887 888 static int if_sdio_power_off(struct if_sdio_card *card) 889 { 890 struct sdio_func *func = card->func; 891 struct lbs_private *priv = card->priv; 892 893 priv->fw_ready = 0; 894 895 sdio_claim_host(func); 896 sdio_release_irq(func); 897 sdio_disable_func(func); 898 sdio_release_host(func); 899 return 0; 900 } 901 902 903 /*******************************************************************/ 904 /* Libertas callbacks */ 905 /*******************************************************************/ 906 907 static int if_sdio_host_to_card(struct lbs_private *priv, 908 u8 type, u8 *buf, u16 nb) 909 { 910 int ret; 911 struct if_sdio_card *card; 912 struct if_sdio_packet *packet, *cur; 913 u16 size; 914 unsigned long flags; 915 916 card = priv->card; 917 918 if (nb > (65536 - sizeof(struct if_sdio_packet) - 4)) { 919 ret = -EINVAL; 920 goto out; 921 } 922 923 /* 924 * The transfer must be in one transaction or the firmware 925 * goes suicidal. There's no way to guarantee that for all 926 * controllers, but we can at least try. 927 */ 928 size = sdio_align_size(card->func, nb + 4); 929 930 packet = kzalloc(sizeof(struct if_sdio_packet) + size, 931 GFP_ATOMIC); 932 if (!packet) { 933 ret = -ENOMEM; 934 goto out; 935 } 936 937 packet->next = NULL; 938 packet->nb = size; 939 940 /* 941 * SDIO specific header. 942 */ 943 packet->buffer[0] = (nb + 4) & 0xff; 944 packet->buffer[1] = ((nb + 4) >> 8) & 0xff; 945 packet->buffer[2] = type; 946 packet->buffer[3] = 0; 947 948 memcpy(packet->buffer + 4, buf, nb); 949 950 spin_lock_irqsave(&card->lock, flags); 951 952 if (!card->packets) 953 card->packets = packet; 954 else { 955 cur = card->packets; 956 while (cur->next) 957 cur = cur->next; 958 cur->next = packet; 959 } 960 961 switch (type) { 962 case MVMS_CMD: 963 priv->dnld_sent = DNLD_CMD_SENT; 964 break; 965 case MVMS_DAT: 966 priv->dnld_sent = DNLD_DATA_SENT; 967 break; 968 default: 969 lbs_deb_sdio("unknown packet type %d\n", (int)type); 970 } 971 972 spin_unlock_irqrestore(&card->lock, flags); 973 974 queue_work(card->workqueue, &card->packet_worker); 975 976 ret = 0; 977 978 out: 979 return ret; 980 } 981 982 static int if_sdio_enter_deep_sleep(struct lbs_private *priv) 983 { 984 int ret = -1; 985 struct cmd_header cmd; 986 987 memset(&cmd, 0, sizeof(cmd)); 988 989 lbs_deb_sdio("send DEEP_SLEEP command\n"); 990 ret = __lbs_cmd(priv, CMD_802_11_DEEP_SLEEP, &cmd, sizeof(cmd), 991 lbs_cmd_copyback, (unsigned long) &cmd); 992 if (ret) 993 netdev_err(priv->dev, "DEEP_SLEEP cmd failed\n"); 994 995 mdelay(200); 996 return ret; 997 } 998 999 static int if_sdio_exit_deep_sleep(struct lbs_private *priv) 1000 { 1001 struct if_sdio_card *card = priv->card; 1002 int ret = -1; 1003 1004 sdio_claim_host(card->func); 1005 1006 sdio_writeb(card->func, HOST_POWER_UP, CONFIGURATION_REG, &ret); 1007 if (ret) 1008 netdev_err(priv->dev, "sdio_writeb failed!\n"); 1009 1010 sdio_release_host(card->func); 1011 1012 return ret; 1013 } 1014 1015 static int if_sdio_reset_deep_sleep_wakeup(struct lbs_private *priv) 1016 { 1017 struct if_sdio_card *card = priv->card; 1018 int ret = -1; 1019 1020 sdio_claim_host(card->func); 1021 1022 sdio_writeb(card->func, 0, CONFIGURATION_REG, &ret); 1023 if (ret) 1024 netdev_err(priv->dev, "sdio_writeb failed!\n"); 1025 1026 sdio_release_host(card->func); 1027 1028 return ret; 1029 1030 } 1031 1032 static struct mmc_host *reset_host; 1033 1034 static void if_sdio_reset_card_worker(struct work_struct *work) 1035 { 1036 /* 1037 * The actual reset operation must be run outside of lbs_thread. This 1038 * is because mmc_remove_host() will cause the device to be instantly 1039 * destroyed, and the libertas driver then needs to end lbs_thread, 1040 * leading to a deadlock. 1041 * 1042 * We run it in a workqueue totally independent from the if_sdio_card 1043 * instance for that reason. 1044 */ 1045 1046 pr_info("Resetting card..."); 1047 mmc_remove_host(reset_host); 1048 mmc_add_host(reset_host); 1049 } 1050 static DECLARE_WORK(card_reset_work, if_sdio_reset_card_worker); 1051 1052 static void if_sdio_reset_card(struct lbs_private *priv) 1053 { 1054 struct if_sdio_card *card = priv->card; 1055 1056 if (work_pending(&card_reset_work)) 1057 return; 1058 1059 reset_host = card->func->card->host; 1060 schedule_work(&card_reset_work); 1061 } 1062 1063 static int if_sdio_power_save(struct lbs_private *priv) 1064 { 1065 struct if_sdio_card *card = priv->card; 1066 int ret; 1067 1068 flush_workqueue(card->workqueue); 1069 1070 ret = if_sdio_power_off(card); 1071 1072 /* Let runtime PM know the card is powered off */ 1073 pm_runtime_put_sync(&card->func->dev); 1074 1075 return ret; 1076 } 1077 1078 static int if_sdio_power_restore(struct lbs_private *priv) 1079 { 1080 struct if_sdio_card *card = priv->card; 1081 int r; 1082 1083 /* Make sure the card will not be powered off by runtime PM */ 1084 pm_runtime_get_sync(&card->func->dev); 1085 1086 r = if_sdio_power_on(card); 1087 if (r) 1088 return r; 1089 1090 wait_event(card->pwron_waitq, priv->fw_ready); 1091 return 0; 1092 } 1093 1094 1095 /*******************************************************************/ 1096 /* SDIO callbacks */ 1097 /*******************************************************************/ 1098 1099 static void if_sdio_interrupt(struct sdio_func *func) 1100 { 1101 int ret; 1102 struct if_sdio_card *card; 1103 u8 cause; 1104 1105 card = sdio_get_drvdata(func); 1106 1107 cause = sdio_readb(card->func, IF_SDIO_H_INT_STATUS, &ret); 1108 if (ret || !cause) 1109 return; 1110 1111 lbs_deb_sdio("interrupt: 0x%X\n", (unsigned)cause); 1112 1113 sdio_writeb(card->func, ~cause, IF_SDIO_H_INT_STATUS, &ret); 1114 if (ret) 1115 return; 1116 1117 /* 1118 * Ignore the define name, this really means the card has 1119 * successfully received the command. 1120 */ 1121 card->priv->is_activity_detected = 1; 1122 if (cause & IF_SDIO_H_INT_DNLD) 1123 lbs_host_to_card_done(card->priv); 1124 1125 1126 if (cause & IF_SDIO_H_INT_UPLD) { 1127 ret = if_sdio_card_to_host(card); 1128 if (ret) 1129 return; 1130 } 1131 } 1132 1133 static int if_sdio_probe(struct sdio_func *func, 1134 const struct sdio_device_id *id) 1135 { 1136 struct if_sdio_card *card; 1137 struct lbs_private *priv; 1138 int ret, i; 1139 unsigned int model; 1140 struct if_sdio_packet *packet; 1141 1142 for (i = 0;i < func->card->num_info;i++) { 1143 if (sscanf(func->card->info[i], 1144 "802.11 SDIO ID: %x", &model) == 1) 1145 break; 1146 if (sscanf(func->card->info[i], 1147 "ID: %x", &model) == 1) 1148 break; 1149 if (!strcmp(func->card->info[i], "IBIS Wireless SDIO Card")) { 1150 model = MODEL_8385; 1151 break; 1152 } 1153 } 1154 1155 if (i == func->card->num_info) { 1156 pr_err("unable to identify card model\n"); 1157 return -ENODEV; 1158 } 1159 1160 card = kzalloc(sizeof(struct if_sdio_card), GFP_KERNEL); 1161 if (!card) 1162 return -ENOMEM; 1163 1164 card->func = func; 1165 card->model = model; 1166 1167 switch (card->model) { 1168 case MODEL_8385: 1169 card->scratch_reg = IF_SDIO_SCRATCH_OLD; 1170 break; 1171 case MODEL_8686: 1172 card->scratch_reg = IF_SDIO_SCRATCH; 1173 break; 1174 case MODEL_8688: 1175 default: /* for newer chipsets */ 1176 card->scratch_reg = IF_SDIO_FW_STATUS; 1177 break; 1178 } 1179 1180 spin_lock_init(&card->lock); 1181 card->workqueue = alloc_workqueue("libertas_sdio", WQ_MEM_RECLAIM, 0); 1182 if (unlikely(!card->workqueue)) { 1183 ret = -ENOMEM; 1184 goto err_queue; 1185 } 1186 INIT_WORK(&card->packet_worker, if_sdio_host_to_card_worker); 1187 init_waitqueue_head(&card->pwron_waitq); 1188 1189 /* Check if we support this card */ 1190 for (i = 0; i < ARRAY_SIZE(fw_table); i++) { 1191 if (card->model == fw_table[i].model) 1192 break; 1193 } 1194 if (i == ARRAY_SIZE(fw_table)) { 1195 pr_err("unknown card model 0x%x\n", card->model); 1196 ret = -ENODEV; 1197 goto free; 1198 } 1199 1200 sdio_set_drvdata(func, card); 1201 1202 lbs_deb_sdio("class = 0x%X, vendor = 0x%X, " 1203 "device = 0x%X, model = 0x%X, ioport = 0x%X\n", 1204 func->class, func->vendor, func->device, 1205 model, (unsigned)card->ioport); 1206 1207 1208 priv = lbs_add_card(card, &func->dev); 1209 if (IS_ERR(priv)) { 1210 ret = PTR_ERR(priv); 1211 goto free; 1212 } 1213 1214 card->priv = priv; 1215 1216 priv->card = card; 1217 priv->hw_host_to_card = if_sdio_host_to_card; 1218 priv->enter_deep_sleep = if_sdio_enter_deep_sleep; 1219 priv->exit_deep_sleep = if_sdio_exit_deep_sleep; 1220 priv->reset_deep_sleep_wakeup = if_sdio_reset_deep_sleep_wakeup; 1221 priv->reset_card = if_sdio_reset_card; 1222 priv->power_save = if_sdio_power_save; 1223 priv->power_restore = if_sdio_power_restore; 1224 priv->is_polling = !(func->card->host->caps & MMC_CAP_SDIO_IRQ); 1225 ret = if_sdio_power_on(card); 1226 if (ret) 1227 goto err_activate_card; 1228 1229 out: 1230 return ret; 1231 1232 err_activate_card: 1233 flush_workqueue(card->workqueue); 1234 lbs_remove_card(priv); 1235 free: 1236 destroy_workqueue(card->workqueue); 1237 err_queue: 1238 while (card->packets) { 1239 packet = card->packets; 1240 card->packets = card->packets->next; 1241 kfree(packet); 1242 } 1243 1244 kfree(card); 1245 1246 goto out; 1247 } 1248 1249 static void if_sdio_remove(struct sdio_func *func) 1250 { 1251 struct if_sdio_card *card; 1252 struct if_sdio_packet *packet; 1253 1254 card = sdio_get_drvdata(func); 1255 1256 /* Undo decrement done above in if_sdio_probe */ 1257 pm_runtime_get_noresume(&func->dev); 1258 1259 if (user_rmmod && (card->model == MODEL_8688)) { 1260 /* 1261 * FUNC_SHUTDOWN is required for SD8688 WLAN/BT 1262 * multiple functions 1263 */ 1264 struct cmd_header cmd; 1265 1266 memset(&cmd, 0, sizeof(cmd)); 1267 1268 lbs_deb_sdio("send function SHUTDOWN command\n"); 1269 if (__lbs_cmd(card->priv, CMD_FUNC_SHUTDOWN, 1270 &cmd, sizeof(cmd), lbs_cmd_copyback, 1271 (unsigned long) &cmd)) 1272 pr_alert("CMD_FUNC_SHUTDOWN cmd failed\n"); 1273 } 1274 1275 1276 lbs_deb_sdio("call remove card\n"); 1277 lbs_stop_card(card->priv); 1278 lbs_remove_card(card->priv); 1279 1280 destroy_workqueue(card->workqueue); 1281 1282 while (card->packets) { 1283 packet = card->packets; 1284 card->packets = card->packets->next; 1285 kfree(packet); 1286 } 1287 1288 kfree(card); 1289 } 1290 1291 static int if_sdio_suspend(struct device *dev) 1292 { 1293 struct sdio_func *func = dev_to_sdio_func(dev); 1294 struct if_sdio_card *card = sdio_get_drvdata(func); 1295 struct lbs_private *priv = card->priv; 1296 int ret; 1297 1298 mmc_pm_flag_t flags = sdio_get_host_pm_caps(func); 1299 priv->power_up_on_resume = false; 1300 1301 /* If we're powered off anyway, just let the mmc layer remove the 1302 * card. */ 1303 if (!lbs_iface_active(priv)) { 1304 if (priv->fw_ready) { 1305 priv->power_up_on_resume = true; 1306 if_sdio_power_off(card); 1307 } 1308 1309 return 0; 1310 } 1311 1312 dev_info(dev, "%s: suspend: PM flags = 0x%x\n", 1313 sdio_func_id(func), flags); 1314 1315 /* If we aren't being asked to wake on anything, we should bail out 1316 * and let the SD stack power down the card. 1317 */ 1318 if (priv->wol_criteria == EHS_REMOVE_WAKEUP) { 1319 dev_info(dev, "Suspend without wake params -- powering down card\n"); 1320 if (priv->fw_ready) { 1321 ret = lbs_suspend(priv); 1322 if (ret) 1323 return ret; 1324 1325 priv->power_up_on_resume = true; 1326 if_sdio_power_off(card); 1327 } 1328 1329 return 0; 1330 } 1331 1332 if (!(flags & MMC_PM_KEEP_POWER)) { 1333 dev_err(dev, "%s: cannot remain alive while host is suspended\n", 1334 sdio_func_id(func)); 1335 return -ENOSYS; 1336 } 1337 1338 ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER); 1339 if (ret) 1340 return ret; 1341 1342 ret = lbs_suspend(priv); 1343 if (ret) 1344 return ret; 1345 1346 return sdio_set_host_pm_flags(func, MMC_PM_WAKE_SDIO_IRQ); 1347 } 1348 1349 static int if_sdio_resume(struct device *dev) 1350 { 1351 struct sdio_func *func = dev_to_sdio_func(dev); 1352 struct if_sdio_card *card = sdio_get_drvdata(func); 1353 int ret; 1354 1355 dev_info(dev, "%s: resume: we're back\n", sdio_func_id(func)); 1356 1357 if (card->priv->power_up_on_resume) { 1358 if_sdio_power_on(card); 1359 wait_event(card->pwron_waitq, card->priv->fw_ready); 1360 } 1361 1362 ret = lbs_resume(card->priv); 1363 1364 return ret; 1365 } 1366 1367 static const struct dev_pm_ops if_sdio_pm_ops = { 1368 .suspend = if_sdio_suspend, 1369 .resume = if_sdio_resume, 1370 }; 1371 1372 static struct sdio_driver if_sdio_driver = { 1373 .name = "libertas_sdio", 1374 .id_table = if_sdio_ids, 1375 .probe = if_sdio_probe, 1376 .remove = if_sdio_remove, 1377 .drv = { 1378 .pm = &if_sdio_pm_ops, 1379 }, 1380 }; 1381 1382 /*******************************************************************/ 1383 /* Module functions */ 1384 /*******************************************************************/ 1385 1386 static int __init if_sdio_init_module(void) 1387 { 1388 int ret = 0; 1389 1390 printk(KERN_INFO "libertas_sdio: Libertas SDIO driver\n"); 1391 printk(KERN_INFO "libertas_sdio: Copyright Pierre Ossman\n"); 1392 1393 ret = sdio_register_driver(&if_sdio_driver); 1394 1395 /* Clear the flag in case user removes the card. */ 1396 user_rmmod = 0; 1397 1398 return ret; 1399 } 1400 1401 static void __exit if_sdio_exit_module(void) 1402 { 1403 /* Set the flag as user is removing this module. */ 1404 user_rmmod = 1; 1405 1406 cancel_work_sync(&card_reset_work); 1407 1408 sdio_unregister_driver(&if_sdio_driver); 1409 } 1410 1411 module_init(if_sdio_init_module); 1412 module_exit(if_sdio_exit_module); 1413 1414 MODULE_DESCRIPTION("Libertas SDIO WLAN Driver"); 1415 MODULE_AUTHOR("Pierre Ossman"); 1416 MODULE_LICENSE("GPL"); 1417