From 5fcfe0f19ed5ff2bd3514644afce0af642c326c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Fri, 2 Sep 2022 03:58:38 +0200 Subject: [PATCH] Workaround iwlwifi load issue for AX200-series when MSI-X is unavailable Partially fixes QubesOS/qubes-issues#5615 --- ...nable-interrupts-before-loading-PNVM.patch | 46 +++++++++++++++++++ kernel.spec.in | 1 + 2 files changed, 47 insertions(+) create mode 100644 0001-Re-enable-interrupts-before-loading-PNVM.patch diff --git a/0001-Re-enable-interrupts-before-loading-PNVM.patch b/0001-Re-enable-interrupts-before-loading-PNVM.patch new file mode 100644 index 00000000..e1681ede --- /dev/null +++ b/0001-Re-enable-interrupts-before-loading-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 +--- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c ++++ b/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/kernel.spec.in b/kernel.spec.in index 049a27e4..c4b34cc0 100644 --- a/kernel.spec.in +++ b/kernel.spec.in @@ -146,6 +146,7 @@ Patch21: v6-ACPI-skip-IRQ-override-on-AMD-Zen-platforms.patch Patch22: 0001-xen-blkback-Advertise-feature-persistent-as-user-req.patch Patch23: 0002-xen-blkfront-Advertise-feature-persistent-as-user-re.patch Patch24: 0003-xen-blkfront-Cache-feature_persistent-value-before-a.patch +Patch25: 0001-Re-enable-interrupts-before-loading-PNVM.patch %description Qubes Dom0 kernel.