| From a7ca6d7fa3c02c032db5440ff392d96c04684c21 Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org> |
| Date: Tue, 5 Oct 2021 20:09:45 +0200 |
| Subject: PCI: aardvark: Do not clear status bits of masked interrupts |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Pali Rohár <pali@kernel.org> |
| |
| commit a7ca6d7fa3c02c032db5440ff392d96c04684c21 upstream. |
| |
| The PCIE_ISR1_REG says which interrupts are currently set / active, |
| including those which are masked. |
| |
| The driver currently reads this register and looks if some unmasked |
| interrupts are active, and if not, it clears status bits of _all_ |
| interrupts, including the masked ones. |
| |
| This is incorrect, since, for example, some drivers may poll these bits. |
| |
| Remove this clearing, and also remove this early return statement |
| completely, since it does not change functionality in any way. |
| |
| Link: https://lore.kernel.org/r/20211005180952.6812-7-kabel@kernel.org |
| Fixes: 8c39d710363c ("PCI: aardvark: Add Aardvark PCI host controller driver") |
| Signed-off-by: Pali Rohár <pali@kernel.org> |
| Signed-off-by: Marek Behún <kabel@kernel.org> |
| Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> |
| Reviewed-by: Marek Behún <kabel@kernel.org> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/pci/controller/pci-aardvark.c | 6 ------ |
| 1 file changed, 6 deletions(-) |
| |
| --- a/drivers/pci/controller/pci-aardvark.c |
| +++ b/drivers/pci/controller/pci-aardvark.c |
| @@ -1055,12 +1055,6 @@ static void advk_pcie_handle_int(struct |
| isr1_mask = advk_readl(pcie, PCIE_ISR1_MASK_REG); |
| isr1_status = isr1_val & ((~isr1_mask) & PCIE_ISR1_ALL_MASK); |
| |
| - if (!isr0_status && !isr1_status) { |
| - advk_writel(pcie, isr0_val, PCIE_ISR0_REG); |
| - advk_writel(pcie, isr1_val, PCIE_ISR1_REG); |
| - return; |
| - } |
| - |
| /* Process MSI interrupts */ |
| if (isr0_status & PCIE_ISR0_MSI_INT_PENDING) |
| advk_pcie_handle_msi(pcie); |