work in progress of usb controller and usb stack for omap3
diff --git a/include/reg.h b/include/reg.h
index e10a3e8..d04d4ea 100644
--- a/include/reg.h
+++ b/include/reg.h
@@ -31,6 +31,11 @@
 #define REG16(addr) ((volatile uint16_t *)(addr))
 #define REG8(addr) ((volatile uint8_t *)(addr))
 
+#define RMWREG64(addr, startbit, width, val) *REG64(addr) = (*REG64(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit))
+#define RMWREG32(addr, startbit, width, val) *REG32(addr) = (*REG32(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit))
+#define RMWREG16(addr, startbit, width, val) *REG16(addr) = (*REG16(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit))
+#define RMWREG8(addr, startbit, width, val) *REG8(addr) = (*REG8(addr) & ~(((1<<(width)) - 1) << (startbit))) | ((val) << (startbit))
+
 #define writel(v, a) (*REG32(a) = (v))
 #define readl(a) (*REG32(a))