hci_mrvl.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. *
  4. * Bluetooth HCI UART driver for marvell devices
  5. *
  6. * Copyright (C) 2016 Marvell International Ltd.
  7. * Copyright (C) 2016 Intel Corporation
  8. */
  9. #include <linux/kernel.h>
  10. #include <linux/errno.h>
  11. #include <linux/skbuff.h>
  12. #include <linux/firmware.h>
  13. #include <linux/module.h>
  14. #include <linux/tty.h>
  15. #include <linux/of.h>
  16. #include <linux/serdev.h>
  17. #include <net/bluetooth/bluetooth.h>
  18. #include <net/bluetooth/hci_core.h>
  19. #include "hci_uart.h"
  20. #define HCI_FW_REQ_PKT 0xA5
  21. #define HCI_CHIP_VER_PKT 0xAA
  22. #define MRVL_ACK 0x5A
  23. #define MRVL_NAK 0xBF
  24. #define MRVL_RAW_DATA 0x1F
  25. #define MRVL_SET_BAUDRATE 0xFC09
  26. enum {
  27. STATE_CHIP_VER_PENDING,
  28. STATE_FW_REQ_PENDING,
  29. STATE_FW_LOADED,
  30. };
  31. struct mrvl_data {
  32. struct sk_buff *rx_skb;
  33. struct sk_buff_head txq;
  34. struct sk_buff_head rawq;
  35. unsigned long flags;
  36. unsigned int tx_len;
  37. u8 id, rev;
  38. };
  39. struct mrvl_serdev {
  40. struct hci_uart hu;
  41. };
  42. struct hci_mrvl_pkt {
  43. __le16 lhs;
  44. __le16 rhs;
  45. } __packed;
  46. #define HCI_MRVL_PKT_SIZE 4
  47. static int mrvl_open(struct hci_uart *hu)
  48. {
  49. struct mrvl_data *mrvl;
  50. int ret;
  51. BT_DBG("hu %p", hu);
  52. if (!hci_uart_has_flow_control(hu))
  53. return -EOPNOTSUPP;
  54. mrvl = kzalloc(sizeof(*mrvl), GFP_KERNEL);
  55. if (!mrvl)
  56. return -ENOMEM;
  57. skb_queue_head_init(&mrvl->txq);
  58. skb_queue_head_init(&mrvl->rawq);
  59. set_bit(STATE_CHIP_VER_PENDING, &mrvl->flags);
  60. hu->priv = mrvl;
  61. if (hu->serdev) {
  62. ret = serdev_device_open(hu->serdev);
  63. if (ret)
  64. goto err;
  65. }
  66. return 0;
  67. err:
  68. kfree(mrvl);
  69. return ret;
  70. }
  71. static int mrvl_close(struct hci_uart *hu)
  72. {
  73. struct mrvl_data *mrvl = hu->priv;
  74. BT_DBG("hu %p", hu);
  75. if (hu->serdev)
  76. serdev_device_close(hu->serdev);
  77. skb_queue_purge(&mrvl->txq);
  78. skb_queue_purge(&mrvl->rawq);
  79. kfree_skb(mrvl->rx_skb);
  80. kfree(mrvl);
  81. hu->priv = NULL;
  82. return 0;
  83. }
  84. static int mrvl_flush(struct hci_uart *hu)
  85. {
  86. struct mrvl_data *mrvl = hu->priv;
  87. BT_DBG("hu %p", hu);
  88. skb_queue_purge(&mrvl->txq);
  89. skb_queue_purge(&mrvl->rawq);
  90. return 0;
  91. }
  92. static struct sk_buff *mrvl_dequeue(struct hci_uart *hu)
  93. {
  94. struct mrvl_data *mrvl = hu->priv;
  95. struct sk_buff *skb;
  96. skb = skb_dequeue(&mrvl->txq);
  97. if (!skb) {
  98. /* Any raw data ? */
  99. skb = skb_dequeue(&mrvl->rawq);
  100. } else {
  101. /* Prepend skb with frame type */
  102. memcpy(skb_push(skb, 1), &bt_cb(skb)->pkt_type, 1);
  103. }
  104. return skb;
  105. }
  106. static int mrvl_enqueue(struct hci_uart *hu, struct sk_buff *skb)
  107. {
  108. struct mrvl_data *mrvl = hu->priv;
  109. skb_queue_tail(&mrvl->txq, skb);
  110. return 0;
  111. }
  112. static void mrvl_send_ack(struct hci_uart *hu, unsigned char type)
  113. {
  114. struct mrvl_data *mrvl = hu->priv;
  115. struct sk_buff *skb;
  116. /* No H4 payload, only 1 byte header */
  117. skb = bt_skb_alloc(0, GFP_ATOMIC);
  118. if (!skb) {
  119. bt_dev_err(hu->hdev, "Unable to alloc ack/nak packet");
  120. return;
  121. }
  122. hci_skb_pkt_type(skb) = type;
  123. skb_queue_tail(&mrvl->txq, skb);
  124. hci_uart_tx_wakeup(hu);
  125. }
  126. static int mrvl_recv_fw_req(struct hci_dev *hdev, struct sk_buff *skb)
  127. {
  128. struct hci_mrvl_pkt *pkt = (void *)skb->data;
  129. struct hci_uart *hu = hci_get_drvdata(hdev);
  130. struct mrvl_data *mrvl = hu->priv;
  131. int ret = 0;
  132. if ((pkt->lhs ^ pkt->rhs) != 0xffff) {
  133. bt_dev_err(hdev, "Corrupted mrvl header");
  134. mrvl_send_ack(hu, MRVL_NAK);
  135. ret = -EINVAL;
  136. goto done;
  137. }
  138. mrvl_send_ack(hu, MRVL_ACK);
  139. if (!test_bit(STATE_FW_REQ_PENDING, &mrvl->flags)) {
  140. bt_dev_err(hdev, "Received unexpected firmware request");
  141. ret = -EINVAL;
  142. goto done;
  143. }
  144. mrvl->tx_len = le16_to_cpu(pkt->lhs);
  145. clear_bit(STATE_FW_REQ_PENDING, &mrvl->flags);
  146. smp_mb__after_atomic();
  147. wake_up_bit(&mrvl->flags, STATE_FW_REQ_PENDING);
  148. done:
  149. kfree_skb(skb);
  150. return ret;
  151. }
  152. static int mrvl_recv_chip_ver(struct hci_dev *hdev, struct sk_buff *skb)
  153. {
  154. struct hci_mrvl_pkt *pkt = (void *)skb->data;
  155. struct hci_uart *hu = hci_get_drvdata(hdev);
  156. struct mrvl_data *mrvl = hu->priv;
  157. u16 version = le16_to_cpu(pkt->lhs);
  158. int ret = 0;
  159. if ((pkt->lhs ^ pkt->rhs) != 0xffff) {
  160. bt_dev_err(hdev, "Corrupted mrvl header");
  161. mrvl_send_ack(hu, MRVL_NAK);
  162. ret = -EINVAL;
  163. goto done;
  164. }
  165. mrvl_send_ack(hu, MRVL_ACK);
  166. if (!test_bit(STATE_CHIP_VER_PENDING, &mrvl->flags)) {
  167. bt_dev_err(hdev, "Received unexpected chip version");
  168. goto done;
  169. }
  170. mrvl->id = version;
  171. mrvl->rev = version >> 8;
  172. bt_dev_info(hdev, "Controller id = %x, rev = %x", mrvl->id, mrvl->rev);
  173. clear_bit(STATE_CHIP_VER_PENDING, &mrvl->flags);
  174. smp_mb__after_atomic();
  175. wake_up_bit(&mrvl->flags, STATE_CHIP_VER_PENDING);
  176. done:
  177. kfree_skb(skb);
  178. return ret;
  179. }
  180. #define HCI_RECV_CHIP_VER \
  181. .type = HCI_CHIP_VER_PKT, \
  182. .hlen = HCI_MRVL_PKT_SIZE, \
  183. .loff = 0, \
  184. .lsize = 0, \
  185. .maxlen = HCI_MRVL_PKT_SIZE
  186. #define HCI_RECV_FW_REQ \
  187. .type = HCI_FW_REQ_PKT, \
  188. .hlen = HCI_MRVL_PKT_SIZE, \
  189. .loff = 0, \
  190. .lsize = 0, \
  191. .maxlen = HCI_MRVL_PKT_SIZE
  192. static const struct h4_recv_pkt mrvl_recv_pkts[] = {
  193. { H4_RECV_ACL, .recv = hci_recv_frame },
  194. { H4_RECV_SCO, .recv = hci_recv_frame },
  195. { H4_RECV_EVENT, .recv = hci_recv_frame },
  196. { HCI_RECV_FW_REQ, .recv = mrvl_recv_fw_req },
  197. { HCI_RECV_CHIP_VER, .recv = mrvl_recv_chip_ver },
  198. };
  199. static int mrvl_recv(struct hci_uart *hu, const void *data, int count)
  200. {
  201. struct mrvl_data *mrvl = hu->priv;
  202. if (!test_bit(HCI_UART_REGISTERED, &hu->flags))
  203. return -EUNATCH;
  204. /* We might receive some noise when there is no firmware loaded. Therefore,
  205. * we drop data if the firmware is not loaded yet and if there is no fw load
  206. * request pending.
  207. */
  208. if (!test_bit(STATE_FW_REQ_PENDING, &mrvl->flags) &&
  209. !test_bit(STATE_FW_LOADED, &mrvl->flags))
  210. return count;
  211. mrvl->rx_skb = h4_recv_buf(hu->hdev, mrvl->rx_skb, data, count,
  212. mrvl_recv_pkts,
  213. ARRAY_SIZE(mrvl_recv_pkts));
  214. if (IS_ERR(mrvl->rx_skb)) {
  215. int err = PTR_ERR(mrvl->rx_skb);
  216. bt_dev_err(hu->hdev, "Frame reassembly failed (%d)", err);
  217. mrvl->rx_skb = NULL;
  218. return err;
  219. }
  220. return count;
  221. }
  222. static int mrvl_load_firmware(struct hci_dev *hdev, const char *name)
  223. {
  224. struct hci_uart *hu = hci_get_drvdata(hdev);
  225. struct mrvl_data *mrvl = hu->priv;
  226. const struct firmware *fw = NULL;
  227. const u8 *fw_ptr, *fw_max;
  228. int err;
  229. err = request_firmware(&fw, name, &hdev->dev);
  230. if (err < 0) {
  231. bt_dev_err(hdev, "Failed to load firmware file %s", name);
  232. return err;
  233. }
  234. fw_ptr = fw->data;
  235. fw_max = fw->data + fw->size;
  236. bt_dev_info(hdev, "Loading %s", name);
  237. set_bit(STATE_FW_REQ_PENDING, &mrvl->flags);
  238. while (fw_ptr <= fw_max) {
  239. struct sk_buff *skb;
  240. /* Controller drives the firmware load by sending firmware
  241. * request packets containing the expected fragment size.
  242. */
  243. err = wait_on_bit_timeout(&mrvl->flags, STATE_FW_REQ_PENDING,
  244. TASK_INTERRUPTIBLE,
  245. msecs_to_jiffies(2000));
  246. if (err == 1) {
  247. bt_dev_err(hdev, "Firmware load interrupted");
  248. err = -EINTR;
  249. break;
  250. } else if (err) {
  251. bt_dev_err(hdev, "Firmware request timeout");
  252. err = -ETIMEDOUT;
  253. break;
  254. }
  255. bt_dev_dbg(hdev, "Firmware request, expecting %d bytes",
  256. mrvl->tx_len);
  257. if (fw_ptr == fw_max) {
  258. /* Controller requests a null size once firmware is
  259. * fully loaded. If controller expects more data, there
  260. * is an issue.
  261. */
  262. if (!mrvl->tx_len) {
  263. bt_dev_info(hdev, "Firmware loading complete");
  264. } else {
  265. bt_dev_err(hdev, "Firmware loading failure");
  266. err = -EINVAL;
  267. }
  268. break;
  269. }
  270. if (fw_ptr + mrvl->tx_len > fw_max) {
  271. mrvl->tx_len = fw_max - fw_ptr;
  272. bt_dev_dbg(hdev, "Adjusting tx_len to %d",
  273. mrvl->tx_len);
  274. }
  275. skb = bt_skb_alloc(mrvl->tx_len, GFP_KERNEL);
  276. if (!skb) {
  277. bt_dev_err(hdev, "Failed to alloc mem for FW packet");
  278. err = -ENOMEM;
  279. break;
  280. }
  281. bt_cb(skb)->pkt_type = MRVL_RAW_DATA;
  282. skb_put_data(skb, fw_ptr, mrvl->tx_len);
  283. fw_ptr += mrvl->tx_len;
  284. set_bit(STATE_FW_REQ_PENDING, &mrvl->flags);
  285. skb_queue_tail(&mrvl->rawq, skb);
  286. hci_uart_tx_wakeup(hu);
  287. }
  288. release_firmware(fw);
  289. return err;
  290. }
  291. static int mrvl_setup(struct hci_uart *hu)
  292. {
  293. int err;
  294. struct mrvl_data *mrvl = hu->priv;
  295. hci_uart_set_flow_control(hu, true);
  296. err = mrvl_load_firmware(hu->hdev, "mrvl/helper_uart_3000000.bin");
  297. if (err) {
  298. bt_dev_err(hu->hdev, "Unable to download firmware helper");
  299. return -EINVAL;
  300. }
  301. /* Let the final ack go out before switching the baudrate */
  302. hci_uart_wait_until_sent(hu);
  303. if (hu->serdev)
  304. serdev_device_set_baudrate(hu->serdev, hu->oper_speed);
  305. else
  306. hci_uart_set_baudrate(hu, hu->oper_speed);
  307. hci_uart_set_flow_control(hu, false);
  308. err = mrvl_load_firmware(hu->hdev, "mrvl/uart8897_bt.bin");
  309. if (err)
  310. return err;
  311. set_bit(STATE_FW_LOADED, &mrvl->flags);
  312. return 0;
  313. }
  314. static int mrvl_set_baudrate(struct hci_uart *hu, unsigned int speed)
  315. {
  316. int err;
  317. struct mrvl_data *mrvl = hu->priv;
  318. __le32 speed_le = cpu_to_le32(speed);
  319. /* The firmware might be loaded by the Wifi driver over SDIO. We wait
  320. * up to 10s for the CTS to go up. Afterward, we know that the firmware
  321. * is ready.
  322. */
  323. err = serdev_device_wait_for_cts(hu->serdev, true, 10000);
  324. if (err) {
  325. bt_dev_err(hu->hdev, "Wait for CTS failed with %d\n", err);
  326. return err;
  327. }
  328. set_bit(STATE_FW_LOADED, &mrvl->flags);
  329. err = __hci_cmd_sync_status(hu->hdev, MRVL_SET_BAUDRATE,
  330. sizeof(speed_le), &speed_le,
  331. HCI_INIT_TIMEOUT);
  332. if (err) {
  333. bt_dev_err(hu->hdev, "send command failed: %d", err);
  334. return err;
  335. }
  336. serdev_device_set_baudrate(hu->serdev, speed);
  337. /* We forcefully have to send a command to the bluetooth module so that
  338. * the driver detects it after a baudrate change. This is foreseen by
  339. * hci_serdev by setting HCI_UART_VND_DETECT which then causes a dummy
  340. * local version read.
  341. */
  342. set_bit(HCI_UART_VND_DETECT, &hu->hdev_flags);
  343. return 0;
  344. }
  345. static const struct hci_uart_proto mrvl_proto_8897 = {
  346. .id = HCI_UART_MRVL,
  347. .name = "Marvell",
  348. .init_speed = 115200,
  349. .oper_speed = 3000000,
  350. .open = mrvl_open,
  351. .close = mrvl_close,
  352. .flush = mrvl_flush,
  353. .setup = mrvl_setup,
  354. .recv = mrvl_recv,
  355. .enqueue = mrvl_enqueue,
  356. .dequeue = mrvl_dequeue,
  357. };
  358. static const struct hci_uart_proto mrvl_proto_8997 = {
  359. .id = HCI_UART_MRVL,
  360. .name = "Marvell 8997",
  361. .init_speed = 115200,
  362. .oper_speed = 3000000,
  363. .open = mrvl_open,
  364. .close = mrvl_close,
  365. .flush = mrvl_flush,
  366. .set_baudrate = mrvl_set_baudrate,
  367. .recv = mrvl_recv,
  368. .enqueue = mrvl_enqueue,
  369. .dequeue = mrvl_dequeue,
  370. };
  371. static int mrvl_serdev_probe(struct serdev_device *serdev)
  372. {
  373. struct mrvl_serdev *mrvldev;
  374. const struct hci_uart_proto *mrvl_proto = device_get_match_data(&serdev->dev);
  375. mrvldev = devm_kzalloc(&serdev->dev, sizeof(*mrvldev), GFP_KERNEL);
  376. if (!mrvldev)
  377. return -ENOMEM;
  378. mrvldev->hu.oper_speed = mrvl_proto->oper_speed;
  379. if (mrvl_proto->set_baudrate)
  380. of_property_read_u32(serdev->dev.of_node, "max-speed", &mrvldev->hu.oper_speed);
  381. mrvldev->hu.serdev = serdev;
  382. serdev_device_set_drvdata(serdev, mrvldev);
  383. return hci_uart_register_device(&mrvldev->hu, mrvl_proto);
  384. }
  385. static void mrvl_serdev_remove(struct serdev_device *serdev)
  386. {
  387. struct mrvl_serdev *mrvldev = serdev_device_get_drvdata(serdev);
  388. hci_uart_unregister_device(&mrvldev->hu);
  389. }
  390. static const struct of_device_id __maybe_unused mrvl_bluetooth_of_match[] = {
  391. { .compatible = "mrvl,88w8897", .data = &mrvl_proto_8897},
  392. { .compatible = "mrvl,88w8997", .data = &mrvl_proto_8997},
  393. { },
  394. };
  395. MODULE_DEVICE_TABLE(of, mrvl_bluetooth_of_match);
  396. static struct serdev_device_driver mrvl_serdev_driver = {
  397. .probe = mrvl_serdev_probe,
  398. .remove = mrvl_serdev_remove,
  399. .driver = {
  400. .name = "hci_uart_mrvl",
  401. .of_match_table = of_match_ptr(mrvl_bluetooth_of_match),
  402. },
  403. };
  404. int __init mrvl_init(void)
  405. {
  406. serdev_device_driver_register(&mrvl_serdev_driver);
  407. return hci_uart_register_proto(&mrvl_proto_8897);
  408. }
  409. int __exit mrvl_deinit(void)
  410. {
  411. serdev_device_driver_unregister(&mrvl_serdev_driver);
  412. return hci_uart_unregister_proto(&mrvl_proto_8897);
  413. }