[ulib][ddk] Rewrite set_bit*/clear_bit* macros in terms of read*/write* macros
Change-Id: I4087c5b11cea02c9f15f6a2b3875ea2d04e97200
diff --git a/system/ulib/ddk/include/hw/reg.h b/system/ulib/ddk/include/hw/reg.h
index 4431970..0170246 100644
--- a/system/ulib/ddk/include/hw/reg.h
+++ b/system/ulib/ddk/include/hw/reg.h
@@ -22,20 +22,20 @@
#define writeb(v, a) (*REG8(a) = (v))
#define readb(a) (*REG8(a))
-#define set_bitsb(v, a) (*REG8(a) |= (v))
-#define clr_bitsb(v, a) (*REG8(a) &= (~(v)))
+#define set_bitsb(v, a) writeb(readb(a) | (v), (a))
+#define clr_bitsb(v, a) writeb(readb(a) & ~(v), (a))
#define writew(v, a) (*REG16(a) = (v))
#define readw(a) (*REG16(a))
-#define set_bitsw(v, a) (*REG16(a) |= (v))
-#define clr_bitsw(v, a) (*REG16(a) &= (~(v)))
+#define set_bitsw(v, a) writew(readw(a) | (v), (a))
+#define clr_bitsw(v, a) writew(readw(a) & ~(v), (a))
#define writel(v, a) (*REG32(a) = (v))
#define readl(a) (*REG32(a))
-#define set_bitsl(v, a) (*REG32(a) |= (v))
-#define clr_bitsl(v, a) (*REG32(a) &= (~(v)))
+#define set_bitsl(v, a) writel(readl(a) | (v), (a))
+#define clr_bitsl(v, a) writel(readl(a) & ~(v), (a))
#define writell(v, a) (*REG64(a) = (v))
#define readll(a) (*REG64(a))
-#define set_bitsll(v, a) (*REG64(a) |= (v))
-#define clr_bitsll(v, a) (*REG64(a) &= (~(v)))
+#define set_bitsll(v, a) writell(readll(a) | (v), (a))
+#define clr_bitsll(v, a) writell(readll(a) & ~(v), (a))