]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
parisc: mask out enable and reserved bits from sba imask
authorSven Schnelle <svens@stackframe.org>
Tue, 11 Aug 2020 16:19:19 +0000 (18:19 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Aug 2020 06:16:26 +0000 (08:16 +0200)
commit 5b24993c21cbf2de11aff077a48c5cb0505a0450 upstream.

When using kexec the SBA IOMMU IBASE might still have the RE
bit set. This triggers a WARN_ON when trying to write back the
IBASE register later, and it also makes some mask calculations fail.

Cc: <stable@vger.kernel.org>
Signed-off-by: Sven Schnelle <svens@stackframe.org>
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/parisc/sba_iommu.c

index de8e4e347249179a7cd3085f6a3c6f49e8ffd369..e410033b6df0cc38edba7e53011f37f06265e602 100644 (file)
@@ -1270,7 +1270,7 @@ sba_ioc_init_pluto(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
        ** (one that doesn't overlap memory or LMMIO space) in the
        ** IBASE and IMASK registers.
        */
-       ioc->ibase = READ_REG(ioc->ioc_hpa + IOC_IBASE);
+       ioc->ibase = READ_REG(ioc->ioc_hpa + IOC_IBASE) & ~0x1fffffULL;
        iova_space_size = ~(READ_REG(ioc->ioc_hpa + IOC_IMASK) & 0xFFFFFFFFUL) + 1;
 
        if ((ioc->ibase < 0xfed00000UL) && ((ioc->ibase + iova_space_size) > 0xfee00000UL)) {