patrick@ pointed out that the arm64 bus_space implementation was (partly) copied from mips64. Therefore th fixes should probably be applied there as well.
Untested so far.
Index: arch/loongson/include/bus.h
===================================================================
RCS file: /cvs/src/sys/arch/loongson/include/bus.h,v
retrieving revision 1.7
diff -u -p -r1.7 bus.h
--- arch/loongson/include/bus.h 8 May 2017 00:27:45 -0000 1.7
+++ arch/loongson/include/bus.h 13 Apr 2020 21:42:14 -0000
@@ -144,8 +144,10 @@ static __inline void
\
CAT(bus_space_read_region_,n)(bus_space_tag_t bst, bus_space_handle_t bsh, \
bus_addr_t ba, CAT3(u_int,m,_t) *x, size_t cnt) \
{ \
- while (cnt--) \
- *x++ = CAT(bus_space_read_,n)(bst, bsh, ba++); \
+ while (cnt--) { \
+ *x++ = CAT(bus_space_read_,n)(bst, bsh, ba); \
+ ba += (n); \
+ } \
}
bus_space_read_region(1,8)
@@ -178,9 +180,8 @@ static __inline void
\
CAT(bus_space_write_multi_,n)(bus_space_tag_t bst, bus_space_handle_t bsh, \
bus_size_t o, const CAT3(u_int,m,_t) *x, size_t cnt) \
{ \
- while (cnt--) { \
+ while (cnt--) \
CAT(bus_space_write_,n)(bst, bsh, o, *x++); \
- } \
}
bus_space_write_multi(1,8)
@@ -196,7 +197,7 @@ CAT(bus_space_write_region_,n)(bus_space
{ \
while (cnt--) { \
CAT(bus_space_write_,n)(bst, bsh, ba, *x++); \
- ba += sizeof(x); \
+ ba += (n); \
} \
}
@@ -232,7 +233,7 @@ CAT(bus_space_set_region_,n)(bus_space_t
{ \
while (cnt--) { \
CAT(bus_space_write_,n)(bst, bsh, ba, x); \
- ba += sizeof(x); \
+ ba += (n); \
} \
}
Index: arch/octeon/include/bus.h
===================================================================
RCS file: /cvs/src/sys/arch/octeon/include/bus.h,v
retrieving revision 1.7
diff -u -p -r1.7 bus.h
--- arch/octeon/include/bus.h 8 May 2017 00:27:45 -0000 1.7
+++ arch/octeon/include/bus.h 13 Apr 2020 21:42:15 -0000
@@ -142,8 +142,10 @@ static __inline void
\
CAT(bus_space_read_region_,n)(bus_space_tag_t bst, bus_space_handle_t bsh, \
bus_addr_t ba, CAT3(u_int,m,_t) *x, size_t cnt) \
{ \
- while (cnt--) \
- *x++ = CAT(bus_space_read_,n)(bst, bsh, ba++); \
+ while (cnt--) { \
+ *x++ = CAT(bus_space_read_,n)(bst, bsh, ba); \
+ ba += (n); \
+ } \
}
bus_space_read_region(1,8)
@@ -176,9 +178,8 @@ static __inline void
\
CAT(bus_space_write_multi_,n)(bus_space_tag_t bst, bus_space_handle_t bsh, \
bus_size_t o, const CAT3(u_int,m,_t) *x, size_t cnt) \
{ \
- while (cnt--) { \
+ while (cnt--) \
CAT(bus_space_write_,n)(bst, bsh, o, *x++); \
- } \
}
bus_space_write_multi(1,8)
@@ -194,7 +195,7 @@ CAT(bus_space_write_region_,n)(bus_space
{ \
while (cnt--) { \
CAT(bus_space_write_,n)(bst, bsh, ba, *x++); \
- ba += sizeof(x); \
+ ba += (n); \
} \
}
@@ -230,7 +231,7 @@ CAT(bus_space_set_region_,n)(bus_space_t
{ \
while (cnt--) { \
CAT(bus_space_write_,n)(bst, bsh, ba, x); \
- ba += sizeof(x); \
+ ba += (n); \
} \
}
Index: arch/sgi/include/bus.h
===================================================================
RCS file: /cvs/src/sys/arch/sgi/include/bus.h,v
retrieving revision 1.28
diff -u -p -r1.28 bus.h
--- arch/sgi/include/bus.h 11 May 2017 15:47:45 -0000 1.28
+++ arch/sgi/include/bus.h 13 Apr 2020 21:42:15 -0000
@@ -143,8 +143,10 @@ static __inline void
\
CAT(bus_space_read_region_,n)(bus_space_tag_t bst, bus_space_handle_t bsh, \
bus_addr_t ba, CAT3(u_int,m,_t) *x, size_t cnt) \
{ \
- while (cnt--) \
- *x++ = CAT(bus_space_read_,n)(bst, bsh, ba++); \
+ while (cnt--) { \
+ *x++ = CAT(bus_space_read_,n)(bst, bsh, ba); \
+ ba += (n); \
+ } \
}
bus_space_read_region(1,8)
@@ -177,9 +179,8 @@ static __inline void
\
CAT(bus_space_write_multi_,n)(bus_space_tag_t bst, bus_space_handle_t bsh, \
bus_size_t o, const CAT3(u_int,m,_t) *x, size_t cnt) \
{ \
- while (cnt--) { \
+ while (cnt--) \
CAT(bus_space_write_,n)(bst, bsh, o, *x++); \
- } \
}
bus_space_write_multi(1,8)
@@ -195,7 +196,7 @@ CAT(bus_space_write_region_,n)(bus_space
{ \
while (cnt--) { \
CAT(bus_space_write_,n)(bst, bsh, ba, *x++); \
- ba += sizeof(x); \
+ ba += (n); \
} \
}
@@ -231,7 +232,7 @@ CAT(bus_space_set_region_,n)(bus_space_t
{ \
while (cnt--) { \
CAT(bus_space_write_,n)(bst, bsh, ba, x); \
- ba += sizeof(x); \
+ ba += (n); \
} \
}
