btmtksdio.c 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535
  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 "h4_recv.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. sdio_writel(bdev->func, C_INT_EN_SET, MTK_REG_CHLPCR, NULL);
  496. sdio_release_host(bdev->func);
  497. pm_runtime_mark_last_busy(bdev->dev);
  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. /* Explitly 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. sdio_claim_host(bdev->func);
  579. /* Disable interrupt */
  580. sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
  581. sdio_release_irq(bdev->func);
  582. cancel_work_sync(&bdev->txrx_work);
  583. btmtksdio_fw_pmctrl(bdev);
  584. clear_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state);
  585. sdio_disable_func(bdev->func);
  586. sdio_release_host(bdev->func);
  587. return 0;
  588. }
  589. static int btmtksdio_flush(struct hci_dev *hdev)
  590. {
  591. struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
  592. skb_queue_purge(&bdev->txq);
  593. cancel_work_sync(&bdev->txrx_work);
  594. return 0;
  595. }
  596. static int btmtksdio_func_query(struct hci_dev *hdev)
  597. {
  598. struct btmtk_hci_wmt_params wmt_params;
  599. int status, err;
  600. u8 param = 0;
  601. /* Query whether the function is enabled */
  602. wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  603. wmt_params.flag = 4;
  604. wmt_params.dlen = sizeof(param);
  605. wmt_params.data = &param;
  606. wmt_params.status = &status;
  607. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  608. if (err < 0) {
  609. bt_dev_err(hdev, "Failed to query function status (%d)", err);
  610. return err;
  611. }
  612. return status;
  613. }
  614. static int mt76xx_setup(struct hci_dev *hdev, const char *fwname)
  615. {
  616. struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
  617. struct btmtk_hci_wmt_params wmt_params;
  618. struct btmtk_tci_sleep tci_sleep;
  619. struct sk_buff *skb;
  620. int err, status;
  621. u8 param = 0x1;
  622. /* Query whether the firmware is already download */
  623. wmt_params.op = BTMTK_WMT_SEMAPHORE;
  624. wmt_params.flag = 1;
  625. wmt_params.dlen = 0;
  626. wmt_params.data = NULL;
  627. wmt_params.status = &status;
  628. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  629. if (err < 0) {
  630. bt_dev_err(hdev, "Failed to query firmware status (%d)", err);
  631. return err;
  632. }
  633. if (status == BTMTK_WMT_PATCH_DONE) {
  634. bt_dev_info(hdev, "Firmware already downloaded");
  635. goto ignore_setup_fw;
  636. }
  637. /* Setup a firmware which the device definitely requires */
  638. err = btmtk_setup_firmware(hdev, fwname, mtk_hci_wmt_sync);
  639. if (err < 0)
  640. return err;
  641. ignore_setup_fw:
  642. /* Query whether the device is already enabled */
  643. err = readx_poll_timeout(btmtksdio_func_query, hdev, status,
  644. status < 0 || status != BTMTK_WMT_ON_PROGRESS,
  645. 2000, 5000000);
  646. /* -ETIMEDOUT happens */
  647. if (err < 0)
  648. return err;
  649. /* The other errors happen in btusb_mtk_func_query */
  650. if (status < 0)
  651. return status;
  652. if (status == BTMTK_WMT_ON_DONE) {
  653. bt_dev_info(hdev, "function already on");
  654. goto ignore_func_on;
  655. }
  656. /* Enable Bluetooth protocol */
  657. wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  658. wmt_params.flag = 0;
  659. wmt_params.dlen = sizeof(param);
  660. wmt_params.data = &param;
  661. wmt_params.status = NULL;
  662. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  663. if (err < 0) {
  664. bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
  665. return err;
  666. }
  667. set_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state);
  668. ignore_func_on:
  669. /* Apply the low power environment setup */
  670. tci_sleep.mode = 0x5;
  671. tci_sleep.duration = cpu_to_le16(0x640);
  672. tci_sleep.host_duration = cpu_to_le16(0x640);
  673. tci_sleep.host_wakeup_pin = 0;
  674. tci_sleep.time_compensation = 0;
  675. skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep,
  676. HCI_INIT_TIMEOUT);
  677. if (IS_ERR(skb)) {
  678. err = PTR_ERR(skb);
  679. bt_dev_err(hdev, "Failed to apply low power setting (%d)", err);
  680. return err;
  681. }
  682. kfree_skb(skb);
  683. return 0;
  684. }
  685. static int mt79xx_setup(struct hci_dev *hdev, const char *fwname)
  686. {
  687. struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
  688. struct btmtk_hci_wmt_params wmt_params;
  689. u8 param = 0x1;
  690. int err;
  691. err = btmtk_setup_firmware_79xx(hdev, fwname, mtk_hci_wmt_sync);
  692. if (err < 0) {
  693. bt_dev_err(hdev, "Failed to setup 79xx firmware (%d)", err);
  694. return err;
  695. }
  696. err = btmtksdio_fw_pmctrl(bdev);
  697. if (err < 0)
  698. return err;
  699. err = btmtksdio_drv_pmctrl(bdev);
  700. if (err < 0)
  701. return err;
  702. /* Enable Bluetooth protocol */
  703. wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  704. wmt_params.flag = 0;
  705. wmt_params.dlen = sizeof(param);
  706. wmt_params.data = &param;
  707. wmt_params.status = NULL;
  708. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  709. if (err < 0) {
  710. bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
  711. return err;
  712. }
  713. hci_set_msft_opcode(hdev, 0xFD30);
  714. hci_set_aosp_capable(hdev);
  715. set_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state);
  716. return err;
  717. }
  718. static int btmtksdio_mtk_reg_read(struct hci_dev *hdev, u32 reg, u32 *val)
  719. {
  720. struct btmtk_hci_wmt_params wmt_params;
  721. struct reg_read_cmd reg_read = {
  722. .type = 1,
  723. .num = 1,
  724. };
  725. u32 status;
  726. int err;
  727. reg_read.addr = cpu_to_le32(reg);
  728. wmt_params.op = BTMTK_WMT_REGISTER;
  729. wmt_params.flag = BTMTK_WMT_REG_READ;
  730. wmt_params.dlen = sizeof(reg_read);
  731. wmt_params.data = &reg_read;
  732. wmt_params.status = &status;
  733. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  734. if (err < 0) {
  735. bt_dev_err(hdev, "Failed to read reg (%d)", err);
  736. return err;
  737. }
  738. *val = status;
  739. return err;
  740. }
  741. static int btmtksdio_mtk_reg_write(struct hci_dev *hdev, u32 reg, u32 val, u32 mask)
  742. {
  743. struct btmtk_hci_wmt_params wmt_params;
  744. const struct reg_write_cmd reg_write = {
  745. .type = 1,
  746. .num = 1,
  747. .addr = cpu_to_le32(reg),
  748. .data = cpu_to_le32(val),
  749. .mask = cpu_to_le32(mask),
  750. };
  751. int err, status;
  752. wmt_params.op = BTMTK_WMT_REGISTER;
  753. wmt_params.flag = BTMTK_WMT_REG_WRITE;
  754. wmt_params.dlen = sizeof(reg_write);
  755. wmt_params.data = &reg_write;
  756. wmt_params.status = &status;
  757. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  758. if (err < 0)
  759. bt_dev_err(hdev, "Failed to write reg (%d)", err);
  760. return err;
  761. }
  762. static int btmtksdio_get_data_path_id(struct hci_dev *hdev, __u8 *data_path_id)
  763. {
  764. /* uses 1 as data path id for all the usecases */
  765. *data_path_id = 1;
  766. return 0;
  767. }
  768. static int btmtksdio_get_codec_config_data(struct hci_dev *hdev,
  769. __u8 link, struct bt_codec *codec,
  770. __u8 *ven_len, __u8 **ven_data)
  771. {
  772. int err = 0;
  773. if (!ven_data || !ven_len)
  774. return -EINVAL;
  775. *ven_len = 0;
  776. *ven_data = NULL;
  777. if (link != ESCO_LINK) {
  778. bt_dev_err(hdev, "Invalid link type(%u)", link);
  779. return -EINVAL;
  780. }
  781. *ven_data = kmalloc(sizeof(__u8), GFP_KERNEL);
  782. if (!*ven_data) {
  783. err = -ENOMEM;
  784. goto error;
  785. }
  786. /* supports only CVSD and mSBC offload codecs */
  787. switch (codec->id) {
  788. case 0x02:
  789. **ven_data = 0x00;
  790. break;
  791. case 0x05:
  792. **ven_data = 0x01;
  793. break;
  794. default:
  795. err = -EINVAL;
  796. bt_dev_err(hdev, "Invalid codec id(%u)", codec->id);
  797. goto error;
  798. }
  799. /* codec and its capabilities are pre-defined to ids
  800. * preset id = 0x00 represents CVSD codec with sampling rate 8K
  801. * preset id = 0x01 represents mSBC codec with sampling rate 16K
  802. */
  803. *ven_len = sizeof(__u8);
  804. return err;
  805. error:
  806. kfree(*ven_data);
  807. *ven_data = NULL;
  808. return err;
  809. }
  810. static int btmtksdio_sco_setting(struct hci_dev *hdev)
  811. {
  812. const struct btmtk_sco sco_setting = {
  813. .clock_config = 0x49,
  814. .channel_format_config = 0x80,
  815. };
  816. struct sk_buff *skb;
  817. u32 val;
  818. int err;
  819. /* Enable SCO over I2S/PCM for MediaTek chipset */
  820. skb = __hci_cmd_sync(hdev, 0xfc72, sizeof(sco_setting),
  821. &sco_setting, HCI_CMD_TIMEOUT);
  822. if (IS_ERR(skb))
  823. return PTR_ERR(skb);
  824. kfree_skb(skb);
  825. err = btmtksdio_mtk_reg_read(hdev, MT7921_PINMUX_0, &val);
  826. if (err < 0)
  827. return err;
  828. val |= 0x11000000;
  829. err = btmtksdio_mtk_reg_write(hdev, MT7921_PINMUX_0, val, ~0);
  830. if (err < 0)
  831. return err;
  832. err = btmtksdio_mtk_reg_read(hdev, MT7921_PINMUX_1, &val);
  833. if (err < 0)
  834. return err;
  835. val |= 0x00000101;
  836. err = btmtksdio_mtk_reg_write(hdev, MT7921_PINMUX_1, val, ~0);
  837. if (err < 0)
  838. return err;
  839. hdev->get_data_path_id = btmtksdio_get_data_path_id;
  840. hdev->get_codec_config_data = btmtksdio_get_codec_config_data;
  841. return err;
  842. }
  843. static int btmtksdio_reset_setting(struct hci_dev *hdev)
  844. {
  845. int err;
  846. u32 val;
  847. err = btmtksdio_mtk_reg_read(hdev, MT7921_PINMUX_1, &val);
  848. if (err < 0)
  849. return err;
  850. val |= 0x20; /* set the pin (bit field 11:8) work as GPIO mode */
  851. err = btmtksdio_mtk_reg_write(hdev, MT7921_PINMUX_1, val, ~0);
  852. if (err < 0)
  853. return err;
  854. err = btmtksdio_mtk_reg_read(hdev, MT7921_BTSYS_RST, &val);
  855. if (err < 0)
  856. return err;
  857. val |= MT7921_BTSYS_RST_WITH_GPIO;
  858. return btmtksdio_mtk_reg_write(hdev, MT7921_BTSYS_RST, val, ~0);
  859. }
  860. static int btmtksdio_setup(struct hci_dev *hdev)
  861. {
  862. struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
  863. ktime_t calltime, delta, rettime;
  864. unsigned long long duration;
  865. char fwname[64];
  866. int err, dev_id;
  867. u32 fw_version = 0, val;
  868. calltime = ktime_get();
  869. set_bit(BTMTKSDIO_HW_TX_READY, &bdev->tx_state);
  870. switch (bdev->data->chipid) {
  871. case 0x7921:
  872. if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state)) {
  873. err = btmtksdio_mtk_reg_read(hdev, MT7921_DLSTATUS,
  874. &val);
  875. if (err < 0)
  876. return err;
  877. val &= ~BT_DL_STATE;
  878. err = btmtksdio_mtk_reg_write(hdev, MT7921_DLSTATUS,
  879. val, ~0);
  880. if (err < 0)
  881. return err;
  882. btmtksdio_fw_pmctrl(bdev);
  883. msleep(20);
  884. btmtksdio_drv_pmctrl(bdev);
  885. clear_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state);
  886. }
  887. err = btmtksdio_mtk_reg_read(hdev, 0x70010200, &dev_id);
  888. if (err < 0) {
  889. bt_dev_err(hdev, "Failed to get device id (%d)", err);
  890. return err;
  891. }
  892. err = btmtksdio_mtk_reg_read(hdev, 0x80021004, &fw_version);
  893. if (err < 0) {
  894. bt_dev_err(hdev, "Failed to get fw version (%d)", err);
  895. return err;
  896. }
  897. btmtk_fw_get_filename(fwname, sizeof(fwname), dev_id,
  898. fw_version, 0);
  899. snprintf(fwname, sizeof(fwname),
  900. "mediatek/BT_RAM_CODE_MT%04x_1_%x_hdr.bin",
  901. dev_id & 0xffff, (fw_version & 0xff) + 1);
  902. err = mt79xx_setup(hdev, fwname);
  903. if (err < 0)
  904. return err;
  905. /* Enable SCO over I2S/PCM */
  906. err = btmtksdio_sco_setting(hdev);
  907. if (err < 0) {
  908. bt_dev_err(hdev, "Failed to enable SCO setting (%d)", err);
  909. return err;
  910. }
  911. /* Enable WBS with mSBC codec */
  912. set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
  913. /* Enable GPIO reset mechanism */
  914. if (bdev->reset) {
  915. err = btmtksdio_reset_setting(hdev);
  916. if (err < 0) {
  917. bt_dev_err(hdev, "Failed to enable Reset setting (%d)", err);
  918. devm_gpiod_put(bdev->dev, bdev->reset);
  919. bdev->reset = NULL;
  920. }
  921. }
  922. break;
  923. case 0x7663:
  924. case 0x7668:
  925. err = mt76xx_setup(hdev, bdev->data->fwname);
  926. if (err < 0)
  927. return err;
  928. break;
  929. default:
  930. return -ENODEV;
  931. }
  932. rettime = ktime_get();
  933. delta = ktime_sub(rettime, calltime);
  934. duration = (unsigned long long)ktime_to_ns(delta) >> 10;
  935. pm_runtime_set_autosuspend_delay(bdev->dev,
  936. MTKBTSDIO_AUTOSUSPEND_DELAY);
  937. pm_runtime_use_autosuspend(bdev->dev);
  938. err = pm_runtime_set_active(bdev->dev);
  939. if (err < 0)
  940. return err;
  941. /* Default forbid runtime auto suspend, that can be allowed by
  942. * enable_autosuspend flag or the PM runtime entry under sysfs.
  943. */
  944. pm_runtime_forbid(bdev->dev);
  945. pm_runtime_enable(bdev->dev);
  946. if (enable_autosuspend)
  947. pm_runtime_allow(bdev->dev);
  948. bt_dev_info(hdev, "Device setup in %llu usecs", duration);
  949. return 0;
  950. }
  951. static int btmtksdio_shutdown(struct hci_dev *hdev)
  952. {
  953. struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
  954. struct btmtk_hci_wmt_params wmt_params;
  955. u8 param = 0x0;
  956. int err;
  957. /* Get back the state to be consistent with the state
  958. * in btmtksdio_setup.
  959. */
  960. pm_runtime_get_sync(bdev->dev);
  961. /* wmt command only works until the reset is complete */
  962. if (test_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state))
  963. goto ignore_wmt_cmd;
  964. /* Disable the device */
  965. wmt_params.op = BTMTK_WMT_FUNC_CTRL;
  966. wmt_params.flag = 0;
  967. wmt_params.dlen = sizeof(param);
  968. wmt_params.data = &param;
  969. wmt_params.status = NULL;
  970. err = mtk_hci_wmt_sync(hdev, &wmt_params);
  971. if (err < 0) {
  972. bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
  973. return err;
  974. }
  975. ignore_wmt_cmd:
  976. pm_runtime_put_noidle(bdev->dev);
  977. pm_runtime_disable(bdev->dev);
  978. return 0;
  979. }
  980. static int btmtksdio_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
  981. {
  982. struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
  983. switch (hci_skb_pkt_type(skb)) {
  984. case HCI_COMMAND_PKT:
  985. hdev->stat.cmd_tx++;
  986. break;
  987. case HCI_ACLDATA_PKT:
  988. hdev->stat.acl_tx++;
  989. break;
  990. case HCI_SCODATA_PKT:
  991. hdev->stat.sco_tx++;
  992. break;
  993. default:
  994. return -EILSEQ;
  995. }
  996. skb_queue_tail(&bdev->txq, skb);
  997. schedule_work(&bdev->txrx_work);
  998. return 0;
  999. }
  1000. static void btmtksdio_cmd_timeout(struct hci_dev *hdev)
  1001. {
  1002. struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
  1003. u32 status;
  1004. int err;
  1005. if (!bdev->reset || bdev->data->chipid != 0x7921)
  1006. return;
  1007. pm_runtime_get_sync(bdev->dev);
  1008. if (test_and_set_bit(BTMTKSDIO_HW_RESET_ACTIVE, &bdev->tx_state))
  1009. return;
  1010. sdio_claim_host(bdev->func);
  1011. sdio_writel(bdev->func, C_INT_EN_CLR, MTK_REG_CHLPCR, NULL);
  1012. skb_queue_purge(&bdev->txq);
  1013. cancel_work_sync(&bdev->txrx_work);
  1014. gpiod_set_value_cansleep(bdev->reset, 1);
  1015. msleep(100);
  1016. gpiod_set_value_cansleep(bdev->reset, 0);
  1017. err = readx_poll_timeout(btmtksdio_chcr_query, bdev, status,
  1018. status & BT_RST_DONE, 100000, 2000000);
  1019. if (err < 0) {
  1020. bt_dev_err(hdev, "Failed to reset (%d)", err);
  1021. goto err;
  1022. }
  1023. clear_bit(BTMTKSDIO_PATCH_ENABLED, &bdev->tx_state);
  1024. err:
  1025. sdio_release_host(bdev->func);
  1026. pm_runtime_put_noidle(bdev->dev);
  1027. pm_runtime_disable(bdev->dev);
  1028. hci_reset_dev(hdev);
  1029. }
  1030. static bool btmtksdio_sdio_inband_wakeup(struct hci_dev *hdev)
  1031. {
  1032. struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
  1033. return device_may_wakeup(bdev->dev);
  1034. }
  1035. static bool btmtksdio_sdio_wakeup(struct hci_dev *hdev)
  1036. {
  1037. struct btmtksdio_dev *bdev = hci_get_drvdata(hdev);
  1038. bool may_wakeup = device_may_wakeup(bdev->dev);
  1039. const struct btmtk_wakeon bt_awake = {
  1040. .mode = 0x1,
  1041. .gpo = 0,
  1042. .active_high = 0x1,
  1043. .enable_delay = cpu_to_le16(0xc80),
  1044. .wakeup_delay = cpu_to_le16(0x20),
  1045. };
  1046. if (may_wakeup && bdev->data->chipid == 0x7921) {
  1047. struct sk_buff *skb;
  1048. skb = __hci_cmd_sync(hdev, 0xfc27, sizeof(bt_awake),
  1049. &bt_awake, HCI_CMD_TIMEOUT);
  1050. if (IS_ERR(skb))
  1051. may_wakeup = false;
  1052. else
  1053. kfree_skb(skb);
  1054. }
  1055. return may_wakeup;
  1056. }
  1057. static int btmtksdio_probe(struct sdio_func *func,
  1058. const struct sdio_device_id *id)
  1059. {
  1060. struct btmtksdio_dev *bdev;
  1061. struct hci_dev *hdev;
  1062. int err;
  1063. bdev = devm_kzalloc(&func->dev, sizeof(*bdev), GFP_KERNEL);
  1064. if (!bdev)
  1065. return -ENOMEM;
  1066. bdev->data = (void *)id->driver_data;
  1067. if (!bdev->data)
  1068. return -ENODEV;
  1069. bdev->dev = &func->dev;
  1070. bdev->func = func;
  1071. INIT_WORK(&bdev->txrx_work, btmtksdio_txrx_work);
  1072. skb_queue_head_init(&bdev->txq);
  1073. /* Initialize and register HCI device */
  1074. hdev = hci_alloc_dev();
  1075. if (!hdev) {
  1076. dev_err(&func->dev, "Can't allocate HCI device\n");
  1077. return -ENOMEM;
  1078. }
  1079. bdev->hdev = hdev;
  1080. hdev->bus = HCI_SDIO;
  1081. hci_set_drvdata(hdev, bdev);
  1082. hdev->open = btmtksdio_open;
  1083. hdev->close = btmtksdio_close;
  1084. hdev->cmd_timeout = btmtksdio_cmd_timeout;
  1085. hdev->flush = btmtksdio_flush;
  1086. hdev->setup = btmtksdio_setup;
  1087. hdev->shutdown = btmtksdio_shutdown;
  1088. hdev->send = btmtksdio_send_frame;
  1089. hdev->wakeup = btmtksdio_sdio_wakeup;
  1090. /*
  1091. * If SDIO controller supports wake on Bluetooth, sending a wakeon
  1092. * command is not necessary.
  1093. */
  1094. if (device_can_wakeup(func->card->host->parent))
  1095. hdev->wakeup = btmtksdio_sdio_inband_wakeup;
  1096. else
  1097. hdev->wakeup = btmtksdio_sdio_wakeup;
  1098. hdev->set_bdaddr = btmtk_set_bdaddr;
  1099. SET_HCIDEV_DEV(hdev, &func->dev);
  1100. hdev->manufacturer = 70;
  1101. set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
  1102. sdio_set_drvdata(func, bdev);
  1103. err = hci_register_dev(hdev);
  1104. if (err < 0) {
  1105. dev_err(&func->dev, "Can't register HCI device\n");
  1106. hci_free_dev(hdev);
  1107. return err;
  1108. }
  1109. /* pm_runtime_enable would be done after the firmware is being
  1110. * downloaded because the core layer probably already enables
  1111. * runtime PM for this func such as the case host->caps &
  1112. * MMC_CAP_POWER_OFF_CARD.
  1113. */
  1114. if (pm_runtime_enabled(bdev->dev))
  1115. pm_runtime_disable(bdev->dev);
  1116. /* As explaination in drivers/mmc/core/sdio_bus.c tells us:
  1117. * Unbound SDIO functions are always suspended.
  1118. * During probe, the function is set active and the usage count
  1119. * is incremented. If the driver supports runtime PM,
  1120. * it should call pm_runtime_put_noidle() in its probe routine and
  1121. * pm_runtime_get_noresume() in its remove routine.
  1122. *
  1123. * So, put a pm_runtime_put_noidle here !
  1124. */
  1125. pm_runtime_put_noidle(bdev->dev);
  1126. err = device_init_wakeup(bdev->dev, true);
  1127. if (err)
  1128. bt_dev_err(hdev, "failed to initialize device wakeup");
  1129. bdev->dev->of_node = of_find_compatible_node(NULL, NULL,
  1130. "mediatek,mt7921s-bluetooth");
  1131. bdev->reset = devm_gpiod_get_optional(bdev->dev, "reset",
  1132. GPIOD_OUT_LOW);
  1133. if (IS_ERR(bdev->reset))
  1134. err = PTR_ERR(bdev->reset);
  1135. return err;
  1136. }
  1137. static void btmtksdio_remove(struct sdio_func *func)
  1138. {
  1139. struct btmtksdio_dev *bdev = sdio_get_drvdata(func);
  1140. struct hci_dev *hdev;
  1141. if (!bdev)
  1142. return;
  1143. /* Be consistent the state in btmtksdio_probe */
  1144. pm_runtime_get_noresume(bdev->dev);
  1145. hdev = bdev->hdev;
  1146. sdio_set_drvdata(func, NULL);
  1147. hci_unregister_dev(hdev);
  1148. hci_free_dev(hdev);
  1149. }
  1150. #ifdef CONFIG_PM
  1151. static int btmtksdio_runtime_suspend(struct device *dev)
  1152. {
  1153. struct sdio_func *func = dev_to_sdio_func(dev);
  1154. struct btmtksdio_dev *bdev;
  1155. int err;
  1156. bdev = sdio_get_drvdata(func);
  1157. if (!bdev)
  1158. return 0;
  1159. if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
  1160. return 0;
  1161. sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
  1162. err = btmtksdio_fw_pmctrl(bdev);
  1163. bt_dev_dbg(bdev->hdev, "status (%d) return ownership to device", err);
  1164. return err;
  1165. }
  1166. static int btmtksdio_system_suspend(struct device *dev)
  1167. {
  1168. struct sdio_func *func = dev_to_sdio_func(dev);
  1169. struct btmtksdio_dev *bdev;
  1170. bdev = sdio_get_drvdata(func);
  1171. if (!bdev)
  1172. return 0;
  1173. if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
  1174. return 0;
  1175. set_bit(BTMTKSDIO_BT_WAKE_ENABLED, &bdev->tx_state);
  1176. return btmtksdio_runtime_suspend(dev);
  1177. }
  1178. static int btmtksdio_runtime_resume(struct device *dev)
  1179. {
  1180. struct sdio_func *func = dev_to_sdio_func(dev);
  1181. struct btmtksdio_dev *bdev;
  1182. int err;
  1183. bdev = sdio_get_drvdata(func);
  1184. if (!bdev)
  1185. return 0;
  1186. if (!test_bit(BTMTKSDIO_FUNC_ENABLED, &bdev->tx_state))
  1187. return 0;
  1188. err = btmtksdio_drv_pmctrl(bdev);
  1189. bt_dev_dbg(bdev->hdev, "status (%d) get ownership from device", err);
  1190. return err;
  1191. }
  1192. static int btmtksdio_system_resume(struct device *dev)
  1193. {
  1194. return btmtksdio_runtime_resume(dev);
  1195. }
  1196. static const struct dev_pm_ops btmtksdio_pm_ops = {
  1197. SYSTEM_SLEEP_PM_OPS(btmtksdio_system_suspend, btmtksdio_system_resume)
  1198. RUNTIME_PM_OPS(btmtksdio_runtime_suspend, btmtksdio_runtime_resume, NULL)
  1199. };
  1200. #define BTMTKSDIO_PM_OPS (&btmtksdio_pm_ops)
  1201. #else /* CONFIG_PM */
  1202. #define BTMTKSDIO_PM_OPS NULL
  1203. #endif /* CONFIG_PM */
  1204. static struct sdio_driver btmtksdio_driver = {
  1205. .name = "btmtksdio",
  1206. .probe = btmtksdio_probe,
  1207. .remove = btmtksdio_remove,
  1208. .id_table = btmtksdio_table,
  1209. .drv = {
  1210. .pm = BTMTKSDIO_PM_OPS,
  1211. }
  1212. };
  1213. module_sdio_driver(btmtksdio_driver);
  1214. module_param(enable_autosuspend, bool, 0644);
  1215. MODULE_PARM_DESC(enable_autosuspend, "Enable autosuspend by default");
  1216. MODULE_AUTHOR("Sean Wang <sean.wang@mediatek.com>");
  1217. MODULE_DESCRIPTION("MediaTek Bluetooth SDIO driver ver " VERSION);
  1218. MODULE_VERSION(VERSION);
  1219. MODULE_LICENSE("GPL");