.. | .. |
---|
101 | 101 | * Relaxed I/O memory access primitives. These follow the Device memory |
---|
102 | 102 | * ordering rules but do not guarantee any ordering relative to Normal memory |
---|
103 | 103 | * accesses. These are defined to order the indicated access (either a read or |
---|
104 | | - * write) with all other I/O memory accesses. Since the platform specification |
---|
105 | | - * defines that all I/O regions are strongly ordered on channel 2, no explicit |
---|
106 | | - * fences are required to enforce this ordering. |
---|
| 104 | + * write) with all other I/O memory accesses to the same peripheral. Since the |
---|
| 105 | + * platform specification defines that all I/O regions are strongly ordered on |
---|
| 106 | + * channel 0, no explicit fences are required to enforce this ordering. |
---|
107 | 107 | */ |
---|
108 | 108 | /* FIXME: These are now the same as asm-generic */ |
---|
109 | 109 | #define __io_rbr() do {} while (0) |
---|
.. | .. |
---|
125 | 125 | #endif |
---|
126 | 126 | |
---|
127 | 127 | /* |
---|
128 | | - * I/O memory access primitives. Reads are ordered relative to any |
---|
129 | | - * following Normal memory access. Writes are ordered relative to any prior |
---|
130 | | - * Normal memory access. The memory barriers here are necessary as RISC-V |
---|
| 128 | + * I/O memory access primitives. Reads are ordered relative to any following |
---|
| 129 | + * Normal memory read and delay() loop. Writes are ordered relative to any |
---|
| 130 | + * prior Normal memory write. The memory barriers here are necessary as RISC-V |
---|
131 | 131 | * doesn't define any ordering between the memory space and the I/O space. |
---|
132 | 132 | */ |
---|
133 | 133 | #define __io_br() do {} while (0) |
---|
134 | | -#define __io_ar(v) __asm__ __volatile__ ("fence i,r" : : : "memory") |
---|
135 | | -#define __io_bw() __asm__ __volatile__ ("fence w,o" : : : "memory") |
---|
| 134 | +#define __io_ar(v) ({ __asm__ __volatile__ ("fence i,ir" : : : "memory"); }) |
---|
| 135 | +#define __io_bw() ({ __asm__ __volatile__ ("fence w,o" : : : "memory"); }) |
---|
136 | 136 | #define __io_aw() mmiowb_set_pending() |
---|
137 | 137 | |
---|
138 | 138 | #define readb(c) ({ u8 __v; __io_br(); __v = readb_cpu(c); __io_ar(__v); __v; }) |
---|