* [PATCH v1] Bluetooth: btintel_pcie: Align shared DMA memory to 128 bytes
@ 2026-03-03 12:01 Kiran K
2026-03-03 12:17 ` [v1] " bluez.test.bot
0 siblings, 1 reply; 2+ messages in thread
From: Kiran K @ 2026-03-03 12:01 UTC (permalink / raw)
To: linux-bluetooth
Cc: ravishankar.srivatsa, chandrashekar.devegowda,
chethan.tumkur.narayan, Kiran K
Align each descriptor/index/context region to 128 bytes before
calculating the total DMA pool size. This ensures the memory layout
shared with firmware meets the 128-byte alignment requirement.
The DMA pool alignment is also set to 128 bytes to match the firmware
expectation for all shared structures.
Signed-off-by: Kiran K <kiran.k@intel.com>
---
drivers/bluetooth/btintel_pcie.c | 94 ++++++++++++++++++--------------
drivers/bluetooth/btintel_pcie.h | 3 -
2 files changed, 53 insertions(+), 44 deletions(-)
diff --git a/drivers/bluetooth/btintel_pcie.c b/drivers/bluetooth/btintel_pcie.c
index bd1c6116715e..c4c19a25157a 100644
--- a/drivers/bluetooth/btintel_pcie.c
+++ b/drivers/bluetooth/btintel_pcie.c
@@ -37,6 +37,8 @@
#define POLL_INTERVAL_US 10
+#define BTINTEL_PCIE_DMA_ALIGN_128B 128 /* 128 byte aligned */
+
/* Intel Bluetooth PCIe device id table */
static const struct pci_device_id btintel_pcie_table[] = {
/* BlazarI, Wildcat Lake */
@@ -1756,27 +1758,6 @@ static int btintel_pcie_setup_rxq_bufs(struct btintel_pcie_data *data,
return 0;
}
-static void btintel_pcie_setup_ia(struct btintel_pcie_data *data,
- dma_addr_t p_addr, void *v_addr,
- struct ia *ia)
-{
- /* TR Head Index Array */
- ia->tr_hia_p_addr = p_addr;
- ia->tr_hia = v_addr;
-
- /* TR Tail Index Array */
- ia->tr_tia_p_addr = p_addr + sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES;
- ia->tr_tia = v_addr + sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES;
-
- /* CR Head index Array */
- ia->cr_hia_p_addr = p_addr + (sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES * 2);
- ia->cr_hia = v_addr + (sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES * 2);
-
- /* CR Tail Index Array */
- ia->cr_tia_p_addr = p_addr + (sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES * 3);
- ia->cr_tia = v_addr + (sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES * 3);
-}
-
static void btintel_pcie_free(struct btintel_pcie_data *data)
{
btintel_pcie_free_rxq_bufs(data, &data->rxq);
@@ -1794,13 +1775,16 @@ static int btintel_pcie_alloc(struct btintel_pcie_data *data)
size_t total;
dma_addr_t p_addr;
void *v_addr;
+ size_t tfd_size, frbd_size, ctx_size, ci_size, urbd0_size, urbd1_size;
/* Allocate the chunk of DMA memory for descriptors, index array, and
* context information, instead of allocating individually.
* The DMA memory for data buffer is allocated while setting up the
* each queue.
*
- * Total size is sum of the following
+ * Total size is sum of the following and each of the individual sizes
+ * are aligned to 128 bytes before adding up.
+ *
* + size of TFD * Number of descriptors in queue
* + size of URBD0 * Number of descriptors in queue
* + size of FRBD * Number of descriptors in queue
@@ -1808,15 +1792,25 @@ 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)) * BTINTEL_PCIE_TX_DESCS_COUNT;
- total += (sizeof(struct frbd) + sizeof(struct urbd1)) * BTINTEL_PCIE_RX_DESCS_COUNT;
+ tfd_size = ALIGN(sizeof(struct tfd) * BTINTEL_PCIE_TX_DESCS_COUNT,
+ BTINTEL_PCIE_DMA_ALIGN_128B);
+ urbd0_size = ALIGN(sizeof(struct urbd0) * BTINTEL_PCIE_TX_DESCS_COUNT,
+ BTINTEL_PCIE_DMA_ALIGN_128B);
- /* 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);
+ frbd_size = ALIGN(sizeof(struct frbd) * BTINTEL_PCIE_RX_DESCS_COUNT,
+ BTINTEL_PCIE_DMA_ALIGN_128B);
+ urbd1_size = ALIGN(sizeof(struct urbd1) * BTINTEL_PCIE_RX_DESCS_COUNT,
+ BTINTEL_PCIE_DMA_ALIGN_128B);
+
+ ci_size = ALIGN(sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES,
+ BTINTEL_PCIE_DMA_ALIGN_128B);
+
+ ctx_size = ALIGN(sizeof(struct ctx_info), BTINTEL_PCIE_DMA_ALIGN_128B);
+
+ total = tfd_size + urbd0_size + frbd_size + urbd1_size + ctx_size + ci_size * 4;
- /* Allocate DMA Pool */
data->dma_pool = dma_pool_create(KBUILD_MODNAME, &data->pdev->dev,
- total, BTINTEL_PCIE_DMA_POOL_ALIGNMENT, 0);
+ total, BTINTEL_PCIE_DMA_ALIGN_128B, 0);
if (!data->dma_pool) {
err = -ENOMEM;
goto exit_error;
@@ -1841,29 +1835,29 @@ static int btintel_pcie_alloc(struct btintel_pcie_data *data)
data->txq.tfds_p_addr = p_addr;
data->txq.tfds = v_addr;
- p_addr += (sizeof(struct tfd) * BTINTEL_PCIE_TX_DESCS_COUNT);
- v_addr += (sizeof(struct tfd) * BTINTEL_PCIE_TX_DESCS_COUNT);
+ p_addr += tfd_size;
+ v_addr += tfd_size;
/* Setup urbd0 */
data->txq.urbd0s_p_addr = p_addr;
data->txq.urbd0s = v_addr;
- p_addr += (sizeof(struct urbd0) * BTINTEL_PCIE_TX_DESCS_COUNT);
- v_addr += (sizeof(struct urbd0) * BTINTEL_PCIE_TX_DESCS_COUNT);
+ p_addr += urbd0_size;
+ v_addr += urbd0_size;
/* Setup FRBD*/
data->rxq.frbds_p_addr = p_addr;
data->rxq.frbds = v_addr;
- p_addr += (sizeof(struct frbd) * BTINTEL_PCIE_RX_DESCS_COUNT);
- v_addr += (sizeof(struct frbd) * BTINTEL_PCIE_RX_DESCS_COUNT);
+ p_addr += frbd_size;
+ v_addr += frbd_size;
/* Setup urbd1 */
data->rxq.urbd1s_p_addr = p_addr;
data->rxq.urbd1s = v_addr;
- p_addr += (sizeof(struct urbd1) * BTINTEL_PCIE_RX_DESCS_COUNT);
- v_addr += (sizeof(struct urbd1) * BTINTEL_PCIE_RX_DESCS_COUNT);
+ p_addr += urbd1_size;
+ v_addr += urbd1_size;
/* Setup data buffers for txq */
err = btintel_pcie_setup_txq_bufs(data, &data->txq);
@@ -1875,8 +1869,29 @@ static int btintel_pcie_alloc(struct btintel_pcie_data *data)
if (err)
goto exit_error_txq;
- /* Setup Index Array */
- btintel_pcie_setup_ia(data, p_addr, v_addr, &data->ia);
+ /* TR Head Index Array */
+ data->ia.tr_hia_p_addr = p_addr;
+ data->ia.tr_hia = v_addr;
+ p_addr += ci_size;
+ v_addr += ci_size;
+
+ /* TR Tail Index Array */
+ data->ia.tr_tia_p_addr = p_addr;
+ data->ia.tr_tia = v_addr;
+ p_addr += ci_size;
+ v_addr += ci_size;
+
+ /* CR Head index Array */
+ data->ia.cr_hia_p_addr = p_addr;
+ data->ia.cr_hia = v_addr;
+ p_addr += ci_size;
+ v_addr += ci_size;
+
+ /* CR Tail Index Array */
+ data->ia.cr_tia_p_addr = p_addr;
+ data->ia.cr_tia = v_addr;
+ p_addr += ci_size;
+ v_addr += ci_size;
/* Setup data buffers for dbgc */
err = btintel_pcie_setup_dbgc(data);
@@ -1884,9 +1899,6 @@ static int btintel_pcie_alloc(struct btintel_pcie_data *data)
goto exit_error_txq;
/* Setup Context Information */
- p_addr += sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES * 4;
- v_addr += sizeof(u16) * BTINTEL_PCIE_NUM_QUEUES * 4;
-
data->ci = v_addr;
data->ci_p_addr = p_addr;
diff --git a/drivers/bluetooth/btintel_pcie.h b/drivers/bluetooth/btintel_pcie.h
index e3d941ffef4a..3c7bb708362d 100644
--- a/drivers/bluetooth/btintel_pcie.h
+++ b/drivers/bluetooth/btintel_pcie.h
@@ -178,9 +178,6 @@ enum {
/* The size of DMA buffer for TX and RX in bytes */
#define BTINTEL_PCIE_BUFFER_SIZE 4096
-/* DMA allocation alignment */
-#define BTINTEL_PCIE_DMA_POOL_ALIGNMENT 256
-
#define BTINTEL_PCIE_TX_WAIT_TIMEOUT_MS 500
/* Doorbell vector for TFD */
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* RE: [v1] Bluetooth: btintel_pcie: Align shared DMA memory to 128 bytes
2026-03-03 12:01 [PATCH v1] Bluetooth: btintel_pcie: Align shared DMA memory to 128 bytes Kiran K
@ 2026-03-03 12:17 ` bluez.test.bot
0 siblings, 0 replies; 2+ messages in thread
From: bluez.test.bot @ 2026-03-03 12:17 UTC (permalink / raw)
To: linux-bluetooth, kiran.k
[-- Attachment #1: Type: text/plain, Size: 2942 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=1060579
---Test result---
Test Summary:
CheckPatch PENDING 0.38 seconds
GitLint PENDING 0.26 seconds
SubjectPrefix PASS 0.09 seconds
BuildKernel PASS 26.75 seconds
CheckAllWarning PASS 29.25 seconds
CheckSparse PASS 33.32 seconds
BuildKernel32 PASS 26.52 seconds
TestRunnerSetup PASS 580.39 seconds
TestRunner_l2cap-tester FAIL 32.61 seconds
TestRunner_iso-tester PASS 94.50 seconds
TestRunner_bnep-tester PASS 6.38 seconds
TestRunner_mgmt-tester FAIL 116.42 seconds
TestRunner_rfcomm-tester PASS 10.16 seconds
TestRunner_sco-tester FAIL 14.92 seconds
TestRunner_ioctl-tester PASS 10.55 seconds
TestRunner_mesh-tester FAIL 12.45 seconds
TestRunner_smp-tester PASS 8.86 seconds
TestRunner_userchan-tester PASS 6.83 seconds
IncrementalBuild PENDING 0.99 seconds
Details
##############################
Test: CheckPatch - PENDING
Desc: Run checkpatch.pl script
Output:
##############################
Test: GitLint - PENDING
Desc: Run gitlint
Output:
##############################
Test: TestRunner_l2cap-tester - FAIL
Desc: Run l2cap-tester with test-runner
Output:
Total: 96, Passed: 94 (97.9%), Failed: 2, Not Run: 0
Failed Test Cases
L2CAP LE Client - Read 32k Success Timed out 2.406 seconds
L2CAP LE Client - RX Timestamping 32k Timed out 1.888 seconds
##############################
Test: TestRunner_mgmt-tester - FAIL
Desc: Run mgmt-tester with test-runner
Output:
Total: 494, Passed: 489 (99.0%), Failed: 1, Not Run: 4
Failed Test Cases
Read Exp Feature - Success Failed 0.114 seconds
##############################
Test: TestRunner_sco-tester - FAIL
Desc: Run sco-tester with test-runner
Output:
WARNING: possible circular locking dependency detected
BUG: sleeping function called from invalid context at net/core/sock.c:3782
Total: 30, Passed: 30 (100.0%), Failed: 0, Not Run: 0
##############################
Test: TestRunner_mesh-tester - FAIL
Desc: Run mesh-tester with test-runner
Output:
Total: 10, Passed: 8 (80.0%), Failed: 2, Not Run: 0
Failed Test Cases
Mesh - Send cancel - 1 Timed out 2.773 seconds
Mesh - Send cancel - 2 Timed out 1.991 seconds
##############################
Test: IncrementalBuild - PENDING
Desc: Incremental build with the patches in the series
Output:
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-03-03 12:17 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-03 12:01 [PATCH v1] Bluetooth: btintel_pcie: Align shared DMA memory to 128 bytes Kiran K
2026-03-03 12:17 ` [v1] " bluez.test.bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox