[sw] Delete all extant uses of non-_REG_OFFSET register defines

Signed-off-by: Miguel Young de la Sota <mcyoung@google.com>
diff --git a/sw/device/examples/hello_usbdev/hello_usbdev.c b/sw/device/examples/hello_usbdev/hello_usbdev.c
index 59e1512..b3713c5 100644
--- a/sw/device/examples/hello_usbdev/hello_usbdev.c
+++ b/sw/device/examples/hello_usbdev/hello_usbdev.c
@@ -187,8 +187,9 @@
       CHECK(dif_gpio_write_all(&gpio, rcv_char << 8) == kDifGpioOk);
 
       if (rcv_char == '/') {
-        uint32_t usb_irq_state = REG32(USBDEV_INTR_STATE());
-        uint32_t usb_stat = REG32(USBDEV_USBSTAT());
+        uint32_t usb_irq_state =
+            REG32(USBDEV_BASE_ADDR + USBDEV_INTR_STATE_REG_OFFSET);
+        uint32_t usb_stat = REG32(USBDEV_BASE_ADDR + USBDEV_USBSTAT_REG_OFFSET);
         LOG_INFO("I%4x-%8x", usb_irq_state, usb_stat);
       } else {
         usb_simpleserial_send_byte(&simple_serial0, rcv_char);
diff --git a/sw/device/lib/aes.c b/sw/device/lib/aes.c
index 55d8dbc..1e9cc6e 100644
--- a/sw/device/lib/aes.c
+++ b/sw/device/lib/aes.c
@@ -22,8 +22,8 @@
       ((aes_cfg.key_len & AES_CTRL_SHADOWED_KEY_LEN_MASK)
        << AES_CTRL_SHADOWED_KEY_LEN_OFFSET) |
       (aes_cfg.manual_operation << AES_CTRL_SHADOWED_MANUAL_OPERATION);
-  REG32(AES_CTRL_SHADOWED(0)) = cfg_val;
-  REG32(AES_CTRL_SHADOWED(0)) = cfg_val;
+  REG32(AES0_BASE_ADDR + AES_CTRL_SHADOWED_REG_OFFSET) = cfg_val;
+  REG32(AES0_BASE_ADDR + AES_CTRL_SHADOWED_REG_OFFSET) = cfg_val;
 };
 
 void aes_key_put(const void *key_share0, const void *key_share1,
@@ -40,23 +40,26 @@
 
   // Write the used key registers.
   for (int i = 0; i < num_regs_key_used; ++i) {
-    REG32(AES_KEY_SHARE0_0(0) + i * sizeof(uint32_t)) =
+    REG32(AES0_BASE_ADDR + AES_KEY_SHARE0_0_REG_OFFSET + i * sizeof(uint32_t)) =
         ((uint32_t *)key_share0)[i];
-    REG32(AES_KEY_SHARE1_0(0) + i * sizeof(uint32_t)) =
+    REG32(AES0_BASE_ADDR + AES_KEY_SHARE1_0_REG_OFFSET + i * sizeof(uint32_t)) =
         ((uint32_t *)key_share1)[i];
   }
   // Write the unused key registers (the AES unit requires all key registers to
   // be written).
   for (int i = num_regs_key_used; i < AES_NUM_REGS_KEY; ++i) {
-    REG32(AES_KEY_SHARE0_0(0) + i * sizeof(uint32_t)) = 0x0;
-    REG32(AES_KEY_SHARE1_0(0) + i * sizeof(uint32_t)) = 0x0;
+    REG32(AES0_BASE_ADDR + AES_KEY_SHARE0_0_REG_OFFSET + i * sizeof(uint32_t)) =
+        0x0;
+    REG32(AES0_BASE_ADDR + AES_KEY_SHARE1_0_REG_OFFSET + i * sizeof(uint32_t)) =
+        0x0;
   }
 }
 
 void aes_iv_put(const void *iv) {
   // Write the four initialization vector registers.
   for (int i = 0; i < AES_NUM_REGS_IV; ++i) {
-    REG32(AES_IV_0(0) + i * sizeof(uint32_t)) = ((uint32_t *)iv)[i];
+    REG32(AES0_BASE_ADDR + AES_IV_0_REG_OFFSET + i * sizeof(uint32_t)) =
+        ((uint32_t *)iv)[i];
   }
 }
 
@@ -72,7 +75,8 @@
 void aes_data_put(const void *data) {
   // Write the four input data registers.
   for (int i = 0; i < AES_NUM_REGS_DATA; ++i) {
-    REG32(AES_DATA_IN_0(0) + i * sizeof(uint32_t)) = ((uint32_t *)data)[i];
+    REG32(AES0_BASE_ADDR + AES_DATA_IN_0_REG_OFFSET + i * sizeof(uint32_t)) =
+        ((uint32_t *)data)[i];
   }
 }
 
