| .. | .. |
|---|
| 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; }) |
|---|