linux/drivers/bluetooth/btmtksdio.c
<<
>>
Prefs
   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 <asm/unaligned.h>
  14#include <linux/atomic.h>
  15#include <linux/firmware.h>
  16#include <linux/init.h>
  17#include <linux/iopoll.h>
  18#include <linux/kernel.h>
  19#include <linux/module.h>
  20#include <linux/pm_runtime.h>
  21#include <linux/skbuff.h>
  22
  23#include <linux/mmc/host.h>
  24#include <linux/mmc/sdio_ids.h>
  25#include <linux/mmc/sdio_func.h>
  26
  27#include <net/bluetooth/bluetooth.h>
  28#include <net/bluetooth/hci_core.h>
  29
  30#include "h4_recv.h"
  31
  32#define VERSION "0.1"
  33
  34#define FIRMWARE_MT7663         "mediatek/mt7663pr2h.bin"
  35#define FIRMWARE_MT7668         "mediatek/mt7668pr2h.bin"
  36
  37#define MTKBTSDIO_AUTOSUSPEND_DELAY     8000
  38
  39static bool enable_autosuspend;
  40
  41struct btmtksdio_data {
  42        const char *fwname;
  43};
  44
  45static const struct btmtksdio_data mt7663_data = {
  46        .fwname = FIRMWARE_MT7663,
  47};
  48
  49static const struct btmtksdio_data mt7668_data = {
  50        .fwname = FIRMWARE_MT7668,
  51};
  52
  53static const struct sdio_device_id btmtksdio_table[] = {
  54        {SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, 0x7663),
  55         .driver_data = (kernel_ulong_t)&mt7663_data },
  56        {SDIO_DEVICE(SDIO_VENDOR_ID_MEDIATEK, 0x7668),
  57         .driver_data = (kernel_ulong_t)&mt7668_data },
  58        { }     /* Terminating entry */
  59};
  60
  61#define MTK_REG_CHLPCR          0x4     /* W1S */
  62#define C_INT_EN_SET            BIT(0)
  63#define C_INT_EN_CLR            BIT(1)
  64#define C_FW_OWN_REQ_SET        BIT(8)  /* For write */
  65#define C_COM_DRV_OWN           BIT(8)  /* For read */
  66#define C_FW_OWN_REQ_CLR        BIT(9)
  67
  68#define MTK_REG_CSDIOCSR        0x8
  69#define SDIO_RE_INIT_EN         BIT(0)
  70#define SDIO_INT_CTL            BIT(2)
  71
  72#define MTK_REG_CHCR            0xc
  73#define C_INT_CLR_CTRL          BIT(1)
  74
  75/* CHISR have the same bits field definition with CHIER */
  76#define MTK_REG_CHISR           0x10
  77#define MTK_REG_CHIER           0x14
  78#define FW_OWN_BACK_INT         BIT(0)
  79#define RX_DONE_INT             BIT(1)
  80#define TX_EMPTY                BIT(2)
  81#define TX_FIFO_OVERFLOW        BIT(8)
  82#define RX_PKT_LEN              GENMASK(31, 16)
  83
  84#define MTK_REG_CTDR            0x18
  85
  86#define MTK_REG_CRDR            0x1c
  87
  88#define MTK_SDIO_BLOCK_SIZE     256
  89
  90#define BTMTKSDIO_TX_WAIT_VND_EVT       1
  91
  92enum {
  93        MTK_WMT_PATCH_DWNLD = 0x1,
  94        MTK_WMT_TEST = 0x2,
  95        MTK_WMT_WAKEUP = 0x3,
  96        MTK_WMT_HIF = 0x4,
  97        MTK_WMT_FUNC_CTRL = 0x6,
  98        MTK_WMT_RST = 0x7,
  99        MTK_WMT_SEMAPHORE = 0x17,
 100};
 101
 102enum {
 103        BTMTK_WMT_INVALID,
 104        BTMTK_WMT_PATCH_UNDONE,
 105        BTMTK_WMT_PATCH_DONE,
 106        BTMTK_WMT_ON_UNDONE,
 107        BTMTK_WMT_ON_DONE,
 108        BTMTK_WMT_ON_PROGRESS,
 109};
 110
 111struct mtkbtsdio_hdr {
 112        __le16  len;
 113        __le16  reserved;
 114        u8      bt_type;
 115} __packed;
 116
 117struct mtk_wmt_hdr {
 118        u8      dir;
 119        u8      op;
 120        __le16  dlen;
 121        u8      flag;
 122} __packed;
 123
 124struct mtk_hci_wmt_cmd {
 125        struct mtk_wmt_hdr hdr;
 126        u8 data[256];
 127} __packed;
 128
 129struct btmtk_hci_wmt_evt {
 130        struct hci_event_hdr hhdr;
 131        struct mtk_wmt_hdr whdr;
 132} __packed;
 133
 134struct btmtk_hci_wmt_evt_funcc {
 135        struct btmtk_hci_wmt_evt hwhdr;
 136        __be16 status;
 137} __packed;
 138
 139struct btmtk_tci_sleep {
 140        u8 mode;
 141        __le16 duration;
 142        __le16 host_duration;
 143        u8 host_wakeup_pin;
 144        u8 time_compensation;
 145} __packed;
 146
 147struct btmtk_hci_wmt_params {
 148        u8 op;
 149        u8 flag;
 150        u16 dlen;
 151        const void *data;
 152        u32 *status;
 153};
 154
 155struct btmtksdio_dev {
 156        struct hci_dev *hdev;
 157        struct sdio_func *func;
 158        struct device *dev;
 159
 160        struct work_struct tx_work;
 161        unsigned long tx_state;
 162        struct sk_buff_head txq;
 163
 164        struct sk_buff *evt_skb;
 165
 166        const struct btmtksdio_data *data;
 167};
 168
 169static int mtk_hci_wmt_sync(struct hci_dev *hdev,
 170                            struct btmtk_hci_wmt_params *wmt_params)
 171{
 172        struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 173        struct btmtk_hci_wmt_evt_funcc *wmt_evt_funcc;
 174        u32 hlen, status = BTMTK_WMT_INVALID;
 175        struct btmtk_hci_wmt_evt *wmt_evt;
 176        struct mtk_hci_wmt_cmd wc;
 177        struct mtk_wmt_hdr *hdr;
 178        int err;
 179
 180        hlen = sizeof(*hdr) + wmt_params->dlen;
 181        if (hlen > 255)
 182                return -EINVAL;
 183
 184        hdr = (struct mtk_wmt_hdr *)&wc;
 185        hdr->dir = 1;
 186        hdr->op = wmt_params->op;
 187        hdr->dlen = cpu_to_le16(wmt_params->dlen + 1);
 188        hdr->flag = wmt_params->flag;
 189        memcpy(wc.data, wmt_params->data, wmt_params->dlen);
 190
 191        set_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
 192
 193        err = __hci_cmd_send(hdev, 0xfc6f, hlen, &wc);
 194        if (err < 0) {
 195                clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
 196                return err;
 197        }
 198
 199        /* The vendor specific WMT commands are all answered by a vendor
 200         * specific event and will not have the Command Status or Command
 201         * Complete as with usual HCI command flow control.
 202         *
 203         * After sending the command, wait for BTMTKSDIO_TX_WAIT_VND_EVT
 204         * state to be cleared. The driver specific event receive routine
 205         * will clear that state and with that indicate completion of the
 206         * WMT command.
 207         */
 208        err = wait_on_bit_timeout(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT,
 209                                  TASK_INTERRUPTIBLE, HCI_INIT_TIMEOUT);
 210        if (err == -EINTR) {
 211                bt_dev_err(hdev, "Execution of wmt command interrupted");
 212                clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
 213                return err;
 214        }
 215
 216        if (err) {
 217                bt_dev_err(hdev, "Execution of wmt command timed out");
 218                clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state);
 219                return -ETIMEDOUT;
 220        }
 221
 222        /* Parse and handle the return WMT event */
 223        wmt_evt = (struct btmtk_hci_wmt_evt *)bdev->evt_skb->data;
 224        if (wmt_evt->whdr.op != hdr->op) {
 225                bt_dev_err(hdev, "Wrong op received %d expected %d",
 226                           wmt_evt->whdr.op, hdr->op);
 227                err = -EIO;
 228                goto err_free_skb;
 229        }
 230
 231        switch (wmt_evt->whdr.op) {
 232        case MTK_WMT_SEMAPHORE:
 233                if (wmt_evt->whdr.flag == 2)
 234                        status = BTMTK_WMT_PATCH_UNDONE;
 235                else
 236                        status = BTMTK_WMT_PATCH_DONE;
 237                break;
 238        case MTK_WMT_FUNC_CTRL:
 239                wmt_evt_funcc = (struct btmtk_hci_wmt_evt_funcc *)wmt_evt;
 240                if (be16_to_cpu(wmt_evt_funcc->status) == 0x404)
 241                        status = BTMTK_WMT_ON_DONE;
 242                else if (be16_to_cpu(wmt_evt_funcc->status) == 0x420)
 243                        status = BTMTK_WMT_ON_PROGRESS;
 244                else
 245                        status = BTMTK_WMT_ON_UNDONE;
 246                break;
 247        }
 248
 249        if (wmt_params->status)
 250                *wmt_params->status = status;
 251
 252err_free_skb:
 253        kfree_skb(bdev->evt_skb);
 254        bdev->evt_skb = NULL;
 255
 256        return err;
 257}
 258
 259static int btmtksdio_tx_packet(struct btmtksdio_dev *bdev,
 260                               struct sk_buff *skb)
 261{
 262        struct mtkbtsdio_hdr *sdio_hdr;
 263        int err;
 264
 265        /* Make sure that there are enough rooms for SDIO header */
 266        if (unlikely(skb_headroom(skb) < sizeof(*sdio_hdr))) {
 267                err = pskb_expand_head(skb, sizeof(*sdio_hdr), 0,
 268                                       GFP_ATOMIC);
 269                if (err < 0)
 270                        return err;
 271        }
 272
 273        /* Prepend MediaTek SDIO Specific Header */
 274        skb_push(skb, sizeof(*sdio_hdr));
 275
 276        sdio_hdr = (void *)skb->data;
 277        sdio_hdr->len = cpu_to_le16(skb->len);
 278        sdio_hdr->reserved = cpu_to_le16(0);
 279        sdio_hdr->bt_type = hci_skb_pkt_type(skb);
 280
 281        err = sdio_writesb(bdev->func, MTK_REG_CTDR, skb->data,
 282                           round_up(skb->len, MTK_SDIO_BLOCK_SIZE));
 283        if (err < 0)
 284                goto err_skb_pull;
 285
 286        bdev->hdev->stat.byte_tx += skb->len;
 287
 288        kfree_skb(skb);
 289
 290        return 0;
 291
 292err_skb_pull:
 293        skb_pull(skb, sizeof(*sdio_hdr));
 294
 295        return err;
 296}
 297
 298static u32 btmtksdio_drv_own_query(struct btmtksdio_dev *bdev)
 299{
 300        return sdio_readl(bdev->func, MTK_REG_CHLPCR, NULL);
 301}
 302
 303static void btmtksdio_tx_work(struct work_struct *work)
 304{
 305        struct btmtksdio_dev *bdev = container_of(work, struct btmtksdio_dev,
 306                                                  tx_work);
 307        struct sk_buff *skb;
 308        int err;
 309
 310        pm_runtime_get_sync(bdev->dev);
 311
 312        sdio_claim_host(bdev->func);
 313
 314        while ((skb = skb_dequeue(&bdev->txq))) {
 315                err = btmtksdio_tx_packet(bdev, skb);
 316                if (err < 0) {
 317                        bdev->hdev->stat.err_tx++;
 318                        skb_queue_head(&bdev->txq, skb);
 319                        break;
 320                }
 321        }
 322
 323        sdio_release_host(bdev->func);
 324
 325        pm_runtime_mark_last_busy(bdev->dev);
 326        pm_runtime_put_autosuspend(bdev->dev);
 327}
 328
 329static int btmtksdio_recv_event(struct hci_dev *hdev, struct sk_buff *skb)
 330{
 331        struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 332        struct hci_event_hdr *hdr = (void *)skb->data;
 333        int err;
 334
 335        /* Fix up the vendor event id with 0xff for vendor specific instead
 336         * of 0xe4 so that event send via monitoring socket can be parsed
 337         * properly.
 338         */
 339        if (hdr->evt == 0xe4)
 340                hdr->evt = HCI_EV_VENDOR;
 341
 342        /* When someone waits for the WMT event, the skb is being cloned
 343         * and being processed the events from there then.
 344         */
 345        if (test_bit(BTMTKSDIO_TX_WAIT_VND_EVT, &bdev->tx_state)) {
 346                bdev->evt_skb = skb_clone(skb, GFP_KERNEL);
 347                if (!bdev->evt_skb) {
 348                        err = -ENOMEM;
 349                        goto err_out;
 350                }
 351        }
 352
 353        err = hci_recv_frame(hdev, skb);
 354        if (err < 0)
 355                goto err_free_skb;
 356
 357        if (hdr->evt == HCI_EV_VENDOR) {
 358                if (test_and_clear_bit(BTMTKSDIO_TX_WAIT_VND_EVT,
 359                                       &bdev->tx_state)) {
 360                        /* Barrier to sync with other CPUs */
 361                        smp_mb__after_atomic();
 362                        wake_up_bit(&bdev->tx_state, BTMTKSDIO_TX_WAIT_VND_EVT);
 363                }
 364        }
 365
 366        return 0;
 367
 368err_free_skb:
 369        kfree_skb(bdev->evt_skb);
 370        bdev->evt_skb = NULL;
 371
 372err_out:
 373        return err;
 374}
 375
 376static const struct h4_recv_pkt mtk_recv_pkts[] = {
 377        { H4_RECV_ACL,      .recv = hci_recv_frame },
 378        { H4_RECV_SCO,      .recv = hci_recv_frame },
 379        { H4_RECV_EVENT,    .recv = btmtksdio_recv_event },
 380};
 381
 382static int btmtksdio_rx_packet(struct btmtksdio_dev *bdev, u16 rx_size)
 383{
 384        const struct h4_recv_pkt *pkts = mtk_recv_pkts;
 385        int pkts_count = ARRAY_SIZE(mtk_recv_pkts);
 386        struct mtkbtsdio_hdr *sdio_hdr;
 387        int err, i, pad_size;
 388        struct sk_buff *skb;
 389        u16 dlen;
 390
 391        if (rx_size < sizeof(*sdio_hdr))
 392                return -EILSEQ;
 393
 394        /* A SDIO packet is exactly containing a Bluetooth packet */
 395        skb = bt_skb_alloc(rx_size, GFP_KERNEL);
 396        if (!skb)
 397                return -ENOMEM;
 398
 399        skb_put(skb, rx_size);
 400
 401        err = sdio_readsb(bdev->func, skb->data, MTK_REG_CRDR, rx_size);
 402        if (err < 0)
 403                goto err_kfree_skb;
 404
 405        sdio_hdr = (void *)skb->data;
 406
 407        /* We assume the default error as -EILSEQ simply to make the error path
 408         * be cleaner.
 409         */
 410        err = -EILSEQ;
 411
 412        if (rx_size != le16_to_cpu(sdio_hdr->len)) {
 413                bt_dev_err(bdev->hdev, "Rx size in sdio header is mismatched ");
 414                goto err_kfree_skb;
 415        }
 416
 417        hci_skb_pkt_type(skb) = sdio_hdr->bt_type;
 418
 419        /* Remove MediaTek SDIO header */
 420        skb_pull(skb, sizeof(*sdio_hdr));
 421
 422        /* We have to dig into the packet to get payload size and then know how
 423         * many padding bytes at the tail, these padding bytes should be removed
 424         * before the packet is indicated to the core layer.
 425         */
 426        for (i = 0; i < pkts_count; i++) {
 427                if (sdio_hdr->bt_type == (&pkts[i])->type)
 428                        break;
 429        }
 430
 431        if (i >= pkts_count) {
 432                bt_dev_err(bdev->hdev, "Invalid bt type 0x%02x",
 433                           sdio_hdr->bt_type);
 434                goto err_kfree_skb;
 435        }
 436
 437        /* Remaining bytes cannot hold a header*/
 438        if (skb->len < (&pkts[i])->hlen) {
 439                bt_dev_err(bdev->hdev, "The size of bt header is mismatched");
 440                goto err_kfree_skb;
 441        }
 442
 443        switch ((&pkts[i])->lsize) {
 444                case 1:
 445                        dlen = skb->data[(&pkts[i])->loff];
 446                        break;
 447                case 2:
 448                        dlen = get_unaligned_le16(skb->data +
 449                                                  (&pkts[i])->loff);
 450                        break;
 451                default:
 452                        goto err_kfree_skb;
 453        }
 454
 455        pad_size = skb->len - (&pkts[i])->hlen -  dlen;
 456
 457        /* Remaining bytes cannot hold a payload */
 458        if (pad_size < 0) {
 459                bt_dev_err(bdev->hdev, "The size of bt payload is mismatched");
 460                goto err_kfree_skb;
 461        }
 462
 463        /* Remove padding bytes */
 464        skb_trim(skb, skb->len - pad_size);
 465
 466        /* Complete frame */
 467        (&pkts[i])->recv(bdev->hdev, skb);
 468
 469        bdev->hdev->stat.byte_rx += rx_size;
 470
 471        return 0;
 472
 473err_kfree_skb:
 474        kfree_skb(skb);
 475
 476        return err;
 477}
 478
 479static void btmtksdio_interrupt(struct sdio_func *func)
 480{
 481        struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
 482        u32 int_status;
 483        u16 rx_size;
 484
 485        /* It is required that the host gets ownership from the device before
 486         * accessing any register, however, if SDIO host is not being released,
 487         * a potential deadlock probably happens in a circular wait between SDIO
 488         * IRQ work and PM runtime work. So, we have to explicitly release SDIO
 489         * host here and claim again after the PM runtime work is all done.
 490         */
 491        sdio_release_host(bdev->func);
 492
 493        pm_runtime_get_sync(bdev->dev);
 494
 495        sdio_claim_host(bdev->func);
 496
 497        /* Disable interrupt */
 498        sdio_writel(func, C_INT_EN_CLR, MTK_REG_CHLPCR, 0);
 499
 500        int_status = sdio_readl(func, MTK_REG_CHISR, NULL);
 501
 502        /* Ack an interrupt as soon as possible before any operation on
 503         * hardware.
 504         *
 505         * Note that we don't ack any status during operations to avoid race
 506         * condition between the host and the device such as it's possible to
 507         * mistakenly ack RX_DONE for the next packet and then cause interrupts
 508         * not be raised again but there is still pending data in the hardware
 509         * FIFO.
 510         */
 511        sdio_writel(func, int_status, MTK_REG_CHISR, NULL);
 512
 513        if (unlikely(!int_status))
 514                bt_dev_err(bdev->hdev, "CHISR is 0");
 515
 516        if (int_status & FW_OWN_BACK_INT)
 517                bt_dev_dbg(bdev->hdev, "Get fw own back");
 518
 519        if (int_status & TX_EMPTY)
 520                schedule_work(&bdev->tx_work);
 521        else if (unlikely(int_status & TX_FIFO_OVERFLOW))
 522                bt_dev_warn(bdev->hdev, "Tx fifo overflow");
 523
 524        if (int_status & RX_DONE_INT) {
 525                rx_size = (int_status & RX_PKT_LEN) >> 16;
 526
 527                if (btmtksdio_rx_packet(bdev, rx_size) < 0)
 528                        bdev->hdev->stat.err_rx++;
 529        }
 530
 531        /* Enable interrupt */
 532        sdio_writel(func, C_INT_EN_SET, MTK_REG_CHLPCR, 0);
 533
 534        pm_runtime_mark_last_busy(bdev->dev);
 535        pm_runtime_put_autosuspend(bdev->dev);
 536}
 537
 538static int btmtksdio_open(struct hci_dev *hdev)
 539{
 540        struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 541        int err;
 542        u32 status;
 543
 544        sdio_claim_host(bdev->func);
 545
 546        err = sdio_enable_func(bdev->func);
 547        if (err < 0)
 548                goto err_release_host;
 549
 550        /* Get ownership from the device */
 551        sdio_writel(bdev->func, C_FW_OWN_REQ_CLR, MTK_REG_CHLPCR, &err);
 552        if (err < 0)
 553                goto err_disable_func;
 554
 555        err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
 556                                 status & C_COM_DRV_OWN, 2000, 1000000);
 557        if (err < 0) {
 558                bt_dev_err(bdev->hdev, "Cannot get ownership from device");
 559                goto err_disable_func;
 560        }
 561
 562        /* Disable interrupt & mask out all interrupt sources */
 563        sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, &err);
 564        if (err < 0)
 565                goto err_disable_func;
 566
 567        sdio_writel(bdev->func, 0, MTK_REG_CHIER, &err);
 568        if (err < 0)
 569                goto err_disable_func;
 570
 571        err = sdio_claim_irq(bdev->func, btmtksdio_interrupt);
 572        if (err < 0)
 573                goto err_disable_func;
 574
 575        err = sdio_set_block_size(bdev->func, MTK_SDIO_BLOCK_SIZE);
 576        if (err < 0)
 577                goto err_release_irq;
 578
 579        /* SDIO CMD 5 allows the SDIO device back to idle state an
 580         * synchronous interrupt is supported in SDIO 4-bit mode
 581         */
 582        sdio_writel(bdev->func, SDIO_INT_CTL | SDIO_RE_INIT_EN,
 583                    MTK_REG_CSDIOCSR, &err);
 584        if (err < 0)
 585                goto err_release_irq;
 586
 587        /* Setup write-1-clear for CHISR register */
 588        sdio_writel(bdev->func, C_INT_CLR_CTRL, MTK_REG_CHCR, &err);
 589        if (err < 0)
 590                goto err_release_irq;
 591
 592        /* Setup interrupt sources */
 593        sdio_writel(bdev->func, RX_DONE_INT | TX_EMPTY | TX_FIFO_OVERFLOW,
 594                    MTK_REG_CHIER, &err);
 595        if (err < 0)
 596                goto err_release_irq;
 597
 598        /* Enable interrupt */
 599        sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, &err);
 600        if (err < 0)
 601                goto err_release_irq;
 602
 603        sdio_release_host(bdev->func);
 604
 605        return 0;
 606
 607err_release_irq:
 608        sdio_release_irq(bdev->func);
 609
 610err_disable_func:
 611        sdio_disable_func(bdev->func);
 612
 613err_release_host:
 614        sdio_release_host(bdev->func);
 615
 616        return err;
 617}
 618
 619static int btmtksdio_close(struct hci_dev *hdev)
 620{
 621        struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 622        u32 status;
 623        int err;
 624
 625        sdio_claim_host(bdev->func);
 626
 627        /* Disable interrupt */
 628        sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
 629
 630        sdio_release_irq(bdev->func);
 631
 632        /* Return ownership to the device */
 633        sdio_writel(bdev->func, C_FW_OWN_REQ_SET, MTK_REG_CHLPCR, NULL);
 634
 635        err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
 636                                 !(status & C_COM_DRV_OWN), 2000, 1000000);
 637        if (err < 0)
 638                bt_dev_err(bdev->hdev, "Cannot return ownership to device");
 639
 640        sdio_disable_func(bdev->func);
 641
 642        sdio_release_host(bdev->func);
 643
 644        return 0;
 645}
 646
 647static int btmtksdio_flush(struct hci_dev *hdev)
 648{
 649        struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 650
 651        skb_queue_purge(&bdev->txq);
 652
 653        cancel_work_sync(&bdev->tx_work);
 654
 655        return 0;
 656}
 657
 658static int btmtksdio_func_query(struct hci_dev *hdev)
 659{
 660        struct btmtk_hci_wmt_params wmt_params;
 661        int status, err;
 662        u8 param = 0;
 663
 664        /* Query whether the function is enabled */
 665        wmt_params.op = MTK_WMT_FUNC_CTRL;
 666        wmt_params.flag = 4;
 667        wmt_params.dlen = sizeof(param);
 668        wmt_params.data = &param;
 669        wmt_params.status = &status;
 670
 671        err = mtk_hci_wmt_sync(hdev, &wmt_params);
 672        if (err < 0) {
 673                bt_dev_err(hdev, "Failed to query function status (%d)", err);
 674                return err;
 675        }
 676
 677        return status;
 678}
 679
 680static int mtk_setup_firmware(struct hci_dev *hdev, const char *fwname)
 681{
 682        struct btmtk_hci_wmt_params wmt_params;
 683        const struct firmware *fw;
 684        const u8 *fw_ptr;
 685        size_t fw_size;
 686        int err, dlen;
 687        u8 flag;
 688
 689        err = request_firmware(&fw, fwname, &hdev->dev);
 690        if (err < 0) {
 691                bt_dev_err(hdev, "Failed to load firmware file (%d)", err);
 692                return err;
 693        }
 694
 695        fw_ptr = fw->data;
 696        fw_size = fw->size;
 697
 698        /* The size of patch header is 30 bytes, should be skip */
 699        if (fw_size < 30) {
 700                err = -EINVAL;
 701                goto free_fw;
 702        }
 703
 704        fw_size -= 30;
 705        fw_ptr += 30;
 706        flag = 1;
 707
 708        wmt_params.op = MTK_WMT_PATCH_DWNLD;
 709        wmt_params.status = NULL;
 710
 711        while (fw_size > 0) {
 712                dlen = min_t(int, 250, fw_size);
 713
 714                /* Tell device the position in sequence */
 715                if (fw_size - dlen <= 0)
 716                        flag = 3;
 717                else if (fw_size < fw->size - 30)
 718                        flag = 2;
 719
 720                wmt_params.flag = flag;
 721                wmt_params.dlen = dlen;
 722                wmt_params.data = fw_ptr;
 723
 724                err = mtk_hci_wmt_sync(hdev, &wmt_params);
 725                if (err < 0) {
 726                        bt_dev_err(hdev, "Failed to send wmt patch dwnld (%d)",
 727                                   err);
 728                        goto free_fw;
 729                }
 730
 731                fw_size -= dlen;
 732                fw_ptr += dlen;
 733        }
 734
 735        wmt_params.op = MTK_WMT_RST;
 736        wmt_params.flag = 4;
 737        wmt_params.dlen = 0;
 738        wmt_params.data = NULL;
 739        wmt_params.status = NULL;
 740
 741        /* Activate funciton the firmware providing to */
 742        err = mtk_hci_wmt_sync(hdev, &wmt_params);
 743        if (err < 0) {
 744                bt_dev_err(hdev, "Failed to send wmt rst (%d)", err);
 745                goto free_fw;
 746        }
 747
 748        /* Wait a few moments for firmware activation done */
 749        usleep_range(10000, 12000);
 750
 751free_fw:
 752        release_firmware(fw);
 753        return err;
 754}
 755
 756static int btmtksdio_setup(struct hci_dev *hdev)
 757{
 758        struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 759        struct btmtk_hci_wmt_params wmt_params;
 760        ktime_t calltime, delta, rettime;
 761        struct btmtk_tci_sleep tci_sleep;
 762        unsigned long long duration;
 763        struct sk_buff *skb;
 764        int err, status;
 765        u8 param = 0x1;
 766
 767        calltime = ktime_get();
 768
 769        /* Query whether the firmware is already download */
 770        wmt_params.op = MTK_WMT_SEMAPHORE;
 771        wmt_params.flag = 1;
 772        wmt_params.dlen = 0;
 773        wmt_params.data = NULL;
 774        wmt_params.status = &status;
 775
 776        err = mtk_hci_wmt_sync(hdev, &wmt_params);
 777        if (err < 0) {
 778                bt_dev_err(hdev, "Failed to query firmware status (%d)", err);
 779                return err;
 780        }
 781
 782        if (status == BTMTK_WMT_PATCH_DONE) {
 783                bt_dev_info(hdev, "Firmware already downloaded");
 784                goto ignore_setup_fw;
 785        }
 786
 787        /* Setup a firmware which the device definitely requires */
 788        err = mtk_setup_firmware(hdev, bdev->data->fwname);
 789        if (err < 0)
 790                return err;
 791
 792ignore_setup_fw:
 793        /* Query whether the device is already enabled */
 794        err = readx_poll_timeout(btmtksdio_func_query, hdev, status,
 795                                 status < 0 || status != BTMTK_WMT_ON_PROGRESS,
 796                                 2000, 5000000);
 797        /* -ETIMEDOUT happens */
 798        if (err < 0)
 799                return err;
 800
 801        /* The other errors happen in btusb_mtk_func_query */
 802        if (status < 0)
 803                return status;
 804
 805        if (status == BTMTK_WMT_ON_DONE) {
 806                bt_dev_info(hdev, "function already on");
 807                goto ignore_func_on;
 808        }
 809
 810        /* Enable Bluetooth protocol */
 811        wmt_params.op = MTK_WMT_FUNC_CTRL;
 812        wmt_params.flag = 0;
 813        wmt_params.dlen = sizeof(param);
 814        wmt_params.data = &param;
 815        wmt_params.status = NULL;
 816
 817        err = mtk_hci_wmt_sync(hdev, &wmt_params);
 818        if (err < 0) {
 819                bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
 820                return err;
 821        }
 822
 823ignore_func_on:
 824        /* Apply the low power environment setup */
 825        tci_sleep.mode = 0x5;
 826        tci_sleep.duration = cpu_to_le16(0x640);
 827        tci_sleep.host_duration = cpu_to_le16(0x640);
 828        tci_sleep.host_wakeup_pin = 0;
 829        tci_sleep.time_compensation = 0;
 830
 831        skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep,
 832                             HCI_INIT_TIMEOUT);
 833        if (IS_ERR(skb)) {
 834                err = PTR_ERR(skb);
 835                bt_dev_err(hdev, "Failed to apply low power setting (%d)", err);
 836                return err;
 837        }
 838        kfree_skb(skb);
 839
 840        rettime = ktime_get();
 841        delta = ktime_sub(rettime, calltime);
 842        duration = (unsigned long long)ktime_to_ns(delta) >> 10;
 843
 844        pm_runtime_set_autosuspend_delay(bdev->dev,
 845                                         MTKBTSDIO_AUTOSUSPEND_DELAY);
 846        pm_runtime_use_autosuspend(bdev->dev);
 847
 848        err = pm_runtime_set_active(bdev->dev);
 849        if (err < 0)
 850                return err;
 851
 852        /* Default forbid runtime auto suspend, that can be allowed by
 853         * enable_autosuspend flag or the PM runtime entry under sysfs.
 854         */
 855        pm_runtime_forbid(bdev->dev);
 856        pm_runtime_enable(bdev->dev);
 857
 858        if (enable_autosuspend)
 859                pm_runtime_allow(bdev->dev);
 860
 861        bt_dev_info(hdev, "Device setup in %llu usecs", duration);
 862
 863        return 0;
 864}
 865
 866static int btmtksdio_shutdown(struct hci_dev *hdev)
 867{
 868        struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 869        struct btmtk_hci_wmt_params wmt_params;
 870        u8 param = 0x0;
 871        int err;
 872
 873        /* Get back the state to be consistent with the state
 874         * in btmtksdio_setup.
 875         */
 876        pm_runtime_get_sync(bdev->dev);
 877
 878        /* Disable the device */
 879        wmt_params.op = MTK_WMT_FUNC_CTRL;
 880        wmt_params.flag = 0;
 881        wmt_params.dlen = sizeof(param);
 882        wmt_params.data = &param;
 883        wmt_params.status = NULL;
 884
 885        err = mtk_hci_wmt_sync(hdev, &wmt_params);
 886        if (err < 0) {
 887                bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
 888                return err;
 889        }
 890
 891        pm_runtime_put_noidle(bdev->dev);
 892        pm_runtime_disable(bdev->dev);
 893
 894        return 0;
 895}
 896
 897static int btmtksdio_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
 898{
 899        struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
 900
 901        switch (hci_skb_pkt_type(skb)) {
 902        case HCI_COMMAND_PKT:
 903                hdev->stat.cmd_tx++;
 904                break;
 905
 906        case HCI_ACLDATA_PKT:
 907                hdev->stat.acl_tx++;
 908                break;
 909
 910        case HCI_SCODATA_PKT:
 911                hdev->stat.sco_tx++;
 912                break;
 913
 914        default:
 915                return -EILSEQ;
 916        }
 917
 918        skb_queue_tail(&bdev->txq, skb);
 919
 920        schedule_work(&bdev->tx_work);
 921
 922        return 0;
 923}
 924
 925static int btmtksdio_probe(struct sdio_func *func,
 926                           const struct sdio_device_id *id)
 927{
 928        struct btmtksdio_dev *bdev;
 929        struct hci_dev *hdev;
 930        int err;
 931
 932        bdev = devm_kzalloc(&func->dev, sizeof(*bdev), GFP_KERNEL);
 933        if (!bdev)
 934                return -ENOMEM;
 935
 936        bdev->data = (void *)id->driver_data;
 937        if (!bdev->data)
 938                return -ENODEV;
 939
 940        bdev->dev = &func->dev;
 941        bdev->func = func;
 942
 943        INIT_WORK(&bdev->tx_work, btmtksdio_tx_work);
 944        skb_queue_head_init(&bdev->txq);
 945
 946        /* Initialize and register HCI device */
 947        hdev = hci_alloc_dev();
 948        if (!hdev) {
 949                dev_err(&func->dev, "Can't allocate HCI device\n");
 950                return -ENOMEM;
 951        }
 952
 953        bdev->hdev = hdev;
 954
 955        hdev->bus = HCI_SDIO;
 956        hci_set_drvdata(hdev, bdev);
 957
 958        hdev->open     = btmtksdio_open;
 959        hdev->close    = btmtksdio_close;
 960        hdev->flush    = btmtksdio_flush;
 961        hdev->setup    = btmtksdio_setup;
 962        hdev->shutdown = btmtksdio_shutdown;
 963        hdev->send     = btmtksdio_send_frame;
 964        SET_HCIDEV_DEV(hdev, &func->dev);
 965
 966        hdev->manufacturer = 70;
 967        set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
 968
 969        err = hci_register_dev(hdev);
 970        if (err < 0) {
 971                dev_err(&func->dev, "Can't register HCI device\n");
 972                hci_free_dev(hdev);
 973                return err;
 974        }
 975
 976        sdio_set_drvdata(func, bdev);
 977
 978        /* pm_runtime_enable would be done after the firmware is being
 979         * downloaded because the core layer probably already enables
 980         * runtime PM for this func such as the case host->caps &
 981         * MMC_CAP_POWER_OFF_CARD.
 982         */
 983        if (pm_runtime_enabled(bdev->dev))
 984                pm_runtime_disable(bdev->dev);
 985
 986        /* As explaination in drivers/mmc/core/sdio_bus.c tells us:
 987         * Unbound SDIO functions are always suspended.
 988         * During probe, the function is set active and the usage count
 989         * is incremented.  If the driver supports runtime PM,
 990         * it should call pm_runtime_put_noidle() in its probe routine and
 991         * pm_runtime_get_noresume() in its remove routine.
 992         *
 993         * So, put a pm_runtime_put_noidle here !
 994         */
 995        pm_runtime_put_noidle(bdev->dev);
 996
 997        return 0;
 998}
 999
