]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Bluetooth: btintel_pcie: Increase the tx and rx descriptor count
authorChandrashekar Devegowda <chandrashekar.devegowda@intel.com>
Tue, 3 Jun 2025 10:04:39 +0000 (15:34 +0530)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Thu, 5 Jun 2025 18:53:53 +0000 (14:53 -0400)
This change addresses latency issues observed in HID use cases where
events arrive in bursts. By increasing the Rx descriptor count to 64,
the firmware can handle bursty data more effectively, reducing latency
and preventing buffer overflows.

Signed-off-by: Chandrashekar Devegowda <chandrashekar.devegowda@intel.com>
Signed-off-by: Kiran K <kiran.k@intel.com>
Fixes: c2b636b3f788 ("Bluetooth: btintel_pcie: Add support for PCIe transport")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
drivers/bluetooth/btintel_pcie.c
drivers/bluetooth/btintel_pcie.h

index 2c7731803c9feaac0ce54b05fc09f57411baf4e1..03f13de4a723e26a1672e528708840748bea94ea 100644 (file)
@@ -1783,8 +1783,8 @@ static int btintel_pcie_alloc(struct btintel_pcie_data *data)
         *  + size of index * Number of queues(2) * type of index array(4)
         *  + size of context information
         */
-       total = (sizeof(struct tfd) + sizeof(struct urbd0) + sizeof(struct frbd)
-               + sizeof(struct urbd1)) * BTINTEL_DESCS_COUNT;
+       total = (sizeof(struct tfd) + sizeof(struct urbd0)) * BTINTEL_PCIE_TX_DESCS_COUNT;
+       total += (sizeof(struct frbd) + sizeof(struct urbd1)) * BTINTEL_PCIE_RX_DESCS_COUNT;
 
        /* Add the sum of size of index array and size of ci struct */
        total += (sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES * 4) + sizeof(struct ctx_info);
@@ -1809,36 +1809,36 @@ static int btintel_pcie_alloc(struct btintel_pcie_data *data)
        data->dma_v_addr = v_addr;
 
        /* Setup descriptor count */
-       data->txq.count = BTINTEL_DESCS_COUNT;
-       data->rxq.count = BTINTEL_DESCS_COUNT;
+       data->txq.count = BTINTEL_PCIE_TX_DESCS_COUNT;
+       data->rxq.count = BTINTEL_PCIE_RX_DESCS_COUNT;
 
        /* Setup tfds */
        data->txq.tfds_p_addr = p_addr;
        data->txq.tfds = v_addr;
 
-       p_addr += (sizeof(struct tfd) * BTINTEL_DESCS_COUNT);
-       v_addr += (sizeof(struct tfd) * BTINTEL_DESCS_COUNT);
+       p_addr += (sizeof(struct tfd) * BTINTEL_PCIE_TX_DESCS_COUNT);
+       v_addr += (sizeof(struct tfd) * BTINTEL_PCIE_TX_DESCS_COUNT);
 
        /* Setup urbd0 */
        data->txq.urbd0s_p_addr = p_addr;
        data->txq.urbd0s = v_addr;
 
-       p_addr += (sizeof(struct urbd0) * BTINTEL_DESCS_COUNT);
-       v_addr += (sizeof(struct urbd0) * BTINTEL_DESCS_COUNT);
+       p_addr += (sizeof(struct urbd0) * BTINTEL_PCIE_TX_DESCS_COUNT);
+       v_addr += (sizeof(struct urbd0) * BTINTEL_PCIE_TX_DESCS_COUNT);
 
        /* Setup FRBD*/
        data->rxq.frbds_p_addr = p_addr;
        data->rxq.frbds = v_addr;
 
-       p_addr += (sizeof(struct frbd) * BTINTEL_DESCS_COUNT);
-       v_addr += (sizeof(struct frbd) * BTINTEL_DESCS_COUNT);
+       p_addr += (sizeof(struct frbd) * BTINTEL_PCIE_RX_DESCS_COUNT);
+       v_addr += (sizeof(struct frbd) * BTINTEL_PCIE_RX_DESCS_COUNT);
 
        /* Setup urbd1 */
        data->rxq.urbd1s_p_addr = p_addr;
        data->rxq.urbd1s = v_addr;
 
-       p_addr += (sizeof(struct urbd1) * BTINTEL_DESCS_COUNT);
-       v_addr += (sizeof(struct urbd1) * BTINTEL_DESCS_COUNT);
+       p_addr += (sizeof(struct urbd1) * BTINTEL_PCIE_RX_DESCS_COUNT);
+       v_addr += (sizeof(struct urbd1) * BTINTEL_PCIE_RX_DESCS_COUNT);
 
        /* Setup data buffers for txq */
        err = btintel_pcie_setup_txq_bufs(data, &data->txq);
index 5ddd6d7d8d4568fb45c000b23a66a0d17199428a..7dad4523236c9fcc1fdb0d057ce902c16a5d8029 100644 (file)
@@ -154,8 +154,11 @@ enum msix_mbox_int_causes {
 /* Default interrupt timeout in msec */
 #define BTINTEL_DEFAULT_INTR_TIMEOUT_MS        3000
 
-/* The number of descriptors in TX/RX queues */
-#define BTINTEL_DESCS_COUNT    16
+/* The number of descriptors in TX queues */
+#define BTINTEL_PCIE_TX_DESCS_COUNT    32
+
+/* The number of descriptors in RX queues */
+#define BTINTEL_PCIE_RX_DESCS_COUNT    64
 
 /* Number of Queue for TX and RX
  * It indicates the index of the IA(Index Array)