@@ -88,24 +92,28 @@
 void aes_data_get(void *data) {
   // Read the four output data registers.
   for (int i = 0; i < AES_NUM_REGS_DATA; ++i) {
-    ((uint32_t *)data)[i] = REG32(AES_DATA_OUT_0(0) + i * sizeof(uint32_t));
+    ((uint32_t *)data)[i] = REG32(AES0_BASE_ADDR + AES_DATA_OUT_0_REG_OFFSET +
+                                  i * sizeof(uint32_t));
   }
 }
 
 bool aes_data_ready(void) {
-  return (REG32(AES_STATUS(0)) & (0x1u << AES_STATUS_INPUT_READY));
+  return (REG32(AES0_BASE_ADDR + AES_STATUS_REG_OFFSET) &
+          (0x1u << AES_STATUS_INPUT_READY));
 }
 
 bool aes_data_valid(void) {
-  return (REG32(AES_STATUS(0)) & (0x1u << AES_STATUS_OUTPUT_VALID));
+  return (REG32(AES0_BASE_ADDR + AES_STATUS_REG_OFFSET) &
+          (0x1u << AES_STATUS_OUTPUT_VALID));
 }
 
 bool aes_idle(void) {
-  return (REG32(AES_STATUS(0)) & (0x1u << AES_STATUS_IDLE));
+  return (REG32(AES0_BASE_ADDR + AES_STATUS_REG_OFFSET) &
+          (0x1u << AES_STATUS_IDLE));
 }
 
 void aes_manual_trigger(void) {
-  REG32(AES_TRIGGER(0)) = 0x1u << AES_TRIGGER_START;
+  REG32(AES0_BASE_ADDR + AES_TRIGGER_REG_OFFSET) = 0x1u << AES_TRIGGER_START;
 }
 
 void aes_clear(void) {
@@ -115,14 +123,14 @@
 
   // Disable autostart
   uint32_t cfg_val = 0x1u << AES_CTRL_SHADOWED_MANUAL_OPERATION;
-  REG32(AES_CTRL_SHADOWED(0)) = cfg_val;
-  REG32(AES_CTRL_SHADOWED(0)) = cfg_val;
+  REG32(AES0_BASE_ADDR + AES_CTRL_SHADOWED_REG_OFFSET) = cfg_val;
+  REG32(AES0_BASE_ADDR + AES_CTRL_SHADOWED_REG_OFFSET) = cfg_val;
 
   // Clear internal key and output registers
-  REG32(AES_TRIGGER(0)) = (0x1u << AES_TRIGGER_KEY_CLEAR) |
-                          (0x1u << AES_TRIGGER_IV_CLEAR) |
-                          (0x1u << AES_TRIGGER_DATA_IN_CLEAR) |
-                          (0x1u << AES_TRIGGER_DATA_OUT_CLEAR);
+  REG32(AES0_BASE_ADDR + AES_TRIGGER_REG_OFFSET) =
+      (0x1u << AES_TRIGGER_KEY_CLEAR) | (0x1u << AES_TRIGGER_IV_CLEAR) |
+      (0x1u << AES_TRIGGER_DATA_IN_CLEAR) |
+      (0x1u << AES_TRIGGER_DATA_OUT_CLEAR);
 
   // Wait for output not valid, and input ready
   while (!(!aes_data_valid() && aes_data_ready())) {
diff --git a/sw/device/lib/flash_ctrl.c b/sw/device/lib/flash_ctrl.c
index 1235a1f..cbe623b 100644
--- a/sw/device/lib/flash_ctrl.c
+++ b/sw/device/lib/flash_ctrl.c
@@ -26,23 +26,24 @@
 
 /* Wait for flash command to complete and set ACK in controller */
 static inline void wait_done_and_ack(void) {
-  while ((REG32(FLASH_CTRL_OP_STATUS(0)) & (1 << FLASH_CTRL_OP_STATUS_DONE)) ==
-         0) {
+  while ((REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_OP_STATUS_REG_OFFSET) &
+          (1 << FLASH_CTRL_OP_STATUS_DONE)) == 0) {
   }
-  REG32(FLASH_CTRL_OP_STATUS(0)) = 0;
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_OP_STATUS_REG_OFFSET) = 0;
 }
 
 void flash_init_block(void) {
-  while ((REG32(FLASH_CTRL_STATUS(0)) & (1 << FLASH_CTRL_STATUS_INIT_WIP)) >
-         0) {
+  while ((REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_STATUS_REG_OFFSET) &
+          (1 << FLASH_CTRL_STATUS_INIT_WIP)) > 0) {
   }
 }
 
 /* Return status error and clear internal status register */
 static int get_clr_err(void) {
   uint32_t err_status =
-      REG32(FLASH_CTRL_INTR_STATE(0)) & (0x1 << FLASH_CTRL_INTR_STATE_OP_ERROR);
-  REG32(FLASH_CTRL_INTR_STATE(0)) = err_status;
+      REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_INTR_STATE_REG_OFFSET) &
+      (0x1 << FLASH_CTRL_INTR_STATE_OP_ERROR);
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_INTR_STATE_REG_OFFSET) = err_status;
   return err_status;
 }
 
@@ -71,10 +72,10 @@
   flash_cfg_bank_erase(idx, /*erase_en=*/true);
 
   // TODO: Add timeout conditions and add error codes.
