| From a8eee86317f11e97990d755d4615c1c0db203d08 Mon Sep 17 00:00:00 2001 |
| From: Arnd Bergmann <arnd@arndb.de> |
| Date: Tue, 3 Aug 2021 10:12:34 +0200 |
| Subject: soc: ixp4xx/qmgr: fix invalid __iomem access |
| |
| From: Arnd Bergmann <arnd@arndb.de> |
| |
| commit a8eee86317f11e97990d755d4615c1c0db203d08 upstream. |
| |
| Sparse reports a compile time warning when dereferencing an |
| __iomem pointer: |
| |
| drivers/soc/ixp4xx/ixp4xx-qmgr.c:149:37: warning: dereference of noderef expression |
| drivers/soc/ixp4xx/ixp4xx-qmgr.c:153:40: warning: dereference of noderef expression |
| drivers/soc/ixp4xx/ixp4xx-qmgr.c:154:40: warning: dereference of noderef expression |
| drivers/soc/ixp4xx/ixp4xx-qmgr.c:174:38: warning: dereference of noderef expression |
| drivers/soc/ixp4xx/ixp4xx-qmgr.c:174:44: warning: dereference of noderef expression |
| |
| Use __raw_readl() here for consistency with the rest of the file. |
| This should really get converted to some proper accessor, as the |
| __raw functions are not meant to be used in drivers, but the driver |
| has used these since the start, so for the moment, let's only fix |
| the warning. |
| |
| Reported-by: kernel test robot <lkp@intel.com> |
| Fixes: d4c9e9fc9751 ("IXP42x: Add QMgr support for IXP425 rev. A0 processors.") |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/soc/ixp4xx/ixp4xx-qmgr.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/soc/ixp4xx/ixp4xx-qmgr.c |
| +++ b/drivers/soc/ixp4xx/ixp4xx-qmgr.c |
| @@ -145,12 +145,12 @@ static irqreturn_t qmgr_irq1_a0(int irq, |
| /* ACK - it may clear any bits so don't rely on it */ |
| __raw_writel(0xFFFFFFFF, &qmgr_regs->irqstat[0]); |
| |
| - en_bitmap = qmgr_regs->irqen[0]; |
| + en_bitmap = __raw_readl(&qmgr_regs->irqen[0]); |
| while (en_bitmap) { |
| i = __fls(en_bitmap); /* number of the last "low" queue */ |
| en_bitmap &= ~BIT(i); |
| - src = qmgr_regs->irqsrc[i >> 3]; |
| - stat = qmgr_regs->stat1[i >> 3]; |
| + src = __raw_readl(&qmgr_regs->irqsrc[i >> 3]); |
| + stat = __raw_readl(&qmgr_regs->stat1[i >> 3]); |
| if (src & 4) /* the IRQ condition is inverted */ |
| stat = ~stat; |
| if (stat & BIT(src & 3)) { |
| @@ -170,7 +170,8 @@ static irqreturn_t qmgr_irq2_a0(int irq, |
| /* ACK - it may clear any bits so don't rely on it */ |
| __raw_writel(0xFFFFFFFF, &qmgr_regs->irqstat[1]); |
| |
| - req_bitmap = qmgr_regs->irqen[1] & qmgr_regs->statne_h; |
| + req_bitmap = __raw_readl(&qmgr_regs->irqen[1]) & |
| + __raw_readl(&qmgr_regs->statne_h); |
| while (req_bitmap) { |
| i = __fls(req_bitmap); /* number of the last "high" queue */ |
| req_bitmap &= ~BIT(i); |