1
0

btnxpuart.c 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * NXP Bluetooth driver
  4. * Copyright 2023-2025 NXP
  5. */
  6. #include <linux/module.h>
  7. #include <linux/kernel.h>
  8. #include <linux/serdev.h>
  9. #include <linux/of.h>
  10. #include <linux/skbuff.h>
  11. #include <linux/unaligned.h>
  12. #include <linux/firmware.h>
  13. #include <linux/string.h>
  14. #include <linux/crc8.h>
  15. #include <linux/crc32.h>
  16. #include <linux/string_helpers.h>
  17. #include <linux/gpio/consumer.h>
  18. #include <linux/of_irq.h>
  19. #include <linux/regulator/consumer.h>
  20. #include <linux/reset.h>
  21. #include <net/bluetooth/bluetooth.h>
  22. #include <net/bluetooth/hci_core.h>
  23. #include "hci_uart.h"
  24. #define MANUFACTURER_NXP 37
  25. #define BTNXPUART_TX_STATE_ACTIVE 1
  26. #define BTNXPUART_FW_DOWNLOADING 2
  27. #define BTNXPUART_CHECK_BOOT_SIGNATURE 3
  28. #define BTNXPUART_SERDEV_OPEN 4
  29. #define BTNXPUART_IR_IN_PROGRESS 5
  30. #define BTNXPUART_FW_DOWNLOAD_ABORT 6
  31. #define BTNXPUART_FW_DUMP_IN_PROGRESS 7
  32. /* NXP HW err codes */
  33. #define BTNXPUART_IR_HW_ERR 0xb0
  34. #define FIRMWARE_W8987 "uart8987_bt.bin"
  35. #define FIRMWARE_W8987_OLD "uartuart8987_bt.bin"
  36. #define FIRMWARE_W8997 "uart8997_bt_v4.bin"
  37. #define FIRMWARE_W8997_OLD "uartuart8997_bt_v4.bin"
  38. #define FIRMWARE_W9098 "uart9098_bt_v1.bin"
  39. #define FIRMWARE_W9098_OLD "uartuart9098_bt_v1.bin"
  40. #define FIRMWARE_IW416 "uartiw416_bt.bin"
  41. #define FIRMWARE_IW416_OLD "uartiw416_bt_v0.bin"
  42. #define FIRMWARE_IW612 "uartspi_n61x_v1.bin.se"
  43. #define FIRMWARE_IW610 "uartspi_iw610.bin"
  44. #define FIRMWARE_SECURE_IW610 "uartspi_iw610.bin.se"
  45. #define FIRMWARE_IW624 "uartiw624_bt.bin"
  46. #define FIRMWARE_SECURE_IW624 "uartiw624_bt.bin.se"
  47. #define FIRMWARE_AW693 "uartaw693_bt.bin"
  48. #define FIRMWARE_SECURE_AW693 "uartaw693_bt.bin.se"
  49. #define FIRMWARE_AW693_A1 "uartaw693_bt_v1.bin"
  50. #define FIRMWARE_SECURE_AW693_A1 "uartaw693_bt_v1.bin.se"
  51. #define FIRMWARE_HELPER "helper_uart_3000000.bin"
  52. #define CHIP_ID_W9098 0x5c03
  53. #define CHIP_ID_IW416 0x7201
  54. #define CHIP_ID_IW612 0x7601
  55. #define CHIP_ID_IW624a 0x8000
  56. #define CHIP_ID_IW624c 0x8001
  57. #define CHIP_ID_AW693a0 0x8200
  58. #define CHIP_ID_AW693a1 0x8201
  59. #define CHIP_ID_IW610a0 0x8800
  60. #define CHIP_ID_IW610a1 0x8801
  61. #define FW_SECURE_MASK 0xc0
  62. #define FW_OPEN 0x00
  63. #define FW_AUTH_ILLEGAL 0x40
  64. #define FW_AUTH_PLAIN 0x80
  65. #define FW_AUTH_ENC 0xc0
  66. #define HCI_NXP_PRI_BAUDRATE 115200
  67. #define HCI_NXP_SEC_BAUDRATE_3M 3000000
  68. #define HCI_NXP_SEC_BAUDRATE_4M 4000000
  69. #define MAX_FW_FILE_NAME_LEN 50
  70. /* Default ps timeout period in milliseconds */
  71. #define PS_DEFAULT_TIMEOUT_PERIOD_MS 2000
  72. /* wakeup methods */
  73. #define WAKEUP_METHOD_DTR 0
  74. #define WAKEUP_METHOD_BREAK 1
  75. #define WAKEUP_METHOD_EXT_BREAK 2
  76. #define WAKEUP_METHOD_RTS 3
  77. #define WAKEUP_METHOD_GPIO 4
  78. #define WAKEUP_METHOD_INVALID 0xff
  79. /* power save mode status */
  80. #define PS_MODE_DISABLE 0
  81. #define PS_MODE_ENABLE 1
  82. /* Power Save Commands to ps_work_func */
  83. #define PS_CMD_EXIT_PS 1
  84. #define PS_CMD_ENTER_PS 2
  85. /* power save state */
  86. #define PS_STATE_AWAKE 0
  87. #define PS_STATE_SLEEP 1
  88. /* NXP Vendor Commands. Refer user manual UM11628 on nxp.com */
  89. /* Set custom BD Address */
  90. #define HCI_NXP_SET_BD_ADDR 0xfc22
  91. /* Set Auto-Sleep mode */
  92. #define HCI_NXP_AUTO_SLEEP_MODE 0xfc23
  93. /* Set Wakeup method */
  94. #define HCI_NXP_WAKEUP_METHOD 0xfc53
  95. /* Set operational baudrate */
  96. #define HCI_NXP_SET_OPER_SPEED 0xfc09
  97. /* Independent Reset (Soft Reset) */
  98. #define HCI_NXP_IND_RESET 0xfcfc
  99. /* Bluetooth vendor command: Trigger FW dump */
  100. #define HCI_NXP_TRIGGER_DUMP 0xfe91
  101. /* Bluetooth Power State : Vendor cmd params */
  102. #define BT_PS_ENABLE 0x02
  103. #define BT_PS_DISABLE 0x03
  104. /* Bluetooth Host Wakeup Methods */
  105. #define BT_HOST_WAKEUP_METHOD_NONE 0x00
  106. #define BT_HOST_WAKEUP_METHOD_DTR 0x01
  107. #define BT_HOST_WAKEUP_METHOD_BREAK 0x02
  108. #define BT_HOST_WAKEUP_METHOD_GPIO 0x03
  109. /* Bluetooth Chip Wakeup Methods */
  110. #define BT_CTRL_WAKEUP_METHOD_DSR 0x00
  111. #define BT_CTRL_WAKEUP_METHOD_BREAK 0x01
  112. #define BT_CTRL_WAKEUP_METHOD_GPIO 0x02
  113. #define BT_CTRL_WAKEUP_METHOD_EXT_BREAK 0x04
  114. #define BT_CTRL_WAKEUP_METHOD_RTS 0x05
  115. struct ps_data {
  116. u8 target_ps_mode; /* ps mode to be set */
  117. u8 cur_psmode; /* current ps_mode */
  118. u8 ps_state; /* controller's power save state */
  119. u8 ps_cmd;
  120. u8 h2c_wakeupmode;
  121. u8 cur_h2c_wakeupmode;
  122. u8 c2h_wakeupmode;
  123. u8 c2h_wakeup_gpio;
  124. u8 h2c_wakeup_gpio;
  125. bool driver_sent_cmd;
  126. u16 h2c_ps_interval;
  127. u16 c2h_ps_interval;
  128. bool wakeup_source;
  129. struct gpio_desc *h2c_ps_gpio;
  130. s32 irq_handler;
  131. struct hci_dev *hdev;
  132. struct work_struct work;
  133. struct timer_list ps_timer;
  134. struct mutex ps_lock;
  135. };
  136. struct wakeup_cmd_payload {
  137. u8 c2h_wakeupmode;
  138. u8 c2h_wakeup_gpio;
  139. u8 h2c_wakeupmode;
  140. u8 h2c_wakeup_gpio;
  141. } __packed;
  142. struct psmode_cmd_payload {
  143. u8 ps_cmd;
  144. __le16 c2h_ps_interval;
  145. } __packed;
  146. struct btnxpuart_data {
  147. const char *helper_fw_name;
  148. const char *fw_name;
  149. const char *fw_name_old;
  150. };
  151. enum bootloader_param_change {
  152. not_changed,
  153. cmd_sent,
  154. changed
  155. };
  156. struct btnxpuart_dev {
  157. struct hci_dev *hdev;
  158. struct serdev_device *serdev;
  159. struct work_struct tx_work;
  160. unsigned long tx_state;
  161. struct sk_buff_head txq;
  162. struct sk_buff *rx_skb;
  163. const struct firmware *fw;
  164. u8 fw_name[MAX_FW_FILE_NAME_LEN];
  165. u32 fw_dnld_v1_offset;
  166. u32 fw_v1_sent_bytes;
  167. u32 fw_dnld_v3_offset;
  168. u32 fw_v3_offset_correction;
  169. u32 fw_v3_prev_sent;
  170. u32 fw_v1_expected_len;
  171. u32 boot_reg_offset;
  172. wait_queue_head_t fw_dnld_done_wait_q;
  173. wait_queue_head_t check_boot_sign_wait_q;
  174. u32 new_baudrate;
  175. u32 current_baudrate;
  176. u32 fw_init_baudrate;
  177. u32 secondary_baudrate;
  178. enum bootloader_param_change timeout_changed;
  179. enum bootloader_param_change baudrate_changed;
  180. bool helper_downloaded;
  181. struct ps_data psdata;
  182. struct btnxpuart_data *nxp_data;
  183. struct reset_control *pdn;
  184. struct hci_uart hu;
  185. };
  186. #define NXP_V1_FW_REQ_PKT 0xa5
  187. #define NXP_V1_CHIP_VER_PKT 0xaa
  188. #define NXP_V3_FW_REQ_PKT 0xa7
  189. #define NXP_V3_CHIP_VER_PKT 0xab
  190. #define NXP_ACK_V1 0x5a
  191. #define NXP_NAK_V1 0xbf
  192. #define NXP_ACK_V3 0x7a
  193. #define NXP_NAK_V3 0x7b
  194. #define NXP_CRC_ERROR_V3 0x7c
  195. /* Bootloader signature error codes: Refer AN12820 from nxp.com */
  196. #define NXP_CRC_RX_ERROR BIT(0) /* CRC error in previous packet */
  197. #define NXP_ACK_RX_TIMEOUT BIT(2) /* ACK not received from host */
  198. #define NXP_HDR_RX_TIMEOUT BIT(3) /* FW Header chunk not received */
  199. #define NXP_DATA_RX_TIMEOUT BIT(4) /* FW Data chunk not received */
  200. #define HDR_LEN 16
  201. #define NXP_RECV_CHIP_VER_V1 \
  202. .type = NXP_V1_CHIP_VER_PKT, \
  203. .hlen = 4, \
  204. .loff = 0, \
  205. .lsize = 0, \
  206. .maxlen = 4
  207. #define NXP_RECV_FW_REQ_V1 \
  208. .type = NXP_V1_FW_REQ_PKT, \
  209. .hlen = 4, \
  210. .loff = 0, \
  211. .lsize = 0, \
  212. .maxlen = 4
  213. #define NXP_RECV_CHIP_VER_V3 \
  214. .type = NXP_V3_CHIP_VER_PKT, \
  215. .hlen = 4, \
  216. .loff = 0, \
  217. .lsize = 0, \
  218. .maxlen = 4
  219. #define NXP_RECV_FW_REQ_V3 \
  220. .type = NXP_V3_FW_REQ_PKT, \
  221. .hlen = 9, \
  222. .loff = 0, \
  223. .lsize = 0, \
  224. .maxlen = 9
  225. struct v1_data_req {
  226. __le16 len;
  227. __le16 len_comp;
  228. } __packed;
  229. struct v1_start_ind {
  230. __le16 chip_id;
  231. __le16 chip_id_comp;
  232. } __packed;
  233. struct v3_data_req {
  234. __le16 len;
  235. __le32 offset;
  236. __le16 error;
  237. u8 crc;
  238. } __packed;
  239. struct v3_start_ind {
  240. __le16 chip_id;
  241. u8 loader_ver;
  242. u8 crc;
  243. } __packed;
  244. /* UART register addresses of BT chip */
  245. #define CLKDIVADDR 0x7f00008f
  246. #define UARTDIVADDR 0x7f000090
  247. #define UARTMCRADDR 0x7f000091
  248. #define UARTREINITADDR 0x7f000092
  249. #define UARTICRADDR 0x7f000093
  250. #define UARTFCRADDR 0x7f000094
  251. #define MCR 0x00000022
  252. #define INIT 0x00000001
  253. #define ICR 0x000000c7
  254. #define FCR 0x000000c7
  255. #define POLYNOMIAL8 0x07
  256. struct uart_reg {
  257. __le32 address;
  258. __le32 value;
  259. } __packed;
  260. struct uart_config {
  261. struct uart_reg clkdiv;
  262. struct uart_reg uartdiv;
  263. struct uart_reg mcr;
  264. struct uart_reg re_init;
  265. struct uart_reg icr;
  266. struct uart_reg fcr;
  267. __be32 crc;
  268. } __packed;
  269. struct nxp_bootloader_cmd {
  270. __le32 header;
  271. __le32 arg;
  272. __le32 payload_len;
  273. __be32 crc;
  274. } __packed;
  275. struct nxp_v3_rx_timeout_nak {
  276. u8 nak;
  277. __le32 offset;
  278. u8 crc;
  279. } __packed;
  280. union nxp_v3_rx_timeout_nak_u {
  281. struct nxp_v3_rx_timeout_nak pkt;
  282. u8 buf[6];
  283. };
  284. struct nxp_v3_crc_nak {
  285. u8 nak;
  286. u8 crc;
  287. } __packed;
  288. union nxp_v3_crc_nak_u {
  289. struct nxp_v3_crc_nak pkt;
  290. u8 buf[2];
  291. };
  292. /* FW dump */
  293. #define NXP_FW_DUMP_SIZE (1024 * 1000)
  294. struct nxp_fw_dump_hdr {
  295. __le16 seq_num;
  296. __le16 reserved;
  297. __le16 buf_type;
  298. __le16 buf_len;
  299. };
  300. union nxp_set_bd_addr_payload {
  301. struct {
  302. u8 param_id;
  303. u8 param_len;
  304. u8 param[6];
  305. } __packed data;
  306. u8 buf[8];
  307. };
  308. static u8 crc8_table[CRC8_TABLE_SIZE];
  309. /* Default configurations */
  310. #define DEFAULT_H2C_WAKEUP_MODE WAKEUP_METHOD_BREAK
  311. #define DEFAULT_PS_MODE PS_MODE_ENABLE
  312. #define FW_INIT_BAUDRATE HCI_NXP_PRI_BAUDRATE
  313. static struct sk_buff *nxp_drv_send_cmd(struct hci_dev *hdev, u16 opcode,
  314. u32 plen,
  315. void *param,
  316. bool resp)
  317. {
  318. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  319. struct ps_data *psdata = &nxpdev->psdata;
  320. struct sk_buff *skb = NULL;
  321. /* set flag to prevent nxp_enqueue from parsing values from this command and
  322. * calling hci_cmd_sync_queue() again.
  323. */
  324. psdata->driver_sent_cmd = true;
  325. if (resp) {
  326. skb = __hci_cmd_sync(hdev, opcode, plen, param, HCI_CMD_TIMEOUT);
  327. } else {
  328. __hci_cmd_send(hdev, opcode, plen, param);
  329. /* Allow command to be sent before tx_work is cancelled
  330. * by btnxpuart_flush()
  331. */
  332. msleep(20);
  333. }
  334. psdata->driver_sent_cmd = false;
  335. return skb;
  336. }
  337. static void btnxpuart_tx_wakeup(struct btnxpuart_dev *nxpdev)
  338. {
  339. if (schedule_work(&nxpdev->tx_work))
  340. set_bit(BTNXPUART_TX_STATE_ACTIVE, &nxpdev->tx_state);
  341. }
  342. /* NXP Power Save Feature */
  343. static void ps_start_timer(struct btnxpuart_dev *nxpdev)
  344. {
  345. struct ps_data *psdata = &nxpdev->psdata;
  346. if (!psdata)
  347. return;
  348. if (psdata->cur_psmode == PS_MODE_ENABLE)
  349. mod_timer(&psdata->ps_timer, jiffies + msecs_to_jiffies(psdata->h2c_ps_interval));
  350. if (psdata->ps_state == PS_STATE_AWAKE && psdata->ps_cmd == PS_CMD_ENTER_PS)
  351. cancel_work_sync(&psdata->work);
  352. }
  353. static void ps_cancel_timer(struct btnxpuart_dev *nxpdev)
  354. {
  355. struct ps_data *psdata = &nxpdev->psdata;
  356. flush_work(&psdata->work);
  357. timer_shutdown_sync(&psdata->ps_timer);
  358. }
  359. static void ps_control(struct hci_dev *hdev, u8 ps_state)
  360. {
  361. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  362. struct ps_data *psdata = &nxpdev->psdata;
  363. int status = 0;
  364. if (psdata->ps_state == ps_state ||
  365. !test_bit(BTNXPUART_SERDEV_OPEN, &nxpdev->tx_state))
  366. return;
  367. mutex_lock(&psdata->ps_lock);
  368. switch (psdata->cur_h2c_wakeupmode) {
  369. case WAKEUP_METHOD_GPIO:
  370. if (ps_state == PS_STATE_AWAKE)
  371. gpiod_set_value_cansleep(psdata->h2c_ps_gpio, 0);
  372. else
  373. gpiod_set_value_cansleep(psdata->h2c_ps_gpio, 1);
  374. bt_dev_dbg(hdev, "Set h2c_ps_gpio: %s",
  375. str_high_low(ps_state == PS_STATE_SLEEP));
  376. break;
  377. case WAKEUP_METHOD_DTR:
  378. if (ps_state == PS_STATE_AWAKE)
  379. status = serdev_device_set_tiocm(nxpdev->serdev, TIOCM_DTR, 0);
  380. else
  381. status = serdev_device_set_tiocm(nxpdev->serdev, 0, TIOCM_DTR);
  382. break;
  383. case WAKEUP_METHOD_BREAK:
  384. default:
  385. if (ps_state == PS_STATE_AWAKE)
  386. status = serdev_device_break_ctl(nxpdev->serdev, 0);
  387. else
  388. status = serdev_device_break_ctl(nxpdev->serdev, -1);
  389. msleep(20); /* Allow chip to detect UART-break and enter sleep */
  390. bt_dev_dbg(hdev, "Set UART break: %s, status=%d",
  391. str_on_off(ps_state == PS_STATE_SLEEP), status);
  392. break;
  393. }
  394. if (!status)
  395. psdata->ps_state = ps_state;
  396. mutex_unlock(&psdata->ps_lock);
  397. if (ps_state == PS_STATE_AWAKE)
  398. btnxpuart_tx_wakeup(nxpdev);
  399. }
  400. static void ps_work_func(struct work_struct *work)
  401. {
  402. struct ps_data *data = container_of(work, struct ps_data, work);
  403. if (data->ps_cmd == PS_CMD_ENTER_PS && data->cur_psmode == PS_MODE_ENABLE)
  404. ps_control(data->hdev, PS_STATE_SLEEP);
  405. else if (data->ps_cmd == PS_CMD_EXIT_PS)
  406. ps_control(data->hdev, PS_STATE_AWAKE);
  407. }
  408. static void ps_timeout_func(struct timer_list *t)
  409. {
  410. struct ps_data *data = timer_container_of(data, t, ps_timer);
  411. struct hci_dev *hdev = data->hdev;
  412. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  413. if (test_bit(BTNXPUART_TX_STATE_ACTIVE, &nxpdev->tx_state)) {
  414. ps_start_timer(nxpdev);
  415. } else {
  416. data->ps_cmd = PS_CMD_ENTER_PS;
  417. schedule_work(&data->work);
  418. }
  419. }
  420. static irqreturn_t ps_host_wakeup_irq_handler(int irq, void *priv)
  421. {
  422. struct btnxpuart_dev *nxpdev = (struct btnxpuart_dev *)priv;
  423. bt_dev_dbg(nxpdev->hdev, "Host wakeup interrupt");
  424. return IRQ_HANDLED;
  425. }
  426. static int ps_setup(struct hci_dev *hdev)
  427. {
  428. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  429. struct serdev_device *serdev = nxpdev->serdev;
  430. struct ps_data *psdata = &nxpdev->psdata;
  431. int ret;
  432. /* Out-Of-Band Device Wakeup */
  433. psdata->h2c_ps_gpio = devm_gpiod_get_optional(&serdev->dev, "device-wakeup",
  434. GPIOD_OUT_LOW);
  435. if (IS_ERR(psdata->h2c_ps_gpio)) {
  436. bt_dev_err(hdev, "Error fetching device-wakeup-gpios: %ld",
  437. PTR_ERR(psdata->h2c_ps_gpio));
  438. return PTR_ERR(psdata->h2c_ps_gpio);
  439. }
  440. if (device_property_read_u8(&serdev->dev, "nxp,wakein-pin", &psdata->h2c_wakeup_gpio)) {
  441. psdata->h2c_wakeup_gpio = 0xff; /* 0xff: use default pin/gpio */
  442. } else if (!psdata->h2c_ps_gpio) {
  443. bt_dev_warn(hdev, "nxp,wakein-pin property without device-wakeup-gpios");
  444. psdata->h2c_wakeup_gpio = 0xff;
  445. }
  446. /* Out-Of-Band Host Wakeup */
  447. if (of_property_read_bool(serdev->dev.of_node, "wakeup-source")) {
  448. psdata->irq_handler = of_irq_get_byname(serdev->dev.of_node, "wakeup");
  449. bt_dev_info(nxpdev->hdev, "irq_handler: %d", psdata->irq_handler);
  450. if (psdata->irq_handler > 0)
  451. psdata->wakeup_source = true;
  452. }
  453. if (device_property_read_u8(&serdev->dev, "nxp,wakeout-pin", &psdata->c2h_wakeup_gpio)) {
  454. psdata->c2h_wakeup_gpio = 0xff;
  455. if (psdata->wakeup_source) {
  456. bt_dev_warn(hdev, "host wakeup interrupt without nxp,wakeout-pin");
  457. psdata->wakeup_source = false;
  458. }
  459. } else if (!psdata->wakeup_source) {
  460. bt_dev_warn(hdev, "nxp,wakeout-pin property without host wakeup interrupt");
  461. psdata->c2h_wakeup_gpio = 0xff;
  462. }
  463. if (psdata->wakeup_source) {
  464. ret = devm_request_threaded_irq(&serdev->dev, psdata->irq_handler,
  465. NULL, ps_host_wakeup_irq_handler,
  466. IRQF_ONESHOT,
  467. dev_name(&serdev->dev), nxpdev);
  468. if (ret)
  469. bt_dev_info(hdev, "error setting wakeup IRQ handler, ignoring\n");
  470. disable_irq(psdata->irq_handler);
  471. device_init_wakeup(&serdev->dev, true);
  472. }
  473. psdata->hdev = hdev;
  474. INIT_WORK(&psdata->work, ps_work_func);
  475. mutex_init(&psdata->ps_lock);
  476. timer_setup(&psdata->ps_timer, ps_timeout_func, 0);
  477. return 0;
  478. }
  479. static bool ps_wakeup(struct btnxpuart_dev *nxpdev)
  480. {
  481. struct ps_data *psdata = &nxpdev->psdata;
  482. u8 ps_state;
  483. mutex_lock(&psdata->ps_lock);
  484. ps_state = psdata->ps_state;
  485. mutex_unlock(&psdata->ps_lock);
  486. if (ps_state != PS_STATE_AWAKE) {
  487. psdata->ps_cmd = PS_CMD_EXIT_PS;
  488. schedule_work(&psdata->work);
  489. return true;
  490. }
  491. return false;
  492. }
  493. static void ps_cleanup(struct btnxpuart_dev *nxpdev)
  494. {
  495. struct ps_data *psdata = &nxpdev->psdata;
  496. u8 ps_state;
  497. mutex_lock(&psdata->ps_lock);
  498. ps_state = psdata->ps_state;
  499. mutex_unlock(&psdata->ps_lock);
  500. if (ps_state != PS_STATE_AWAKE)
  501. ps_control(psdata->hdev, PS_STATE_AWAKE);
  502. ps_cancel_timer(nxpdev);
  503. cancel_work_sync(&psdata->work);
  504. mutex_destroy(&psdata->ps_lock);
  505. }
  506. static int send_ps_cmd(struct hci_dev *hdev, void *data)
  507. {
  508. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  509. struct ps_data *psdata = &nxpdev->psdata;
  510. struct psmode_cmd_payload pcmd;
  511. struct sk_buff *skb;
  512. u8 *status;
  513. if (psdata->target_ps_mode == PS_MODE_ENABLE)
  514. pcmd.ps_cmd = BT_PS_ENABLE;
  515. else
  516. pcmd.ps_cmd = BT_PS_DISABLE;
  517. pcmd.c2h_ps_interval = __cpu_to_le16(psdata->c2h_ps_interval);
  518. skb = nxp_drv_send_cmd(hdev, HCI_NXP_AUTO_SLEEP_MODE, sizeof(pcmd),
  519. &pcmd, true);
  520. if (IS_ERR(skb)) {
  521. bt_dev_err(hdev, "Setting Power Save mode failed (%ld)", PTR_ERR(skb));
  522. return PTR_ERR(skb);
  523. }
  524. status = skb_pull_data(skb, 1);
  525. if (status) {
  526. if (!*status)
  527. psdata->cur_psmode = psdata->target_ps_mode;
  528. else
  529. psdata->target_ps_mode = psdata->cur_psmode;
  530. if (psdata->cur_psmode == PS_MODE_ENABLE)
  531. ps_start_timer(nxpdev);
  532. else
  533. ps_wakeup(nxpdev);
  534. bt_dev_dbg(hdev, "Power Save mode response: status=%d, ps_mode=%d",
  535. *status, psdata->cur_psmode);
  536. }
  537. kfree_skb(skb);
  538. return 0;
  539. }
  540. static int send_wakeup_method_cmd(struct hci_dev *hdev, void *data)
  541. {
  542. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  543. struct ps_data *psdata = &nxpdev->psdata;
  544. struct wakeup_cmd_payload pcmd;
  545. struct sk_buff *skb;
  546. u8 *status;
  547. pcmd.c2h_wakeupmode = psdata->c2h_wakeupmode;
  548. pcmd.c2h_wakeup_gpio = psdata->c2h_wakeup_gpio;
  549. pcmd.h2c_wakeup_gpio = 0xff;
  550. switch (psdata->h2c_wakeupmode) {
  551. case WAKEUP_METHOD_GPIO:
  552. pcmd.h2c_wakeupmode = BT_CTRL_WAKEUP_METHOD_GPIO;
  553. pcmd.h2c_wakeup_gpio = psdata->h2c_wakeup_gpio;
  554. break;
  555. case WAKEUP_METHOD_DTR:
  556. pcmd.h2c_wakeupmode = BT_CTRL_WAKEUP_METHOD_DSR;
  557. break;
  558. case WAKEUP_METHOD_BREAK:
  559. default:
  560. pcmd.h2c_wakeupmode = BT_CTRL_WAKEUP_METHOD_BREAK;
  561. break;
  562. }
  563. skb = nxp_drv_send_cmd(hdev, HCI_NXP_WAKEUP_METHOD, sizeof(pcmd),
  564. &pcmd, true);
  565. if (IS_ERR(skb)) {
  566. bt_dev_err(hdev, "Setting wake-up method failed (%ld)", PTR_ERR(skb));
  567. return PTR_ERR(skb);
  568. }
  569. status = skb_pull_data(skb, 1);
  570. if (status) {
  571. if (*status == 0)
  572. psdata->cur_h2c_wakeupmode = psdata->h2c_wakeupmode;
  573. else
  574. psdata->h2c_wakeupmode = psdata->cur_h2c_wakeupmode;
  575. bt_dev_dbg(hdev, "Set Wakeup Method response: status=%d, h2c_wakeupmode=%d",
  576. *status, psdata->cur_h2c_wakeupmode);
  577. }
  578. kfree_skb(skb);
  579. return 0;
  580. }
  581. static void ps_init(struct hci_dev *hdev)
  582. {
  583. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  584. struct ps_data *psdata = &nxpdev->psdata;
  585. u8 default_h2c_wakeup_mode = DEFAULT_H2C_WAKEUP_MODE;
  586. serdev_device_set_tiocm(nxpdev->serdev, 0, TIOCM_RTS);
  587. usleep_range(5000, 10000);
  588. serdev_device_set_tiocm(nxpdev->serdev, TIOCM_RTS, 0);
  589. usleep_range(5000, 10000);
  590. psdata->ps_state = PS_STATE_AWAKE;
  591. if (psdata->c2h_wakeup_gpio != 0xff)
  592. psdata->c2h_wakeupmode = BT_HOST_WAKEUP_METHOD_GPIO;
  593. else
  594. psdata->c2h_wakeupmode = BT_HOST_WAKEUP_METHOD_NONE;
  595. psdata->cur_h2c_wakeupmode = WAKEUP_METHOD_INVALID;
  596. if (psdata->h2c_ps_gpio)
  597. default_h2c_wakeup_mode = WAKEUP_METHOD_GPIO;
  598. psdata->h2c_ps_interval = PS_DEFAULT_TIMEOUT_PERIOD_MS;
  599. switch (default_h2c_wakeup_mode) {
  600. case WAKEUP_METHOD_GPIO:
  601. psdata->h2c_wakeupmode = WAKEUP_METHOD_GPIO;
  602. gpiod_set_value_cansleep(psdata->h2c_ps_gpio, 0);
  603. usleep_range(5000, 10000);
  604. break;
  605. case WAKEUP_METHOD_DTR:
  606. psdata->h2c_wakeupmode = WAKEUP_METHOD_DTR;
  607. serdev_device_set_tiocm(nxpdev->serdev, 0, TIOCM_DTR);
  608. serdev_device_set_tiocm(nxpdev->serdev, TIOCM_DTR, 0);
  609. break;
  610. case WAKEUP_METHOD_BREAK:
  611. default:
  612. psdata->h2c_wakeupmode = WAKEUP_METHOD_BREAK;
  613. serdev_device_break_ctl(nxpdev->serdev, -1);
  614. usleep_range(5000, 10000);
  615. serdev_device_break_ctl(nxpdev->serdev, 0);
  616. usleep_range(5000, 10000);
  617. break;
  618. }
  619. psdata->cur_psmode = PS_MODE_DISABLE;
  620. psdata->target_ps_mode = DEFAULT_PS_MODE;
  621. }
  622. /* NXP Firmware Download Feature */
  623. static int nxp_download_firmware(struct hci_dev *hdev)
  624. {
  625. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  626. int err = 0;
  627. nxpdev->fw_dnld_v1_offset = 0;
  628. nxpdev->fw_v1_sent_bytes = 0;
  629. nxpdev->fw_v1_expected_len = HDR_LEN;
  630. nxpdev->boot_reg_offset = 0;
  631. nxpdev->fw_dnld_v3_offset = 0;
  632. nxpdev->fw_v3_offset_correction = 0;
  633. nxpdev->baudrate_changed = not_changed;
  634. nxpdev->timeout_changed = not_changed;
  635. nxpdev->helper_downloaded = false;
  636. serdev_device_set_baudrate(nxpdev->serdev, HCI_NXP_PRI_BAUDRATE);
  637. serdev_device_set_flow_control(nxpdev->serdev, false);
  638. nxpdev->current_baudrate = HCI_NXP_PRI_BAUDRATE;
  639. /* Wait till FW is downloaded */
  640. err = wait_event_interruptible_timeout(nxpdev->fw_dnld_done_wait_q,
  641. !test_bit(BTNXPUART_FW_DOWNLOADING,
  642. &nxpdev->tx_state),
  643. msecs_to_jiffies(60000));
  644. if (nxpdev->fw && strlen(nxpdev->fw_name)) {
  645. release_firmware(nxpdev->fw);
  646. memset(nxpdev->fw_name, 0, sizeof(nxpdev->fw_name));
  647. }
  648. if (err == 0) {
  649. bt_dev_err(hdev, "FW Download Timeout. offset: %d",
  650. nxpdev->fw_dnld_v1_offset ?
  651. nxpdev->fw_dnld_v1_offset :
  652. nxpdev->fw_dnld_v3_offset);
  653. return -ETIMEDOUT;
  654. }
  655. if (test_bit(BTNXPUART_FW_DOWNLOAD_ABORT, &nxpdev->tx_state)) {
  656. bt_dev_err(hdev, "FW Download Aborted");
  657. return -EINTR;
  658. }
  659. serdev_device_set_flow_control(nxpdev->serdev, true);
  660. /* Allow the downloaded FW to initialize */
  661. msleep(1200);
  662. return 0;
  663. }
  664. static void nxp_send_ack(u8 ack, struct hci_dev *hdev)
  665. {
  666. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  667. u8 ack_nak[2];
  668. int len = 1;
  669. ack_nak[0] = ack;
  670. if (ack == NXP_ACK_V3) {
  671. ack_nak[1] = crc8(crc8_table, ack_nak, 1, 0xff);
  672. len = 2;
  673. }
  674. serdev_device_write_buf(nxpdev->serdev, ack_nak, len);
  675. }
  676. static bool nxp_fw_change_baudrate(struct hci_dev *hdev, u16 req_len)
  677. {
  678. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  679. struct nxp_bootloader_cmd nxp_cmd5;
  680. struct uart_config uart_config;
  681. u32 clkdivaddr = CLKDIVADDR - nxpdev->boot_reg_offset;
  682. u32 uartdivaddr = UARTDIVADDR - nxpdev->boot_reg_offset;
  683. u32 uartmcraddr = UARTMCRADDR - nxpdev->boot_reg_offset;
  684. u32 uartreinitaddr = UARTREINITADDR - nxpdev->boot_reg_offset;
  685. u32 uarticraddr = UARTICRADDR - nxpdev->boot_reg_offset;
  686. u32 uartfcraddr = UARTFCRADDR - nxpdev->boot_reg_offset;
  687. if (req_len == sizeof(nxp_cmd5)) {
  688. nxp_cmd5.header = __cpu_to_le32(5);
  689. nxp_cmd5.arg = 0;
  690. nxp_cmd5.payload_len = __cpu_to_le32(sizeof(uart_config));
  691. /* FW expects swapped CRC bytes */
  692. nxp_cmd5.crc = __cpu_to_be32(crc32_be(0UL, (char *)&nxp_cmd5,
  693. sizeof(nxp_cmd5) - 4));
  694. serdev_device_write_buf(nxpdev->serdev, (u8 *)&nxp_cmd5, sizeof(nxp_cmd5));
  695. nxpdev->fw_v3_offset_correction += req_len;
  696. } else if (req_len == sizeof(uart_config)) {
  697. uart_config.clkdiv.address = __cpu_to_le32(clkdivaddr);
  698. if (nxpdev->new_baudrate == HCI_NXP_SEC_BAUDRATE_4M)
  699. uart_config.clkdiv.value = __cpu_to_le32(0x01000000);
  700. else
  701. uart_config.clkdiv.value = __cpu_to_le32(0x00c00000);
  702. uart_config.uartdiv.address = __cpu_to_le32(uartdivaddr);
  703. uart_config.uartdiv.value = __cpu_to_le32(1);
  704. uart_config.mcr.address = __cpu_to_le32(uartmcraddr);
  705. uart_config.mcr.value = __cpu_to_le32(MCR);
  706. uart_config.re_init.address = __cpu_to_le32(uartreinitaddr);
  707. uart_config.re_init.value = __cpu_to_le32(INIT);
  708. uart_config.icr.address = __cpu_to_le32(uarticraddr);
  709. uart_config.icr.value = __cpu_to_le32(ICR);
  710. uart_config.fcr.address = __cpu_to_le32(uartfcraddr);
  711. uart_config.fcr.value = __cpu_to_le32(FCR);
  712. /* FW expects swapped CRC bytes */
  713. uart_config.crc = __cpu_to_be32(crc32_be(0UL, (char *)&uart_config,
  714. sizeof(uart_config) - 4));
  715. serdev_device_write_buf(nxpdev->serdev, (u8 *)&uart_config, sizeof(uart_config));
  716. serdev_device_wait_until_sent(nxpdev->serdev, 0);
  717. nxpdev->fw_v3_offset_correction += req_len;
  718. return true;
  719. }
  720. return false;
  721. }
  722. static bool nxp_fw_change_timeout(struct hci_dev *hdev, u16 req_len)
  723. {
  724. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  725. struct nxp_bootloader_cmd nxp_cmd7;
  726. if (req_len != sizeof(nxp_cmd7))
  727. return false;
  728. nxp_cmd7.header = __cpu_to_le32(7);
  729. nxp_cmd7.arg = __cpu_to_le32(0x70);
  730. nxp_cmd7.payload_len = 0;
  731. /* FW expects swapped CRC bytes */
  732. nxp_cmd7.crc = __cpu_to_be32(crc32_be(0UL, (char *)&nxp_cmd7,
  733. sizeof(nxp_cmd7) - 4));
  734. serdev_device_write_buf(nxpdev->serdev, (u8 *)&nxp_cmd7, sizeof(nxp_cmd7));
  735. serdev_device_wait_until_sent(nxpdev->serdev, 0);
  736. nxpdev->fw_v3_offset_correction += req_len;
  737. return true;
  738. }
  739. static u32 nxp_get_data_len(const u8 *buf)
  740. {
  741. struct nxp_bootloader_cmd *hdr = (struct nxp_bootloader_cmd *)buf;
  742. return __le32_to_cpu(hdr->payload_len);
  743. }
  744. static bool is_fw_downloading(struct btnxpuart_dev *nxpdev)
  745. {
  746. return test_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state);
  747. }
  748. static bool ind_reset_in_progress(struct btnxpuart_dev *nxpdev)
  749. {
  750. return test_bit(BTNXPUART_IR_IN_PROGRESS, &nxpdev->tx_state);
  751. }
  752. static bool fw_dump_in_progress(struct btnxpuart_dev *nxpdev)
  753. {
  754. return test_bit(BTNXPUART_FW_DUMP_IN_PROGRESS, &nxpdev->tx_state);
  755. }
  756. static bool process_boot_signature(struct btnxpuart_dev *nxpdev)
  757. {
  758. if (test_bit(BTNXPUART_CHECK_BOOT_SIGNATURE, &nxpdev->tx_state)) {
  759. clear_bit(BTNXPUART_CHECK_BOOT_SIGNATURE, &nxpdev->tx_state);
  760. wake_up_interruptible(&nxpdev->check_boot_sign_wait_q);
  761. return false;
  762. }
  763. return is_fw_downloading(nxpdev);
  764. }
  765. static int nxp_request_firmware(struct hci_dev *hdev, const char *fw_name,
  766. const char *fw_name_old)
  767. {
  768. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  769. const char *fw_name_dt;
  770. int err = 0;
  771. if (!fw_name)
  772. return -ENOENT;
  773. if (!strlen(nxpdev->fw_name)) {
  774. if (strcmp(fw_name, FIRMWARE_HELPER) &&
  775. !device_property_read_string(&nxpdev->serdev->dev,
  776. "firmware-name",
  777. &fw_name_dt))
  778. fw_name = fw_name_dt;
  779. snprintf(nxpdev->fw_name, MAX_FW_FILE_NAME_LEN, "nxp/%s", fw_name);
  780. err = request_firmware_direct(&nxpdev->fw, nxpdev->fw_name, &hdev->dev);
  781. if (err < 0 && fw_name_old) {
  782. snprintf(nxpdev->fw_name, MAX_FW_FILE_NAME_LEN, "nxp/%s", fw_name_old);
  783. err = request_firmware_direct(&nxpdev->fw, nxpdev->fw_name, &hdev->dev);
  784. }
  785. bt_dev_info(hdev, "Request Firmware: %s", nxpdev->fw_name);
  786. if (err < 0) {
  787. bt_dev_err(hdev, "Firmware file %s not found", nxpdev->fw_name);
  788. clear_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state);
  789. }
  790. }
  791. return err;
  792. }
  793. /* for legacy chipsets with V1 bootloader */
  794. static int nxp_recv_chip_ver_v1(struct hci_dev *hdev, struct sk_buff *skb)
  795. {
  796. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  797. struct v1_start_ind *req;
  798. __u16 chip_id;
  799. req = skb_pull_data(skb, sizeof(*req));
  800. if (!req)
  801. goto free_skb;
  802. chip_id = le16_to_cpu(req->chip_id ^ req->chip_id_comp);
  803. if (chip_id == 0xffff && nxpdev->fw_dnld_v1_offset) {
  804. nxpdev->fw_dnld_v1_offset = 0;
  805. nxpdev->fw_v1_sent_bytes = 0;
  806. nxpdev->fw_v1_expected_len = HDR_LEN;
  807. release_firmware(nxpdev->fw);
  808. memset(nxpdev->fw_name, 0, sizeof(nxpdev->fw_name));
  809. nxp_send_ack(NXP_ACK_V1, hdev);
  810. }
  811. free_skb:
  812. kfree_skb(skb);
  813. return 0;
  814. }
  815. static int nxp_recv_fw_req_v1(struct hci_dev *hdev, struct sk_buff *skb)
  816. {
  817. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  818. struct btnxpuart_data *nxp_data = nxpdev->nxp_data;
  819. struct v1_data_req *req;
  820. __u16 len;
  821. if (!process_boot_signature(nxpdev))
  822. goto free_skb;
  823. req = skb_pull_data(skb, sizeof(*req));
  824. if (!req)
  825. goto free_skb;
  826. len = __le16_to_cpu(req->len ^ req->len_comp);
  827. if (len != 0xffff) {
  828. bt_dev_dbg(hdev, "ERR: Send NAK");
  829. nxp_send_ack(NXP_NAK_V1, hdev);
  830. goto free_skb;
  831. }
  832. nxp_send_ack(NXP_ACK_V1, hdev);
  833. len = __le16_to_cpu(req->len);
  834. if (!nxp_data->helper_fw_name) {
  835. if (nxpdev->timeout_changed != changed) {
  836. nxp_fw_change_timeout(hdev, len);
  837. nxpdev->timeout_changed = changed;
  838. goto free_skb;
  839. }
  840. if (nxpdev->baudrate_changed != changed) {
  841. nxpdev->new_baudrate = nxpdev->secondary_baudrate;
  842. if (nxp_fw_change_baudrate(hdev, len)) {
  843. nxpdev->baudrate_changed = changed;
  844. serdev_device_set_baudrate(nxpdev->serdev,
  845. nxpdev->secondary_baudrate);
  846. serdev_device_set_flow_control(nxpdev->serdev, true);
  847. nxpdev->current_baudrate = nxpdev->secondary_baudrate;
  848. }
  849. goto free_skb;
  850. }
  851. }
  852. if (!nxp_data->helper_fw_name || nxpdev->helper_downloaded) {
  853. if (nxp_request_firmware(hdev, nxp_data->fw_name, nxp_data->fw_name_old))
  854. goto free_skb;
  855. } else if (nxp_data->helper_fw_name && !nxpdev->helper_downloaded) {
  856. if (nxp_request_firmware(hdev, nxp_data->helper_fw_name, NULL))
  857. goto free_skb;
  858. }
  859. if (!len) {
  860. bt_dev_info(hdev, "FW Download Complete: %zu bytes",
  861. nxpdev->fw->size);
  862. if (nxp_data->helper_fw_name && !nxpdev->helper_downloaded) {
  863. nxpdev->helper_downloaded = true;
  864. serdev_device_wait_until_sent(nxpdev->serdev, 0);
  865. serdev_device_set_baudrate(nxpdev->serdev,
  866. HCI_NXP_SEC_BAUDRATE_3M);
  867. serdev_device_set_flow_control(nxpdev->serdev, true);
  868. } else {
  869. clear_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state);
  870. wake_up_interruptible(&nxpdev->fw_dnld_done_wait_q);
  871. }
  872. goto free_skb;
  873. }
  874. if (len & 0x01) {
  875. /* The CRC did not match at the other end.
  876. * Simply send the same bytes again.
  877. */
  878. len = nxpdev->fw_v1_sent_bytes;
  879. bt_dev_dbg(hdev, "CRC error. Resend %d bytes of FW.", len);
  880. } else {
  881. nxpdev->fw_dnld_v1_offset += nxpdev->fw_v1_sent_bytes;
  882. /* The FW bin file is made up of many blocks of
  883. * 16 byte header and payload data chunks. If the
  884. * FW has requested a header, read the payload length
  885. * info from the header, before sending the header.
  886. * In the next iteration, the FW should request the
  887. * payload data chunk, which should be equal to the
  888. * payload length read from header. If there is a
  889. * mismatch, clearly the driver and FW are out of sync,
  890. * and we need to re-send the previous header again.
  891. */
  892. if (len == nxpdev->fw_v1_expected_len) {
  893. if (len == HDR_LEN)
  894. nxpdev->fw_v1_expected_len = nxp_get_data_len(nxpdev->fw->data +
  895. nxpdev->fw_dnld_v1_offset);
  896. else
  897. nxpdev->fw_v1_expected_len = HDR_LEN;
  898. } else if (len == HDR_LEN) {
  899. /* FW download out of sync. Send previous chunk again */
  900. nxpdev->fw_dnld_v1_offset -= nxpdev->fw_v1_sent_bytes;
  901. nxpdev->fw_v1_expected_len = HDR_LEN;
  902. }
  903. }
  904. if (nxpdev->fw_dnld_v1_offset + len <= nxpdev->fw->size)
  905. serdev_device_write_buf(nxpdev->serdev, nxpdev->fw->data +
  906. nxpdev->fw_dnld_v1_offset, len);
  907. nxpdev->fw_v1_sent_bytes = len;
  908. free_skb:
  909. kfree_skb(skb);
  910. return 0;
  911. }
  912. static char *nxp_get_fw_name_from_chipid(struct hci_dev *hdev, u16 chipid,
  913. u8 loader_ver)
  914. {
  915. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  916. char *fw_name = NULL;
  917. switch (chipid) {
  918. case CHIP_ID_W9098:
  919. fw_name = FIRMWARE_W9098;
  920. break;
  921. case CHIP_ID_IW416:
  922. fw_name = FIRMWARE_IW416;
  923. break;
  924. case CHIP_ID_IW612:
  925. fw_name = FIRMWARE_IW612;
  926. break;
  927. case CHIP_ID_IW624a:
  928. case CHIP_ID_IW624c:
  929. nxpdev->boot_reg_offset = 1;
  930. if ((loader_ver & FW_SECURE_MASK) == FW_OPEN)
  931. fw_name = FIRMWARE_IW624;
  932. else if ((loader_ver & FW_SECURE_MASK) != FW_AUTH_ILLEGAL)
  933. fw_name = FIRMWARE_SECURE_IW624;
  934. else
  935. bt_dev_err(hdev, "Illegal loader version %02x", loader_ver);
  936. break;
  937. case CHIP_ID_AW693a0:
  938. if ((loader_ver & FW_SECURE_MASK) == FW_OPEN)
  939. fw_name = FIRMWARE_AW693;
  940. else if ((loader_ver & FW_SECURE_MASK) != FW_AUTH_ILLEGAL)
  941. fw_name = FIRMWARE_SECURE_AW693;
  942. else
  943. bt_dev_err(hdev, "Illegal loader version %02x", loader_ver);
  944. break;
  945. case CHIP_ID_AW693a1:
  946. if ((loader_ver & FW_SECURE_MASK) == FW_OPEN)
  947. fw_name = FIRMWARE_AW693_A1;
  948. else if ((loader_ver & FW_SECURE_MASK) != FW_AUTH_ILLEGAL)
  949. fw_name = FIRMWARE_SECURE_AW693_A1;
  950. else
  951. bt_dev_err(hdev, "Illegal loader version %02x", loader_ver);
  952. break;
  953. case CHIP_ID_IW610a0:
  954. case CHIP_ID_IW610a1:
  955. if ((loader_ver & FW_SECURE_MASK) == FW_OPEN)
  956. fw_name = FIRMWARE_IW610;
  957. else if ((loader_ver & FW_SECURE_MASK) != FW_AUTH_ILLEGAL)
  958. fw_name = FIRMWARE_SECURE_IW610;
  959. else
  960. bt_dev_err(hdev, "Illegal loader version %02x", loader_ver);
  961. break;
  962. default:
  963. bt_dev_err(hdev, "Unknown chip signature %04x", chipid);
  964. break;
  965. }
  966. return fw_name;
  967. }
  968. static char *nxp_get_old_fw_name_from_chipid(struct hci_dev *hdev, u16 chipid,
  969. u8 loader_ver)
  970. {
  971. char *fw_name_old = NULL;
  972. switch (chipid) {
  973. case CHIP_ID_W9098:
  974. fw_name_old = FIRMWARE_W9098_OLD;
  975. break;
  976. case CHIP_ID_IW416:
  977. fw_name_old = FIRMWARE_IW416_OLD;
  978. break;
  979. }
  980. return fw_name_old;
  981. }
  982. static int nxp_recv_chip_ver_v3(struct hci_dev *hdev, struct sk_buff *skb)
  983. {
  984. struct v3_start_ind *req = skb_pull_data(skb, sizeof(*req));
  985. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  986. const char *fw_name;
  987. const char *fw_name_old;
  988. u16 chip_id;
  989. u8 loader_ver;
  990. if (!process_boot_signature(nxpdev))
  991. goto free_skb;
  992. chip_id = le16_to_cpu(req->chip_id);
  993. loader_ver = req->loader_ver;
  994. bt_dev_info(hdev, "ChipID: %04x, Version: %d", chip_id, loader_ver);
  995. fw_name = nxp_get_fw_name_from_chipid(hdev, chip_id, loader_ver);
  996. fw_name_old = nxp_get_old_fw_name_from_chipid(hdev, chip_id, loader_ver);
  997. if (!nxp_request_firmware(hdev, fw_name, fw_name_old))
  998. nxp_send_ack(NXP_ACK_V3, hdev);
  999. free_skb:
  1000. kfree_skb(skb);
  1001. return 0;
  1002. }
  1003. static void nxp_handle_fw_download_error(struct hci_dev *hdev, struct v3_data_req *req)
  1004. {
  1005. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1006. __u32 offset = __le32_to_cpu(req->offset);
  1007. __u16 err = __le16_to_cpu(req->error);
  1008. union nxp_v3_rx_timeout_nak_u timeout_nak_buf;
  1009. union nxp_v3_crc_nak_u crc_nak_buf;
  1010. if (err & NXP_CRC_RX_ERROR) {
  1011. crc_nak_buf.pkt.nak = NXP_CRC_ERROR_V3;
  1012. crc_nak_buf.pkt.crc = crc8(crc8_table, crc_nak_buf.buf,
  1013. sizeof(crc_nak_buf) - 1, 0xff);
  1014. serdev_device_write_buf(nxpdev->serdev, crc_nak_buf.buf,
  1015. sizeof(crc_nak_buf));
  1016. } else if (err & NXP_ACK_RX_TIMEOUT ||
  1017. err & NXP_HDR_RX_TIMEOUT ||
  1018. err & NXP_DATA_RX_TIMEOUT) {
  1019. timeout_nak_buf.pkt.nak = NXP_NAK_V3;
  1020. timeout_nak_buf.pkt.offset = __cpu_to_le32(offset);
  1021. timeout_nak_buf.pkt.crc = crc8(crc8_table, timeout_nak_buf.buf,
  1022. sizeof(timeout_nak_buf) - 1, 0xff);
  1023. serdev_device_write_buf(nxpdev->serdev, timeout_nak_buf.buf,
  1024. sizeof(timeout_nak_buf));
  1025. } else {
  1026. bt_dev_err(hdev, "Unknown bootloader error code: %d", err);
  1027. }
  1028. }
  1029. static int nxp_recv_fw_req_v3(struct hci_dev *hdev, struct sk_buff *skb)
  1030. {
  1031. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1032. struct v3_data_req *req;
  1033. __u16 len = 0;
  1034. __u16 err = 0;
  1035. __u32 offset;
  1036. if (!process_boot_signature(nxpdev))
  1037. goto free_skb;
  1038. req = skb_pull_data(skb, sizeof(*req));
  1039. if (!req || !nxpdev->fw)
  1040. goto free_skb;
  1041. err = __le16_to_cpu(req->error);
  1042. if (!err) {
  1043. nxp_send_ack(NXP_ACK_V3, hdev);
  1044. if (nxpdev->timeout_changed == cmd_sent)
  1045. nxpdev->timeout_changed = changed;
  1046. if (nxpdev->baudrate_changed == cmd_sent)
  1047. nxpdev->baudrate_changed = changed;
  1048. } else {
  1049. nxp_handle_fw_download_error(hdev, req);
  1050. if (nxpdev->timeout_changed == cmd_sent &&
  1051. err == NXP_CRC_RX_ERROR) {
  1052. nxpdev->fw_v3_offset_correction -= nxpdev->fw_v3_prev_sent;
  1053. nxpdev->timeout_changed = not_changed;
  1054. }
  1055. if (nxpdev->baudrate_changed == cmd_sent &&
  1056. err == NXP_CRC_RX_ERROR) {
  1057. nxpdev->fw_v3_offset_correction -= nxpdev->fw_v3_prev_sent;
  1058. nxpdev->baudrate_changed = not_changed;
  1059. }
  1060. goto free_skb;
  1061. }
  1062. len = __le16_to_cpu(req->len);
  1063. if (nxpdev->timeout_changed != changed) {
  1064. nxp_fw_change_timeout(hdev, len);
  1065. nxpdev->timeout_changed = cmd_sent;
  1066. goto free_skb;
  1067. }
  1068. if (nxpdev->baudrate_changed != changed) {
  1069. nxpdev->new_baudrate = nxpdev->secondary_baudrate;
  1070. if (nxp_fw_change_baudrate(hdev, len)) {
  1071. nxpdev->baudrate_changed = cmd_sent;
  1072. serdev_device_set_baudrate(nxpdev->serdev,
  1073. nxpdev->secondary_baudrate);
  1074. serdev_device_set_flow_control(nxpdev->serdev, true);
  1075. nxpdev->current_baudrate = nxpdev->secondary_baudrate;
  1076. }
  1077. goto free_skb;
  1078. }
  1079. if (req->len == 0) {
  1080. bt_dev_info(hdev, "FW Download Complete: %zu bytes",
  1081. nxpdev->fw->size);
  1082. clear_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state);
  1083. wake_up_interruptible(&nxpdev->fw_dnld_done_wait_q);
  1084. goto free_skb;
  1085. }
  1086. offset = __le32_to_cpu(req->offset);
  1087. if (offset < nxpdev->fw_v3_offset_correction) {
  1088. /* This scenario should ideally never occur. But if it ever does,
  1089. * FW is out of sync and needs a power cycle.
  1090. */
  1091. bt_dev_err(hdev, "Something went wrong during FW download");
  1092. bt_dev_err(hdev, "Please power cycle and try again");
  1093. goto free_skb;
  1094. }
  1095. nxpdev->fw_dnld_v3_offset = offset - nxpdev->fw_v3_offset_correction;
  1096. serdev_device_write_buf(nxpdev->serdev, nxpdev->fw->data +
  1097. nxpdev->fw_dnld_v3_offset, len);
  1098. free_skb:
  1099. nxpdev->fw_v3_prev_sent = len;
  1100. kfree_skb(skb);
  1101. return 0;
  1102. }
  1103. static int nxp_set_baudrate_cmd(struct hci_dev *hdev, void *data)
  1104. {
  1105. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1106. __le32 new_baudrate = __cpu_to_le32(nxpdev->new_baudrate);
  1107. struct ps_data *psdata = &nxpdev->psdata;
  1108. struct sk_buff *skb;
  1109. u8 *status;
  1110. if (!psdata)
  1111. return 0;
  1112. skb = nxp_drv_send_cmd(hdev, HCI_NXP_SET_OPER_SPEED, 4,
  1113. (u8 *)&new_baudrate, true);
  1114. if (IS_ERR(skb)) {
  1115. bt_dev_err(hdev, "Setting baudrate failed (%ld)", PTR_ERR(skb));
  1116. return PTR_ERR(skb);
  1117. }
  1118. status = (u8 *)skb_pull_data(skb, 1);
  1119. if (status) {
  1120. if (*status == 0) {
  1121. serdev_device_set_baudrate(nxpdev->serdev, nxpdev->new_baudrate);
  1122. nxpdev->current_baudrate = nxpdev->new_baudrate;
  1123. }
  1124. bt_dev_dbg(hdev, "Set baudrate response: status=%d, baudrate=%d",
  1125. *status, nxpdev->new_baudrate);
  1126. }
  1127. kfree_skb(skb);
  1128. return 0;
  1129. }
  1130. static int nxp_check_boot_sign(struct btnxpuart_dev *nxpdev)
  1131. {
  1132. serdev_device_set_baudrate(nxpdev->serdev, HCI_NXP_PRI_BAUDRATE);
  1133. if (ind_reset_in_progress(nxpdev))
  1134. serdev_device_set_flow_control(nxpdev->serdev, false);
  1135. else
  1136. serdev_device_set_flow_control(nxpdev->serdev, true);
  1137. set_bit(BTNXPUART_CHECK_BOOT_SIGNATURE, &nxpdev->tx_state);
  1138. return wait_event_interruptible_timeout(nxpdev->check_boot_sign_wait_q,
  1139. !test_bit(BTNXPUART_CHECK_BOOT_SIGNATURE,
  1140. &nxpdev->tx_state),
  1141. msecs_to_jiffies(1000));
  1142. }
  1143. static int nxp_set_ind_reset(struct hci_dev *hdev, void *data)
  1144. {
  1145. static const u8 ir_hw_err[] = { HCI_EV_HARDWARE_ERROR,
  1146. 0x01, BTNXPUART_IR_HW_ERR };
  1147. struct sk_buff *skb;
  1148. skb = bt_skb_alloc(3, GFP_ATOMIC);
  1149. if (!skb)
  1150. return -ENOMEM;
  1151. hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
  1152. skb_put_data(skb, ir_hw_err, 3);
  1153. /* Inject Hardware Error to upper stack */
  1154. return hci_recv_frame(hdev, skb);
  1155. }
  1156. /* Firmware dump */
  1157. static void nxp_coredump(struct hci_dev *hdev)
  1158. {
  1159. struct sk_buff *skb;
  1160. u8 pcmd = 2;
  1161. skb = nxp_drv_send_cmd(hdev, HCI_NXP_TRIGGER_DUMP, 1, &pcmd, true);
  1162. if (IS_ERR(skb))
  1163. bt_dev_err(hdev, "Failed to trigger FW Dump. (%ld)", PTR_ERR(skb));
  1164. else
  1165. kfree_skb(skb);
  1166. }
  1167. static void nxp_coredump_hdr(struct hci_dev *hdev, struct sk_buff *skb)
  1168. {
  1169. /* Nothing to be added in FW dump header */
  1170. }
  1171. static int nxp_process_fw_dump(struct hci_dev *hdev, struct sk_buff *skb)
  1172. {
  1173. struct hci_acl_hdr *acl_hdr = (struct hci_acl_hdr *)skb_pull_data(skb,
  1174. sizeof(*acl_hdr));
  1175. struct nxp_fw_dump_hdr *fw_dump_hdr = (struct nxp_fw_dump_hdr *)skb->data;
  1176. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1177. __u16 seq_num = __le16_to_cpu(fw_dump_hdr->seq_num);
  1178. __u16 buf_len = __le16_to_cpu(fw_dump_hdr->buf_len);
  1179. int err;
  1180. if (seq_num == 0x0001) {
  1181. if (test_and_set_bit(BTNXPUART_FW_DUMP_IN_PROGRESS, &nxpdev->tx_state)) {
  1182. bt_dev_err(hdev, "FW dump already in progress");
  1183. goto free_skb;
  1184. }
  1185. bt_dev_warn(hdev, "==== Start FW dump ===");
  1186. err = hci_devcd_init(hdev, NXP_FW_DUMP_SIZE);
  1187. if (err < 0)
  1188. goto free_skb;
  1189. schedule_delayed_work(&hdev->dump.dump_timeout,
  1190. msecs_to_jiffies(20000));
  1191. }
  1192. err = hci_devcd_append(hdev, skb_clone(skb, GFP_ATOMIC));
  1193. if (err < 0)
  1194. goto free_skb;
  1195. if (buf_len == 0) {
  1196. bt_dev_warn(hdev, "==== FW dump complete ===");
  1197. hci_devcd_complete(hdev);
  1198. nxp_set_ind_reset(hdev, NULL);
  1199. }
  1200. free_skb:
  1201. kfree_skb(skb);
  1202. return 0;
  1203. }
  1204. static int nxp_recv_acl_pkt(struct hci_dev *hdev, struct sk_buff *skb)
  1205. {
  1206. __u16 handle = __le16_to_cpu(hci_acl_hdr(skb)->handle);
  1207. /* FW dump chunks are ACL packets with conn handle 0xfff */
  1208. if ((handle & 0x0FFF) == 0xFFF)
  1209. return nxp_process_fw_dump(hdev, skb);
  1210. else
  1211. return hci_recv_frame(hdev, skb);
  1212. }
  1213. static int nxp_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
  1214. {
  1215. union nxp_set_bd_addr_payload pcmd;
  1216. int err;
  1217. pcmd.data.param_id = 0xfe;
  1218. pcmd.data.param_len = 6;
  1219. memcpy(pcmd.data.param, bdaddr, 6);
  1220. /* BD address can be assigned only after first reset command. */
  1221. err = __hci_cmd_sync_status(hdev, HCI_OP_RESET, 0, NULL,
  1222. HCI_INIT_TIMEOUT);
  1223. if (err) {
  1224. bt_dev_err(hdev,
  1225. "Reset before setting local-bd-addr failed (%d)",
  1226. err);
  1227. return err;
  1228. }
  1229. err = __hci_cmd_sync_status(hdev, HCI_NXP_SET_BD_ADDR, sizeof(pcmd),
  1230. pcmd.buf, HCI_CMD_TIMEOUT);
  1231. if (err) {
  1232. bt_dev_err(hdev, "Changing device address failed (%d)", err);
  1233. return err;
  1234. }
  1235. return 0;
  1236. }
  1237. /* NXP protocol */
  1238. static int nxp_setup(struct hci_dev *hdev)
  1239. {
  1240. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1241. struct serdev_device *serdev = nxpdev->serdev;
  1242. char device_string[30];
  1243. char event_string[50];
  1244. char *envp[] = {device_string, event_string, NULL};
  1245. int err = 0;
  1246. if (nxp_check_boot_sign(nxpdev)) {
  1247. bt_dev_dbg(hdev, "Need FW Download.");
  1248. err = nxp_download_firmware(hdev);
  1249. if (err < 0)
  1250. return err;
  1251. } else {
  1252. bt_dev_info(hdev, "FW already running.");
  1253. clear_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state);
  1254. }
  1255. snprintf(device_string, 30, "BTNXPUART_DEV=%s", dev_name(&serdev->dev));
  1256. snprintf(event_string, 50, "BTNXPUART_STATE=FW_READY");
  1257. bt_dev_dbg(hdev, "==== Send uevent: %s:%s ===", device_string,
  1258. event_string);
  1259. kobject_uevent_env(&serdev->dev.kobj, KOBJ_CHANGE, envp);
  1260. serdev_device_set_baudrate(nxpdev->serdev, nxpdev->fw_init_baudrate);
  1261. nxpdev->current_baudrate = nxpdev->fw_init_baudrate;
  1262. ps_init(hdev);
  1263. if (test_and_clear_bit(BTNXPUART_IR_IN_PROGRESS, &nxpdev->tx_state))
  1264. hci_dev_clear_flag(hdev, HCI_SETUP);
  1265. return 0;
  1266. }
  1267. static int nxp_post_init(struct hci_dev *hdev)
  1268. {
  1269. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1270. struct ps_data *psdata = &nxpdev->psdata;
  1271. if (nxpdev->current_baudrate != nxpdev->secondary_baudrate) {
  1272. nxpdev->new_baudrate = nxpdev->secondary_baudrate;
  1273. nxp_set_baudrate_cmd(hdev, NULL);
  1274. }
  1275. if (psdata->cur_h2c_wakeupmode != psdata->h2c_wakeupmode)
  1276. send_wakeup_method_cmd(hdev, NULL);
  1277. if (psdata->cur_psmode != psdata->target_ps_mode)
  1278. send_ps_cmd(hdev, NULL);
  1279. return 0;
  1280. }
  1281. static void nxp_hw_err(struct hci_dev *hdev, u8 code)
  1282. {
  1283. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1284. switch (code) {
  1285. case BTNXPUART_IR_HW_ERR:
  1286. set_bit(BTNXPUART_IR_IN_PROGRESS, &nxpdev->tx_state);
  1287. hci_dev_set_flag(hdev, HCI_SETUP);
  1288. break;
  1289. default:
  1290. break;
  1291. }
  1292. }
  1293. static int nxp_shutdown(struct hci_dev *hdev)
  1294. {
  1295. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1296. struct sk_buff *skb;
  1297. u8 pcmd = 0;
  1298. if (ind_reset_in_progress(nxpdev)) {
  1299. if (test_and_clear_bit(BTNXPUART_FW_DUMP_IN_PROGRESS,
  1300. &nxpdev->tx_state))
  1301. skb = nxp_drv_send_cmd(hdev, HCI_NXP_IND_RESET, 1,
  1302. &pcmd, false);
  1303. else
  1304. skb = nxp_drv_send_cmd(hdev, HCI_NXP_IND_RESET, 1,
  1305. &pcmd, true);
  1306. serdev_device_set_flow_control(nxpdev->serdev, false);
  1307. set_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state);
  1308. /* HCI_NXP_IND_RESET command may not returns any response */
  1309. if (!IS_ERR(skb))
  1310. kfree_skb(skb);
  1311. }
  1312. return 0;
  1313. }
  1314. static bool nxp_wakeup(struct hci_dev *hdev)
  1315. {
  1316. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1317. struct ps_data *psdata = &nxpdev->psdata;
  1318. if (psdata->c2h_wakeupmode != BT_HOST_WAKEUP_METHOD_NONE)
  1319. return true;
  1320. return false;
  1321. }
  1322. static void nxp_reset(struct hci_dev *hdev)
  1323. {
  1324. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1325. if (!ind_reset_in_progress(nxpdev) && !fw_dump_in_progress(nxpdev)) {
  1326. bt_dev_dbg(hdev, "CMD Timeout detected. Resetting.");
  1327. nxp_set_ind_reset(hdev, NULL);
  1328. }
  1329. }
  1330. static int btnxpuart_queue_skb(struct hci_dev *hdev, struct sk_buff *skb)
  1331. {
  1332. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1333. /* Prepend skb with frame type */
  1334. memcpy(skb_push(skb, 1), &hci_skb_pkt_type(skb), 1);
  1335. skb_queue_tail(&nxpdev->txq, skb);
  1336. btnxpuart_tx_wakeup(nxpdev);
  1337. return 0;
  1338. }
  1339. static int nxp_enqueue(struct hci_dev *hdev, struct sk_buff *skb)
  1340. {
  1341. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1342. struct ps_data *psdata = &nxpdev->psdata;
  1343. struct hci_command_hdr *hdr;
  1344. struct psmode_cmd_payload ps_parm;
  1345. struct wakeup_cmd_payload wakeup_parm;
  1346. __le32 baudrate_parm;
  1347. if (fw_dump_in_progress(nxpdev))
  1348. return -EBUSY;
  1349. /* if vendor commands are received from user space (e.g. hcitool), update
  1350. * driver flags accordingly and ask driver to re-send the command to FW.
  1351. * In case the payload for any command does not match expected payload
  1352. * length, let the firmware and user space program handle it, or throw
  1353. * an error.
  1354. */
  1355. if (bt_cb(skb)->pkt_type == HCI_COMMAND_PKT && !psdata->driver_sent_cmd) {
  1356. hdr = (struct hci_command_hdr *)skb->data;
  1357. if (hdr->plen != (skb->len - HCI_COMMAND_HDR_SIZE))
  1358. return btnxpuart_queue_skb(hdev, skb);
  1359. switch (__le16_to_cpu(hdr->opcode)) {
  1360. case HCI_NXP_AUTO_SLEEP_MODE:
  1361. if (hdr->plen == sizeof(ps_parm)) {
  1362. memcpy(&ps_parm, skb->data + HCI_COMMAND_HDR_SIZE, hdr->plen);
  1363. if (ps_parm.ps_cmd == BT_PS_ENABLE)
  1364. psdata->target_ps_mode = PS_MODE_ENABLE;
  1365. else if (ps_parm.ps_cmd == BT_PS_DISABLE)
  1366. psdata->target_ps_mode = PS_MODE_DISABLE;
  1367. psdata->c2h_ps_interval = __le16_to_cpu(ps_parm.c2h_ps_interval);
  1368. hci_cmd_sync_queue(hdev, send_ps_cmd, NULL, NULL);
  1369. goto free_skb;
  1370. }
  1371. break;
  1372. case HCI_NXP_WAKEUP_METHOD:
  1373. if (hdr->plen == sizeof(wakeup_parm)) {
  1374. memcpy(&wakeup_parm, skb->data + HCI_COMMAND_HDR_SIZE, hdr->plen);
  1375. psdata->c2h_wakeupmode = wakeup_parm.c2h_wakeupmode;
  1376. psdata->c2h_wakeup_gpio = wakeup_parm.c2h_wakeup_gpio;
  1377. psdata->h2c_wakeup_gpio = wakeup_parm.h2c_wakeup_gpio;
  1378. switch (wakeup_parm.h2c_wakeupmode) {
  1379. case BT_CTRL_WAKEUP_METHOD_GPIO:
  1380. psdata->h2c_wakeupmode = WAKEUP_METHOD_GPIO;
  1381. break;
  1382. case BT_CTRL_WAKEUP_METHOD_DSR:
  1383. psdata->h2c_wakeupmode = WAKEUP_METHOD_DTR;
  1384. break;
  1385. case BT_CTRL_WAKEUP_METHOD_BREAK:
  1386. default:
  1387. psdata->h2c_wakeupmode = WAKEUP_METHOD_BREAK;
  1388. break;
  1389. }
  1390. hci_cmd_sync_queue(hdev, send_wakeup_method_cmd, NULL, NULL);
  1391. goto free_skb;
  1392. }
  1393. break;
  1394. case HCI_NXP_SET_OPER_SPEED:
  1395. if (hdr->plen == sizeof(baudrate_parm)) {
  1396. memcpy(&baudrate_parm, skb->data + HCI_COMMAND_HDR_SIZE, hdr->plen);
  1397. nxpdev->new_baudrate = __le32_to_cpu(baudrate_parm);
  1398. hci_cmd_sync_queue(hdev, nxp_set_baudrate_cmd, NULL, NULL);
  1399. goto free_skb;
  1400. }
  1401. break;
  1402. case HCI_NXP_IND_RESET:
  1403. if (hdr->plen == 1) {
  1404. hci_cmd_sync_queue(hdev, nxp_set_ind_reset, NULL, NULL);
  1405. goto free_skb;
  1406. }
  1407. break;
  1408. default:
  1409. break;
  1410. }
  1411. }
  1412. return btnxpuart_queue_skb(hdev, skb);
  1413. free_skb:
  1414. kfree_skb(skb);
  1415. return 0;
  1416. }
  1417. static struct sk_buff *nxp_dequeue(void *data)
  1418. {
  1419. struct btnxpuart_dev *nxpdev = (struct btnxpuart_dev *)data;
  1420. ps_start_timer(nxpdev);
  1421. return skb_dequeue(&nxpdev->txq);
  1422. }
  1423. /* btnxpuart based on serdev */
  1424. static void btnxpuart_tx_work(struct work_struct *work)
  1425. {
  1426. struct btnxpuart_dev *nxpdev = container_of(work, struct btnxpuart_dev,
  1427. tx_work);
  1428. struct serdev_device *serdev = nxpdev->serdev;
  1429. struct hci_dev *hdev = nxpdev->hdev;
  1430. struct sk_buff *skb;
  1431. int len;
  1432. if (ps_wakeup(nxpdev))
  1433. return;
  1434. while ((skb = nxp_dequeue(nxpdev))) {
  1435. len = serdev_device_write_buf(serdev, skb->data, skb->len);
  1436. hdev->stat.byte_tx += len;
  1437. skb_pull(skb, len);
  1438. if (skb->len > 0) {
  1439. skb_queue_head(&nxpdev->txq, skb);
  1440. continue;
  1441. }
  1442. switch (hci_skb_pkt_type(skb)) {
  1443. case HCI_COMMAND_PKT:
  1444. hdev->stat.cmd_tx++;
  1445. break;
  1446. case HCI_ACLDATA_PKT:
  1447. hdev->stat.acl_tx++;
  1448. break;
  1449. case HCI_SCODATA_PKT:
  1450. hdev->stat.sco_tx++;
  1451. break;
  1452. }
  1453. kfree_skb(skb);
  1454. }
  1455. clear_bit(BTNXPUART_TX_STATE_ACTIVE, &nxpdev->tx_state);
  1456. }
  1457. static int btnxpuart_open(struct hci_dev *hdev)
  1458. {
  1459. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1460. int err = 0;
  1461. err = serdev_device_open(nxpdev->serdev);
  1462. if (err) {
  1463. bt_dev_err(hdev, "Unable to open UART device %s",
  1464. dev_name(&nxpdev->serdev->dev));
  1465. } else {
  1466. set_bit(BTNXPUART_SERDEV_OPEN, &nxpdev->tx_state);
  1467. }
  1468. return err;
  1469. }
  1470. static int btnxpuart_close(struct hci_dev *hdev)
  1471. {
  1472. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1473. serdev_device_close(nxpdev->serdev);
  1474. skb_queue_purge(&nxpdev->txq);
  1475. if (!IS_ERR_OR_NULL(nxpdev->rx_skb)) {
  1476. kfree_skb(nxpdev->rx_skb);
  1477. nxpdev->rx_skb = NULL;
  1478. }
  1479. clear_bit(BTNXPUART_SERDEV_OPEN, &nxpdev->tx_state);
  1480. return 0;
  1481. }
  1482. static int btnxpuart_flush(struct hci_dev *hdev)
  1483. {
  1484. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1485. /* Flush any pending characters */
  1486. serdev_device_write_flush(nxpdev->serdev);
  1487. skb_queue_purge(&nxpdev->txq);
  1488. cancel_work_sync(&nxpdev->tx_work);
  1489. if (!IS_ERR_OR_NULL(nxpdev->rx_skb)) {
  1490. kfree_skb(nxpdev->rx_skb);
  1491. nxpdev->rx_skb = NULL;
  1492. }
  1493. return 0;
  1494. }
  1495. static const struct h4_recv_pkt nxp_recv_pkts[] = {
  1496. { H4_RECV_ACL, .recv = nxp_recv_acl_pkt },
  1497. { H4_RECV_SCO, .recv = hci_recv_frame },
  1498. { H4_RECV_EVENT, .recv = hci_recv_frame },
  1499. { H4_RECV_ISO, .recv = hci_recv_frame },
  1500. { NXP_RECV_CHIP_VER_V1, .recv = nxp_recv_chip_ver_v1 },
  1501. { NXP_RECV_FW_REQ_V1, .recv = nxp_recv_fw_req_v1 },
  1502. { NXP_RECV_CHIP_VER_V3, .recv = nxp_recv_chip_ver_v3 },
  1503. { NXP_RECV_FW_REQ_V3, .recv = nxp_recv_fw_req_v3 },
  1504. };
  1505. static size_t btnxpuart_receive_buf(struct serdev_device *serdev,
  1506. const u8 *data, size_t count)
  1507. {
  1508. struct btnxpuart_dev *nxpdev = serdev_device_get_drvdata(serdev);
  1509. ps_start_timer(nxpdev);
  1510. nxpdev->rx_skb = h4_recv_buf(&nxpdev->hu, nxpdev->rx_skb, data, count,
  1511. nxp_recv_pkts, ARRAY_SIZE(nxp_recv_pkts));
  1512. if (IS_ERR(nxpdev->rx_skb)) {
  1513. int err = PTR_ERR(nxpdev->rx_skb);
  1514. /* Safe to ignore out-of-sync bootloader signatures */
  1515. if (!is_fw_downloading(nxpdev) &&
  1516. !ind_reset_in_progress(nxpdev))
  1517. bt_dev_err(nxpdev->hdev, "Frame reassembly failed (%d)", err);
  1518. return count;
  1519. }
  1520. if (!is_fw_downloading(nxpdev) &&
  1521. !ind_reset_in_progress(nxpdev))
  1522. nxpdev->hdev->stat.byte_rx += count;
  1523. return count;
  1524. }
  1525. static void btnxpuart_write_wakeup(struct serdev_device *serdev)
  1526. {
  1527. serdev_device_write_wakeup(serdev);
  1528. }
  1529. static const struct serdev_device_ops btnxpuart_client_ops = {
  1530. .receive_buf = btnxpuart_receive_buf,
  1531. .write_wakeup = btnxpuart_write_wakeup,
  1532. };
  1533. static void nxp_coredump_notify(struct hci_dev *hdev, int state)
  1534. {
  1535. struct btnxpuart_dev *nxpdev = hci_get_drvdata(hdev);
  1536. struct serdev_device *serdev = nxpdev->serdev;
  1537. char device_string[30];
  1538. char event_string[50];
  1539. char *envp[] = {device_string, event_string, NULL};
  1540. snprintf(device_string, 30, "BTNXPUART_DEV=%s", dev_name(&serdev->dev));
  1541. switch (state) {
  1542. case HCI_DEVCOREDUMP_ACTIVE:
  1543. snprintf(event_string, 50, "BTNXPUART_STATE=FW_DUMP_ACTIVE");
  1544. break;
  1545. case HCI_DEVCOREDUMP_DONE:
  1546. snprintf(event_string, 50, "BTNXPUART_STATE=FW_DUMP_DONE");
  1547. break;
  1548. case HCI_DEVCOREDUMP_TIMEOUT:
  1549. snprintf(event_string, 50, "BTNXPUART_STATE=FW_DUMP_TIMEOUT");
  1550. break;
  1551. default:
  1552. snprintf(event_string, 50, "BTNXPUART_STATE=FW_DUMP_STATE_%d",
  1553. state);
  1554. break;
  1555. }
  1556. bt_dev_dbg(hdev, "==== Send uevent: %s:%s ===", device_string,
  1557. event_string);
  1558. kobject_uevent_env(&serdev->dev.kobj, KOBJ_CHANGE, envp);
  1559. }
  1560. static int nxp_serdev_probe(struct serdev_device *serdev)
  1561. {
  1562. struct hci_dev *hdev;
  1563. struct btnxpuart_dev *nxpdev;
  1564. bdaddr_t ba = {0};
  1565. int err;
  1566. nxpdev = devm_kzalloc(&serdev->dev, sizeof(*nxpdev), GFP_KERNEL);
  1567. if (!nxpdev)
  1568. return -ENOMEM;
  1569. nxpdev->nxp_data = (struct btnxpuart_data *)device_get_match_data(&serdev->dev);
  1570. nxpdev->serdev = serdev;
  1571. serdev_device_set_drvdata(serdev, nxpdev);
  1572. serdev_device_set_client_ops(serdev, &btnxpuart_client_ops);
  1573. INIT_WORK(&nxpdev->tx_work, btnxpuart_tx_work);
  1574. skb_queue_head_init(&nxpdev->txq);
  1575. init_waitqueue_head(&nxpdev->fw_dnld_done_wait_q);
  1576. init_waitqueue_head(&nxpdev->check_boot_sign_wait_q);
  1577. device_property_read_u32(&nxpdev->serdev->dev, "fw-init-baudrate",
  1578. &nxpdev->fw_init_baudrate);
  1579. if (!nxpdev->fw_init_baudrate)
  1580. nxpdev->fw_init_baudrate = FW_INIT_BAUDRATE;
  1581. device_property_read_u32(&nxpdev->serdev->dev, "max-speed",
  1582. &nxpdev->secondary_baudrate);
  1583. if (!nxpdev->secondary_baudrate ||
  1584. (nxpdev->secondary_baudrate != HCI_NXP_SEC_BAUDRATE_3M &&
  1585. nxpdev->secondary_baudrate != HCI_NXP_SEC_BAUDRATE_4M)) {
  1586. if (nxpdev->secondary_baudrate)
  1587. dev_err(&serdev->dev,
  1588. "Invalid max-speed. Using default 3000000.");
  1589. nxpdev->secondary_baudrate = HCI_NXP_SEC_BAUDRATE_3M;
  1590. }
  1591. set_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state);
  1592. crc8_populate_msb(crc8_table, POLYNOMIAL8);
  1593. nxpdev->pdn = devm_reset_control_get_optional_shared(&serdev->dev, NULL);
  1594. if (IS_ERR(nxpdev->pdn))
  1595. return PTR_ERR(nxpdev->pdn);
  1596. err = devm_regulator_get_enable(&serdev->dev, "vcc");
  1597. if (err) {
  1598. dev_err(&serdev->dev, "Failed to enable vcc regulator\n");
  1599. return err;
  1600. }
  1601. /* Initialize and register HCI device */
  1602. hdev = hci_alloc_dev();
  1603. if (!hdev) {
  1604. dev_err(&serdev->dev, "Can't allocate HCI device\n");
  1605. return -ENOMEM;
  1606. }
  1607. reset_control_deassert(nxpdev->pdn);
  1608. nxpdev->hdev = hdev;
  1609. nxpdev->hu.hdev = hdev;
  1610. hdev->bus = HCI_UART;
  1611. hci_set_drvdata(hdev, nxpdev);
  1612. hdev->manufacturer = MANUFACTURER_NXP;
  1613. hdev->open = btnxpuart_open;
  1614. hdev->close = btnxpuart_close;
  1615. hdev->flush = btnxpuart_flush;
  1616. hdev->setup = nxp_setup;
  1617. hdev->post_init = nxp_post_init;
  1618. hdev->send = nxp_enqueue;
  1619. hdev->hw_error = nxp_hw_err;
  1620. hdev->shutdown = nxp_shutdown;
  1621. hdev->wakeup = nxp_wakeup;
  1622. hdev->reset = nxp_reset;
  1623. hdev->set_bdaddr = nxp_set_bdaddr;
  1624. SET_HCIDEV_DEV(hdev, &serdev->dev);
  1625. device_property_read_u8_array(&nxpdev->serdev->dev,
  1626. "local-bd-address",
  1627. (u8 *)&ba, sizeof(ba));
  1628. if (bacmp(&ba, BDADDR_ANY))
  1629. hci_set_quirk(hdev, HCI_QUIRK_USE_BDADDR_PROPERTY);
  1630. if (hci_register_dev(hdev) < 0) {
  1631. dev_err(&serdev->dev, "Can't register HCI device\n");
  1632. goto probe_fail;
  1633. }
  1634. if (ps_setup(hdev))
  1635. goto probe_fail;
  1636. hci_devcd_register(hdev, nxp_coredump, nxp_coredump_hdr,
  1637. nxp_coredump_notify);
  1638. return 0;
  1639. probe_fail:
  1640. reset_control_assert(nxpdev->pdn);
  1641. hci_free_dev(hdev);
  1642. return -ENODEV;
  1643. }
  1644. static void nxp_serdev_remove(struct serdev_device *serdev)
  1645. {
  1646. struct btnxpuart_dev *nxpdev = serdev_device_get_drvdata(serdev);
  1647. struct hci_dev *hdev = nxpdev->hdev;
  1648. if (is_fw_downloading(nxpdev)) {
  1649. set_bit(BTNXPUART_FW_DOWNLOAD_ABORT, &nxpdev->tx_state);
  1650. clear_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state);
  1651. wake_up_interruptible(&nxpdev->check_boot_sign_wait_q);
  1652. wake_up_interruptible(&nxpdev->fw_dnld_done_wait_q);
  1653. } else {
  1654. /* Restore FW baudrate to fw_init_baudrate if changed.
  1655. * This will ensure FW baudrate is in sync with
  1656. * driver baudrate in case this driver is re-inserted.
  1657. */
  1658. if (nxpdev->current_baudrate != nxpdev->fw_init_baudrate) {
  1659. nxpdev->new_baudrate = nxpdev->fw_init_baudrate;
  1660. nxp_set_baudrate_cmd(hdev, NULL);
  1661. }
  1662. }
  1663. ps_cleanup(nxpdev);
  1664. hci_unregister_dev(hdev);
  1665. reset_control_assert(nxpdev->pdn);
  1666. hci_free_dev(hdev);
  1667. }
  1668. static int __maybe_unused nxp_serdev_suspend(struct device *dev)
  1669. {
  1670. struct btnxpuart_dev *nxpdev = dev_get_drvdata(dev);
  1671. struct ps_data *psdata = &nxpdev->psdata;
  1672. ps_control(psdata->hdev, PS_STATE_SLEEP);
  1673. if (psdata->wakeup_source) {
  1674. enable_irq_wake(psdata->irq_handler);
  1675. enable_irq(psdata->irq_handler);
  1676. }
  1677. return 0;
  1678. }
  1679. static int __maybe_unused nxp_serdev_resume(struct device *dev)
  1680. {
  1681. struct btnxpuart_dev *nxpdev = dev_get_drvdata(dev);
  1682. struct ps_data *psdata = &nxpdev->psdata;
  1683. if (psdata->wakeup_source) {
  1684. disable_irq(psdata->irq_handler);
  1685. disable_irq_wake(psdata->irq_handler);
  1686. }
  1687. ps_control(psdata->hdev, PS_STATE_AWAKE);
  1688. return 0;
  1689. }
  1690. #ifdef CONFIG_DEV_COREDUMP
  1691. static void nxp_serdev_coredump(struct device *dev)
  1692. {
  1693. struct btnxpuart_dev *nxpdev = dev_get_drvdata(dev);
  1694. struct hci_dev *hdev = nxpdev->hdev;
  1695. if (hdev->dump.coredump)
  1696. hdev->dump.coredump(hdev);
  1697. }
  1698. #endif
  1699. static struct btnxpuart_data w8987_data __maybe_unused = {
  1700. .helper_fw_name = NULL,
  1701. .fw_name = FIRMWARE_W8987,
  1702. .fw_name_old = FIRMWARE_W8987_OLD,
  1703. };
  1704. static struct btnxpuart_data w8997_data __maybe_unused = {
  1705. .helper_fw_name = FIRMWARE_HELPER,
  1706. .fw_name = FIRMWARE_W8997,
  1707. .fw_name_old = FIRMWARE_W8997_OLD,
  1708. };
  1709. static const struct of_device_id nxpuart_of_match_table[] __maybe_unused = {
  1710. { .compatible = "nxp,88w8987-bt", .data = &w8987_data },
  1711. { .compatible = "nxp,88w8997-bt", .data = &w8997_data },
  1712. { }
  1713. };
  1714. MODULE_DEVICE_TABLE(of, nxpuart_of_match_table);
  1715. static const struct dev_pm_ops nxp_pm_ops = {
  1716. SET_SYSTEM_SLEEP_PM_OPS(nxp_serdev_suspend, nxp_serdev_resume)
  1717. };
  1718. static struct serdev_device_driver nxp_serdev_driver = {
  1719. .probe = nxp_serdev_probe,
  1720. .remove = nxp_serdev_remove,
  1721. .driver = {
  1722. .name = "btnxpuart",
  1723. .of_match_table = of_match_ptr(nxpuart_of_match_table),
  1724. .pm = &nxp_pm_ops,
  1725. #ifdef CONFIG_DEV_COREDUMP
  1726. .coredump = nxp_serdev_coredump,
  1727. #endif
  1728. },
  1729. };
  1730. module_serdev_device_driver(nxp_serdev_driver);
  1731. MODULE_AUTHOR("Neeraj Sanjay Kale <neeraj.sanjaykale@nxp.com>");
  1732. MODULE_DESCRIPTION("NXP Bluetooth Serial driver");
  1733. MODULE_LICENSE("GPL");