-  REG32(FLASH_CTRL_ADDR(0)) = (idx == FLASH_BANK_0)
-                                  ? FLASH_MEM_BASE_ADDR
-                                  : (FLASH_MEM_BASE_ADDR + FLASH_BANK_SZ);
-  REG32(FLASH_CTRL_CONTROL(0)) =
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_ADDR_REG_OFFSET) =
+      (idx == FLASH_BANK_0) ? FLASH_MEM_BASE_ADDR
+                            : (FLASH_MEM_BASE_ADDR + FLASH_BANK_SZ);
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_CONTROL_REG_OFFSET) =
       (FLASH_ERASE << FLASH_CTRL_CONTROL_OP_OFFSET |
        FLASH_BANK_ERASE << FLASH_CTRL_CONTROL_ERASE_SEL |
        0x1 << FLASH_CTRL_CONTROL_START);
@@ -86,12 +87,12 @@
 }
 
 int flash_page_erase(uint32_t addr, part_type_t part) {
-  REG32(FLASH_CTRL_ADDR(0)) = addr;
-  REG32(FLASH_CTRL_CONTROL(0)) = FLASH_ERASE << FLASH_CTRL_CONTROL_OP_OFFSET |
-                                 FLASH_PAGE_ERASE
-                                     << FLASH_CTRL_CONTROL_ERASE_SEL |
-                                 part << FLASH_CTRL_CONTROL_PARTITION_SEL |
-                                 0x1 << FLASH_CTRL_CONTROL_START;
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_ADDR_REG_OFFSET) = addr;
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_CONTROL_REG_OFFSET) =
+      FLASH_ERASE << FLASH_CTRL_CONTROL_OP_OFFSET |
+      FLASH_PAGE_ERASE << FLASH_CTRL_CONTROL_ERASE_SEL |
+      part << FLASH_CTRL_CONTROL_PARTITION_SEL |
+      0x1 << FLASH_CTRL_CONTROL_START;
   wait_done_and_ack();
   return get_clr_err();
 }
@@ -100,13 +101,14 @@
                                 const uint32_t *data, uint32_t size) {
   // TODO: Do we need to select bank as part of the write?
   // TODO: Update with address alignment requirements.
-  REG32(FLASH_CTRL_ADDR(0)) = addr;
-  REG32(FLASH_CTRL_CONTROL(0)) = (FLASH_PROG << FLASH_CTRL_CONTROL_OP_OFFSET |
-                                  part << FLASH_CTRL_CONTROL_PARTITION_SEL |
-                                  (size - 1) << FLASH_CTRL_CONTROL_NUM_OFFSET |
-                                  0x1 << FLASH_CTRL_CONTROL_START);
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_ADDR_REG_OFFSET) = addr;
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_CONTROL_REG_OFFSET) =
+      (FLASH_PROG << FLASH_CTRL_CONTROL_OP_OFFSET |
+       part << FLASH_CTRL_CONTROL_PARTITION_SEL |
+       (size - 1) << FLASH_CTRL_CONTROL_NUM_OFFSET |
+       0x1 << FLASH_CTRL_CONTROL_START);
   for (int i = 0; i < size; ++i) {
-    REG32(FLASH_CTRL_PROG_FIFO(0)) = data[i];
+    REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_PROG_FIFO_REG_OFFSET) = data[i];
   }
   wait_done_and_ack();
   return get_clr_err();
@@ -119,15 +121,17 @@
 }
 
 int flash_read(uint32_t addr, part_type_t part, uint32_t size, uint32_t *data) {
-  REG32(FLASH_CTRL_ADDR(0)) = addr;
-  REG32(FLASH_CTRL_CONTROL(0)) = FLASH_READ << FLASH_CTRL_CONTROL_OP_OFFSET |
-                                 part << FLASH_CTRL_CONTROL_PARTITION_SEL |
-                                 (size - 1) << FLASH_CTRL_CONTROL_NUM_OFFSET |
-                                 0x1 << FLASH_CTRL_CONTROL_START;
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_ADDR_REG_OFFSET) = addr;
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_CONTROL_REG_OFFSET) =
+      FLASH_READ << FLASH_CTRL_CONTROL_OP_OFFSET |
+      part << FLASH_CTRL_CONTROL_PARTITION_SEL |
+      (size - 1) << FLASH_CTRL_CONTROL_NUM_OFFSET |
+      0x1 << FLASH_CTRL_CONTROL_START;
   for (uint32_t i = 0; i < size;) {
-    if (((REG32(FLASH_CTRL_STATUS(0)) >> FLASH_CTRL_STATUS_RD_EMPTY) & 0x1) ==
-        0) {
-      *data++ = REG32(FLASH_CTRL_RD_FIFO(0));
+    if (((REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_STATUS_REG_OFFSET) >>
+          FLASH_CTRL_STATUS_RD_EMPTY) &
+         0x1) == 0) {
+      *data++ = REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_RD_FIFO_REG_OFFSET);
       i++;
     }
   }
