xref: /openbmc/linux/drivers/bluetooth/btmtksdio.c (revision 3dc4b6fb)
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 
39 static bool enable_autosuspend;
40 
41 struct btmtksdio_data {
42 	const char *fwname;
43 };
44 
45 static const struct btmtksdio_data mt7663_data = {
46 	.fwname = FIRMWARE_MT7663,
47 };
48 
49 static const struct btmtksdio_data mt7668_data = {
50 	.fwname = FIRMWARE_MT7668,
51 };
52 
53 static 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 
92 enum {
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 
102 enum {
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 
111 struct mtkbtsdio_hdr {
112 	__le16	len;
113 	__le16	reserved;
114 	u8	bt_type;
115 } __packed;
116 
117 struct mtk_wmt_hdr {
118 	u8	dir;
119 	u8	op;
120 	__le16	dlen;
121 	u8	flag;
122 } __packed;
123 
124 struct mtk_hci_wmt_cmd {
125 	struct mtk_wmt_hdr hdr;
126 	u8 data[256];
127 } __packed;
128 
129 struct btmtk_hci_wmt_evt {
130 	struct hci_event_hdr hhdr;
131 	struct mtk_wmt_hdr whdr;
132 } __packed;
133 
134 struct btmtk_hci_wmt_evt_funcc {
135 	struct btmtk_hci_wmt_evt hwhdr;
136 	__be16 status;
137 } __packed;
138 
139 struct 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 
147 struct btmtk_hci_wmt_params {
148 	u8 op;
149 	u8 flag;
150 	u16 dlen;
151 	const void *data;
152 	u32 *status;
153 };
154 
155 struct 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 
169 static 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 
252 err_free_skb:
253 	kfree_skb(bdev->evt_skb);
254 	bdev->evt_skb = NULL;
255 
256 	return err;
257 }
258 
259 static 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 
292 err_skb_pull:
293 	skb_pull(skb, sizeof(*sdio_hdr));
294 
295 	return err;
296 }
297 
298 static u32 btmtksdio_drv_own_query(struct btmtksdio_dev *bdev)
299 {
300 	return sdio_readl(bdev->func, MTK_REG_CHLPCR, NULL);
301 }
302 
303 static 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 
329 static 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 
368 err_free_skb:
369 	kfree_skb(bdev->evt_skb);
370 	bdev->evt_skb = NULL;
371 
372 err_out:
373 	return err;
374 }
375 
376 static 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 
382 static 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 
473 err_kfree_skb:
474 	kfree_skb(skb);
475 
476 	return err;
477 }
478 
479 static 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 
538 static 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 
607 err_release_irq:
608 	sdio_release_irq(bdev->func);
609 
610 err_disable_func:
611 	sdio_disable_func(bdev->func);
612 
613 err_release_host:
614 	sdio_release_host(bdev->func);
615 
616 	return err;
617 }
618 
619 static 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 
647 static 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 
658 static 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 
680 static 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 
751 free_fw:
752 	release_firmware(fw);
753 	return err;
754 }
755 
756 static 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 
792 ignore_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 
823 ignore_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 
866 static 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 
897 static 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 
925 static 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 
1000 static 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
1019 static 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);
1038 out:
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 
1046 static 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);
1065 out:
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 
1073 static 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 
1080 static 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 
1091 module_sdio_driver(btmtksdio_driver);
1092 
1093 module_param(enable_autosuspend, bool, 0644);
1094 MODULE_PARM_DESC(enable_autosuspend, "Enable autosuspend by default");
1095 
1096 MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
1097 MODULE_DESCRIPTION("MediaTek Bluetooth SDIO driver ver " VERSION);
1098 MODULE_VERSION(VERSION);
1099 MODULE_LICENSE("GPL");
1100 MODULE_FIRMWARE(FIRMWARE_MT7663);
1101 MODULE_FIRMWARE(FIRMWARE_MT7668);
1102