hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/arch/riscv/include/asm/mmio.h
....@@ -101,9 +101,9 @@
101101 * Relaxed I/O memory access primitives. These follow the Device memory
102102 * ordering rules but do not guarantee any ordering relative to Normal memory
103103 * 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.
107107 */
108108 /* FIXME: These are now the same as asm-generic */
109109 #define __io_rbr() do {} while (0)
....@@ -125,14 +125,14 @@
125125 #endif
126126
127127 /*
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
131131 * doesn't define any ordering between the memory space and the I/O space.
132132 */
133133 #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"); })
136136 #define __io_aw() mmiowb_set_pending()
137137
138138 #define readb(c) ({ u8 __v; __io_br(); __v = readb_cpu(c); __io_ar(__v); __v; })