diff --git a/repos/dde_linux/patches/iwlwifi_enable_irq_before_pnvm.patch b/repos/dde_linux/patches/iwlwifi_enable_irq_before_pnvm.patch new file mode 100644 index 0000000000..da7167d943 --- /dev/null +++ b/repos/dde_linux/patches/iwlwifi_enable_irq_before_pnvm.patch @@ -0,0 +1,46 @@ +From b4024bb479b2ee9b34125b65472a0537043c8dc4 Mon Sep 17 00:00:00 2001 +From: Chris Rogers +Date: Thu, 1 Sep 2022 15:56:14 +0200 +Subject: [PATCH] Re-enable interrupts before loading PNVM. + +For cards in the AX210+ family that advertise a SKU and try to load a PNVM, +in the non-MSIX (MSI) case the normal firmware load flow disables all interrupts +from the card except ALIVE and RX. This is primarily to enforce the driver's +assumption that we will not receive RF_KILL before the firmware has finished +loading, or else an unintelligible error is dumped. + +This unfortunately also prevents us from responding to an interrupt from the +card after 'kicking the doorbell' (UREG_DOORBELL_TO_ISR6_PNVM). We therefore +wait until the specified timeout and report "Timeout waiting for PNVM load!" +and fail out of driver initialization. + +This patch re-enables interrupts prior to loading the PNVM so we can respond +properly when the card notifies us of a successful PNVM load. Since the FW is +technically 'ALIVE' at this point, it should be ok to also re-enable RF_KILL. +--- + drivers/net/wireless/intel/iwlwifi/mvm/fw.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c +index f041e77af059..ec982ddce196 100644 +--- src/linux/drivers/net/wireless/intel/iwlwifi/mvm/fw.c ++++ src/linux/drivers/net/wireless/intel/iwlwifi/mvm/fw.c +@@ -404,6 +404,15 @@ static int iwl_mvm_load_ucode_wait_alive(struct iwl_mvm *mvm, + return -EIO; + } + ++ /* ++ * re-enable interrupts so we can get a response from ++ * the card when kicking the doorbell during pnvm load. ++ * This is only needed in the non-msix case. FW is ++ * technically alive at this point so re-enabling rf-kill ++ * interrupt is probably ok. ++ */ ++ iwl_trans_interrupts(mvm->trans, true); ++ + ret = iwl_pnvm_load(mvm->trans, &mvm->notif_wait); + if (ret) { + IWL_ERR(mvm, "Timeout waiting for PNVM load!\n"); +-- +2.35.3 + diff --git a/repos/dde_linux/ports/linux.hash b/repos/dde_linux/ports/linux.hash index 9a3b2b669a..d39912c7bf 100644 --- a/repos/dde_linux/ports/linux.hash +++ b/repos/dde_linux/ports/linux.hash @@ -1 +1 @@ -340e0ebc16b91aab3ff33d3d03611dcddd02d450 +3258c9b6efca7364b55b34139f0f4333c3eab88d diff --git a/repos/dde_linux/ports/linux.port b/repos/dde_linux/ports/linux.port index f03066519a..3d8dc55c4c 100644 --- a/repos/dde_linux/ports/linux.port +++ b/repos/dde_linux/ports/linux.port @@ -9,7 +9,7 @@ DIR(linux) := src/linux # # Patches # -PATCH_FILES := i915_irq.patch i915_alderlake.patch xhci_abort_ring.patch +PATCH_FILES := i915_irq.patch i915_alderlake.patch xhci_abort_ring.patch iwlwifi_enable_irq_before_pnvm.patch PATCHES += $(addprefix patches/,$(PATCH_FILES)) # i915