From f2cee6e2aa35a6a701ce3f4bedf20273c808361f Mon Sep 17 00:00:00 2001 From: Ravindra Date: Mon, 28 Sep 2026 22:40:03 +0530 Subject: [PATCH] Bluetooth: btintel_pcie: clear the GP0 cause with a W1C write MSIX_HW_INT_CAUSES is a write-one-to-clear register. Using a read-modify-write helper writes zero to GP0, leaving the cause uncleared, and can acknowledge unrelated pending causes through the read value. Write only the GP0 bit directly, matching the interrupt handler's W1C acknowledgment convention. Fixes: 88c6216a52ea ("Bluetooth: btintel_pcie: Suspend/Resume: Controller doorbell interrupt handling") Signed-off-by: Ravindra Tested-by: Sergey Lebedev Reviewed-by: Sergey Lebedev Signed-off-by: Luiz Augusto von Dentz --- drivers/bluetooth/btintel_pcie.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/bluetooth/btintel_pcie.c b/drivers/bluetooth/btintel_pcie.c index 782e4ff4c887..3a555aa50c87 100644 --- a/drivers/bluetooth/btintel_pcie.c +++ b/drivers/bluetooth/btintel_pcie.c @@ -4234,10 +4234,12 @@ static int btintel_pcie_set_dxstate(struct btintel_pcie_data *data, u32 dxstate) "Timeout (%u ms) on alive interrupt for D%d entry, retry count %d", dx_intr_timeout_ms, dxstate, retry); - /* clear gp0 cause */ - btintel_pcie_clr_reg_bits(data, - BTINTEL_PCIE_CSR_MSIX_HW_INT_CAUSES, - BTINTEL_PCIE_MSIX_HW_INT_CAUSES_GP0); + /* MSIX_HW_INT_CAUSES is W1C. Write only GP0 so other + * pending causes are not acknowledged here. + */ + btintel_pcie_wr_reg32(data, + BTINTEL_PCIE_CSR_MSIX_HW_INT_CAUSES, + BTINTEL_PCIE_MSIX_HW_INT_CAUSES_GP0); } /* gp0_received is set at the top of the handler, before the switch on