@@ -31,13 +31,14 @@ void _insb(const volatile u8 __iomem *port, void *buf, long count)
31
31
32
32
if (unlikely (count <= 0 ))
33
33
return ;
34
- asm volatile ("sync" );
34
+
35
+ mb ();
35
36
do {
36
37
tmp = * (const volatile u8 __force * )port ;
37
38
eieio ();
38
39
* tbuf ++ = tmp ;
39
40
} while (-- count != 0 );
40
- asm volatile ( "twi 0,%0,0; isync" : : "r" ( tmp ) );
41
+ data_barrier ( tmp );
41
42
}
42
43
EXPORT_SYMBOL (_insb );
43
44
@@ -47,11 +48,12 @@ void _outsb(volatile u8 __iomem *port, const void *buf, long count)
47
48
48
49
if (unlikely (count <= 0 ))
49
50
return ;
50
- asm volatile ("sync" );
51
+
52
+ mb ();
51
53
do {
52
54
* (volatile u8 __force * )port = * tbuf ++ ;
53
55
} while (-- count != 0 );
54
- asm volatile ( "sync" );
56
+ mb ( );
55
57
}
56
58
EXPORT_SYMBOL (_outsb );
57
59
@@ -62,13 +64,14 @@ void _insw(const volatile u16 __iomem *port, void *buf, long count)
62
64
63
65
if (unlikely (count <= 0 ))
64
66
return ;
65
- asm volatile ("sync" );
67
+
68
+ mb ();
66
69
do {
67
70
tmp = * (const volatile u16 __force * )port ;
68
71
eieio ();
69
72
* tbuf ++ = tmp ;
70
73
} while (-- count != 0 );
71
- asm volatile ( "twi 0,%0,0; isync" : : "r" ( tmp ) );
74
+ data_barrier ( tmp );
72
75
}
73
76
EXPORT_SYMBOL (_insw );
74
77
@@ -78,11 +81,12 @@ void _outsw(volatile u16 __iomem *port, const void *buf, long count)
78
81
79
82
if (unlikely (count <= 0 ))
80
83
return ;
81
- asm volatile ("sync" );
84
+
85
+ mb ();
82
86
do {
83
87
* (volatile u16 __force * )port = * tbuf ++ ;
84
88
} while (-- count != 0 );
85
- asm volatile ( "sync" );
89
+ mb ( );
86
90
}
87
91
EXPORT_SYMBOL (_outsw );
88
92
@@ -93,13 +97,14 @@ void _insl(const volatile u32 __iomem *port, void *buf, long count)
93
97
94
98
if (unlikely (count <= 0 ))
95
99
return ;
96
- asm volatile ("sync" );
100
+
101
+ mb ();
97
102
do {
98
103
tmp = * (const volatile u32 __force * )port ;
99
104
eieio ();
100
105
* tbuf ++ = tmp ;
101
106
} while (-- count != 0 );
102
- asm volatile ( "twi 0,%0,0; isync" : : "r" ( tmp ) );
107
+ data_barrier ( tmp );
103
108
}
104
109
EXPORT_SYMBOL (_insl );
105
110
@@ -109,11 +114,12 @@ void _outsl(volatile u32 __iomem *port, const void *buf, long count)
109
114
110
115
if (unlikely (count <= 0 ))
111
116
return ;
112
- asm volatile ("sync" );
117
+
118
+ mb ();
113
119
do {
114
120
* (volatile u32 __force * )port = * tbuf ++ ;
115
121
} while (-- count != 0 );
116
- asm volatile ( "sync" );
122
+ mb ( );
117
123
}
118
124
EXPORT_SYMBOL (_outsl );
119
125
@@ -127,7 +133,7 @@ _memset_io(volatile void __iomem *addr, int c, unsigned long n)
127
133
lc |= lc << 8 ;
128
134
lc |= lc << 16 ;
129
135
130
- __asm__ __volatile__ ( "sync" : : : "memory" );
136
+ mb ( );
131
137
while (n && !IO_CHECK_ALIGN (p , 4 )) {
132
138
* ((volatile u8 * )p ) = c ;
133
139
p ++ ;
@@ -143,7 +149,7 @@ _memset_io(volatile void __iomem *addr, int c, unsigned long n)
143
149
p ++ ;
144
150
n -- ;
145
151
}
146
- __asm__ __volatile__ ( "sync" : : : "memory" );
152
+ mb ( );
147
153
}
148
154
EXPORT_SYMBOL (_memset_io );
149
155
@@ -152,7 +158,7 @@ void _memcpy_fromio(void *dest, const volatile void __iomem *src,
152
158
{
153
159
void * vsrc = (void __force * ) src ;
154
160
155
- __asm__ __volatile__ ( "sync" : : : "memory" );
161
+ mb ( );
156
162
while (n && (!IO_CHECK_ALIGN (vsrc , 4 ) || !IO_CHECK_ALIGN (dest , 4 ))) {
157
163
* ((u8 * )dest ) = * ((volatile u8 * )vsrc );
158
164
eieio ();
@@ -174,15 +180,15 @@ void _memcpy_fromio(void *dest, const volatile void __iomem *src,
174
180
dest ++ ;
175
181
n -- ;
176
182
}
177
- __asm__ __volatile__ ( "sync" : : : "memory" );
183
+ mb ( );
178
184
}
179
185
EXPORT_SYMBOL (_memcpy_fromio );
180
186
181
187
void _memcpy_toio (volatile void __iomem * dest , const void * src , unsigned long n )
182
188
{
183
189
void * vdest = (void __force * ) dest ;
184
190
185
- __asm__ __volatile__ ( "sync" : : : "memory" );
191
+ mb ( );
186
192
while (n && (!IO_CHECK_ALIGN (vdest , 4 ) || !IO_CHECK_ALIGN (src , 4 ))) {
187
193
* ((volatile u8 * )vdest ) = * ((u8 * )src );
188
194
src ++ ;
@@ -201,6 +207,6 @@ void _memcpy_toio(volatile void __iomem *dest, const void *src, unsigned long n)
201
207
vdest ++ ;
202
208
n -- ;
203
209
}
204
- __asm__ __volatile__ ( "sync" : : : "memory" );
210
+ mb ( );
205
211
}
206
212
EXPORT_SYMBOL (_memcpy_toio );
0 commit comments