diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2016-02-08 09:33:42 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2016-02-16 15:06:54 -0500 |
| commit | a5a23ad52d1310976891c30471f4ee8d73f3cc9e (patch) | |
| tree | 0aac2978a63e31fcab8f70038e537cd4ab5ce5c4 /drivers/net/ethernet/amd | |
| parent | bd59cfc51df7ddc88755a60a1293cee55f5d0a12 (diff) | |
net: am79c961a: avoid %? in inline assembly
The am79c961a.c driver fails to build with clang because of an
unusual inline assembly construct:
drivers/net/ethernet/amd/am79c961a.c:53:7: error: invalid % escape in inline assembly string
"str%?h %1, [%2] @ NET_RAP\n\t"
The same change has been done a decade ago in arch/arm as of
6a39dd6222dd ("[ARM] 3759/2: Remove uses of %?"), but apparently
some drivers were missed.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/amd')
| -rw-r--r-- | drivers/net/ethernet/amd/am79c961a.c | 64 |
1 files changed, 32 insertions, 32 deletions
diff --git a/drivers/net/ethernet/amd/am79c961a.c b/drivers/net/ethernet/amd/am79c961a.c index 87e727b921dc..fcdf5dda448f 100644 --- a/drivers/net/ethernet/amd/am79c961a.c +++ b/drivers/net/ethernet/amd/am79c961a.c | |||
| @@ -50,8 +50,8 @@ static const char version[] = | |||
| 50 | static void write_rreg(u_long base, u_int reg, u_int val) | 50 | static void write_rreg(u_long base, u_int reg, u_int val) |
| 51 | { | 51 | { |
| 52 | asm volatile( | 52 | asm volatile( |
| 53 | "str%?h %1, [%2] @ NET_RAP\n\t" | 53 | "strh %1, [%2] @ NET_RAP\n\t" |
| 54 | "str%?h %0, [%2, #-4] @ NET_RDP" | 54 | "strh %0, [%2, #-4] @ NET_RDP" |
| 55 | : | 55 | : |
| 56 | : "r" (val), "r" (reg), "r" (ISAIO_BASE + 0x0464)); | 56 | : "r" (val), "r" (reg), "r" (ISAIO_BASE + 0x0464)); |
| 57 | } | 57 | } |
| @@ -60,8 +60,8 @@ static inline unsigned short read_rreg(u_long base_addr, u_int reg) | |||
| 60 | { | 60 | { |
| 61 | unsigned short v; | 61 | unsigned short v; |
| 62 | asm volatile( | 62 | asm volatile( |
| 63 | "str%?h %1, [%2] @ NET_RAP\n\t" | 63 | "strh %1, [%2] @ NET_RAP\n\t" |
| 64 | "ldr%?h %0, [%2, #-4] @ NET_RDP" | 64 | "ldrh %0, [%2, #-4] @ NET_RDP" |
| 65 | : "=r" (v) | 65 | : "=r" (v) |
| 66 | : "r" (reg), "r" (ISAIO_BASE + 0x0464)); | 66 | : "r" (reg), "r" (ISAIO_BASE + 0x0464)); |
| 67 | return v; | 67 | return v; |
| @@ -70,8 +70,8 @@ static inline unsigned short read_rreg(u_long base_addr, u_int reg) | |||
| 70 | static inline void write_ireg(u_long base, u_int reg, u_int val) | 70 | static inline void write_ireg(u_long base, u_int reg, u_int val) |
| 71 | { | 71 | { |
| 72 | asm volatile( | 72 | asm volatile( |
| 73 | "str%?h %1, [%2] @ NET_RAP\n\t" | 73 | "strh %1, [%2] @ NET_RAP\n\t" |
| 74 | "str%?h %0, [%2, #8] @ NET_IDP" | 74 | "strh %0, [%2, #8] @ NET_IDP" |
| 75 | : | 75 | : |
| 76 | : "r" (val), "r" (reg), "r" (ISAIO_BASE + 0x0464)); | 76 | : "r" (val), "r" (reg), "r" (ISAIO_BASE + 0x0464)); |
| 77 | } | 77 | } |
| @@ -80,8 +80,8 @@ static inline unsigned short read_ireg(u_long base_addr, u_int reg) | |||
| 80 | { | 80 | { |
| 81 | u_short v; | 81 | u_short v; |
| 82 | asm volatile( | 82 | asm volatile( |
| 83 | "str%?h %1, [%2] @ NAT_RAP\n\t" | 83 | "strh %1, [%2] @ NAT_RAP\n\t" |
| 84 | "ldr%?h %0, [%2, #8] @ NET_IDP\n\t" | 84 | "ldrh %0, [%2, #8] @ NET_IDP\n\t" |
| 85 | : "=r" (v) | 85 | : "=r" (v) |
| 86 | : "r" (reg), "r" (ISAIO_BASE + 0x0464)); | 86 | : "r" (reg), "r" (ISAIO_BASE + 0x0464)); |
| 87 | return v; | 87 | return v; |
| @@ -96,7 +96,7 @@ am_writebuffer(struct net_device *dev, u_int offset, unsigned char *buf, unsigne | |||
| 96 | offset = ISAMEM_BASE + (offset << 1); | 96 | offset = ISAMEM_BASE + (offset << 1); |
| 97 | length = (length + 1) & ~1; | 97 | length = (length + 1) & ~1; |
| 98 | if ((int)buf & 2) { | 98 | if ((int)buf & 2) { |
| 99 | asm volatile("str%?h %2, [%0], #4" | 99 | asm volatile("strh %2, [%0], #4" |
| 100 | : "=&r" (offset) : "0" (offset), "r" (buf[0] | (buf[1] << 8))); | 100 | : "=&r" (offset) : "0" (offset), "r" (buf[0] | (buf[1] << 8))); |
| 101 | buf += 2; | 101 | buf += 2; |
| 102 | length -= 2; | 102 | length -= 2; |
| @@ -104,20 +104,20 @@ am_writebuffer(struct net_device *dev, u_int offset, unsigned char *buf, unsigne | |||
| 104 | while (length > 8) { | 104 | while (length > 8) { |
| 105 | register unsigned int tmp asm("r2"), tmp2 asm("r3"); | 105 | register unsigned int tmp asm("r2"), tmp2 asm("r3"); |
| 106 | asm volatile( | 106 | asm volatile( |
| 107 | "ldm%?ia %0!, {%1, %2}" | 107 | "ldmia %0!, {%1, %2}" |
| 108 | : "+r" (buf), "=&r" (tmp), "=&r" (tmp2)); | 108 | : "+r" (buf), "=&r" (tmp), "=&r" (tmp2)); |
| 109 | length -= 8; | 109 | length -= 8; |
| 110 | asm volatile( | 110 | asm volatile( |
| 111 | "str%?h %1, [%0], #4\n\t" | 111 | "strh %1, [%0], #4\n\t" |
| 112 | "mov%? %1, %1, lsr #16\n\t" | 112 | "mov %1, %1, lsr #16\n\t" |
| 113 | "str%?h %1, [%0], #4\n\t" | 113 | "strh %1, [%0], #4\n\t" |
| 114 | "str%?h %2, [%0], #4\n\t" | 114 | "strh %2, [%0], #4\n\t" |
| 115 | "mov%? %2, %2, lsr #16\n\t" | 115 | "mov %2, %2, lsr #16\n\t" |
| 116 | "str%?h %2, [%0], #4" | 116 | "strh %2, [%0], #4" |
| 117 | : "+r" (offset), "=&r" (tmp), "=&r" (tmp2)); | 117 | : "+r" (offset), "=&r" (tmp), "=&r" (tmp2)); |
| 118 | } | 118 | } |
| 119 | while (length > 0) { | 119 | while (length > 0) { |
| 120 | asm volatile("str%?h %2, [%0], #4" | 120 | asm volatile("strh %2, [%0], #4" |
| 121 | : "=&r" (offset) : "0" (offset), "r" (buf[0] | (buf[1] << 8))); | 121 | : "=&r" (offset) : "0" (offset), "r" (buf[0] | (buf[1] << 8))); |
| 122 | buf += 2; | 122 | buf += 2; |
| 123 | length -= 2; | 123 | length -= 2; |
| @@ -132,23 +132,23 @@ am_readbuffer(struct net_device *dev, u_int offset, unsigned char *buf, unsigned | |||
| 132 | if ((int)buf & 2) { | 132 | if ((int)buf & 2) { |
| 133 | unsigned int tmp; | 133 | unsigned int tmp; |
| 134 | asm volatile( | 134 | asm volatile( |
| 135 | "ldr%?h %2, [%0], #4\n\t" | 135 | "ldrh %2, [%0], #4\n\t" |
| 136 | "str%?b %2, [%1], #1\n\t" | 136 | "strb %2, [%1], #1\n\t" |
| 137 | "mov%? %2, %2, lsr #8\n\t" | 137 | "mov %2, %2, lsr #8\n\t" |
| 138 | "str%?b %2, [%1], #1" | 138 | "strb %2, [%1], #1" |
| 139 | : "=&r" (offset), "=&r" (buf), "=r" (tmp): "0" (offset), "1" (buf)); | 139 | : "=&r" (offset), "=&r" (buf), "=r" (tmp): "0" (offset), "1" (buf)); |
| 140 | length -= 2; | 140 | length -= 2; |
| 141 | } | 141 | } |
| 142 | while (length > 8) { | 142 | while (length > 8) { |
| 143 | register unsigned int tmp asm("r2"), tmp2 asm("r3"), tmp3; | 143 | register unsigned int tmp asm("r2"), tmp2 asm("r3"), tmp3; |
| 144 | asm volatile( | 144 | asm volatile( |
| 145 | "ldr%?h %2, [%0], #4\n\t" | 145 | "ldrh %2, [%0], #4\n\t" |
| 146 | "ldr%?h %4, [%0], #4\n\t" | 146 | "ldrh %4, [%0], #4\n\t" |
| 147 | "ldr%?h %3, [%0], #4\n\t" | 147 | "ldrh %3, [%0], #4\n\t" |
| 148 | "orr%? %2, %2, %4, lsl #16\n\t" | 148 | "orr %2, %2, %4, lsl #16\n\t" |
| 149 | "ldr%?h %4, [%0], #4\n\t" | 149 | "ldrh %4, [%0], #4\n\t" |
| 150 | "orr%? %3, %3, %4, lsl #16\n\t" | 150 | "orr %3, %3, %4, lsl #16\n\t" |
| 151 | "stm%?ia %1!, {%2, %3}" | 151 | "stmia %1!, {%2, %3}" |
| 152 | : "=&r" (offset), "=&r" (buf), "=r" (tmp), "=r" (tmp2), "=r" (tmp3) | 152 | : "=&r" (offset), "=&r" (buf), "=r" (tmp), "=r" (tmp2), "=r" (tmp3) |
| 153 | : "0" (offset), "1" (buf)); | 153 | : "0" (offset), "1" (buf)); |
| 154 | length -= 8; | 154 | length -= 8; |
| @@ -156,10 +156,10 @@ am_readbuffer(struct net_device *dev, u_int offset, unsigned char *buf, unsigned | |||
| 156 | while (length > 0) { | 156 | while (length > 0) { |
| 157 | unsigned int tmp; | 157 | unsigned int tmp; |
| 158 | asm volatile( | 158 | asm volatile( |
| 159 | "ldr%?h %2, [%0], #4\n\t" | 159 | "ldrh %2, [%0], #4\n\t" |
| 160 | "str%?b %2, [%1], #1\n\t" | 160 | "strb %2, [%1], #1\n\t" |
| 161 | "mov%? %2, %2, lsr #8\n\t" | 161 | "mov %2, %2, lsr #8\n\t" |
| 162 | "str%?b %2, [%1], #1" | 162 | "strb %2, [%1], #1" |
| 163 | : "=&r" (offset), "=&r" (buf), "=r" (tmp) : "0" (offset), "1" (buf)); | 163 | : "=&r" (offset), "=&r" (buf), "=r" (tmp) : "0" (offset), "1" (buf)); |
| 164 | length -= 2; | 164 | length -= 2; |
| 165 | } | 165 | } |
