btmtksdio.c 37 KB

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