cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hci_intel.c (30219B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *
      4 *  Bluetooth HCI UART driver for Intel devices
      5 *
      6 *  Copyright (C) 2015  Intel Corporation
      7 */
      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/wait.h>
     15#include <linux/tty.h>
     16#include <linux/platform_device.h>
     17#include <linux/gpio/consumer.h>
     18#include <linux/acpi.h>
     19#include <linux/interrupt.h>
     20#include <linux/pm_runtime.h>
     21
     22#include <net/bluetooth/bluetooth.h>
     23#include <net/bluetooth/hci_core.h>
     24
     25#include "hci_uart.h"
     26#include "btintel.h"
     27
     28#define STATE_BOOTLOADER	0
     29#define STATE_DOWNLOADING	1
     30#define STATE_FIRMWARE_LOADED	2
     31#define STATE_FIRMWARE_FAILED	3
     32#define STATE_BOOTING		4
     33#define STATE_LPM_ENABLED	5
     34#define STATE_TX_ACTIVE		6
     35#define STATE_SUSPENDED		7
     36#define STATE_LPM_TRANSACTION	8
     37
     38#define HCI_LPM_WAKE_PKT 0xf0
     39#define HCI_LPM_PKT 0xf1
     40#define HCI_LPM_MAX_SIZE 10
     41#define HCI_LPM_HDR_SIZE HCI_EVENT_HDR_SIZE
     42
     43#define LPM_OP_TX_NOTIFY 0x00
     44#define LPM_OP_SUSPEND_ACK 0x02
     45#define LPM_OP_RESUME_ACK 0x03
     46
     47#define LPM_SUSPEND_DELAY_MS 1000
     48
     49struct hci_lpm_pkt {
     50	__u8 opcode;
     51	__u8 dlen;
     52	__u8 data[];
     53} __packed;
     54
     55struct intel_device {
     56	struct list_head list;
     57	struct platform_device *pdev;
     58	struct gpio_desc *reset;
     59	struct hci_uart *hu;
     60	struct mutex hu_lock;
     61	int irq;
     62};
     63
     64static LIST_HEAD(intel_device_list);
     65static DEFINE_MUTEX(intel_device_list_lock);
     66
     67struct intel_data {
     68	struct sk_buff *rx_skb;
     69	struct sk_buff_head txq;
     70	struct work_struct busy_work;
     71	struct hci_uart *hu;
     72	unsigned long flags;
     73};
     74
     75static u8 intel_convert_speed(unsigned int speed)
     76{
     77	switch (speed) {
     78	case 9600:
     79		return 0x00;
     80	case 19200:
     81		return 0x01;
     82	case 38400:
     83		return 0x02;
     84	case 57600:
     85		return 0x03;
     86	case 115200:
     87		return 0x04;
     88	case 230400:
     89		return 0x05;
     90	case 460800:
     91		return 0x06;
     92	case 921600:
     93		return 0x07;
     94	case 1843200:
     95		return 0x08;
     96	case 3250000:
     97		return 0x09;
     98	case 2000000:
     99		return 0x0a;
    100	case 3000000:
    101		return 0x0b;
    102	default:
    103		return 0xff;
    104	}
    105}
    106
    107static int intel_wait_booting(struct hci_uart *hu)
    108{
    109	struct intel_data *intel = hu->priv;
    110	int err;
    111
    112	err = wait_on_bit_timeout(&intel->flags, STATE_BOOTING,
    113				  TASK_INTERRUPTIBLE,
    114				  msecs_to_jiffies(1000));
    115
    116	if (err == -EINTR) {
    117		bt_dev_err(hu->hdev, "Device boot interrupted");
    118		return -EINTR;
    119	}
    120
    121	if (err) {
    122		bt_dev_err(hu->hdev, "Device boot timeout");
    123		return -ETIMEDOUT;
    124	}
    125
    126	return err;
    127}
    128
    129#ifdef CONFIG_PM
    130static int intel_wait_lpm_transaction(struct hci_uart *hu)
    131{
    132	struct intel_data *intel = hu->priv;
    133	int err;
    134
    135	err = wait_on_bit_timeout(&intel->flags, STATE_LPM_TRANSACTION,
    136				  TASK_INTERRUPTIBLE,
    137				  msecs_to_jiffies(1000));
    138
    139	if (err == -EINTR) {
    140		bt_dev_err(hu->hdev, "LPM transaction interrupted");
    141		return -EINTR;
    142	}
    143
    144	if (err) {
    145		bt_dev_err(hu->hdev, "LPM transaction timeout");
    146		return -ETIMEDOUT;
    147	}
    148
    149	return err;
    150}
    151
    152static int intel_lpm_suspend(struct hci_uart *hu)
    153{
    154	static const u8 suspend[] = { 0x01, 0x01, 0x01 };
    155	struct intel_data *intel = hu->priv;
    156	struct sk_buff *skb;
    157
    158	if (!test_bit(STATE_LPM_ENABLED, &intel->flags) ||
    159	    test_bit(STATE_SUSPENDED, &intel->flags))
    160		return 0;
    161
    162	if (test_bit(STATE_TX_ACTIVE, &intel->flags))
    163		return -EAGAIN;
    164
    165	bt_dev_dbg(hu->hdev, "Suspending");
    166
    167	skb = bt_skb_alloc(sizeof(suspend), GFP_KERNEL);
    168	if (!skb) {
    169		bt_dev_err(hu->hdev, "Failed to alloc memory for LPM packet");
    170		return -ENOMEM;
    171	}
    172
    173	skb_put_data(skb, suspend, sizeof(suspend));
    174	hci_skb_pkt_type(skb) = HCI_LPM_PKT;
    175
    176	set_bit(STATE_LPM_TRANSACTION, &intel->flags);
    177
    178	/* LPM flow is a priority, enqueue packet at list head */
    179	skb_queue_head(&intel->txq, skb);
    180	hci_uart_tx_wakeup(hu);
    181
    182	intel_wait_lpm_transaction(hu);
    183	/* Even in case of failure, continue and test the suspended flag */
    184
    185	clear_bit(STATE_LPM_TRANSACTION, &intel->flags);
    186
    187	if (!test_bit(STATE_SUSPENDED, &intel->flags)) {
    188		bt_dev_err(hu->hdev, "Device suspend error");
    189		return -EINVAL;
    190	}
    191
    192	bt_dev_dbg(hu->hdev, "Suspended");
    193
    194	hci_uart_set_flow_control(hu, true);
    195
    196	return 0;
    197}
    198
    199static int intel_lpm_resume(struct hci_uart *hu)
    200{
    201	struct intel_data *intel = hu->priv;
    202	struct sk_buff *skb;
    203
    204	if (!test_bit(STATE_LPM_ENABLED, &intel->flags) ||
    205	    !test_bit(STATE_SUSPENDED, &intel->flags))
    206		return 0;
    207
    208	bt_dev_dbg(hu->hdev, "Resuming");
    209
    210	hci_uart_set_flow_control(hu, false);
    211
    212	skb = bt_skb_alloc(0, GFP_KERNEL);
    213	if (!skb) {
    214		bt_dev_err(hu->hdev, "Failed to alloc memory for LPM packet");
    215		return -ENOMEM;
    216	}
    217
    218	hci_skb_pkt_type(skb) = HCI_LPM_WAKE_PKT;
    219
    220	set_bit(STATE_LPM_TRANSACTION, &intel->flags);
    221
    222	/* LPM flow is a priority, enqueue packet at list head */
    223	skb_queue_head(&intel->txq, skb);
    224	hci_uart_tx_wakeup(hu);
    225
    226	intel_wait_lpm_transaction(hu);
    227	/* Even in case of failure, continue and test the suspended flag */
    228
    229	clear_bit(STATE_LPM_TRANSACTION, &intel->flags);
    230
    231	if (test_bit(STATE_SUSPENDED, &intel->flags)) {
    232		bt_dev_err(hu->hdev, "Device resume error");
    233		return -EINVAL;
    234	}
    235
    236	bt_dev_dbg(hu->hdev, "Resumed");
    237
    238	return 0;
    239}
    240#endif /* CONFIG_PM */
    241
    242static int intel_lpm_host_wake(struct hci_uart *hu)
    243{
    244	static const u8 lpm_resume_ack[] = { LPM_OP_RESUME_ACK, 0x00 };
    245	struct intel_data *intel = hu->priv;
    246	struct sk_buff *skb;
    247
    248	hci_uart_set_flow_control(hu, false);
    249
    250	clear_bit(STATE_SUSPENDED, &intel->flags);
    251
    252	skb = bt_skb_alloc(sizeof(lpm_resume_ack), GFP_KERNEL);
    253	if (!skb) {
    254		bt_dev_err(hu->hdev, "Failed to alloc memory for LPM packet");
    255		return -ENOMEM;
    256	}
    257
    258	skb_put_data(skb, lpm_resume_ack, sizeof(lpm_resume_ack));
    259	hci_skb_pkt_type(skb) = HCI_LPM_PKT;
    260
    261	/* LPM flow is a priority, enqueue packet at list head */
    262	skb_queue_head(&intel->txq, skb);
    263	hci_uart_tx_wakeup(hu);
    264
    265	bt_dev_dbg(hu->hdev, "Resumed by controller");
    266
    267	return 0;
    268}
    269
    270static irqreturn_t intel_irq(int irq, void *dev_id)
    271{
    272	struct intel_device *idev = dev_id;
    273
    274	dev_info(&idev->pdev->dev, "hci_intel irq\n");
    275
    276	mutex_lock(&idev->hu_lock);
    277	if (idev->hu)
    278		intel_lpm_host_wake(idev->hu);
    279	mutex_unlock(&idev->hu_lock);
    280
    281	/* Host/Controller are now LPM resumed, trigger a new delayed suspend */
    282	pm_runtime_get(&idev->pdev->dev);
    283	pm_runtime_mark_last_busy(&idev->pdev->dev);
    284	pm_runtime_put_autosuspend(&idev->pdev->dev);
    285
    286	return IRQ_HANDLED;
    287}
    288
    289static int intel_set_power(struct hci_uart *hu, bool powered)
    290{
    291	struct intel_device *idev;
    292	int err = -ENODEV;
    293
    294	if (!hu->tty->dev)
    295		return err;
    296
    297	mutex_lock(&intel_device_list_lock);
    298
    299	list_for_each_entry(idev, &intel_device_list, list) {
    300		/* tty device and pdev device should share the same parent
    301		 * which is the UART port.
    302		 */
    303		if (hu->tty->dev->parent != idev->pdev->dev.parent)
    304			continue;
    305
    306		if (!idev->reset) {
    307			err = -ENOTSUPP;
    308			break;
    309		}
    310
    311		BT_INFO("hu %p, Switching compatible pm device (%s) to %u",
    312			hu, dev_name(&idev->pdev->dev), powered);
    313
    314		gpiod_set_value(idev->reset, powered);
    315
    316		/* Provide to idev a hu reference which is used to run LPM
    317		 * transactions (lpm suspend/resume) from PM callbacks.
    318		 * hu needs to be protected against concurrent removing during
    319		 * these PM ops.
    320		 */
    321		mutex_lock(&idev->hu_lock);
    322		idev->hu = powered ? hu : NULL;
    323		mutex_unlock(&idev->hu_lock);
    324
    325		if (idev->irq < 0)
    326			break;
    327
    328		if (powered && device_can_wakeup(&idev->pdev->dev)) {
    329			err = devm_request_threaded_irq(&idev->pdev->dev,
    330							idev->irq, NULL,
    331							intel_irq,
    332							IRQF_ONESHOT,
    333							"bt-host-wake", idev);
    334			if (err) {
    335				BT_ERR("hu %p, unable to allocate irq-%d",
    336				       hu, idev->irq);
    337				break;
    338			}
    339
    340			device_wakeup_enable(&idev->pdev->dev);
    341
    342			pm_runtime_set_active(&idev->pdev->dev);
    343			pm_runtime_use_autosuspend(&idev->pdev->dev);
    344			pm_runtime_set_autosuspend_delay(&idev->pdev->dev,
    345							 LPM_SUSPEND_DELAY_MS);
    346			pm_runtime_enable(&idev->pdev->dev);
    347		} else if (!powered && device_may_wakeup(&idev->pdev->dev)) {
    348			devm_free_irq(&idev->pdev->dev, idev->irq, idev);
    349			device_wakeup_disable(&idev->pdev->dev);
    350
    351			pm_runtime_disable(&idev->pdev->dev);
    352		}
    353	}
    354
    355	mutex_unlock(&intel_device_list_lock);
    356
    357	return err;
    358}
    359
    360static void intel_busy_work(struct work_struct *work)
    361{
    362	struct intel_data *intel = container_of(work, struct intel_data,
    363						busy_work);
    364	struct intel_device *idev;
    365
    366	if (!intel->hu->tty->dev)
    367		return;
    368
    369	/* Link is busy, delay the suspend */
    370	mutex_lock(&intel_device_list_lock);
    371	list_for_each_entry(idev, &intel_device_list, list) {
    372		if (intel->hu->tty->dev->parent == idev->pdev->dev.parent) {
    373			pm_runtime_get(&idev->pdev->dev);
    374			pm_runtime_mark_last_busy(&idev->pdev->dev);
    375			pm_runtime_put_autosuspend(&idev->pdev->dev);
    376			break;
    377		}
    378	}
    379	mutex_unlock(&intel_device_list_lock);
    380}
    381
    382static int intel_open(struct hci_uart *hu)
    383{
    384	struct intel_data *intel;
    385
    386	BT_DBG("hu %p", hu);
    387
    388	if (!hci_uart_has_flow_control(hu))
    389		return -EOPNOTSUPP;
    390
    391	intel = kzalloc(sizeof(*intel), GFP_KERNEL);
    392	if (!intel)
    393		return -ENOMEM;
    394
    395	skb_queue_head_init(&intel->txq);
    396	INIT_WORK(&intel->busy_work, intel_busy_work);
    397
    398	intel->hu = hu;
    399
    400	hu->priv = intel;
    401
    402	if (!intel_set_power(hu, true))
    403		set_bit(STATE_BOOTING, &intel->flags);
    404
    405	return 0;
    406}
    407
    408static int intel_close(struct hci_uart *hu)
    409{
    410	struct intel_data *intel = hu->priv;
    411
    412	BT_DBG("hu %p", hu);
    413
    414	cancel_work_sync(&intel->busy_work);
    415
    416	intel_set_power(hu, false);
    417
    418	skb_queue_purge(&intel->txq);
    419	kfree_skb(intel->rx_skb);
    420	kfree(intel);
    421
    422	hu->priv = NULL;
    423	return 0;
    424}
    425
    426static int intel_flush(struct hci_uart *hu)
    427{
    428	struct intel_data *intel = hu->priv;
    429
    430	BT_DBG("hu %p", hu);
    431
    432	skb_queue_purge(&intel->txq);
    433
    434	return 0;
    435}
    436
    437static int inject_cmd_complete(struct hci_dev *hdev, __u16 opcode)
    438{
    439	struct sk_buff *skb;
    440	struct hci_event_hdr *hdr;
    441	struct hci_ev_cmd_complete *evt;
    442
    443	skb = bt_skb_alloc(sizeof(*hdr) + sizeof(*evt) + 1, GFP_KERNEL);
    444	if (!skb)
    445		return -ENOMEM;
    446
    447	hdr = skb_put(skb, sizeof(*hdr));
    448	hdr->evt = HCI_EV_CMD_COMPLETE;
    449	hdr->plen = sizeof(*evt) + 1;
    450
    451	evt = skb_put(skb, sizeof(*evt));
    452	evt->ncmd = 0x01;
    453	evt->opcode = cpu_to_le16(opcode);
    454
    455	skb_put_u8(skb, 0x00);
    456
    457	hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
    458
    459	return hci_recv_frame(hdev, skb);
    460}
    461
    462static int intel_set_baudrate(struct hci_uart *hu, unsigned int speed)
    463{
    464	struct intel_data *intel = hu->priv;
    465	struct hci_dev *hdev = hu->hdev;
    466	u8 speed_cmd[] = { 0x06, 0xfc, 0x01, 0x00 };
    467	struct sk_buff *skb;
    468	int err;
    469
    470	/* This can be the first command sent to the chip, check
    471	 * that the controller is ready.
    472	 */
    473	err = intel_wait_booting(hu);
    474
    475	clear_bit(STATE_BOOTING, &intel->flags);
    476
    477	/* In case of timeout, try to continue anyway */
    478	if (err && err != -ETIMEDOUT)
    479		return err;
    480
    481	bt_dev_info(hdev, "Change controller speed to %d", speed);
    482
    483	speed_cmd[3] = intel_convert_speed(speed);
    484	if (speed_cmd[3] == 0xff) {
    485		bt_dev_err(hdev, "Unsupported speed");
    486		return -EINVAL;
    487	}
    488
    489	/* Device will not accept speed change if Intel version has not been
    490	 * previously requested.
    491	 */
    492	skb = __hci_cmd_sync(hdev, 0xfc05, 0, NULL, HCI_CMD_TIMEOUT);
    493	if (IS_ERR(skb)) {
    494		bt_dev_err(hdev, "Reading Intel version information failed (%ld)",
    495			   PTR_ERR(skb));
    496		return PTR_ERR(skb);
    497	}
    498	kfree_skb(skb);
    499
    500	skb = bt_skb_alloc(sizeof(speed_cmd), GFP_KERNEL);
    501	if (!skb) {
    502		bt_dev_err(hdev, "Failed to alloc memory for baudrate packet");
    503		return -ENOMEM;
    504	}
    505
    506	skb_put_data(skb, speed_cmd, sizeof(speed_cmd));
    507	hci_skb_pkt_type(skb) = HCI_COMMAND_PKT;
    508
    509	hci_uart_set_flow_control(hu, true);
    510
    511	skb_queue_tail(&intel->txq, skb);
    512	hci_uart_tx_wakeup(hu);
    513
    514	/* wait 100ms to change baudrate on controller side */
    515	msleep(100);
    516
    517	hci_uart_set_baudrate(hu, speed);
    518	hci_uart_set_flow_control(hu, false);
    519
    520	return 0;
    521}
    522
    523static int intel_setup(struct hci_uart *hu)
    524{
    525	struct intel_data *intel = hu->priv;
    526	struct hci_dev *hdev = hu->hdev;
    527	struct sk_buff *skb;
    528	struct intel_version ver;
    529	struct intel_boot_params params;
    530	struct intel_device *idev;
    531	const struct firmware *fw;
    532	char fwname[64];
    533	u32 boot_param;
    534	ktime_t calltime, delta, rettime;
    535	unsigned long long duration;
    536	unsigned int init_speed, oper_speed;
    537	int speed_change = 0;
    538	int err;
    539
    540	bt_dev_dbg(hdev, "start intel_setup");
    541
    542	hu->hdev->set_diag = btintel_set_diag;
    543	hu->hdev->set_bdaddr = btintel_set_bdaddr;
    544
    545	/* Set the default boot parameter to 0x0 and it is updated to
    546	 * SKU specific boot parameter after reading Intel_Write_Boot_Params
    547	 * command while downloading the firmware.
    548	 */
    549	boot_param = 0x00000000;
    550
    551	calltime = ktime_get();
    552
    553	if (hu->init_speed)
    554		init_speed = hu->init_speed;
    555	else
    556		init_speed = hu->proto->init_speed;
    557
    558	if (hu->oper_speed)
    559		oper_speed = hu->oper_speed;
    560	else
    561		oper_speed = hu->proto->oper_speed;
    562
    563	if (oper_speed && init_speed && oper_speed != init_speed)
    564		speed_change = 1;
    565
    566	/* Check that the controller is ready */
    567	err = intel_wait_booting(hu);
    568
    569	clear_bit(STATE_BOOTING, &intel->flags);
    570
    571	/* In case of timeout, try to continue anyway */
    572	if (err && err != -ETIMEDOUT)
    573		return err;
    574
    575	set_bit(STATE_BOOTLOADER, &intel->flags);
    576
    577	/* Read the Intel version information to determine if the device
    578	 * is in bootloader mode or if it already has operational firmware
    579	 * loaded.
    580	 */
    581	err = btintel_read_version(hdev, &ver);
    582	if (err)
    583		return err;
    584
    585	/* The hardware platform number has a fixed value of 0x37 and
    586	 * for now only accept this single value.
    587	 */
    588	if (ver.hw_platform != 0x37) {
    589		bt_dev_err(hdev, "Unsupported Intel hardware platform (%u)",
    590			   ver.hw_platform);
    591		return -EINVAL;
    592	}
    593
    594        /* Check for supported iBT hardware variants of this firmware
    595         * loading method.
    596         *
    597         * This check has been put in place to ensure correct forward
    598         * compatibility options when newer hardware variants come along.
    599         */
    600	switch (ver.hw_variant) {
    601	case 0x0b:	/* LnP */
    602	case 0x0c:	/* WsP */
    603	case 0x12:	/* ThP */
    604		break;
    605	default:
    606		bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
    607			   ver.hw_variant);
    608		return -EINVAL;
    609	}
    610
    611	btintel_version_info(hdev, &ver);
    612
    613	/* The firmware variant determines if the device is in bootloader
    614	 * mode or is running operational firmware. The value 0x06 identifies
    615	 * the bootloader and the value 0x23 identifies the operational
    616	 * firmware.
    617	 *
    618	 * When the operational firmware is already present, then only
    619	 * the check for valid Bluetooth device address is needed. This
    620	 * determines if the device will be added as configured or
    621	 * unconfigured controller.
    622	 *
    623	 * It is not possible to use the Secure Boot Parameters in this
    624	 * case since that command is only available in bootloader mode.
    625	 */
    626	if (ver.fw_variant == 0x23) {
    627		clear_bit(STATE_BOOTLOADER, &intel->flags);
    628		btintel_check_bdaddr(hdev);
    629		return 0;
    630	}
    631
    632	/* If the device is not in bootloader mode, then the only possible
    633	 * choice is to return an error and abort the device initialization.
    634	 */
    635	if (ver.fw_variant != 0x06) {
    636		bt_dev_err(hdev, "Unsupported Intel firmware variant (%u)",
    637			   ver.fw_variant);
    638		return -ENODEV;
    639	}
    640
    641	/* Read the secure boot parameters to identify the operating
    642	 * details of the bootloader.
    643	 */
    644	err = btintel_read_boot_params(hdev, &params);
    645	if (err)
    646		return err;
    647
    648	/* It is required that every single firmware fragment is acknowledged
    649	 * with a command complete event. If the boot parameters indicate
    650	 * that this bootloader does not send them, then abort the setup.
    651	 */
    652	if (params.limited_cce != 0x00) {
    653		bt_dev_err(hdev, "Unsupported Intel firmware loading method (%u)",
    654			   params.limited_cce);
    655		return -EINVAL;
    656	}
    657
    658	/* If the OTP has no valid Bluetooth device address, then there will
    659	 * also be no valid address for the operational firmware.
    660	 */
    661	if (!bacmp(&params.otp_bdaddr, BDADDR_ANY)) {
    662		bt_dev_info(hdev, "No device address configured");
    663		set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
    664	}
    665
    666	/* With this Intel bootloader only the hardware variant and device
    667	 * revision information are used to select the right firmware for SfP
    668	 * and WsP.
    669	 *
    670	 * The firmware filename is ibt-<hw_variant>-<dev_revid>.sfi.
    671	 *
    672	 * Currently the supported hardware variants are:
    673	 *   11 (0x0b) for iBT 3.0 (LnP/SfP)
    674	 *   12 (0x0c) for iBT 3.5 (WsP)
    675	 *
    676	 * For ThP/JfP and for future SKU's, the FW name varies based on HW
    677	 * variant, HW revision and FW revision, as these are dependent on CNVi
    678	 * and RF Combination.
    679	 *
    680	 *   18 (0x12) for iBT3.5 (ThP/JfP)
    681	 *
    682	 * The firmware file name for these will be
    683	 * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi.
    684	 *
    685	 */
    686	switch (ver.hw_variant) {
    687	case 0x0b:      /* SfP */
    688	case 0x0c:      /* WsP */
    689		snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.sfi",
    690			 ver.hw_variant, le16_to_cpu(params.dev_revid));
    691		break;
    692	case 0x12:      /* ThP */
    693		snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.sfi",
    694			 ver.hw_variant, ver.hw_revision, ver.fw_revision);
    695		break;
    696	default:
    697		bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
    698			   ver.hw_variant);
    699		return -EINVAL;
    700	}
    701
    702	err = request_firmware(&fw, fwname, &hdev->dev);
    703	if (err < 0) {
    704		bt_dev_err(hdev, "Failed to load Intel firmware file (%d)",
    705			   err);
    706		return err;
    707	}
    708
    709	bt_dev_info(hdev, "Found device firmware: %s", fwname);
    710
    711	/* Save the DDC file name for later */
    712	switch (ver.hw_variant) {
    713	case 0x0b:      /* SfP */
    714	case 0x0c:      /* WsP */
    715		snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u.ddc",
    716			 ver.hw_variant, le16_to_cpu(params.dev_revid));
    717		break;
    718	case 0x12:      /* ThP */
    719		snprintf(fwname, sizeof(fwname), "intel/ibt-%u-%u-%u.ddc",
    720			 ver.hw_variant, ver.hw_revision, ver.fw_revision);
    721		break;
    722	default:
    723		bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
    724			   ver.hw_variant);
    725		return -EINVAL;
    726	}
    727
    728	if (fw->size < 644) {
    729		bt_dev_err(hdev, "Invalid size of firmware file (%zu)",
    730			   fw->size);
    731		err = -EBADF;
    732		goto done;
    733	}
    734
    735	set_bit(STATE_DOWNLOADING, &intel->flags);
    736
    737	/* Start firmware downloading and get boot parameter */
    738	err = btintel_download_firmware(hdev, &ver, fw, &boot_param);
    739	if (err < 0)
    740		goto done;
    741
    742	set_bit(STATE_FIRMWARE_LOADED, &intel->flags);
    743
    744	bt_dev_info(hdev, "Waiting for firmware download to complete");
    745
    746	/* Before switching the device into operational mode and with that
    747	 * booting the loaded firmware, wait for the bootloader notification
    748	 * that all fragments have been successfully received.
    749	 *
    750	 * When the event processing receives the notification, then the
    751	 * STATE_DOWNLOADING flag will be cleared.
    752	 *
    753	 * The firmware loading should not take longer than 5 seconds
    754	 * and thus just timeout if that happens and fail the setup
    755	 * of this device.
    756	 */
    757	err = wait_on_bit_timeout(&intel->flags, STATE_DOWNLOADING,
    758				  TASK_INTERRUPTIBLE,
    759				  msecs_to_jiffies(5000));
    760	if (err == -EINTR) {
    761		bt_dev_err(hdev, "Firmware loading interrupted");
    762		err = -EINTR;
    763		goto done;
    764	}
    765
    766	if (err) {
    767		bt_dev_err(hdev, "Firmware loading timeout");
    768		err = -ETIMEDOUT;
    769		goto done;
    770	}
    771
    772	if (test_bit(STATE_FIRMWARE_FAILED, &intel->flags)) {
    773		bt_dev_err(hdev, "Firmware loading failed");
    774		err = -ENOEXEC;
    775		goto done;
    776	}
    777
    778	rettime = ktime_get();
    779	delta = ktime_sub(rettime, calltime);
    780	duration = (unsigned long long) ktime_to_ns(delta) >> 10;
    781
    782	bt_dev_info(hdev, "Firmware loaded in %llu usecs", duration);
    783
    784done:
    785	release_firmware(fw);
    786
    787	/* Check if there was an error and if is not -EALREADY which means the
    788	 * firmware has already been loaded.
    789	 */
    790	if (err < 0 && err != -EALREADY)
    791		return err;
    792
    793	/* We need to restore the default speed before Intel reset */
    794	if (speed_change) {
    795		err = intel_set_baudrate(hu, init_speed);
    796		if (err)
    797			return err;
    798	}
    799
    800	calltime = ktime_get();
    801
    802	set_bit(STATE_BOOTING, &intel->flags);
    803
    804	err = btintel_send_intel_reset(hdev, boot_param);
    805	if (err)
    806		return err;
    807
    808	/* The bootloader will not indicate when the device is ready. This
    809	 * is done by the operational firmware sending bootup notification.
    810	 *
    811	 * Booting into operational firmware should not take longer than
    812	 * 1 second. However if that happens, then just fail the setup
    813	 * since something went wrong.
    814	 */
    815	bt_dev_info(hdev, "Waiting for device to boot");
    816
    817	err = intel_wait_booting(hu);
    818	if (err)
    819		return err;
    820
    821	clear_bit(STATE_BOOTING, &intel->flags);
    822
    823	rettime = ktime_get();
    824	delta = ktime_sub(rettime, calltime);
    825	duration = (unsigned long long) ktime_to_ns(delta) >> 10;
    826
    827	bt_dev_info(hdev, "Device booted in %llu usecs", duration);
    828
    829	/* Enable LPM if matching pdev with wakeup enabled, set TX active
    830	 * until further LPM TX notification.
    831	 */
    832	mutex_lock(&intel_device_list_lock);
    833	list_for_each_entry(idev, &intel_device_list, list) {
    834		if (!hu->tty->dev)
    835			break;
    836		if (hu->tty->dev->parent == idev->pdev->dev.parent) {
    837			if (device_may_wakeup(&idev->pdev->dev)) {
    838				set_bit(STATE_LPM_ENABLED, &intel->flags);
    839				set_bit(STATE_TX_ACTIVE, &intel->flags);
    840			}
    841			break;
    842		}
    843	}
    844	mutex_unlock(&intel_device_list_lock);
    845
    846	/* Ignore errors, device can work without DDC parameters */
    847	btintel_load_ddc_config(hdev, fwname);
    848
    849	skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_CMD_TIMEOUT);
    850	if (IS_ERR(skb))
    851		return PTR_ERR(skb);
    852	kfree_skb(skb);
    853
    854	if (speed_change) {
    855		err = intel_set_baudrate(hu, oper_speed);
    856		if (err)
    857			return err;
    858	}
    859
    860	bt_dev_info(hdev, "Setup complete");
    861
    862	clear_bit(STATE_BOOTLOADER, &intel->flags);
    863
    864	return 0;
    865}
    866
    867static int intel_recv_event(struct hci_dev *hdev, struct sk_buff *skb)
    868{
    869	struct hci_uart *hu = hci_get_drvdata(hdev);
    870	struct intel_data *intel = hu->priv;
    871	struct hci_event_hdr *hdr;
    872
    873	if (!test_bit(STATE_BOOTLOADER, &intel->flags) &&
    874	    !test_bit(STATE_BOOTING, &intel->flags))
    875		goto recv;
    876
    877	hdr = (void *)skb->data;
    878
    879	/* When the firmware loading completes the device sends
    880	 * out a vendor specific event indicating the result of
    881	 * the firmware loading.
    882	 */
    883	if (skb->len == 7 && hdr->evt == 0xff && hdr->plen == 0x05 &&
    884	    skb->data[2] == 0x06) {
    885		if (skb->data[3] != 0x00)
    886			set_bit(STATE_FIRMWARE_FAILED, &intel->flags);
    887
    888		if (test_and_clear_bit(STATE_DOWNLOADING, &intel->flags) &&
    889		    test_bit(STATE_FIRMWARE_LOADED, &intel->flags))
    890			wake_up_bit(&intel->flags, STATE_DOWNLOADING);
    891
    892	/* When switching to the operational firmware the device
    893	 * sends a vendor specific event indicating that the bootup
    894	 * completed.
    895	 */
    896	} else if (skb->len == 9 && hdr->evt == 0xff && hdr->plen == 0x07 &&
    897		   skb->data[2] == 0x02) {
    898		if (test_and_clear_bit(STATE_BOOTING, &intel->flags))
    899			wake_up_bit(&intel->flags, STATE_BOOTING);
    900	}
    901recv:
    902	return hci_recv_frame(hdev, skb);
    903}
    904
    905static void intel_recv_lpm_notify(struct hci_dev *hdev, int value)
    906{
    907	struct hci_uart *hu = hci_get_drvdata(hdev);
    908	struct intel_data *intel = hu->priv;
    909
    910	bt_dev_dbg(hdev, "TX idle notification (%d)", value);
    911
    912	if (value) {
    913		set_bit(STATE_TX_ACTIVE, &intel->flags);
    914		schedule_work(&intel->busy_work);
    915	} else {
    916		clear_bit(STATE_TX_ACTIVE, &intel->flags);
    917	}
    918}
    919
    920static int intel_recv_lpm(struct hci_dev *hdev, struct sk_buff *skb)
    921{
    922	struct hci_lpm_pkt *lpm = (void *)skb->data;
    923	struct hci_uart *hu = hci_get_drvdata(hdev);
    924	struct intel_data *intel = hu->priv;
    925
    926	switch (lpm->opcode) {
    927	case LPM_OP_TX_NOTIFY:
    928		if (lpm->dlen < 1) {
    929			bt_dev_err(hu->hdev, "Invalid LPM notification packet");
    930			break;
    931		}
    932		intel_recv_lpm_notify(hdev, lpm->data[0]);
    933		break;
    934	case LPM_OP_SUSPEND_ACK:
    935		set_bit(STATE_SUSPENDED, &intel->flags);
    936		if (test_and_clear_bit(STATE_LPM_TRANSACTION, &intel->flags))
    937			wake_up_bit(&intel->flags, STATE_LPM_TRANSACTION);
    938		break;
    939	case LPM_OP_RESUME_ACK:
    940		clear_bit(STATE_SUSPENDED, &intel->flags);
    941		if (test_and_clear_bit(STATE_LPM_TRANSACTION, &intel->flags))
    942			wake_up_bit(&intel->flags, STATE_LPM_TRANSACTION);
    943		break;
    944	default:
    945		bt_dev_err(hdev, "Unknown LPM opcode (%02x)", lpm->opcode);
    946		break;
    947	}
    948
    949	kfree_skb(skb);
    950
    951	return 0;
    952}
    953
    954#define INTEL_RECV_LPM \
    955	.type = HCI_LPM_PKT, \
    956	.hlen = HCI_LPM_HDR_SIZE, \
    957	.loff = 1, \
    958	.lsize = 1, \
    959	.maxlen = HCI_LPM_MAX_SIZE
    960
    961static const struct h4_recv_pkt intel_recv_pkts[] = {
    962	{ H4_RECV_ACL,    .recv = hci_recv_frame   },
    963	{ H4_RECV_SCO,    .recv = hci_recv_frame   },
    964	{ H4_RECV_EVENT,  .recv = intel_recv_event },
    965	{ INTEL_RECV_LPM, .recv = intel_recv_lpm   },
    966};
    967
    968static int intel_recv(struct hci_uart *hu, const void *data, int count)
    969{
    970	struct intel_data *intel = hu->priv;
    971
    972	if (!test_bit(HCI_UART_REGISTERED, &hu->flags))
    973		return -EUNATCH;
    974
    975	intel->rx_skb = h4_recv_buf(hu->hdev, intel->rx_skb, data, count,
    976				    intel_recv_pkts,
    977				    ARRAY_SIZE(intel_recv_pkts));
    978	if (IS_ERR(intel->rx_skb)) {
    979		int err = PTR_ERR(intel->rx_skb);
    980		bt_dev_err(hu->hdev, "Frame reassembly failed (%d)", err);
    981		intel->rx_skb = NULL;
    982		return err;
    983	}
    984
    985	return count;
    986}
    987
    988static int intel_enqueue(struct hci_uart *hu, struct sk_buff *skb)
    989{
    990	struct intel_data *intel = hu->priv;
    991	struct intel_device *idev;
    992
    993	BT_DBG("hu %p skb %p", hu, skb);
    994
    995	if (!hu->tty->dev)
    996		goto out_enqueue;
    997
    998	/* Be sure our controller is resumed and potential LPM transaction
    999	 * completed before enqueuing any packet.
   1000	 */
   1001	mutex_lock(&intel_device_list_lock);
   1002	list_for_each_entry(idev, &intel_device_list, list) {
   1003		if (hu->tty->dev->parent == idev->pdev->dev.parent) {
   1004			pm_runtime_get_sync(&idev->pdev->dev);
   1005			pm_runtime_mark_last_busy(&idev->pdev->dev);
   1006			pm_runtime_put_autosuspend(&idev->pdev->dev);
   1007			break;
   1008		}
   1009	}
   1010	mutex_unlock(&intel_device_list_lock);
   1011out_enqueue:
   1012	skb_queue_tail(&intel->txq, skb);
   1013
   1014	return 0;
   1015}
   1016
   1017static struct sk_buff *intel_dequeue(struct hci_uart *hu)
   1018{
   1019	struct intel_data *intel = hu->priv;
   1020	struct sk_buff *skb;
   1021
   1022	skb = skb_dequeue(&intel->txq);
   1023	if (!skb)
   1024		return skb;
   1025
   1026	if (test_bit(STATE_BOOTLOADER, &intel->flags) &&
   1027	    (hci_skb_pkt_type(skb) == HCI_COMMAND_PKT)) {
   1028		struct hci_command_hdr *cmd = (void *)skb->data;
   1029		__u16 opcode = le16_to_cpu(cmd->opcode);
   1030
   1031		/* When the 0xfc01 command is issued to boot into
   1032		 * the operational firmware, it will actually not
   1033		 * send a command complete event. To keep the flow
   1034		 * control working inject that event here.
   1035		 */
   1036		if (opcode == 0xfc01)
   1037			inject_cmd_complete(hu->hdev, opcode);
   1038	}
   1039
   1040	/* Prepend skb with frame type */
   1041	memcpy(skb_push(skb, 1), &hci_skb_pkt_type(skb), 1);
   1042
   1043	return skb;
   1044}
   1045
   1046static const struct hci_uart_proto intel_proto = {
   1047	.id		= HCI_UART_INTEL,
   1048	.name		= "Intel",
   1049	.manufacturer	= 2,
   1050	.init_speed	= 115200,
   1051	.oper_speed	= 3000000,
   1052	.open		= intel_open,
   1053	.close		= intel_close,
   1054	.flush		= intel_flush,
   1055	.setup		= intel_setup,
   1056	.set_baudrate	= intel_set_baudrate,
   1057	.recv		= intel_recv,
   1058	.enqueue	= intel_enqueue,
   1059	.dequeue	= intel_dequeue,
   1060};
   1061
   1062#ifdef CONFIG_ACPI
   1063static const struct acpi_device_id intel_acpi_match[] = {
   1064	{ "INT33E1", 0 },
   1065	{ "INT33E3", 0 },
   1066	{ }
   1067};
   1068MODULE_DEVICE_TABLE(acpi, intel_acpi_match);
   1069#endif
   1070
   1071#ifdef CONFIG_PM
   1072static int intel_suspend_device(struct device *dev)
   1073{
   1074	struct intel_device *idev = dev_get_drvdata(dev);
   1075
   1076	mutex_lock(&idev->hu_lock);
   1077	if (idev->hu)
   1078		intel_lpm_suspend(idev->hu);
   1079	mutex_unlock(&idev->hu_lock);
   1080
   1081	return 0;
   1082}
   1083
   1084static int intel_resume_device(struct device *dev)
   1085{
   1086	struct intel_device *idev = dev_get_drvdata(dev);
   1087
   1088	mutex_lock(&idev->hu_lock);
   1089	if (idev->hu)
   1090		intel_lpm_resume(idev->hu);
   1091	mutex_unlock(&idev->hu_lock);
   1092
   1093	return 0;
   1094}
   1095#endif
   1096
   1097#ifdef CONFIG_PM_SLEEP
   1098static int intel_suspend(struct device *dev)
   1099{
   1100	struct intel_device *idev = dev_get_drvdata(dev);
   1101
   1102	if (device_may_wakeup(dev))
   1103		enable_irq_wake(idev->irq);
   1104
   1105	return intel_suspend_device(dev);
   1106}
   1107
   1108static int intel_resume(struct device *dev)
   1109{
   1110	struct intel_device *idev = dev_get_drvdata(dev);
   1111
   1112	if (device_may_wakeup(dev))
   1113		disable_irq_wake(idev->irq);
   1114
   1115	return intel_resume_device(dev);
   1116}
   1117#endif
   1118
   1119static const struct dev_pm_ops intel_pm_ops = {
   1120	SET_SYSTEM_SLEEP_PM_OPS(intel_suspend, intel_resume)
   1121	SET_RUNTIME_PM_OPS(intel_suspend_device, intel_resume_device, NULL)
   1122};
   1123
   1124static const struct acpi_gpio_params reset_gpios = { 0, 0, false };
   1125static const struct acpi_gpio_params host_wake_gpios = { 1, 0, false };
   1126
   1127static const struct acpi_gpio_mapping acpi_hci_intel_gpios[] = {
   1128	{ "reset-gpios", &reset_gpios, 1, ACPI_GPIO_QUIRK_ONLY_GPIOIO },
   1129	{ "host-wake-gpios", &host_wake_gpios, 1, ACPI_GPIO_QUIRK_ONLY_GPIOIO },
   1130	{ }
   1131};
   1132
   1133static int intel_probe(struct platform_device *pdev)
   1134{
   1135	struct intel_device *idev;
   1136	int ret;
   1137
   1138	idev = devm_kzalloc(&pdev->dev, sizeof(*idev), GFP_KERNEL);
   1139	if (!idev)
   1140		return -ENOMEM;
   1141
   1142	mutex_init(&idev->hu_lock);
   1143
   1144	idev->pdev = pdev;
   1145
   1146	ret = devm_acpi_dev_add_driver_gpios(&pdev->dev, acpi_hci_intel_gpios);
   1147	if (ret)
   1148		dev_dbg(&pdev->dev, "Unable to add GPIO mapping table\n");
   1149
   1150	idev->reset = devm_gpiod_get(&pdev->dev, "reset", GPIOD_OUT_LOW);
   1151	if (IS_ERR(idev->reset)) {
   1152		dev_err(&pdev->dev, "Unable to retrieve gpio\n");
   1153		return PTR_ERR(idev->reset);
   1154	}
   1155
   1156	idev->irq = platform_get_irq(pdev, 0);
   1157	if (idev->irq < 0) {
   1158		struct gpio_desc *host_wake;
   1159
   1160		dev_err(&pdev->dev, "No IRQ, falling back to gpio-irq\n");
   1161
   1162		host_wake = devm_gpiod_get(&pdev->dev, "host-wake", GPIOD_IN);
   1163		if (IS_ERR(host_wake)) {
   1164			dev_err(&pdev->dev, "Unable to retrieve IRQ\n");
   1165			goto no_irq;
   1166		}
   1167
   1168		idev->irq = gpiod_to_irq(host_wake);
   1169		if (idev->irq < 0) {
   1170			dev_err(&pdev->dev, "No corresponding irq for gpio\n");
   1171			goto no_irq;
   1172		}
   1173	}
   1174
   1175	/* Only enable wake-up/irq when controller is powered */
   1176	device_set_wakeup_capable(&pdev->dev, true);
   1177	device_wakeup_disable(&pdev->dev);
   1178
   1179no_irq:
   1180	platform_set_drvdata(pdev, idev);
   1181
   1182	/* Place this instance on the device list */
   1183	mutex_lock(&intel_device_list_lock);
   1184	list_add_tail(&idev->list, &intel_device_list);
   1185	mutex_unlock(&intel_device_list_lock);
   1186
   1187	dev_info(&pdev->dev, "registered, gpio(%d)/irq(%d).\n",
   1188		 desc_to_gpio(idev->reset), idev->irq);
   1189
   1190	return 0;
   1191}
   1192
   1193static int intel_remove(struct platform_device *pdev)
   1194{
   1195	struct intel_device *idev = platform_get_drvdata(pdev);
   1196
   1197	device_wakeup_disable(&pdev->dev);
   1198
   1199	mutex_lock(&intel_device_list_lock);
   1200	list_del(&idev->list);
   1201	mutex_unlock(&intel_device_list_lock);
   1202
   1203	dev_info(&pdev->dev, "unregistered.\n");
   1204
   1205	return 0;
   1206}
   1207
   1208static struct platform_driver intel_driver = {
   1209	.probe = intel_probe,
   1210	.remove = intel_remove,
   1211	.driver = {
   1212		.name = "hci_intel",
   1213		.acpi_match_table = ACPI_PTR(intel_acpi_match),
   1214		.pm = &intel_pm_ops,
   1215	},
   1216};
   1217
   1218int __init intel_init(void)
   1219{
   1220	platform_driver_register(&intel_driver);
   1221
   1222	return hci_uart_register_proto(&intel_proto);
   1223}
   1224
   1225int __exit intel_deinit(void)
   1226{
   1227	platform_driver_unregister(&intel_driver);
   1228
   1229	return hci_uart_unregister_proto(&intel_proto);
   1230}