@@ -31,13 +31,14 @@ void _insb(const volatile u8 __iomem *port, void *buf, long count)
3131
3232 if (unlikely (count <= 0 ))
3333 return ;
34- asm volatile ("sync" );
34+
35+ mb ();
3536 do {
3637 tmp = * (const volatile u8 __force * )port ;
3738 eieio ();
3839 * tbuf ++ = tmp ;
3940 } while (-- count != 0 );
40- asm volatile ( "twi 0,%0,0; isync" : : "r" ( tmp ) );
41+ data_barrier ( tmp );
4142}
4243EXPORT_SYMBOL (_insb );
4344
@@ -47,11 +48,12 @@ void _outsb(volatile u8 __iomem *port, const void *buf, long count)
4748
4849 if (unlikely (count <= 0 ))
4950 return ;
50- asm volatile ("sync" );
51+
52+ mb ();
5153 do {
5254 * (volatile u8 __force * )port = * tbuf ++ ;
5355 } while (-- count != 0 );
54- asm volatile ( "sync" );
56+ mb ( );
5557}
5658EXPORT_SYMBOL (_outsb );
5759
@@ -62,13 +64,14 @@ void _insw(const volatile u16 __iomem *port, void *buf, long count)
6264
6365 if (unlikely (count <= 0 ))
6466 return ;
65- asm volatile ("sync" );
67+
68+ mb ();
6669 do {
6770 tmp = * (const volatile u16 __force * )port ;
6871 eieio ();
6972 * tbuf ++ = tmp ;
7073 } while (-- count != 0 );
71- asm volatile ( "twi 0,%0,0; isync" : : "r" ( tmp ) );
74+ data_barrier ( tmp );
7275}
7376EXPORT_SYMBOL (_insw );
7477
@@ -78,11 +81,12 @@ void _outsw(volatile u16 __iomem *port, const void *buf, long count)
7881
7982 if (unlikely (count <= 0 ))
8083 return ;
81- asm volatile ("sync" );
84+
85+ mb ();
8286 do {
8387 * (volatile u16 __force * )port = * tbuf ++ ;
8488 } while (-- count != 0 );
85- asm volatile ( "sync" );
89+ mb ( );
8690}
8791EXPORT_SYMBOL (_outsw );
8892
@@ -93,13 +97,14 @@ void _insl(const volatile u32 __iomem *port, void *buf, long count)
9397
9498 if (unlikely (count <= 0 ))
9599 return ;
96- asm volatile ("sync" );
100+
101+ mb ();
97102 do {
98103 tmp = * (const volatile u32 __force * )port ;
99104 eieio ();
100105 * tbuf ++ = tmp ;
101106 } while (-- count != 0 );
102- asm volatile ( "twi 0,%0,0; isync" : : "r" ( tmp ) );
107+ data_barrier ( tmp );
103108}
104109EXPORT_SYMBOL (_insl );
105110
@@ -109,11 +114,12 @@ void _outsl(volatile u32 __iomem *port, const void *buf, long count)
109114
110115 if (unlikely (count <= 0 ))
111116 return ;
112- asm volatile ("sync" );
117+
118+ mb ();
113119 do {
114120 * (volatile u32 __force * )port = * tbuf ++ ;
115121 } while (-- count != 0 );
116- asm volatile ( "sync" );
122+ mb ( );
117123}
118124EXPORT_SYMBOL (_outsl );
119125
@@ -127,7 +133,7 @@ _memset_io(volatile void __iomem *addr, int c, unsigned long n)
127133 lc |= lc << 8 ;
128134 lc |= lc << 16 ;
129135
130- __asm__ __volatile__ ( "sync" : : : "memory" );
136+ mb ( );
131137 while (n && !IO_CHECK_ALIGN (p , 4 )) {
132138 * ((volatile u8 * )p ) = c ;
133139 p ++ ;
@@ -143,7 +149,7 @@ _memset_io(volatile void __iomem *addr, int c, unsigned long n)
143149 p ++ ;
144150 n -- ;
145151 }
146- __asm__ __volatile__ ( "sync" : : : "memory" );
152+ mb ( );
147153}
148154EXPORT_SYMBOL (_memset_io );
149155
@@ -152,7 +158,7 @@ void _memcpy_fromio(void *dest, const volatile void __iomem *src,
152158{
153159 void * vsrc = (void __force * ) src ;
154160
155- __asm__ __volatile__ ( "sync" : : : "memory" );
161+ mb ( );
156162 while (n && (!IO_CHECK_ALIGN (vsrc , 4 ) || !IO_CHECK_ALIGN (dest , 4 ))) {
157163 * ((u8 * )dest ) = * ((volatile u8 * )vsrc );
158164 eieio ();
@@ -174,15 +180,15 @@ void _memcpy_fromio(void *dest, const volatile void __iomem *src,
174180 dest ++ ;
175181 n -- ;
176182 }
177- __asm__ __volatile__ ( "sync" : : : "memory" );
183+ mb ( );
178184}
179185EXPORT_SYMBOL (_memcpy_fromio );
180186
181187void _memcpy_toio (volatile void __iomem * dest , const void * src , unsigned long n )
182188{
183189 void * vdest = (void __force * ) dest ;
184190
185- __asm__ __volatile__ ( "sync" : : : "memory" );
191+ mb ( );
186192 while (n && (!IO_CHECK_ALIGN (vdest , 4 ) || !IO_CHECK_ALIGN (src , 4 ))) {
187193 * ((volatile u8 * )vdest ) = * ((u8 * )src );
188194 src ++ ;
@@ -201,6 +207,6 @@ void _memcpy_toio(volatile void __iomem *dest, const void *src, unsigned long n)
201207 vdest ++ ;
202208 n -- ;
203209 }
204- __asm__ __volatile__ ( "sync" : : : "memory" );
210+ mb ( );
205211}
206212EXPORT_SYMBOL (_memcpy_toio );
0 commit comments