* [PATCH 1/3] ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l}
@ 2016-02-05 16:20 Arnd Bergmann
2016-02-05 16:20 ` [PATCH 2/3] ARM: ixp4xx: avoid warning about ioport_map() macro argument processing Arnd Bergmann
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Arnd Bergmann @ 2016-02-05 16:20 UTC (permalink / raw)
To: Imre Kaloz, Krzysztof Halasa
Cc: linux-arm-kernel, Arnd Bergmann, linux-kernel
ixp4xx defines the arguments to its __indirect_writesb() and other
functions as pointers to fixed-size data. This is not necessarily
wrong, and it works most of the time, but it causes warnings in
at least one driver:
drivers/net/ethernet/smsc/smc91x.c: In function 'smc_rcv':
drivers/net/ethernet/smsc/smc91x.c:495:21: error: passing argument 2 of '__indirect_readsw' from incompatible pointer type [-Werror=incompatible-pointer-types]
SMC_PULL_DATA(lp, data, packet_len - 4);
All other definitions of the same functions pass void pointers,
so doing the same here avoids the warnings.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
arch/arm/mach-ixp4xx/include/mach/io.h | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/arch/arm/mach-ixp4xx/include/mach/io.h b/arch/arm/mach-ixp4xx/include/mach/io.h
index 7a0c13bf4269..d04d3ec97ac0 100644
--- a/arch/arm/mach-ixp4xx/include/mach/io.h
+++ b/arch/arm/mach-ixp4xx/include/mach/io.h
@@ -95,8 +95,10 @@ static inline void __indirect_writeb(u8 value, volatile void __iomem *p)
}
static inline void __indirect_writesb(volatile void __iomem *bus_addr,
- const u8 *vaddr, int count)
+ const void *p, int count)
{
+ const u8 *vaddr = p;
+
while (count--)
writeb(*vaddr++, bus_addr);
}
@@ -118,8 +120,10 @@ static inline void __indirect_writew(u16 value, volatile void __iomem *p)
}
static inline void __indirect_writesw(volatile void __iomem *bus_addr,
- const u16 *vaddr, int count)
+ const void *p, int count)
{
+ const u16 *vaddr = p;
+
while (count--)
writew(*vaddr++, bus_addr);
}
@@ -137,8 +141,9 @@ static inline void __indirect_writel(u32 value, volatile void __iomem *p)
}
static inline void __indirect_writesl(volatile void __iomem *bus_addr,
- const u32 *vaddr, int count)
+ const void *p, int count)
{
+ const u32 *vaddr = p;
while (count--)
writel(*vaddr++, bus_addr);
}
@@ -160,8 +165,10 @@ static inline u8 __indirect_readb(const volatile void __iomem *p)
}
static inline void __indirect_readsb(const volatile void __iomem *bus_addr,
- u8 *vaddr, u32 count)
+ void *p, u32 count)
{
+ u8 *vaddr = p;
+
while (count--)
*vaddr++ = readb(bus_addr);
}
@@ -183,8 +190,10 @@ static inline u16 __indirect_readw(const volatile void __iomem *p)
}
static inline void __indirect_readsw(const volatile void __iomem *bus_addr,
- u16 *vaddr, u32 count)
+ void *p, u32 count)
{
+ u16 *vaddr = p;
+
while (count--)
*vaddr++ = readw(bus_addr);
}
@@ -204,8 +213,10 @@ static inline u32 __indirect_readl(const volatile void __iomem *p)
}
static inline void __indirect_readsl(const volatile void __iomem *bus_addr,
- u32 *vaddr, u32 count)
+ void *p, u32 count)
{
+ u32 *vaddr = p;
+
while (count--)
*vaddr++ = readl(bus_addr);
}
--
2.7.0
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH 2/3] ARM: ixp4xx: avoid warning about ioport_map() macro argument processing 2016-02-05 16:20 [PATCH 1/3] ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l} Arnd Bergmann @ 2016-02-05 16:20 ` Arnd Bergmann 2016-02-15 7:07 ` Krzysztof Hałasa 2016-02-05 16:20 ` [PATCH 3/3] ARM: ixp4xx: move indirect I/O into common-pci.c Arnd Bergmann 2016-02-15 7:05 ` [PATCH 1/3] ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l} Krzysztof Hałasa 2 siblings, 1 reply; 6+ messages in thread From: Arnd Bergmann @ 2016-02-05 16:20 UTC (permalink / raw) To: Imre Kaloz, Krzysztof Halasa Cc: linux-arm-kernel, Arnd Bergmann, linux-kernel We get a harmless compiler warning when building the cs89x0 driver for ixp4xx: drivers/net/ethernet/cirrus/cs89x0.c: In function 'cs89x0_ioport_probe': drivers/net/ethernet/cirrus/cs89x0.c:1602:28: warning: suggest parentheses around '+' in operand of '&' [-Wparentheses] io_mem = ioport_map(ioport & ~3, NETCARD_IO_EXTENT); Simply adding parentheses in the macro avoids the warning Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- arch/arm/mach-ixp4xx/include/mach/io.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/mach-ixp4xx/include/mach/io.h b/arch/arm/mach-ixp4xx/include/mach/io.h index d04d3ec97ac0..d8c2a4dc54d7 100644 --- a/arch/arm/mach-ixp4xx/include/mach/io.h +++ b/arch/arm/mach-ixp4xx/include/mach/io.h @@ -534,7 +534,7 @@ static inline void iowrite32_rep(void __iomem *addr, const void *vaddr, #endif } -#define ioport_map(port, nr) ((void __iomem*)(port + PIO_OFFSET)) +#define ioport_map(port, nr) ((void __iomem*)((port) + PIO_OFFSET)) #define ioport_unmap(addr) #endif /* CONFIG_PCI */ -- 2.7.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/3] ARM: ixp4xx: avoid warning about ioport_map() macro argument processing 2016-02-05 16:20 ` [PATCH 2/3] ARM: ixp4xx: avoid warning about ioport_map() macro argument processing Arnd Bergmann @ 2016-02-15 7:07 ` Krzysztof Hałasa 0 siblings, 0 replies; 6+ messages in thread From: Krzysztof Hałasa @ 2016-02-15 7:07 UTC (permalink / raw) To: Arnd Bergmann; +Cc: Imre Kaloz, linux-arm-kernel, linux-kernel Arnd Bergmann <arnd@arndb.de> writes: > We get a harmless compiler warning when building the cs89x0 driver > for ixp4xx: > > drivers/net/ethernet/cirrus/cs89x0.c: In function 'cs89x0_ioport_probe': > drivers/net/ethernet/cirrus/cs89x0.c:1602:28: warning: suggest parentheses around '+' in operand of '&' [-Wparentheses] > io_mem = ioport_map(ioport & ~3, NETCARD_IO_EXTENT); > > Simply adding parentheses in the macro avoids the warning > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > arch/arm/mach-ixp4xx/include/mach/io.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Acked-by: Krzysztof Hałasa <khalasa@piap.pl> -- Krzysztof Halasa Industrial Research Institute for Automation and Measurements PIAP Al. Jerozolimskie 202, 02-486 Warsaw, Poland ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 3/3] ARM: ixp4xx: move indirect I/O into common-pci.c 2016-02-05 16:20 [PATCH 1/3] ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l} Arnd Bergmann 2016-02-05 16:20 ` [PATCH 2/3] ARM: ixp4xx: avoid warning about ioport_map() macro argument processing Arnd Bergmann @ 2016-02-05 16:20 ` Arnd Bergmann 2016-02-15 7:07 ` Krzysztof Hałasa 2016-02-15 7:05 ` [PATCH 1/3] ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l} Krzysztof Hałasa 2 siblings, 1 reply; 6+ messages in thread From: Arnd Bergmann @ 2016-02-05 16:20 UTC (permalink / raw) To: Imre Kaloz, Krzysztof Halasa Cc: linux-arm-kernel, Arnd Bergmann, linux-kernel The pointer comparison in is_pci_memory() confuses gcc, so it starts throwing bogus warnings about the use of possibly uninitialized variables: drivers/ata/ahci_qoriq.c: In function 'ahci_qoriq_hardreset': arch/arm/include/asm/io.h:101:2: error: 'px_is' may be used uninitialized in this function [-Werror=maybe-uninitialized] drivers/crypto/ixp4xx_crypto.c: In function 'aead_perform': drivers/crypto/ixp4xx_crypto.c:1072:5: error: 'lastlen' may be used uninitialized in this function [-Werror=maybe-uninitialized] The code is that gets warned about is correct, and we should not warn about this. Moving the code into a .c file makes the object files smaller and avoids the warnings. Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- arch/arm/mach-ixp4xx/common-pci.c | 98 ++++++++++++++++++++++++++++++++++ arch/arm/mach-ixp4xx/include/mach/io.h | 95 +++----------------------------- 2 files changed, 104 insertions(+), 89 deletions(-) diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index 4977296f0c78..6f5d92f88062 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c @@ -166,6 +166,104 @@ int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data) return retval; } +#ifdef CONFIG_IXP4XX_INDIRECT_PCI +void __indirect_writeb(u8 value, volatile void __iomem *p) +{ + u32 addr = (u32)p; + u32 n, byte_enables, data; + + if (!is_pci_memory(addr)) { + __raw_writeb(value, p); + return; + } + + n = addr % 4; + byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL; + data = value << (8*n); + ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); +} +EXPORT_SYMBOL(__indirect_writeb); + +void __indirect_writew(u16 value, volatile void __iomem *p) +{ + u32 addr = (u32)p; + u32 n, byte_enables, data; + + if (!is_pci_memory(addr)) { + __raw_writew(value, p); + return; + } + + n = addr % 4; + byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL; + data = value << (8*n); + ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); +} +EXPORT_SYMBOL(__indirect_writew); + +void __indirect_writel(u32 value, volatile void __iomem *p) +{ + u32 addr = (__force u32)p; + + if (!is_pci_memory(addr)) { + __raw_writel(value, p); + return; + } + + ixp4xx_pci_write(addr, NP_CMD_MEMWRITE, value); +} +EXPORT_SYMBOL(__indirect_writel); + +u8 __indirect_readb(const volatile void __iomem *p) +{ + u32 addr = (u32)p; + u32 n, byte_enables, data; + + if (!is_pci_memory(addr)) + return __raw_readb(p); + + n = addr % 4; + byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL; + if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_MEMREAD, &data)) + return 0xff; + + return data >> (8*n); +} +EXPORT_SYMBOL(__indirect_readb); + +u16 __indirect_readw(const volatile void __iomem *p) +{ + u32 addr = (u32)p; + u32 n, byte_enables, data; + + if (!is_pci_memory(addr)) + return __raw_readw(p); + + n = addr % 4; + byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL; + if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_MEMREAD, &data)) + return 0xffff; + + return data>>(8*n); +} +EXPORT_SYMBOL(__indirect_readw); + +u32 __indirect_readl(const volatile void __iomem *p) +{ + u32 addr = (__force u32)p; + u32 data; + + if (!is_pci_memory(addr)) + return __raw_readl(p); + + if (ixp4xx_pci_read(addr, NP_CMD_MEMREAD, &data)) + return 0xffffffff; + + return data; +} +EXPORT_SYMBOL(__indirect_readl); +#endif + static u32 ixp4xx_config_addr(u8 bus_num, u16 devfn, int where) { u32 addr; diff --git a/arch/arm/mach-ixp4xx/include/mach/io.h b/arch/arm/mach-ixp4xx/include/mach/io.h index d8c2a4dc54d7..e770858b490a 100644 --- a/arch/arm/mach-ixp4xx/include/mach/io.h +++ b/arch/arm/mach-ixp4xx/include/mach/io.h @@ -78,21 +78,12 @@ static inline int is_pci_memory(u32 addr) #define readsw(p, v, l) __indirect_readsw(p, v, l) #define readsl(p, v, l) __indirect_readsl(p, v, l) -static inline void __indirect_writeb(u8 value, volatile void __iomem *p) -{ - u32 addr = (u32)p; - u32 n, byte_enables, data; - - if (!is_pci_memory(addr)) { - __raw_writeb(value, p); - return; - } - - n = addr % 4; - byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL; - data = value << (8*n); - ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); -} +void __indirect_writeb(u8 value, volatile void __iomem *p); +void __indirect_writew(u16 value, volatile void __iomem *p); +void __indirect_writel(u32 value, volatile void __iomem *p); +u8 __indirect_readb(const volatile void __iomem *p); +u16 __indirect_readw(const volatile void __iomem *p); +u32 __indirect_readl(const volatile void __iomem *p); static inline void __indirect_writesb(volatile void __iomem *bus_addr, const void *p, int count) @@ -103,22 +94,6 @@ static inline void __indirect_writesb(volatile void __iomem *bus_addr, writeb(*vaddr++, bus_addr); } -static inline void __indirect_writew(u16 value, volatile void __iomem *p) -{ - u32 addr = (u32)p; - u32 n, byte_enables, data; - - if (!is_pci_memory(addr)) { - __raw_writew(value, p); - return; - } - - n = addr % 4; - byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL; - data = value << (8*n); - ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); -} - static inline void __indirect_writesw(volatile void __iomem *bus_addr, const void *p, int count) { @@ -128,18 +103,6 @@ static inline void __indirect_writesw(volatile void __iomem *bus_addr, writew(*vaddr++, bus_addr); } -static inline void __indirect_writel(u32 value, volatile void __iomem *p) -{ - u32 addr = (__force u32)p; - - if (!is_pci_memory(addr)) { - __raw_writel(value, p); - return; - } - - ixp4xx_pci_write(addr, NP_CMD_MEMWRITE, value); -} - static inline void __indirect_writesl(volatile void __iomem *bus_addr, const void *p, int count) { @@ -148,22 +111,6 @@ static inline void __indirect_writesl(volatile void __iomem *bus_addr, writel(*vaddr++, bus_addr); } -static inline u8 __indirect_readb(const volatile void __iomem *p) -{ - u32 addr = (u32)p; - u32 n, byte_enables, data; - - if (!is_pci_memory(addr)) - return __raw_readb(p); - - n = addr % 4; - byte_enables = (0xf & ~BIT(n)) << IXP4XX_PCI_NP_CBE_BESL; - if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_MEMREAD, &data)) - return 0xff; - - return data >> (8*n); -} - static inline void __indirect_readsb(const volatile void __iomem *bus_addr, void *p, u32 count) { @@ -173,22 +120,6 @@ static inline void __indirect_readsb(const volatile void __iomem *bus_addr, *vaddr++ = readb(bus_addr); } -static inline u16 __indirect_readw(const volatile void __iomem *p) -{ - u32 addr = (u32)p; - u32 n, byte_enables, data; - - if (!is_pci_memory(addr)) - return __raw_readw(p); - - n = addr % 4; - byte_enables = (0xf & ~(BIT(n) | BIT(n+1))) << IXP4XX_PCI_NP_CBE_BESL; - if (ixp4xx_pci_read(addr, byte_enables | NP_CMD_MEMREAD, &data)) - return 0xffff; - - return data>>(8*n); -} - static inline void __indirect_readsw(const volatile void __iomem *bus_addr, void *p, u32 count) { @@ -198,20 +129,6 @@ static inline void __indirect_readsw(const volatile void __iomem *bus_addr, *vaddr++ = readw(bus_addr); } -static inline u32 __indirect_readl(const volatile void __iomem *p) -{ - u32 addr = (__force u32)p; - u32 data; - - if (!is_pci_memory(addr)) - return __raw_readl(p); - - if (ixp4xx_pci_read(addr, NP_CMD_MEMREAD, &data)) - return 0xffffffff; - - return data; -} - static inline void __indirect_readsl(const volatile void __iomem *bus_addr, void *p, u32 count) { -- 2.7.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 3/3] ARM: ixp4xx: move indirect I/O into common-pci.c 2016-02-05 16:20 ` [PATCH 3/3] ARM: ixp4xx: move indirect I/O into common-pci.c Arnd Bergmann @ 2016-02-15 7:07 ` Krzysztof Hałasa 0 siblings, 0 replies; 6+ messages in thread From: Krzysztof Hałasa @ 2016-02-15 7:07 UTC (permalink / raw) To: Arnd Bergmann; +Cc: Imre Kaloz, linux-arm-kernel, linux-kernel Arnd Bergmann <arnd@arndb.de> writes: > The pointer comparison in is_pci_memory() confuses gcc, so it > starts throwing bogus warnings about the use of possibly uninitialized > variables: > > drivers/ata/ahci_qoriq.c: In function 'ahci_qoriq_hardreset': > arch/arm/include/asm/io.h:101:2: error: 'px_is' may be used uninitialized in this function [-Werror=maybe-uninitialized] > drivers/crypto/ixp4xx_crypto.c: In function 'aead_perform': > drivers/crypto/ixp4xx_crypto.c:1072:5: error: 'lastlen' may be used uninitialized in this function [-Werror=maybe-uninitialized] > > The code is that gets warned about is correct, and we should not warn > about this. Moving the code into a .c file makes the object files > smaller and avoids the warnings. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > arch/arm/mach-ixp4xx/common-pci.c | 98 ++++++++++++++++++++++++++++++++++ > arch/arm/mach-ixp4xx/include/mach/io.h | 95 +++----------------------------- > 2 files changed, 104 insertions(+), 89 deletions(-) Acked-by: Krzysztof Hałasa <khalasa@piap.pl> -- Krzysztof Halasa Industrial Research Institute for Automation and Measurements PIAP Al. Jerozolimskie 202, 02-486 Warsaw, Poland ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/3] ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l} 2016-02-05 16:20 [PATCH 1/3] ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l} Arnd Bergmann 2016-02-05 16:20 ` [PATCH 2/3] ARM: ixp4xx: avoid warning about ioport_map() macro argument processing Arnd Bergmann 2016-02-05 16:20 ` [PATCH 3/3] ARM: ixp4xx: move indirect I/O into common-pci.c Arnd Bergmann @ 2016-02-15 7:05 ` Krzysztof Hałasa 2 siblings, 0 replies; 6+ messages in thread From: Krzysztof Hałasa @ 2016-02-15 7:05 UTC (permalink / raw) To: Arnd Bergmann; +Cc: Imre Kaloz, linux-arm-kernel, linux-kernel Arnd Bergmann <arnd@arndb.de> writes: > ixp4xx defines the arguments to its __indirect_writesb() and other > functions as pointers to fixed-size data. This is not necessarily > wrong, and it works most of the time, but it causes warnings in > at least one driver: > > drivers/net/ethernet/smsc/smc91x.c: In function 'smc_rcv': > drivers/net/ethernet/smsc/smc91x.c:495:21: error: passing argument 2 of '__indirect_readsw' from incompatible pointer type [-Werror=incompatible-pointer-types] > SMC_PULL_DATA(lp, data, packet_len - 4); > > All other definitions of the same functions pass void pointers, > so doing the same here avoids the warnings. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > --- > arch/arm/mach-ixp4xx/include/mach/io.h | 23 +++++++++++++++++------ > 1 file changed, 17 insertions(+), 6 deletions(-) Acked-by: Krzysztof Hałasa <khalasa@piap.pl> -- Krzysztof Halasa Industrial Research Institute for Automation and Measurements PIAP Al. Jerozolimskie 202, 02-486 Warsaw, Poland ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2016-02-15 7:07 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-05 16:20 [PATCH 1/3] ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l} Arnd Bergmann
2016-02-05 16:20 ` [PATCH 2/3] ARM: ixp4xx: avoid warning about ioport_map() macro argument processing Arnd Bergmann
2016-02-15 7:07 ` Krzysztof Hałasa
2016-02-05 16:20 ` [PATCH 3/3] ARM: ixp4xx: move indirect I/O into common-pci.c Arnd Bergmann
2016-02-15 7:07 ` Krzysztof Hałasa
2016-02-15 7:05 ` [PATCH 1/3] ARM: ixp4xx: use normal prototype for {read,write}s{b,w,l} Krzysztof Hałasa
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox