Message ID | 20240516155610.191612-3-thorsten.blum@toblux.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v2] net: smc91x: Fix pointer types | expand |
On Thu, May 16, 2024 at 05:56:12PM +0200, Thorsten Blum wrote: > Use void __iomem pointers as parameters for mcf_insw() and mcf_outsw() > to align with the parameter types of readw() and writew(). > > Use lp->base instead of ioaddr when calling SMC_outsw(), SMC_outsb(), > SMC_insw(), and SMC_insb() to retain its type across macro boundaries > and to fix the following warnings reported by kernel test robot: > > drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces) > drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a > drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem * > drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces) > drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a > drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem * > drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: warning: incorrect type in argument 1 (different address spaces) > drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: expected void *a > drivers/net/ethernet/smsc/smc91x.c:590:9: sparse: got void [noderef] __iomem * > drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: warning: incorrect type in argument 1 (different address spaces) > drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: expected void *a > drivers/net/ethernet/smsc/smc91x.c:483:17: sparse: got void [noderef] __iomem * > > Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com> > Reported-by: kernel test robot <lkp@intel.com> > Closes: https://lore.kernel.org/oe-kbuild-all/202405160853.3qyaSj8w-lkp@intel.com/ > Acked-by: Nicolas Pitre <nico@fluxnic.net> Reviewed-by: Andrew Lunn <andrew@lunn.ch> You could add a follow up patch which removes the void __iomem *__ioaddr = ioaddr; lines and uses lp->base. The code will then be more uniform. Andrew
On Thu, 16 May 2024, Andrew Lunn wrote: > You could add a follow up patch which removes the > void __iomem *__ioaddr = ioaddr; lines and uses lp->base. > The code will then be more uniform. Beware, It is sometimes overridden with __ioaddr = lp->datacs. Nicolas
diff --git a/drivers/net/ethernet/smsc/smc91x.h b/drivers/net/ethernet/smsc/smc91x.h index 45ef5ac0788a..a1523fb503a3 100644 --- a/drivers/net/ethernet/smsc/smc91x.h +++ b/drivers/net/ethernet/smsc/smc91x.h @@ -142,14 +142,14 @@ static inline void _SMC_outw_align4(u16 val, void __iomem *ioaddr, int reg, #define SMC_CAN_USE_32BIT 0 #define SMC_NOWAIT 1 -static inline void mcf_insw(void *a, unsigned char *p, int l) +static inline void mcf_insw(void __iomem *a, unsigned char *p, int l) { u16 *wp = (u16 *) p; while (l-- > 0) *wp++ = readw(a); } -static inline void mcf_outsw(void *a, unsigned char *p, int l) +static inline void mcf_outsw(void __iomem *a, unsigned char *p, int l) { u16 *wp = (u16 *) p; while (l-- > 0) @@ -1034,7 +1034,7 @@ static const char * chip_ids[ 16 ] = { void __iomem *__ioaddr = ioaddr; \ if (__len >= 2 && (unsigned long)__ptr & 2) { \ __len -= 2; \ - SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \ + SMC_outsw(lp->base, DATA_REG(lp), __ptr, 1); \ __ptr += 2; \ } \ if (SMC_CAN_USE_DATACS && lp->datacs) \ @@ -1042,12 +1042,12 @@ static const char * chip_ids[ 16 ] = { SMC_outsl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \ if (__len & 2) { \ __ptr += (__len & ~3); \ - SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \ + SMC_outsw(lp->base, DATA_REG(lp), __ptr, 1); \ } \ } else if (SMC_16BIT(lp)) \ - SMC_outsw(ioaddr, DATA_REG(lp), p, (l) >> 1); \ + SMC_outsw(lp->base, DATA_REG(lp), p, (l) >> 1); \ else if (SMC_8BIT(lp)) \ - SMC_outsb(ioaddr, DATA_REG(lp), p, l); \ + SMC_outsb(lp->base, DATA_REG(lp), p, l); \ } while (0) #define SMC_PULL_DATA(lp, p, l) \ @@ -1080,9 +1080,9 @@ static const char * chip_ids[ 16 ] = { __len += 2; \ SMC_insl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \ } else if (SMC_16BIT(lp)) \ - SMC_insw(ioaddr, DATA_REG(lp), p, (l) >> 1); \ + SMC_insw(lp->base, DATA_REG(lp), p, (l) >> 1); \ else if (SMC_8BIT(lp)) \ - SMC_insb(ioaddr, DATA_REG(lp), p, l); \ + SMC_insb(lp->base, DATA_REG(lp), p, l); \ } while (0) #endif /* _SMC91X_H_ */