1000static void btmtksdio_remove(struct sdio_func *func)
1001{
1002        struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
1003        struct hci_dev *hdev;
1004
1005        if (!bdev)
1006                return;
1007
1008        /* Be consistent the state in btmtksdio_probe */
1009        pm_runtime_get_noresume(bdev->dev);
1010
1011        hdev = bdev->hdev;
1012
1013        sdio_set_drvdata(func, NULL);
1014        hci_unregister_dev(hdev);
1015        hci_free_dev(hdev);
1016}
1017
1018#ifdef CONFIG_PM
1019static int btmtksdio_runtime_suspend(struct device *dev)
1020{
1021        struct sdio_func *func = dev_to_sdio_func(dev);
1022        struct btmtksdio_dev *bdev;
1023        u32 status;
1024        int err;
1025
1026        bdev = sdio_get_drvdata(func);
1027        if (!bdev)
1028                return 0;
1029
1030        sdio_claim_host(bdev->func);
1031
1032        sdio_writel(bdev->func, C_FW_OWN_REQ_SET, MTK_REG_CHLPCR, &err);
1033        if (err < 0)
1034                goto out;
1035
1036        err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
1037                                 !(status & C_COM_DRV_OWN), 2000, 1000000);
1038out:
1039        bt_dev_info(bdev->hdev, "status (%d) return ownership to device", err);
1040
1041        sdio_release_host(bdev->func);
1042
1043        return err;
1044}
1045
1046static int btmtksdio_runtime_resume(struct device *dev)
1047{
1048        struct sdio_func *func = dev_to_sdio_func(dev);
1049        struct btmtksdio_dev *bdev;
1050        u32 status;
1051        int err;
1052
1053        bdev = sdio_get_drvdata(func);
1054        if (!bdev)
1055                return 0;
1056
1057        sdio_claim_host(bdev->func);
1058
1059        sdio_writel(bdev->func, C_FW_OWN_REQ_CLR, MTK_REG_CHLPCR, &err);
1060        if (err < 0)
1061                goto out;
1062
1063        err = readx_poll_timeout(btmtksdio_drv_own_query, bdev, status,
1064                                 status & C_COM_DRV_OWN, 2000, 1000000);
1065out:
1066        bt_dev_info(bdev->hdev, "status (%d) get ownership from device", err);
1067
1068        sdio_release_host(bdev->func);
1069
1070        return err;
1071}
1072
1073static UNIVERSAL_DEV_PM_OPS(btmtksdio_pm_ops, btmtksdio_runtime_suspend,
1074                            btmtksdio_runtime_resume, NULL);
1075#define BTMTKSDIO_PM_OPS (&btmtksdio_pm_ops)
1076#else   /* CONFIG_PM */
1077#define BTMTKSDIO_PM_OPS NULL
1078#endif  /* CONFIG_PM */
1079
1080static struct sdio_driver btmtksdio_driver = {
1081        .name           = "btmtksdio",
1082        .probe          = btmtksdio_probe,
1083        .remove         = btmtksdio_remove,
1084        .id_table       = btmtksdio_table,
1085        .drv = {
1086                .owner = THIS_MODULE,
1087                .pm = BTMTKSDIO_PM_OPS,
1088        }
1089};
1090
1091module_sdio_driver(btmtksdio_driver);
1092
1093module_param(enable_autosuspend, bool, 0644);
1094MODULE_PARM_DESC(enable_autosuspend, "Enable autosuspend by default");
1095
1096MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
1097MODULE_DESCRIPTION("MediaTek Bluetooth SDIO driver ver " VERSION);
1098MODULE_VERSION(VERSION);
1099MODULE_LICENSE("GPL");
1100MODULE_FIRMWARE(FIRMWARE_MT7663);
1101MODULE_FIRMWARE(FIRMWARE_MT7668);
1102