btmtksdio.c 36 KB

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