@@ -136,13 +140,17 @@
 }
 
 void flash_cfg_bank_erase(bank_index_t bank, bool erase_en) {
-  REG32(FLASH_CTRL_MP_BANK_CFG(0)) =
-      (erase_en) ? SETBIT(REG32(FLASH_CTRL_MP_BANK_CFG(0)), bank)
-                 : CLRBIT(REG32(FLASH_CTRL_MP_BANK_CFG(0)), bank);
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_MP_BANK_CFG_REG_OFFSET) =
+      (erase_en) ? SETBIT(REG32(FLASH_CTRL0_BASE_ADDR +
+                                FLASH_CTRL_MP_BANK_CFG_REG_OFFSET),
+                          bank)
+                 : CLRBIT(REG32(FLASH_CTRL0_BASE_ADDR +
+                                FLASH_CTRL_MP_BANK_CFG_REG_OFFSET),
+                          bank);
 }
 
 void flash_default_region_access(bool rd_en, bool prog_en, bool erase_en) {
-  REG32(FLASH_CTRL_DEFAULT_REGION(0)) =
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_DEFAULT_REGION_REG_OFFSET) =
       rd_en << FLASH_CTRL_DEFAULT_REGION_RD_EN |
       prog_en << FLASH_CTRL_DEFAULT_REGION_PROG_EN |
       erase_en << FLASH_CTRL_DEFAULT_REGION_ERASE_EN;
@@ -153,7 +161,8 @@
   bank_index_t bank_sel;
 
   if (region_cfg->part == kDataPartition) {
-    REG32(FLASH_CTRL_MP_REGION_CFG_0(0) + region_cfg->num * 4) =
+    REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_MP_REGION_CFG_0_REG_OFFSET +
+          region_cfg->num * 4) =
         region_cfg->base << FLASH_CTRL_MP_REGION_CFG_0_BASE_0_OFFSET |
         region_cfg->size << FLASH_CTRL_MP_REGION_CFG_0_SIZE_0_OFFSET |
         region_cfg->rd_en << FLASH_CTRL_MP_REGION_CFG_0_RD_EN_0 |
@@ -172,17 +181,21 @@
 
     bank_sel = region_cfg->base / FLASH_PAGES_PER_BANK;
     if (bank_sel == FLASH_BANK_0) {
-      REG32(FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0(0) + region_cfg->num * 4) =
-          reg_value;
+      REG32(FLASH_CTRL0_BASE_ADDR +
+            FLASH_CTRL_BANK0_INFO0_PAGE_CFG_0_REG_OFFSET +
+            region_cfg->num * 4) = reg_value;
     } else {
-      REG32(FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0(0) + region_cfg->num * 4) =
-          reg_value;
+      REG32(FLASH_CTRL0_BASE_ADDR +
+            FLASH_CTRL_BANK1_INFO0_PAGE_CFG_0_REG_OFFSET +
+            region_cfg->num * 4) = reg_value;
     }
   }
 }
 
 void flash_write_scratch_reg(uint32_t value) {
-  REG32(FLASH_CTRL_SCRATCH(0)) = value;
+  REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_SCRATCH_REG_OFFSET) = value;
 }
 
-uint32_t flash_read_scratch_reg(void) { return REG32(FLASH_CTRL_SCRATCH(0)); }
+uint32_t flash_read_scratch_reg(void) {
+  return REG32(FLASH_CTRL0_BASE_ADDR + FLASH_CTRL_SCRATCH_REG_OFFSET);
+}
diff --git a/sw/device/lib/hmac.c b/sw/device/lib/hmac.c
index 0647a90..082e127 100644
--- a/sw/device/lib/hmac.c
+++ b/sw/device/lib/hmac.c
@@ -14,17 +14,19 @@
 #define REG32(add) *((volatile uint32_t *)(add))
 
 void hmac_init(hmac_cfg_t hmac_cfg) {
-  REG32(HMAC_CFG(0)) = hmac_cfg.input_endian_swap << HMAC_CFG_ENDIAN_SWAP |
-                       1 << hmac_cfg.mode |
-                       hmac_cfg.digest_endian_swap << HMAC_CFG_DIGEST_SWAP;
+  REG32(HMAC0_BASE_ADDR + HMAC_CFG_REG_OFFSET) =
+      hmac_cfg.input_endian_swap << HMAC_CFG_ENDIAN_SWAP | 1 << hmac_cfg.mode |
+      hmac_cfg.digest_endian_swap << HMAC_CFG_DIGEST_SWAP;
   for (int i = 0; i < 8; i++) {
-    REG32(HMAC_KEY_0(0) + i * sizeof(uint32_t)) = hmac_cfg.keys[i];
+    REG32(HMAC0_BASE_ADDR + HMAC_KEY_0_REG_OFFSET + i * sizeof(uint32_t)) =
+        hmac_cfg.keys[i];
   }
-  REG32(HMAC_CMD(0)) = 1 << HMAC_CMD_HASH_START;
+  REG32(HMAC0_BASE_ADDR + HMAC_CMD_REG_OFFSET) = 1 << HMAC_CMD_HASH_START;
 };
 
 static int hmac_fifo_depth(void) {
-  return (REG32(HMAC_STATUS(0)) >> HMAC_STATUS_FIFO_DEPTH_OFFSET) &
+  return (REG32(HMAC0_BASE_ADDR + HMAC_STATUS_REG_OFFSET) >>
+          HMAC_STATUS_FIFO_DEPTH_OFFSET) &
          HMAC_STATUS_FIFO_DEPTH_MASK;
 }
 
