1 // SPDX-License-Identifier: GPL-2.0 2 // Copyright (c) 2019 MediaTek Inc. 3 4 /* 5 * Bluetooth support for MediaTek SDIO devices 6 * 7 * This file is written based on btsdio.c and btmtkuart.c. 8 * 9 * Author: Sean Wang <sean.wang@mediatek.com> 10 * 11 */ 12 13 #include <linux/unaligned.h> 14 #include <linux/atomic.h> 15 #include <linux/gpio/consumer.h> 16 #include <linux/init.h> 17 #include <linux/iopoll.h> 18 #include <linux/kernel.h> 19 #include <linux/module.h> 20 #include <linux/of.h> 21 #include <linux/pm_runtime.h> 22 #include <linux/skbuff.h> 23 #include <linux/usb.h> 24 25 #include <linux/mmc/host.h> 26 #include <linux/mmc/sdio_ids.h> 27 #include <linux/mmc/sdio_func.h> 28 29 #include <net/bluetooth/bluetooth.h> 30 #include <net/bluetooth/hci_core.h> 31 32 #include "hci_uart.h" 33 #include "btmtk.h" 34 35 #define VERSION "0.1" 36 37 #define MTKBTSDIO_AUTOSUSPEND_DELAY 1000 38 39 static bool enable_autosuspend = true; 40 41 struct btmtksdio_data { 42 const char *fwname; 43 u16 chipid; 44 bool lp_mbox_supported; 45 bool pm_runtime_supported; 46 }; 47 48 static const struct btmtksdio_data mt7663_data = { 49 .fwname = FIRMWARE_MT7663, 50 .chipid = 0x7663, 51 .lp_mbox_supported = false, 52 .pm_runtime_supported = true, 53 }; 54 55 static const struct btmtksdio_data mt7668_data = { 56 .fwname = FIRMWARE_MT7668, 57 .chipid = 0x7668, 58 .lp_mbox_supported = false, 59 .pm_runtime_supported = true, 60 }; 61 62 static const struct btmtksdio_data mt7921_data = { 63 .fwname = FIRMWARE_MT7961, 64 .chipid = 0x7921, 65 .lp_mbox_supported = true, 66 .pm_runtime_supported = true, 67 }; 68 69 static const struct btmtksdio_data mt7902_data = { 70 .fwname = FIRMWARE_MT7902, 71 .chipid = 0x7902, 72 .lp_mbox_supported = false, 73 .pm_runtime_supported = false, 74 }; 75 76 static const struct sdio_device_id btmtksdio_table[] = { 77 {SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, SDIO_DEVICE_ID_MEDIATEK_MT7663), 78 .driver_data = (kernel_ulong_t)&mt7663_data }, 79 {SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, SDIO_DEVICE_ID_MEDIATEK_MT7668), 80 .driver_data = (kernel_ulong_t)&mt7668_data }, 81 {SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, SDIO_DEVICE_ID_MEDIATEK_MT7961), 82 .driver_data = (kernel_ulong_t)&mt7921_data }, 83 {SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, SDIO_DEVICE_ID_MEDIATEK_MT7902), 84 .driver_data = (kernel_ulong_t)&mt7902_data }, 85 { } /* Terminating entry */ 86 }; 87 MODULE_DEVICE_TABLE(sdio, btmtksdio_table); 88 89 #define MTK_REG_CHLPCR 0x4 /* W1S */ 90 #define C_INT_EN_SET BIT(0) 91 #define C_INT_EN_CLR BIT(1) 92 #define C_FW_OWN_REQ_SET BIT(8) /* For write */ 93 #define C_COM_DRV_OWN BIT(8) /* For read */ 94 #define C_FW_OWN_REQ_CLR BIT(9) 95 96 #define MTK_REG_CSDIOCSR 0x8 97 #define SDIO_RE_INIT_EN BIT(0) 98 #define SDIO_INT_CTL BIT(2) 99 100 #define MTK_REG_CHCR 0xc 101 #define C_INT_CLR_CTRL BIT(1) 102 #define BT_RST_DONE BIT(8) 103 104 /* CHISR have the same bits field definition with CHIER */ 105 #define MTK_REG_CHISR 0x10 106 #define MTK_REG_CHIER 0x14 107 #define FW_OWN_BACK_INT BIT(0) 108 #define RX_DONE_INT BIT(1) 109 #define TX_EMPTY BIT(2) 110 #define TX_FIFO_OVERFLOW BIT(8) 111 #define FW_MAILBOX_INT BIT(15) 112 #define INT_MASK GENMASK(15, 0) 113 #define RX_PKT_LEN GENMASK(31, 16) 114 115 #define MTK_REG_CSICR 0xc0 116 #define CSICR_CLR_MBOX_ACK BIT(0) 117 #define MTK_REG_PH2DSM0R 0xc4 118 #define PH2DSM0R_DRIVER_OWN BIT(0) 119 #define MTK_REG_PD2HRM0R 0xdc 120 #define PD2HRM0R_DRV_OWN BIT(0) 121 122 #define MTK_REG_CTDR 0x18 123 124 #define MTK_REG_CRDR 0x1c 125 126 #define MTK_REG_CRPLR 0x24 127 128 #define MTK_SDIO_BLOCK_SIZE 256 129 130 #define BTMTKSDIO_TX_WAIT_VND_EVT 1 131 #define BTMTKSDIO_HW_TX_READY 2 132 #define BTMTKSDIO_FUNC_ENABLED 3 133 #define BTMTKSDIO_PATCH_ENABLED 4 134 #define BTMTKSDIO_HW_RESET_ACTIVE 5 135 #define BTMTKSDIO_BT_WAKE_ENABLED 6 136 137 struct mtkbtsdio_hdr { 138 __le16 len; 139 __le16 reserved; 140 u8 bt_type; 141 } __packed; 142 143 struct btmtksdio_dev { 144 struct hci_dev *hdev; 145 struct sdio_func *func; 146 struct device *dev; 147 148 struct work_struct txrx_work; 149 unsigned long tx_state; 150 struct sk_buff_head txq; 151 152 struct sk_buff *evt_skb; 153 154 const struct btmtksdio_data *data; 155 156 struct gpio_desc *reset; 157 }; 158 159 static int mtk_hci_wmt_sync(struct hci_dev *hdev, 160 struct btmtk_hci_wmt_params *wmt_params) 161 { 162 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 163 struct btmtk_hci_wmt_evt_funcc *wmt_evt_funcc; 164 struct btmtk_hci_wmt_evt_reg *wmt_evt_reg; 165 u32 hlen, status = BTMTK_WMT_INVALID; 166 struct btmtk_hci_wmt_evt *wmt_evt; 167 struct btmtk_hci_wmt_cmd *wc; 168 struct btmtk_wmt_hdr *hdr; 169 int err; 170 171 /* Send the WMT command and wait until the WMT event returns */ 172 hlen = sizeof(*hdr) + wmt_params->dlen; 173 if (hlen > 255) 174 return -EINVAL; 175 176 wc = kzalloc(hlen, GFP_KERNEL); 177 if (!wc) 178 return -ENOMEM; 179 180 hdr = &wc->hdr; 181 hdr->dir = 1; 182 hdr->op = wmt_params->op; 183 hdr->dlen = cpu_to_le16(wmt_params->dlen + 1); 184 hdr->flag = wmt_params->flag; 185 memcpy(wc->data, wmt_params->data, wmt_params->dlen); 186 187 set_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state); 188 189 err = __hci_cmd_send(hdev, 0xfc6f, hlen, wc); 190 if (err < 0) { 191 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state); 192 goto err_free_wc; 193 } 194 195 /* The vendor specific WMT commands are all answered by a vendor 196 * specific event and will not have the Command Status or Command 197 * Complete as with usual HCI command flow control. 198 * 199 * After sending the command, wait for BTMTKSDIO_TX_WAIT_VND_EVT 200 * state to be cleared. The driver specific event receive routine 201 * will clear that state and with that indicate completion of the 202 * WMT command. 203 */ 204 err = wait_on_bit_timeout(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT, 205 TASK_INTERRUPTIBLE, HCI_INIT_TIMEOUT); 206 if (err == -EINTR) { 207 bt_dev_err(hdev, "Execution of wmt command interrupted"); 208 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state); 209 goto err_free_wc; 210 } 211 212 if (err) { 213 bt_dev_err(hdev, "Execution of wmt command timed out"); 214 clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state); 215 err = -ETIMEDOUT; 216 goto err_free_wc; 217 } 218 219 /* Parse and handle the return WMT event */ 220 wmt_evt = skb_pull_data(bdev->evt_skb, sizeof(*wmt_evt)); 221 if (!wmt_evt) { 222 bt_dev_err(hdev, "WMT event too short (%u bytes)", 223 bdev->evt_skb->len); 224 err = -EINVAL; 225 goto err_free_skb; 226 } 227 228 if (wmt_evt->whdr.op != hdr->op) { 229 bt_dev_err(hdev, "Wrong op received %d expected %d", 230 wmt_evt->whdr.op, hdr->op); 231 err = -EIO; 232 goto err_free_skb; 233 } 234 235 switch (wmt_evt->whdr.op) { 236 case BTMTK_WMT_SEMAPHORE: 237 if (wmt_evt->whdr.flag == 2) 238 status = BTMTK_WMT_PATCH_UNDONE; 239 else 240 status = BTMTK_WMT_PATCH_DONE; 241 break; 242 case BTMTK_WMT_FUNC_CTRL: 243 if (!skb_pull_data(bdev->evt_skb, 244 sizeof(wmt_evt_funcc->status))) { 245 /* A plain enable/disable request is acked with just 246 * the WMT header and no trailing status word; the 247 * result is carried in the header's own flag byte. 248 */ 249 status = wmt_evt->whdr.flag ? BTMTK_WMT_ON_UNDONE : 250 BTMTK_WMT_ON_DONE; 251 break; 252 } 253 254 wmt_evt_funcc = (struct btmtk_hci_wmt_evt_funcc *)wmt_evt; 255 if (be16_to_cpu(wmt_evt_funcc->status) == 0x404) 256 status = BTMTK_WMT_ON_DONE; 257 else if (be16_to_cpu(wmt_evt_funcc->status) == 0x420) 258 status = BTMTK_WMT_ON_PROGRESS; 259 else 260 status = BTMTK_WMT_ON_UNDONE; 261 break; 262 case BTMTK_WMT_PATCH_DWNLD: 263 if (wmt_evt->whdr.flag == 2) 264 status = BTMTK_WMT_PATCH_DONE; 265 else if (wmt_evt->whdr.flag == 1) 266 status = BTMTK_WMT_PATCH_PROGRESS; 267 else 268 status = BTMTK_WMT_PATCH_UNDONE; 269 break; 270 case BTMTK_WMT_REGISTER: 271 wmt_evt_reg = (struct btmtk_hci_wmt_evt_reg *)wmt_evt; 272 if (le16_to_cpu(wmt_evt->whdr.dlen) == 12) 273 status = le32_to_cpu(wmt_evt_reg->val); 274 break; 275 } 276 277 if (wmt_params->status) 278 *wmt_params->status = status; 279 280 err_free_skb: 281 kfree_skb(bdev->evt_skb); 282 bdev->evt_skb = NULL; 283 err_free_wc: 284 kfree(wc); 285 286 return err; 287 } 288 289 static int btmtksdio_tx_packet(struct btmtksdio_dev *bdev, 290 struct sk_buff *skb) 291 { 292 struct mtkbtsdio_hdr *sdio_hdr; 293 unsigned int len, pad_len; 294 int err; 295 296 /* Make sure that the data buffer is not shared with anyone else and 297 * that there is enough room for the SDIO header 298 */ 299 err = skb_cow_head(skb, sizeof(*sdio_hdr)); 300 if (err < 0) 301 return err; 302 303 /* The transfer is rounded up to the SDIO block size, so the buffer 304 * has to provide tailroom for the padding as well 305 */ 306 len = skb->len + sizeof(*sdio_hdr); 307 pad_len = round_up(len, MTK_SDIO_BLOCK_SIZE) - len; 308 309 if (unlikely(skb_tailroom(skb) < pad_len)) { 310 err = pskb_expand_head(skb, 0, pad_len, GFP_ATOMIC); 311 if (err < 0) 312 return err; 313 } 314 315 /* Prepend MediaTek SDIO Specific Header */ 316 skb_push(skb, sizeof(*sdio_hdr)); 317 318 sdio_hdr = (void *)skb->data; 319 sdio_hdr->len = cpu_to_le16(skb->len); 320 sdio_hdr->reserved = cpu_to_le16(0); 321 sdio_hdr->bt_type = hci_skb_pkt_type(skb); 322 323 /* Zero the padding so that no uninitialised memory is sent out */ 324 skb_put_zero(skb, pad_len); 325 326 clear_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state); 327 err = sdio_writesb(bdev->func, MTK_REG_CTDR, skb->data, skb->len); 328 if (err < 0) 329 goto err_skb_restore; 330 331 bdev->hdev->stat.byte_tx += len; 332 333 kfree_skb(skb); 334 335 return 0; 336 337 err_skb_restore: 338 skb_trim(skb, len); 339 skb_pull(skb, sizeof(*sdio_hdr)); 340 341 return err; 342 } 343 344 static u32 btmtksdio_drv_own_query(struct btmtksdio_dev *bdev) 345 { 346 return sdio_readl(bdev->func, MTK_REG_CHLPCR, NULL); 347 } 348 349 static u32 btmtksdio_drv_own_query_79xx(struct btmtksdio_dev *bdev) 350 { 351 return sdio_readl(bdev->func, MTK_REG_PD2HRM0R, NULL); 352 } 353 354 static u32 btmtksdio_chcr_query(struct btmtksdio_dev *bdev) 355 { 356 return sdio_readl(bdev->func, MTK_REG_CHCR, NULL); 357 } 358 359 static int btmtksdio_fw_pmctrl(struct btmtksdio_dev *bdev) 360 { 361 u32 status; 362 int err; 363 364 sdio_claim_host(bdev->func); 365 366 if (bdev->data->lp_mbox_supported && 367 test_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state)) { 368 sdio_writel(bdev->func, CSICR_CLR_MBOX_ACK, MTK_REG_CSICR, 369 &err); 370 err = readx_poll_timeout(btmtksdio_drv_own_query_79xx, bdev, 371 status, !(status & PD2HRM0R_DRV_OWN), 372 2000, 1000000); 373 if (err < 0) { 374 bt_dev_err(bdev->hdev, "mailbox ACK not cleared"); 375 goto out; 376 } 377 } 378 379 /* Return ownership to the device */ 380 sdio_writel(bdev->func, C_FW_OWN_REQ_SET, MTK_REG_CHLPCR, &err); 381 if (err == 0) 382 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status, 383 !(status & C_COM_DRV_OWN), 2000, 1000000); 384 if (err < 0) 385 bt_dev_err(bdev->hdev, "Cannot return ownership to device"); 386 out: 387 sdio_release_host(bdev->func); 388 389 return err; 390 } 391 392 static int btmtksdio_drv_pmctrl(struct btmtksdio_dev *bdev) 393 { 394 u32 status; 395 int err; 396 397 sdio_claim_host(bdev->func); 398 399 /* Get ownership from the device */ 400 sdio_writel(bdev->func, C_FW_OWN_REQ_CLR, MTK_REG_CHLPCR, &err); 401 if (err < 0) 402 goto out; 403 404 err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status, 405 status & C_COM_DRV_OWN, 2000, 1000000); 406 407 if (!err && bdev->data->lp_mbox_supported && 408 test_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state)) 409 err = readx_poll_timeout(btmtksdio_drv_own_query_79xx, bdev, 410 status, status & PD2HRM0R_DRV_OWN, 411 2000, 1000000); 412 413 out: 414 sdio_release_host(bdev->func); 415 416 if (err < 0) 417 bt_dev_err(bdev->hdev, "Cannot get ownership from device"); 418 419 return err; 420 } 421 422 static int btmtksdio_recv_event(struct hci_dev *hdev, struct sk_buff *skb) 423 { 424 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 425 struct hci_event_hdr *hdr = (void *)skb->data; 426 u8 evt = hdr->evt; 427 int err; 428 429 /* When someone waits for the WMT event, the skb is being cloned 430 * and being processed the events from there then. 431 */ 432 if (test_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state)) { 433 bdev->evt_skb = skb_clone(skb, GFP_KERNEL); 434 if (!bdev->evt_skb) { 435 err = -ENOMEM; 436 goto err_out; 437 } 438 } 439 440 err = hci_recv_frame(hdev, skb); 441 if (err < 0) 442 goto err_free_skb; 443 444 if (evt == HCI_EV_WMT) { 445 if (test_and_clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, 446 &bdev->tx_state)) { 447 /* Barrier to sync with other CPUs */ 448 smp_mb__after_atomic(); 449 wake_up_bit(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT); 450 } 451 } 452 453 return 0; 454 455 err_free_skb: 456 kfree_skb(bdev->evt_skb); 457 bdev->evt_skb = NULL; 458 459 err_out: 460 return err; 461 } 462 463 static int btmtksdio_recv_acl(struct hci_dev *hdev, struct sk_buff *skb) 464 { 465 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 466 u16 handle = le16_to_cpu(hci_acl_hdr(skb)->handle); 467 468 /* The handles below are vendor-reserved values MTK firmware uses to 469 * tag out-of-band debug/dump data on the ACL channel rather than a 470 * real connection. Each is always sent as a single, complete 471 * ACL_START packet, so unlike genuine connection data they never 472 * arrive fragmented (e.g. 0x2efd is never followed by an ACL_CONT 473 * continuation, 0x1efd). 474 */ 475 switch (handle) { 476 case 0xfc6f: 477 /* Firmware dump from device: when the firmware hangs, the 478 * device can no longer suspend and thus disable auto-suspend. 479 */ 480 pm_runtime_forbid(bdev->dev); 481 fallthrough; 482 case 0x05ff: 483 case 0x05fe: 484 case 0x2efd: /* Firmware debug event */ 485 /* Firmware debug logging */ 486 return hci_recv_diag(hdev, skb); 487 } 488 489 return hci_recv_frame(hdev, skb); 490 } 491 492 static const struct h4_recv_pkt mtk_recv_pkts[] = { 493 { H4_RECV_ACL, .recv = btmtksdio_recv_acl }, 494 { H4_RECV_SCO, .recv = hci_recv_frame }, 495 { H4_RECV_EVENT, .recv = btmtksdio_recv_event }, 496 }; 497 498 static int btmtksdio_rx_packet(struct btmtksdio_dev *bdev, u16 rx_size) 499 { 500 const struct h4_recv_pkt *pkts = mtk_recv_pkts; 501 int pkts_count = ARRAY_SIZE(mtk_recv_pkts); 502 struct mtkbtsdio_hdr *sdio_hdr; 503 int err, i, pad_size; 504 struct sk_buff *skb; 505 u16 dlen; 506 507 if (rx_size < sizeof(*sdio_hdr)) 508 return -EILSEQ; 509 510 /* A SDIO packet is exactly containing a Bluetooth packet */ 511 skb = bt_skb_alloc(rx_size, GFP_KERNEL); 512 if (!skb) 513 return -ENOMEM; 514 515 skb_put(skb, rx_size); 516 517 err = sdio_readsb(bdev->func, skb->data, MTK_REG_CRDR, rx_size); 518 if (err < 0) 519 goto err_kfree_skb; 520 521 sdio_hdr = (void *)skb->data; 522 523 /* We assume the default error as -EILSEQ simply to make the error path 524 * be cleaner. 525 */ 526 err = -EILSEQ; 527 528 if (rx_size != le16_to_cpu(sdio_hdr->len)) { 529 bt_dev_err(bdev->hdev, "Rx size in sdio header is mismatched "); 530 goto err_kfree_skb; 531 } 532 533 hci_skb_pkt_type(skb) = sdio_hdr->bt_type; 534 535 /* Remove MediaTek SDIO header */ 536 skb_pull(skb, sizeof(*sdio_hdr)); 537 538 /* We have to dig into the packet to get payload size and then know how 539 * many padding bytes at the tail, these padding bytes should be removed 540 * before the packet is indicated to the core layer. 541 */ 542 for (i = 0; i < pkts_count; i++) { 543 if (sdio_hdr->bt_type == (&pkts[i])->type) 544 break; 545 } 546 547 if (i >= pkts_count) { 548 bt_dev_err(bdev->hdev, "Invalid bt type 0x%02x", 549 sdio_hdr->bt_type); 550 goto err_kfree_skb; 551 } 552 553 /* Remaining bytes cannot hold a header*/ 554 if (skb->len < (&pkts[i])->hlen) { 555 bt_dev_err(bdev->hdev, "The size of bt header is mismatched"); 556 goto err_kfree_skb; 557 } 558 559 switch ((&pkts[i])->lsize) { 560 case 1: 561 dlen = skb->data[(&pkts[i])->loff]; 562 break; 563 case 2: 564 dlen = get_unaligned_le16(skb->data + 565 (&pkts[i])->loff); 566 break; 567 default: 568 goto err_kfree_skb; 569 } 570 571 pad_size = skb->len - (&pkts[i])->hlen - dlen; 572 573 /* Remaining bytes cannot hold a payload */ 574 if (pad_size < 0) { 575 bt_dev_err(bdev->hdev, "The size of bt payload is mismatched"); 576 goto err_kfree_skb; 577 } 578 579 /* Remove padding bytes */ 580 skb_trim(skb, skb->len - pad_size); 581 582 /* Complete frame */ 583 (&pkts[i])->recv(bdev->hdev, skb); 584 585 bdev->hdev->stat.byte_rx += rx_size; 586 587 return 0; 588 589 err_kfree_skb: 590 kfree_skb(skb); 591 592 return err; 593 } 594 595 static void btmtksdio_txrx_work(struct work_struct *work) 596 { 597 struct btmtksdio_dev *bdev = container_of(work, struct btmtksdio_dev, 598 txrx_work); 599 unsigned long txrx_timeout; 600 u32 int_status, rx_size; 601 struct sk_buff *skb; 602 int err; 603 604 pm_runtime_get_sync(bdev->dev); 605 606 sdio_claim_host(bdev->func); 607 608 /* Disable interrupt */ 609 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL); 610 611 txrx_timeout = jiffies + 5 * HZ; 612 613 do { 614 int_status = sdio_readl(bdev->func, MTK_REG_CHISR, NULL); 615 616 /* Ack an interrupt as soon as possible before any operation on 617 * hardware. 618 * 619 * Note that we don't ack any status during operations to avoid race 620 * condition between the host and the device such as it's possible to 621 * mistakenly ack RX_DONE for the next packet and then cause interrupts 622 * not be raised again but there is still pending data in the hardware 623 * FIFO. 624 */ 625 sdio_writel(bdev->func, int_status, MTK_REG_CHISR, NULL); 626 int_status &= INT_MASK; 627 628 if ((int_status & FW_MAILBOX_INT) && 629 bdev->data->chipid == 0x7921) { 630 sdio_writel(bdev->func, PH2DSM0R_DRIVER_OWN, 631 MTK_REG_PH2DSM0R, NULL); 632 } 633 634 if (int_status & FW_OWN_BACK_INT) 635 bt_dev_dbg(bdev->hdev, "Get fw own back"); 636 637 if (int_status & TX_EMPTY) 638 set_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state); 639 640 else if (unlikely(int_status & TX_FIFO_OVERFLOW)) 641 bt_dev_warn(bdev->hdev, "Tx fifo overflow"); 642 643 if (test_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state)) { 644 skb = skb_dequeue(&bdev->txq); 645 if (skb) { 646 err = btmtksdio_tx_packet(bdev, skb); 647 if (err < 0) { 648 bdev->hdev->stat.err_tx++; 649 skb_queue_head(&bdev->txq, skb); 650 } 651 } 652 } 653 654 if (int_status & RX_DONE_INT) { 655 rx_size = sdio_readl(bdev->func, MTK_REG_CRPLR, NULL); 656 rx_size = (rx_size & RX_PKT_LEN) >> 16; 657 if (btmtksdio_rx_packet(bdev, rx_size) < 0) 658 bdev->hdev->stat.err_rx++; 659 } 660 } while (int_status && time_is_after_jiffies(txrx_timeout)); 661 662 /* Enable interrupt */ 663 if (bdev->func->irq_handler) 664 sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, NULL); 665 666 sdio_release_host(bdev->func); 667 668 pm_runtime_put_autosuspend(bdev->dev); 669 } 670 671 static void btmtksdio_interrupt(struct sdio_func *func) 672 { 673 struct btmtksdio_dev *bdev = sdio_get_drvdata(func); 674 675 if (test_bit(BTMTKSDIO_BT_WAKE_ENABLED, &bdev->tx_state)) { 676 if (bdev->hdev->suspended) 677 pm_wakeup_event(bdev->dev, 0); 678 clear_bit(BTMTKSDIO_BT_WAKE_ENABLED, &bdev->tx_state); 679 } 680 681 /* Disable interrupt */ 682 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL); 683 684 schedule_work(&bdev->txrx_work); 685 } 686 687 static int btmtksdio_open(struct hci_dev *hdev) 688 { 689 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 690 u32 val; 691 int err; 692 693 sdio_claim_host(bdev->func); 694 695 err = sdio_enable_func(bdev->func); 696 if (err < 0) 697 goto err_release_host; 698 699 set_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state); 700 701 err = btmtksdio_drv_pmctrl(bdev); 702 if (err < 0) 703 goto err_disable_func; 704 705 /* Disable interrupt & mask out all interrupt sources */ 706 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, &err); 707 if (err < 0) 708 goto err_disable_func; 709 710 sdio_writel(bdev->func, 0, MTK_REG_CHIER, &err); 711 if (err < 0) 712 goto err_disable_func; 713 714 err = sdio_claim_irq(bdev->func, btmtksdio_interrupt); 715 if (err < 0) 716 goto err_disable_func; 717 718 err = sdio_set_block_size(bdev->func, MTK_SDIO_BLOCK_SIZE); 719 if (err < 0) 720 goto err_release_irq; 721 722 /* SDIO CMD 5 allows the SDIO device back to idle state an 723 * synchronous interrupt is supported in SDIO 4-bit mode 724 */ 725 val = sdio_readl(bdev->func, MTK_REG_CSDIOCSR, &err); 726 if (err < 0) 727 goto err_release_irq; 728 729 val |= SDIO_INT_CTL; 730 sdio_writel(bdev->func, val, MTK_REG_CSDIOCSR, &err); 731 if (err < 0) 732 goto err_release_irq; 733 734 /* Explicitly set write-1-clear method */ 735 val = sdio_readl(bdev->func, MTK_REG_CHCR, &err); 736 if (err < 0) 737 goto err_release_irq; 738 739 val |= C_INT_CLR_CTRL; 740 sdio_writel(bdev->func, val, MTK_REG_CHCR, &err); 741 if (err < 0) 742 goto err_release_irq; 743 744 /* Setup interrupt sources */ 745 sdio_writel(bdev->func, RX_DONE_INT | TX_EMPTY | TX_FIFO_OVERFLOW, 746 MTK_REG_CHIER, &err); 747 if (err < 0) 748 goto err_release_irq; 749 750 /* Enable interrupt */ 751 sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, &err); 752 if (err < 0) 753 goto err_release_irq; 754 755 sdio_release_host(bdev->func); 756 757 return 0; 758 759 err_release_irq: 760 sdio_release_irq(bdev->func); 761 762 err_disable_func: 763 sdio_disable_func(bdev->func); 764 765 err_release_host: 766 sdio_release_host(bdev->func); 767 768 return err; 769 } 770 771 static int btmtksdio_close(struct hci_dev *hdev) 772 { 773 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 774 775 /* Skip btmtksdio_close if BTMTKSDIO_FUNC_ENABLED isn't set */ 776 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state)) 777 return 0; 778 779 sdio_claim_host(bdev->func); 780 781 /* Disable interrupt */ 782 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL); 783 784 sdio_release_irq(bdev->func); 785 786 /* No new work can be scheduled after sdio_release_irq(), so cancel the 787 * work outside the sdio host lock. btmtksdio_txrx_work() also claims 788 * the host, so canceling it while holding the lock would deadlock. 789 */ 790 sdio_release_host(bdev->func); 791 792 cancel_work_sync(&bdev->txrx_work); 793 794 sdio_claim_host(bdev->func); 795 796 btmtksdio_fw_pmctrl(bdev); 797 798 clear_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state); 799 sdio_disable_func(bdev->func); 800 801 sdio_release_host(bdev->func); 802 803 return 0; 804 } 805 806 static int btmtksdio_flush(struct hci_dev *hdev) 807 { 808 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 809 810 skb_queue_purge(&bdev->txq); 811 812 cancel_work_sync(&bdev->txrx_work); 813 814 return 0; 815 } 816 817 static int btmtksdio_func_query(struct hci_dev *hdev) 818 { 819 struct btmtk_hci_wmt_params wmt_params; 820 int status, err; 821 u8 param = 0; 822 823 /* Query whether the function is enabled */ 824 wmt_params.op = BTMTK_WMT_FUNC_CTRL; 825 wmt_params.flag = 4; 826 wmt_params.dlen = sizeof(param); 827 wmt_params.data = ¶m; 828 wmt_params.status = &status; 829 830 err = mtk_hci_wmt_sync(hdev, &wmt_params); 831 if (err < 0) { 832 bt_dev_err(hdev, "Failed to query function status (%d)", err); 833 return err; 834 } 835 836 return status; 837 } 838 839 static int mt76xx_setup(struct hci_dev *hdev, const char *fwname) 840 { 841 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 842 struct btmtk_hci_wmt_params wmt_params; 843 struct btmtk_tci_sleep tci_sleep; 844 struct sk_buff *skb; 845 int err, status; 846 u8 param = 0x1; 847 848 /* Query whether the firmware is already download */ 849 wmt_params.op = BTMTK_WMT_SEMAPHORE; 850 wmt_params.flag = 1; 851 wmt_params.dlen = 0; 852 wmt_params.data = NULL; 853 wmt_params.status = &status; 854 855 err = mtk_hci_wmt_sync(hdev, &wmt_params); 856 if (err < 0) { 857 bt_dev_err(hdev, "Failed to query firmware status (%d)", err); 858 return err; 859 } 860 861 if (status == BTMTK_WMT_PATCH_DONE) { 862 bt_dev_info(hdev, "Firmware already downloaded"); 863 goto ignore_setup_fw; 864 } 865 866 /* Setup a firmware which the device definitely requires */ 867 err = btmtk_setup_firmware(hdev, fwname, mtk_hci_wmt_sync); 868 if (err < 0) 869 return err; 870 871 ignore_setup_fw: 872 /* Query whether the device is already enabled */ 873 err = readx_poll_timeout(btmtksdio_func_query, hdev, status, 874 status < 0 || status != BTMTK_WMT_ON_PROGRESS, 875 2000, 5000000); 876 /* -ETIMEDOUT happens */ 877 if (err < 0) 878 return err; 879 880 /* The other errors happen in btusb_mtk_func_query */ 881 if (status < 0) 882 return status; 883 884 if (status == BTMTK_WMT_ON_DONE) { 885 bt_dev_info(hdev, "function already on"); 886 goto ignore_func_on; 887 } 888 889 /* Enable Bluetooth protocol */ 890 wmt_params.op = BTMTK_WMT_FUNC_CTRL; 891 wmt_params.flag = 0; 892 wmt_params.dlen = sizeof(param); 893 wmt_params.data = ¶m; 894 wmt_params.status = NULL; 895 896 err = mtk_hci_wmt_sync(hdev, &wmt_params); 897 if (err < 0) { 898 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err); 899 return err; 900 } 901 902 set_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state); 903 904 ignore_func_on: 905 /* Apply the low power environment setup */ 906 tci_sleep.mode = 0x5; 907 tci_sleep.duration = cpu_to_le16(0x640); 908 tci_sleep.host_duration = cpu_to_le16(0x640); 909 tci_sleep.host_wakeup_pin = 0; 910 tci_sleep.time_compensation = 0; 911 912 skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep, 913 HCI_INIT_TIMEOUT); 914 if (IS_ERR(skb)) { 915 err = PTR_ERR(skb); 916 bt_dev_err(hdev, "Failed to apply low power setting (%d)", err); 917 return err; 918 } 919 kfree_skb(skb); 920 921 return 0; 922 } 923 924 static int mt79xx_setup(struct hci_dev *hdev, const char *fwname, u32 dev_id) 925 { 926 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 927 struct btmtk_hci_wmt_params wmt_params; 928 u8 param = 0x1; 929 int err; 930 931 err = btmtk_setup_firmware_79xx(hdev, fwname, mtk_hci_wmt_sync, dev_id); 932 if (err < 0) { 933 bt_dev_err(hdev, "Failed to setup 79xx firmware (%d)", err); 934 return err; 935 } 936 937 err = btmtksdio_fw_pmctrl(bdev); 938 if (err < 0) 939 return err; 940 941 err = btmtksdio_drv_pmctrl(bdev); 942 if (err < 0) 943 return err; 944 945 /* Enable Bluetooth protocol */ 946 wmt_params.op = BTMTK_WMT_FUNC_CTRL; 947 wmt_params.flag = 0; 948 wmt_params.dlen = sizeof(param); 949 wmt_params.data = ¶m; 950 wmt_params.status = NULL; 951 952 err = mtk_hci_wmt_sync(hdev, &wmt_params); 953 if (err < 0) { 954 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err); 955 return err; 956 } 957 958 hci_set_msft_opcode(hdev, 0xFD30); 959 hci_set_aosp_capable(hdev); 960 set_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state); 961 962 return err; 963 } 964 965 static int btmtksdio_mtk_reg_read(struct hci_dev *hdev, u32 reg, u32 *val) 966 { 967 struct btmtk_hci_wmt_params wmt_params; 968 struct reg_read_cmd reg_read = { 969 .type = 1, 970 .num = 1, 971 }; 972 u32 status; 973 int err; 974 975 reg_read.addr = cpu_to_le32(reg); 976 wmt_params.op = BTMTK_WMT_REGISTER; 977 wmt_params.flag = BTMTK_WMT_REG_READ; 978 wmt_params.dlen = sizeof(reg_read); 979 wmt_params.data = ®_read; 980 wmt_params.status = &status; 981 982 err = mtk_hci_wmt_sync(hdev, &wmt_params); 983 if (err < 0) { 984 bt_dev_err(hdev, "Failed to read reg (%d)", err); 985 return err; 986 } 987 988 *val = status; 989 990 return err; 991 } 992 993 static int btmtksdio_mtk_reg_write(struct hci_dev *hdev, u32 reg, u32 val, u32 mask) 994 { 995 struct btmtk_hci_wmt_params wmt_params; 996 const struct reg_write_cmd reg_write = { 997 .type = 1, 998 .num = 1, 999 .addr = cpu_to_le32(reg), 1000 .data = cpu_to_le32(val), 1001 .mask = cpu_to_le32(mask), 1002 }; 1003 int err, status; 1004 1005 wmt_params.op = BTMTK_WMT_REGISTER; 1006 wmt_params.flag = BTMTK_WMT_REG_WRITE; 1007 wmt_params.dlen = sizeof(reg_write); 1008 wmt_params.data = ®_write; 1009 wmt_params.status = &status; 1010 1011 err = mtk_hci_wmt_sync(hdev, &wmt_params); 1012 if (err < 0) 1013 bt_dev_err(hdev, "Failed to write reg (%d)", err); 1014 1015 return err; 1016 } 1017 1018 static int btmtksdio_get_data_path_id(struct hci_dev *hdev, __u8 *data_path_id) 1019 { 1020 /* uses 1 as data path id for all the usecases */ 1021 *data_path_id = 1; 1022 return 0; 1023 } 1024 1025 static int btmtksdio_get_codec_config_data(struct hci_dev *hdev, 1026 __u8 link, struct bt_codec *codec, 1027 __u8 *ven_len, __u8 **ven_data) 1028 { 1029 int err = 0; 1030 1031 if (!ven_data || !ven_len) 1032 return -EINVAL; 1033 1034 *ven_len = 0; 1035 *ven_data = NULL; 1036 1037 if (link != ESCO_LINK) { 1038 bt_dev_err(hdev, "Invalid link type(%u)", link); 1039 return -EINVAL; 1040 } 1041 1042 *ven_data = kmalloc(sizeof(__u8), GFP_KERNEL); 1043 if (!*ven_data) { 1044 err = -ENOMEM; 1045 goto error; 1046 } 1047 1048 /* supports only CVSD and mSBC offload codecs */ 1049 switch (codec->id) { 1050 case 0x02: 1051 **ven_data = 0x00; 1052 break; 1053 case 0x05: 1054 **ven_data = 0x01; 1055 break; 1056 default: 1057 err = -EINVAL; 1058 bt_dev_err(hdev, "Invalid codec id(%u)", codec->id); 1059 goto error; 1060 } 1061 /* codec and its capabilities are pre-defined to ids 1062 * preset id = 0x00 represents CVSD codec with sampling rate 8K 1063 * preset id = 0x01 represents mSBC codec with sampling rate 16K 1064 */ 1065 *ven_len = sizeof(__u8); 1066 return err; 1067 1068 error: 1069 kfree(*ven_data); 1070 *ven_data = NULL; 1071 return err; 1072 } 1073 1074 static int btmtksdio_sco_setting(struct hci_dev *hdev) 1075 { 1076 const struct btmtk_sco sco_setting = { 1077 .clock_config = 0x49, 1078 .channel_format_config = 0x80, 1079 }; 1080 struct sk_buff *skb; 1081 u32 val; 1082 int err; 1083 1084 /* Enable SCO over I2S/PCM for MediaTek chipset */ 1085 skb = __hci_cmd_sync(hdev, 0xfc72, sizeof(sco_setting), 1086 &sco_setting, HCI_CMD_TIMEOUT); 1087 if (IS_ERR(skb)) 1088 return PTR_ERR(skb); 1089 1090 kfree_skb(skb); 1091 1092 err = btmtksdio_mtk_reg_read(hdev, MT7921_PINMUX_0, &val); 1093 if (err < 0) 1094 return err; 1095 1096 val |= 0x11000000; 1097 err = btmtksdio_mtk_reg_write(hdev, MT7921_PINMUX_0, val, ~0); 1098 if (err < 0) 1099 return err; 1100 1101 err = btmtksdio_mtk_reg_read(hdev, MT7921_PINMUX_1, &val); 1102 if (err < 0) 1103 return err; 1104 1105 val |= 0x00000101; 1106 err = btmtksdio_mtk_reg_write(hdev, MT7921_PINMUX_1, val, ~0); 1107 if (err < 0) 1108 return err; 1109 1110 hdev->get_data_path_id = btmtksdio_get_data_path_id; 1111 hdev->get_codec_config_data = btmtksdio_get_codec_config_data; 1112 1113 return err; 1114 } 1115 1116 static int btmtksdio_reset_setting(struct hci_dev *hdev) 1117 { 1118 int err; 1119 u32 val; 1120 1121 err = btmtksdio_mtk_reg_read(hdev, MT7921_PINMUX_1, &val); 1122 if (err < 0) 1123 return err; 1124 1125 val |= 0x20; /* set the pin (bit field 11:8) work as GPIO mode */ 1126 err = btmtksdio_mtk_reg_write(hdev, MT7921_PINMUX_1, val, ~0); 1127 if (err < 0) 1128 return err; 1129 1130 err = btmtksdio_mtk_reg_read(hdev, MT7921_BTSYS_RST, &val); 1131 if (err < 0) 1132 return err; 1133 1134 val |= MT7921_BTSYS_RST_WITH_GPIO; 1135 return btmtksdio_mtk_reg_write(hdev, MT7921_BTSYS_RST, val, ~0); 1136 } 1137 1138 static int btmtksdio_setup(struct hci_dev *hdev) 1139 { 1140 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 1141 ktime_t calltime, delta, rettime; 1142 unsigned long long duration; 1143 char fwname[64]; 1144 int err; 1145 u32 dev_id, fw_version = 0, val; 1146 1147 calltime = ktime_get(); 1148 set_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state); 1149 1150 switch (bdev->data->chipid) { 1151 case 0x7902: 1152 case 0x7921: 1153 if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state)) { 1154 err = btmtksdio_mtk_reg_read(hdev, MT7921_DLSTATUS, 1155 &val); 1156 if (err < 0) 1157 return err; 1158 1159 val &= ~BT_DL_STATE; 1160 err = btmtksdio_mtk_reg_write(hdev, MT7921_DLSTATUS, 1161 val, ~0); 1162 if (err < 0) 1163 return err; 1164 1165 btmtksdio_fw_pmctrl(bdev); 1166 msleep(20); 1167 btmtksdio_drv_pmctrl(bdev); 1168 1169 clear_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state); 1170 } 1171 1172 err = btmtksdio_mtk_reg_read(hdev, 0x70010200, &dev_id); 1173 if (err < 0) { 1174 bt_dev_err(hdev, "Failed to get device id (%d)", err); 1175 return err; 1176 } 1177 1178 err = btmtksdio_mtk_reg_read(hdev, 0x80021004, &fw_version); 1179 if (err < 0) { 1180 bt_dev_err(hdev, "Failed to get fw version (%d)", err); 1181 return err; 1182 } 1183 1184 btmtk_fw_get_filename(fwname, sizeof(fwname), dev_id, 1185 fw_version, 0); 1186 1187 err = mt79xx_setup(hdev, fwname, dev_id); 1188 if (err < 0) 1189 return err; 1190 1191 /* Enable SCO over I2S/PCM */ 1192 err = btmtksdio_sco_setting(hdev); 1193 if (err < 0) { 1194 bt_dev_err(hdev, "Failed to enable SCO setting (%d)", err); 1195 return err; 1196 } 1197 1198 /* Enable WBS with mSBC codec */ 1199 hci_set_quirk(hdev, HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED); 1200 1201 /* Enable GPIO reset mechanism */ 1202 if (bdev->reset) { 1203 err = btmtksdio_reset_setting(hdev); 1204 if (err < 0) { 1205 bt_dev_err(hdev, "Failed to enable Reset setting (%d)", err); 1206 devm_gpiod_put(bdev->dev, bdev->reset); 1207 bdev->reset = NULL; 1208 } 1209 } 1210 1211 break; 1212 case 0x7663: 1213 case 0x7668: 1214 err = mt76xx_setup(hdev, bdev->data->fwname); 1215 if (err < 0) 1216 return err; 1217 break; 1218 default: 1219 return -ENODEV; 1220 } 1221 1222 rettime = ktime_get(); 1223 delta = ktime_sub(rettime, calltime); 1224 duration = (unsigned long long)ktime_to_ns(delta) >> 10; 1225 1226 if (bdev->data->pm_runtime_supported) { 1227 pm_runtime_set_autosuspend_delay(bdev->dev, 1228 MTKBTSDIO_AUTOSUSPEND_DELAY); 1229 pm_runtime_use_autosuspend(bdev->dev); 1230 1231 err = pm_runtime_set_active(bdev->dev); 1232 if (err < 0) 1233 return err; 1234 1235 /* Default forbid runtime auto suspend, that can be allowed by 1236 * enable_autosuspend flag or the PM runtime entry under sysfs. 1237 */ 1238 pm_runtime_forbid(bdev->dev); 1239 pm_runtime_enable(bdev->dev); 1240 1241 if (enable_autosuspend) 1242 pm_runtime_allow(bdev->dev); 1243 } 1244 1245 bt_dev_info(hdev, "Device setup in %llu usecs", duration); 1246 1247 return 0; 1248 } 1249 1250 static int btmtksdio_shutdown(struct hci_dev *hdev) 1251 { 1252 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 1253 struct btmtk_hci_wmt_params wmt_params; 1254 u8 param = 0x0; 1255 int err; 1256 1257 /* Get back the state to be consistent with the state 1258 * in btmtksdio_setup. 1259 */ 1260 pm_runtime_get_sync(bdev->dev); 1261 1262 /* wmt command only works until the reset is complete */ 1263 if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state)) 1264 goto ignore_wmt_cmd; 1265 1266 /* Disable the device */ 1267 wmt_params.op = BTMTK_WMT_FUNC_CTRL; 1268 wmt_params.flag = 0; 1269 wmt_params.dlen = sizeof(param); 1270 wmt_params.data = ¶m; 1271 wmt_params.status = NULL; 1272 1273 err = mtk_hci_wmt_sync(hdev, &wmt_params); 1274 if (err < 0) 1275 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err); 1276 1277 ignore_wmt_cmd: 1278 pm_runtime_put_noidle(bdev->dev); 1279 pm_runtime_disable(bdev->dev); 1280 1281 return 0; 1282 } 1283 1284 static int btmtksdio_send_frame(struct hci_dev *hdev, struct sk_buff *skb) 1285 { 1286 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 1287 1288 switch (hci_skb_pkt_type(skb)) { 1289 case HCI_COMMAND_PKT: 1290 hdev->stat.cmd_tx++; 1291 break; 1292 1293 case HCI_ACLDATA_PKT: 1294 hdev->stat.acl_tx++; 1295 break; 1296 1297 case HCI_SCODATA_PKT: 1298 hdev->stat.sco_tx++; 1299 break; 1300 1301 default: 1302 return -EILSEQ; 1303 } 1304 1305 skb_queue_tail(&bdev->txq, skb); 1306 1307 schedule_work(&bdev->txrx_work); 1308 1309 return 0; 1310 } 1311 1312 static void btmtksdio_reset(struct hci_dev *hdev) 1313 { 1314 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 1315 u32 status; 1316 int err; 1317 1318 if (!bdev->reset || bdev->data->chipid != 0x7921) 1319 return; 1320 1321 pm_runtime_get_sync(bdev->dev); 1322 1323 if (test_and_set_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state)) 1324 return; 1325 1326 sdio_claim_host(bdev->func); 1327 1328 /* set drv_pmctrl if BT is closed before doing reset */ 1329 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state)) { 1330 sdio_enable_func(bdev->func); 1331 btmtksdio_drv_pmctrl(bdev); 1332 } 1333 1334 sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL); 1335 skb_queue_purge(&bdev->txq); 1336 1337 /* Unregister the IRQ before releasing the host lock so that a 1338 * concurrently running btmtksdio_txrx_work() cannot re-enable the 1339 * device interrupt (C_INT_EN_SET) and be rescheduled while the device 1340 * is being reset. btmtksdio_txrx_work() also claims the host, so the 1341 * work must be cancelled outside the sdio host lock to avoid a 1342 * deadlock. The IRQ is re-claimed by btmtksdio_open() when the HCI 1343 * device is re-opened after the reset. 1344 */ 1345 sdio_release_irq(bdev->func); 1346 sdio_release_host(bdev->func); 1347 1348 cancel_work_sync(&bdev->txrx_work); 1349 1350 sdio_claim_host(bdev->func); 1351 1352 gpiod_set_value_cansleep(bdev->reset, 1); 1353 msleep(100); 1354 gpiod_set_value_cansleep(bdev->reset, 0); 1355 1356 err = readx_poll_timeout(btmtksdio_chcr_query, bdev, status, 1357 status & BT_RST_DONE, 100000, 2000000); 1358 if (err < 0) { 1359 bt_dev_err(hdev, "Failed to reset (%d)", err); 1360 goto err; 1361 } 1362 1363 /* set fw_pmctrl back if BT is closed after doing reset */ 1364 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state)) { 1365 btmtksdio_fw_pmctrl(bdev); 1366 sdio_disable_func(bdev->func); 1367 } 1368 1369 clear_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state); 1370 err: 1371 sdio_release_host(bdev->func); 1372 1373 pm_runtime_put_noidle(bdev->dev); 1374 pm_runtime_disable(bdev->dev); 1375 1376 hci_reset_dev(hdev); 1377 } 1378 1379 static bool btmtksdio_sdio_inband_wakeup(struct hci_dev *hdev) 1380 { 1381 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 1382 1383 return device_may_wakeup(bdev->dev); 1384 } 1385 1386 static bool btmtksdio_sdio_wakeup(struct hci_dev *hdev) 1387 { 1388 struct btmtksdio_dev *bdev = hci_get_drvdata(hdev); 1389 bool may_wakeup = device_may_wakeup(bdev->dev); 1390 const struct btmtk_wakeon bt_awake = { 1391 .mode = 0x1, 1392 .gpo = 0, 1393 .active_high = 0x1, 1394 .enable_delay = cpu_to_le16(0xc80), 1395 .wakeup_delay = cpu_to_le16(0x20), 1396 }; 1397 1398 if (may_wakeup && bdev->data->chipid == 0x7921) { 1399 struct sk_buff *skb; 1400 1401 skb = __hci_cmd_sync(hdev, 0xfc27, sizeof(bt_awake), 1402 &bt_awake, HCI_CMD_TIMEOUT); 1403 if (IS_ERR(skb)) 1404 may_wakeup = false; 1405 else 1406 kfree_skb(skb); 1407 } 1408 1409 return may_wakeup; 1410 } 1411 1412 static int btmtksdio_probe(struct sdio_func *func, 1413 const struct sdio_device_id *id) 1414 { 1415 struct btmtksdio_dev *bdev; 1416 struct hci_dev *hdev; 1417 struct device_node *old_node; 1418 bool restore_node; 1419 int err; 1420 1421 bdev = devm_kzalloc(&func->dev, sizeof(*bdev), GFP_KERNEL); 1422 if (!bdev) 1423 return -ENOMEM; 1424 1425 bdev->data = (void *)id->driver_data; 1426 if (!bdev->data) 1427 return -ENODEV; 1428 1429 bdev->dev = &func->dev; 1430 bdev->func = func; 1431 1432 INIT_WORK(&bdev->txrx_work, btmtksdio_txrx_work); 1433 skb_queue_head_init(&bdev->txq); 1434 1435 /* Initialize and register HCI device */ 1436 hdev = hci_alloc_dev(); 1437 if (!hdev) { 1438 dev_err(&func->dev, "Can't allocate HCI device\n"); 1439 return -ENOMEM; 1440 } 1441 1442 bdev->hdev = hdev; 1443 1444 hdev->bus = HCI_SDIO; 1445 hci_set_drvdata(hdev, bdev); 1446 1447 hdev->open = btmtksdio_open; 1448 hdev->close = btmtksdio_close; 1449 hdev->reset = btmtksdio_reset; 1450 hdev->flush = btmtksdio_flush; 1451 hdev->setup = btmtksdio_setup; 1452 hdev->shutdown = btmtksdio_shutdown; 1453 hdev->send = btmtksdio_send_frame; 1454 hdev->wakeup = btmtksdio_sdio_wakeup; 1455 /* 1456 * If SDIO controller supports wake on Bluetooth, sending a wakeon 1457 * command is not necessary. 1458 */ 1459 if (device_can_wakeup(func->card->host->parent)) 1460 hdev->wakeup = btmtksdio_sdio_inband_wakeup; 1461 else 1462 hdev->wakeup = btmtksdio_sdio_wakeup; 1463 hdev->set_bdaddr = btmtk_set_bdaddr; 1464 1465 SET_HCIDEV_DEV(hdev, &func->dev); 1466 1467 hdev->manufacturer = 70; 1468 hci_set_quirk(hdev, HCI_QUIRK_NON_PERSISTENT_SETUP); 1469 1470 sdio_set_drvdata(func, bdev); 1471 1472 err = hci_register_dev(hdev); 1473 if (err < 0) { 1474 dev_err(&func->dev, "Can't register HCI device\n"); 1475 hci_free_dev(hdev); 1476 return err; 1477 } 1478 1479 /* pm_runtime_enable would be done after the firmware is being 1480 * downloaded because the core layer probably already enables 1481 * runtime PM for this func such as the case host->caps & 1482 * MMC_CAP_POWER_OFF_CARD. 1483 */ 1484 if (pm_runtime_enabled(bdev->dev)) 1485 pm_runtime_disable(bdev->dev); 1486 1487 /* As explanation in drivers/mmc/core/sdio_bus.c tells us: 1488 * Unbound SDIO functions are always suspended. 1489 * During probe, the function is set active and the usage count 1490 * is incremented. If the driver supports runtime PM, 1491 * it should call pm_runtime_put_noidle() in its probe routine and 1492 * pm_runtime_get_noresume() in its remove routine. 1493 * 1494 * So, put a pm_runtime_put_noidle here ! 1495 */ 1496 pm_runtime_put_noidle(bdev->dev); 1497 1498 err = devm_device_init_wakeup(bdev->dev); 1499 if (err) 1500 bt_dev_err(hdev, "failed to initialize device wakeup"); 1501 1502 restore_node = false; 1503 if (!of_device_is_compatible(bdev->dev->of_node, "mediatek,mt7921s-bluetooth")) { 1504 restore_node = true; 1505 old_node = bdev->dev->of_node; 1506 bdev->dev->of_node = of_find_compatible_node(NULL, NULL, 1507 "mediatek,mt7921s-bluetooth"); 1508 } 1509 1510 bdev->reset = devm_gpiod_get_optional(bdev->dev, "reset", 1511 GPIOD_OUT_LOW); 1512 if (IS_ERR(bdev->reset)) 1513 err = PTR_ERR(bdev->reset); 1514 1515 if (restore_node) { 1516 of_node_put(bdev->dev->of_node); 1517 bdev->dev->of_node = old_node; 1518 } 1519 1520 return err; 1521 } 1522 1523 static void btmtksdio_remove(struct sdio_func *func) 1524 { 1525 struct btmtksdio_dev *bdev = sdio_get_drvdata(func); 1526 struct hci_dev *hdev; 1527 1528 if (!bdev) 1529 return; 1530 1531 hdev = bdev->hdev; 1532 1533 /* Make sure to call btmtksdio_close before removing sdio card */ 1534 if (test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state)) 1535 btmtksdio_close(hdev); 1536 1537 if (bdev->data->pm_runtime_supported) 1538 pm_runtime_dont_use_autosuspend(bdev->dev); 1539 1540 /* Be consistent the state in btmtksdio_probe */ 1541 pm_runtime_get_noresume(bdev->dev); 1542 1543 sdio_set_drvdata(func, NULL); 1544 hci_unregister_dev(hdev); 1545 hci_free_dev(hdev); 1546 } 1547 1548 static int btmtksdio_runtime_suspend(struct device *dev) 1549 { 1550 struct sdio_func *func = dev_to_sdio_func(dev); 1551 struct btmtksdio_dev *bdev; 1552 int err; 1553 1554 bdev = sdio_get_drvdata(func); 1555 if (!bdev) 1556 return 0; 1557 1558 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state)) 1559 return 0; 1560 1561 sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER); 1562 1563 err = btmtksdio_fw_pmctrl(bdev); 1564 1565 bt_dev_dbg(bdev->hdev, "status (%d) return ownership to device", err); 1566 1567 return err; 1568 } 1569 1570 static int btmtksdio_system_suspend(struct device *dev) 1571 { 1572 struct sdio_func *func = dev_to_sdio_func(dev); 1573 struct btmtksdio_dev *bdev; 1574 1575 bdev = sdio_get_drvdata(func); 1576 if (!bdev) 1577 return 0; 1578 1579 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state)) 1580 return 0; 1581 1582 set_bit(BTMTKSDIO_BT_WAKE_ENABLED, &bdev->tx_state); 1583 1584 return btmtksdio_runtime_suspend(dev); 1585 } 1586 1587 static int btmtksdio_runtime_resume(struct device *dev) 1588 { 1589 struct sdio_func *func = dev_to_sdio_func(dev); 1590 struct btmtksdio_dev *bdev; 1591 int err; 1592 1593 bdev = sdio_get_drvdata(func); 1594 if (!bdev) 1595 return 0; 1596 1597 if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state)) 1598 return 0; 1599 1600 err = btmtksdio_drv_pmctrl(bdev); 1601 1602 bt_dev_dbg(bdev->hdev, "status (%d) get ownership from device", err); 1603 1604 return err; 1605 } 1606 1607 static int btmtksdio_system_resume(struct device *dev) 1608 { 1609 return btmtksdio_runtime_resume(dev); 1610 } 1611 1612 static const struct dev_pm_ops btmtksdio_pm_ops = { 1613 SYSTEM_SLEEP_PM_OPS(btmtksdio_system_suspend, btmtksdio_system_resume) 1614 RUNTIME_PM_OPS(btmtksdio_runtime_suspend, btmtksdio_runtime_resume, NULL) 1615 }; 1616 1617 static struct sdio_driver btmtksdio_driver = { 1618 .name = "btmtksdio", 1619 .probe = btmtksdio_probe, 1620 .remove = btmtksdio_remove, 1621 .id_table = btmtksdio_table, 1622 .drv = { 1623 .pm = pm_ptr(&btmtksdio_pm_ops), 1624 } 1625 }; 1626 1627 module_sdio_driver(btmtksdio_driver); 1628 1629 module_param(enable_autosuspend, bool, 0644); 1630 MODULE_PARM_DESC(enable_autosuspend, "Enable autosuspend by default"); 1631 1632 MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>"); 1633 MODULE_DESCRIPTION("MediaTek Bluetooth SDIO driver ver " VERSION); 1634 MODULE_VERSION(VERSION); 1635 MODULE_LICENSE("GPL"); 1636