| From 5b24993c21cbf2de11aff077a48c5cb0505a0450 Mon Sep 17 00:00:00 2001 |
| From: Sven Schnelle <svens@stackframe.org> |
| Date: Tue, 11 Aug 2020 18:19:19 +0200 |
| Subject: parisc: mask out enable and reserved bits from sba imask |
| |
| From: Sven Schnelle <svens@stackframe.org> |
| |
| 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 | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/parisc/sba_iommu.c |
| +++ b/drivers/parisc/sba_iommu.c |
| @@ -1270,7 +1270,7 @@ sba_ioc_init_pluto(struct parisc_device |
| ** (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)) { |