@@ -44,34 +46,38 @@
       }
 
       // write a whole group
-      REG32(HMAC_MSG_FIFO(0)) = *wp++;
-      REG32(HMAC_MSG_FIFO(0)) = *wp++;
-      REG32(HMAC_MSG_FIFO(0)) = *wp++;
-      REG32(HMAC_MSG_FIFO(0)) = *wp++;
-      REG32(HMAC_MSG_FIFO(0)) = *wp++;
-      REG32(HMAC_MSG_FIFO(0)) = *wp++;
-      REG32(HMAC_MSG_FIFO(0)) = *wp++;
-      REG32(HMAC_MSG_FIFO(0)) = *wp++;
+      REG32(HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *wp++;
+      REG32(HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *wp++;
+      REG32(HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *wp++;
+      REG32(HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *wp++;
+      REG32(HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *wp++;
+      REG32(HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *wp++;
+      REG32(HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *wp++;
+      REG32(HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *wp++;
       words_remaining -= HMAC_FIFO_GROUP_SIZE;
     } else {
-      REG32(HMAC_MSG_FIFO(0)) = *wp++;
+      REG32(HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *wp++;
       words_remaining--;
     };
   }
 
   const uint8_t *bp = (const uint8_t *)wp;
   for (; bytes_left_over > 0; --bytes_left_over) {
-    *((volatile uint8_t *)HMAC_MSG_FIFO(0)) = *bp++;
+    *((volatile uint8_t *)HMAC0_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET) = *bp++;
   }
 }
 
 void hmac_done(uint32_t *digest) {
-  REG32(HMAC_CMD(0)) = 1 << HMAC_CMD_HASH_PROCESS;
-  while (!((REG32(HMAC_INTR_STATE(0)) >> HMAC_INTR_STATE_HMAC_DONE) & 0x1)) {
+  REG32(HMAC0_BASE_ADDR + HMAC_CMD_REG_OFFSET) = 1 << HMAC_CMD_HASH_PROCESS;
+  while (!((REG32(HMAC0_BASE_ADDR + HMAC_INTR_STATE_REG_OFFSET) >>
+            HMAC_INTR_STATE_HMAC_DONE) &
+           0x1)) {
   }
-  REG32(HMAC_INTR_STATE(0)) = 1 << HMAC_INTR_STATE_HMAC_DONE;
+  REG32(HMAC0_BASE_ADDR + HMAC_INTR_STATE_REG_OFFSET) =
+      1 << HMAC_INTR_STATE_HMAC_DONE;
 
   for (uint32_t i = 0; i < 8; i++) {
-    *digest++ = REG32(HMAC_DIGEST_0(0) + i * sizeof(uintptr_t));
+    *digest++ = REG32(HMAC0_BASE_ADDR + HMAC_DIGEST_0_REG_OFFSET +
+                      i * sizeof(uintptr_t));
   }
 }
diff --git a/sw/device/lib/pinmux.c b/sw/device/lib/pinmux.c
index aacf5ad..d186236 100644
--- a/sw/device/lib/pinmux.c
+++ b/sw/device/lib/pinmux.c
@@ -31,14 +31,14 @@
 
 void pinmux_init(void) {
   // input: assign MIO0..MIO31 to GPIO0..GPIO31
-  init_pinmux_reg(PINMUX_PERIPH_INSEL_0(0), PINMUX_PERIPH_INSEL_0_IN_1_OFFSET,
-                  32 / PINMUX_PERIPH_INSEL_0_IN_1_OFFSET,
-                  PINMUX_PERIPH_INSEL_0_IN_0_MASK,
-                  PINMUX_PERIPH_INSEL_IDX_OFFSET);
+  init_pinmux_reg(
+      PINMUX0_BASE_ADDR + PINMUX_PERIPH_INSEL_0_REG_OFFSET,
+      PINMUX_PERIPH_INSEL_0_IN_1_OFFSET, 32 / PINMUX_PERIPH_INSEL_0_IN_1_OFFSET,
+      PINMUX_PERIPH_INSEL_0_IN_0_MASK, PINMUX_PERIPH_INSEL_IDX_OFFSET);
 
   // output: assign GPIO0..GPIO31 to MIO0..MIO31
-  init_pinmux_reg(PINMUX_MIO_OUTSEL_0(0), PINMUX_MIO_OUTSEL_0_OUT_1_OFFSET,
-                  32 / PINMUX_MIO_OUTSEL_0_OUT_1_OFFSET,
-                  PINMUX_MIO_OUTSEL_0_OUT_0_MASK,
-                  PINMUX_PERIPH_OUTSEL_IDX_OFFSET);
+  init_pinmux_reg(
+      PINMUX0_BASE_ADDR + PINMUX_MIO_OUTSEL_0_REG_OFFSET,
+      PINMUX_MIO_OUTSEL_0_OUT_1_OFFSET, 32 / PINMUX_MIO_OUTSEL_0_OUT_1_OFFSET,
+      PINMUX_MIO_OUTSEL_0_OUT_0_MASK, PINMUX_PERIPH_OUTSEL_IDX_OFFSET);
 }
diff --git a/sw/device/lib/usbdev.c b/sw/device/lib/usbdev.c
index 0341644..ba46e48 100644
--- a/sw/device/lib/usbdev.c
+++ b/sw/device/lib/usbdev.c
@@ -44,7 +44,8 @@
 }
 
 uint32_t *usbdev_buf_idtoaddr(usbdev_ctx_t *ctx, usbbufid_t buf) {
-  return (uint32_t *)(USBDEV_BUFFER() + (buf * BUF_LENGTH));
+  return (uint32_t *)(USBDEV_BASE_ADDR + USBDEV_BUFFER_REG_OFFSET +
+                      (buf * BUF_LENGTH));
 }
 
 void usbdev_buf_copyto_byid(usbdev_ctx_t *ctx, usbbufid_t buf, const void *from,
@@ -66,19 +67,21 @@
 
 // Supply as many buffers to the receive available fifo as possible
 inline static void fill_av_fifo(usbdev_ctx_t *ctx) {
-  while (!(REG32(USBDEV_USBSTAT()) & (1 << USBDEV_USBSTAT_AV_FULL))) {
+  while (!(REG32(USBDEV_BASE_ADDR + USBDEV_USBSTAT_REG_OFFSET) &
+           (1 << USBDEV_USBSTAT_AV_FULL))) {
     usbbufid_t buf = usbdev_buf_allocate_byid(ctx);
     if (buf < 0) {
       // no more free buffers, can't fill AV FIFO
       break;
     }
-    REG32(USBDEV_AVBUFFER()) = buf;
+    REG32(USBDEV_BASE_ADDR + USBDEV_AVBUFFER_REG_OFFSET) = buf;
   }
 }
 
 void usbdev_sendbuf_byid(usbdev_ctx_t *ctx, usbbufid_t buf, size_t size,
                          int endpoint) {
-  uint32_t configin = USBDEV_CONFIGIN_0() + (4 * endpoint);
+  uint32_t configin =
+      USBDEV_BASE_ADDR + USBDEV_CONFIGIN_0_REG_OFFSET + (4 * endpoint);
 
   if ((endpoint >= NUM_ENDPOINTS) || (buf >= NUM_BUFS)) {
     return;
@@ -94,7 +97,7 @@
 }
 
 void usbdev_poll(usbdev_ctx_t *ctx) {
-  uint32_t istate = REG32(USBDEV_INTR_STATE());
+  uint32_t istate = REG32(USBDEV_BASE_ADDR + USBDEV_INTR_STATE_REG_OFFSET);
 
   // Do this first to keep things going
   fill_av_fifo(ctx);
@@ -102,8 +105,8 @@
   // Process IN completions first so we get the fact that send completed
   // before processing a response
   if (istate & (1 << USBDEV_INTR_STATE_PKT_SENT)) {
-    uint32_t sentep = REG32(USBDEV_IN_SENT());
-    uint32_t configin = USBDEV_CONFIGIN_0();
+    uint32_t sentep = REG32(USBDEV_BASE_ADDR + USBDEV_IN_SENT_REG_OFFSET);
+    uint32_t configin = USBDEV_BASE_ADDR + USBDEV_CONFIGIN_0_REG_OFFSET;
     TRC_C('a' + sentep);
     for (int ep = 0; ep < NUM_ENDPOINTS; ep++) {
       if (sentep & (1 << ep)) {
@@ -116,14 +119,16 @@
       }
     }
     // Write one to clear all the ones we handled
-    REG32(USBDEV_IN_SENT()) = sentep;
+    REG32(USBDEV_BASE_ADDR + USBDEV_IN_SENT_REG_OFFSET) = sentep;
     // Clear the interupt
-    REG32(USBDEV_INTR_STATE()) = (1 << USBDEV_INTR_STATE_PKT_SENT);
+    REG32(USBDEV_BASE_ADDR + USBDEV_INTR_STATE_REG_OFFSET) =
+        (1 << USBDEV_INTR_STATE_PKT_SENT);
   }
 
   if (istate & (1 << USBDEV_INTR_STATE_PKT_RECEIVED)) {
-    while (!(REG32(USBDEV_USBSTAT()) & (1 << USBDEV_USBSTAT_RX_EMPTY))) {
-      uint32_t rxinfo = REG32(USBDEV_RXFIFO());
+    while (!(REG32(USBDEV_BASE_ADDR + USBDEV_USBSTAT_REG_OFFSET) &
+             (1 << USBDEV_USBSTAT_RX_EMPTY))) {
+      uint32_t rxinfo = REG32(USBDEV_BASE_ADDR + USBDEV_RXFIFO_REG_OFFSET);
       usbbufid_t buf = EXTRACT(rxinfo, RXFIFO_BUFFER);
       int size = EXTRACT(rxinfo, RXFIFO_SIZE);
       int endpoint = EXTRACT(rxinfo, RXFIFO_EP);
@@ -138,7 +143,8 @@
       usbdev_buf_free_byid(ctx, buf);
     }
     // Clear the interupt
-    REG32(USBDEV_INTR_STATE()) = (1 << USBDEV_INTR_STATE_PKT_RECEIVED);
+    REG32(USBDEV_BASE_ADDR + USBDEV_INTR_STATE_REG_OFFSET) =
+        (1 << USBDEV_INTR_STATE_PKT_RECEIVED);
   }
   if (istate &
       ~((1 << USBDEV_INTR_STATE_PKT_RECEIVED) |
@@ -146,9 +152,9 @@
     TRC_C('I');
     TRC_I(istate, 12);
     TRC_C(' ');
-    REG32(USBDEV_INTR_STATE()) = istate &
-                                 ~((1 << USBDEV_INTR_STATE_PKT_RECEIVED) |
-                                   (1 << USBDEV_INTR_STATE_PKT_SENT));
+    REG32(USBDEV_BASE_ADDR + USBDEV_INTR_STATE_REG_OFFSET) =
+        istate & ~((1 << USBDEV_INTR_STATE_PKT_RECEIVED) |
+                   (1 << USBDEV_INTR_STATE_PKT_SENT));
     if (istate & (1 << USBDEV_INTR_ENABLE_LINK_RESET)) {
       // Link reset
       for (int ep = 0; ep < NUM_ENDPOINTS; ep++) {
@@ -158,14 +164,16 @@
       }
 
       // Clear the interupt
-      REG32(USBDEV_INTR_STATE()) = (1 << USBDEV_INTR_ENABLE_LINK_RESET);
+      REG32(USBDEV_BASE_ADDR + USBDEV_INTR_STATE_REG_OFFSET) =
+          (1 << USBDEV_INTR_ENABLE_LINK_RESET);
     }
   }
   // TODO - clean this up
   // Frame ticks every 1ms, use to flush data every 16ms
   // (faster in DPI but this seems to work ok)
   // At reset frame count is 0, compare to 1 so no calls before SOF received
-  uint32_t usbframe = EXTRACT(REG32(USBDEV_USBSTAT()), USBSTAT_FRAME);
+  uint32_t usbframe = EXTRACT(
+      REG32(USBDEV_BASE_ADDR + USBDEV_USBSTAT_REG_OFFSET), USBSTAT_FRAME);
   if ((usbframe & 0xf) == 1) {
     if (ctx->flushed == 0) {
       for (int i = 0; i < NUM_ENDPOINTS; i++) {
@@ -182,35 +190,38 @@
 }
 
 unsigned int usbdev_get_status(usbdev_ctx_t *ctx) {
-  unsigned int status = REG32(USBDEV_USBSTAT());
+  unsigned int status = REG32(USBDEV_BASE_ADDR + USBDEV_USBSTAT_REG_OFFSET);
   return status;
 }
 
 unsigned int usbdev_get_link_state(usbdev_ctx_t *ctx) {
-  unsigned int link_state =
-      EXTRACT(REG32(USBDEV_USBSTAT()), USBSTAT_LINK_STATE);
+  unsigned int link_state = EXTRACT(
+      REG32(USBDEV_BASE_ADDR + USBDEV_USBSTAT_REG_OFFSET), USBSTAT_LINK_STATE);
   return link_state;
 }
 
 unsigned int usbdev_get_address(usbdev_ctx_t *ctx) {
-  unsigned int addr = EXTRACT(REG32(USBDEV_USBCTRL()), USBCTRL_DEVICE_ADDRESS);
+  unsigned int addr =
+      EXTRACT(REG32(USBDEV_BASE_ADDR + USBDEV_USBCTRL_REG_OFFSET),
+              USBCTRL_DEVICE_ADDRESS);
   return addr;
 }
 
 void usbdev_set_deviceid(usbdev_ctx_t *ctx, int deviceid) {
-  REG32(USBDEV_USBCTRL()) = (1 << USBDEV_USBCTRL_ENABLE) |
-                            (deviceid << USBDEV_USBCTRL_DEVICE_ADDRESS_OFFSET);
+  REG32(USBDEV_BASE_ADDR + USBDEV_USBCTRL_REG_OFFSET) =
+      (1 << USBDEV_USBCTRL_ENABLE) |
+      (deviceid << USBDEV_USBCTRL_DEVICE_ADDRESS_OFFSET);
 }
 
 void usbdev_halt(usbdev_ctx_t *ctx, int endpoint, int enable) {
   uint32_t epbit = 1 << endpoint;
-  uint32_t stall = REG32(USBDEV_STALL());
+  uint32_t stall = REG32(USBDEV_BASE_ADDR + USBDEV_STALL_REG_OFFSET);
   if (enable) {
     stall |= epbit;
   } else {
     stall &= ~epbit;
   }
-  REG32(USBDEV_STALL()) = stall;
+  REG32(USBDEV_BASE_ADDR + USBDEV_STALL_REG_OFFSET) = stall;
   ctx->halted = stall;
   // TODO future addition would be to callback the endpoint driver
   // for now it just sees its traffic has stopped
@@ -218,21 +229,26 @@
 
 void usbdev_set_iso(usbdev_ctx_t *ctx, int endpoint, int enable) {
   if (enable) {
-    REG32(USBDEV_ISO()) = SETBIT(REG32(USBDEV_ISO()), endpoint);
+    REG32(USBDEV_BASE_ADDR + USBDEV_ISO_REG_OFFSET) =
+        SETBIT(REG32(USBDEV_BASE_ADDR + USBDEV_ISO_REG_OFFSET), endpoint);
   } else {
-    REG32(USBDEV_ISO()) = CLRBIT(REG32(USBDEV_ISO()), endpoint);
+    REG32(USBDEV_BASE_ADDR + USBDEV_ISO_REG_OFFSET) =
+        CLRBIT(REG32(USBDEV_BASE_ADDR + USBDEV_ISO_REG_OFFSET), endpoint);
   }
 }
 
 void usbdev_clear_data_toggle(usbdev_ctx_t *ctx, int endpoint) {
-  REG32(USBDEV_DATA_TOGGLE_CLEAR()) = (1 << endpoint);
+  REG32(USBDEV_BASE_ADDR + USBDEV_DATA_TOGGLE_CLEAR_REG_OFFSET) =
+      (1 << endpoint);
 }
 
 void usbdev_set_ep0_stall(usbdev_ctx_t *ctx, int stall) {
   if (stall) {
-    REG32(USBDEV_STALL()) = REG32(USBDEV_STALL()) | 1;
+    REG32(USBDEV_BASE_ADDR + USBDEV_STALL_REG_OFFSET) =
+        REG32(USBDEV_BASE_ADDR + USBDEV_STALL_REG_OFFSET) | 1;
   } else {
-    REG32(USBDEV_STALL()) = REG32(USBDEV_STALL()) & ~(1);
+    REG32(USBDEV_BASE_ADDR + USBDEV_STALL_REG_OFFSET) =
+        REG32(USBDEV_BASE_ADDR + USBDEV_STALL_REG_OFFSET) & ~(1);
   }
 }
 
@@ -249,9 +265,9 @@
   ctx->flush[ep] = flush;
   ctx->reset[ep] = reset;
   if (enableout) {
-    uint32_t rxen = REG32(USBDEV_RXENABLE_OUT());
+    uint32_t rxen = REG32(USBDEV_BASE_ADDR + USBDEV_RXENABLE_OUT_REG_OFFSET);
     rxen |= (1 << (ep + USBDEV_RXENABLE_OUT_OUT_0));
-    REG32(USBDEV_RXENABLE_OUT()) = rxen;
+    REG32(USBDEV_BASE_ADDR + USBDEV_RXENABLE_OUT_REG_OFFSET) = rxen;
   }
 }
 
@@ -265,19 +281,22 @@
   buf_init(ctx);
 
   // All about polling...
-  REG32(USBDEV_INTR_ENABLE()) = 0;
+  REG32(USBDEV_BASE_ADDR + USBDEV_INTR_ENABLE_REG_OFFSET) = 0;
 
   // Provide buffers for any reception
   fill_av_fifo(ctx);
 
-  REG32(USBDEV_RXENABLE_SETUP()) = (1 << USBDEV_RXENABLE_SETUP_SETUP_0);
-  REG32(USBDEV_RXENABLE_OUT()) = (1 << USBDEV_RXENABLE_OUT_OUT_0);
+  REG32(USBDEV_BASE_ADDR + USBDEV_RXENABLE_SETUP_REG_OFFSET) =
+      (1 << USBDEV_RXENABLE_SETUP_SETUP_0);
+  REG32(USBDEV_BASE_ADDR + USBDEV_RXENABLE_OUT_REG_OFFSET) =
+      (1 << USBDEV_RXENABLE_OUT_OUT_0);
 
   uint32_t phy_config = (pinflip << USBDEV_PHY_CONFIG_PINFLIP) |
                         (diff_rx << USBDEV_PHY_CONFIG_RX_DIFFERENTIAL_MODE) |
                         (diff_tx << USBDEV_PHY_CONFIG_TX_DIFFERENTIAL_MODE) |
                         (1 << USBDEV_PHY_CONFIG_EOP_SINGLE_BIT);
-  REG32(USBDEV_PHY_CONFIG()) = phy_config;
+  REG32(USBDEV_BASE_ADDR + USBDEV_PHY_CONFIG_REG_OFFSET) = phy_config;
 
-  REG32(USBDEV_USBCTRL()) = (1 << USBDEV_USBCTRL_ENABLE);
+  REG32(USBDEV_BASE_ADDR + USBDEV_USBCTRL_REG_OFFSET) =
+      (1 << USBDEV_USBCTRL_ENABLE);
 }