[sw/silicon_creator] Switch hmac to abs_mmio

Signed-off-by: Miguel Osorio <miguelosorio@google.com>
diff --git a/sw/device/silicon_creator/lib/drivers/hmac.c b/sw/device/silicon_creator/lib/drivers/hmac.c
index 106bb8c..2cc939c 100644
--- a/sw/device/silicon_creator/lib/drivers/hmac.c
+++ b/sw/device/silicon_creator/lib/drivers/hmac.c
@@ -6,22 +6,21 @@
 
 #include "sw/device/lib/base/bitfield.h"
 #include "sw/device/lib/base/memory.h"
-#include "sw/device/lib/base/mmio.h"
+#include "sw/device/silicon_creator/lib/base/abs_mmio.h"
 #include "sw/device/silicon_creator/lib/error.h"
 
 #include "hmac_regs.h"  // Generated.
+#include "hw/top_earlgrey/sw/autogen/top_earlgrey.h"
 
-rom_error_t hmac_sha256_init(const hmac_t *hmac) {
-  if (hmac == NULL) {
-    return kErrorHmacInvalidArgument;
-  }
-
+void hmac_sha256_init(void) {
   // Clear the config, stopping the SHA engine.
-  mmio_region_write32(hmac->base_addr, HMAC_CFG_REG_OFFSET, 0u);
+  abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_CFG_REG_OFFSET, 0u);
 
   // Disable and clear interrupts. INTR_STATE register is rw1c.
-  mmio_region_write32(hmac->base_addr, HMAC_INTR_ENABLE_REG_OFFSET, 0u);
-  mmio_region_write32(hmac->base_addr, HMAC_INTR_STATE_REG_OFFSET, UINT32_MAX);
+  abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_INTR_ENABLE_REG_OFFSET,
+                   0u);
+  abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_INTR_STATE_REG_OFFSET,
+                   UINT32_MAX);
 
   uint32_t reg = 0;
   reg = bitfield_bit32_write(reg, HMAC_CFG_DIGEST_SWAP_BIT, false);
@@ -29,62 +28,63 @@
   reg = bitfield_bit32_write(reg, HMAC_CFG_ENDIAN_SWAP_BIT, true);
   reg = bitfield_bit32_write(reg, HMAC_CFG_SHA_EN_BIT, true);
   reg = bitfield_bit32_write(reg, HMAC_CFG_HMAC_EN_BIT, false);
-  mmio_region_write32(hmac->base_addr, HMAC_CFG_REG_OFFSET, reg);
+  abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_CFG_REG_OFFSET, reg);
 
   reg = 0;
   reg = bitfield_bit32_write(reg, HMAC_CMD_HASH_START_BIT, true);
-  mmio_region_write32(hmac->base_addr, HMAC_CMD_REG_OFFSET, reg);
-
-  return kErrorOk;
+  abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_CMD_REG_OFFSET, reg);
 }
 
-rom_error_t hmac_sha256_update(const hmac_t *hmac, const void *data,
-                               size_t len) {
-  if (hmac == NULL || data == NULL) {
+rom_error_t hmac_sha256_update(const void *data, size_t len) {
+  if (data == NULL) {
     return kErrorHmacInvalidArgument;
   }
   const uint8_t *data_sent = (const uint8_t *)data;
 
   // Individual byte writes are needed if the buffer isn't word aligned.
   for (; len != 0 && (uintptr_t)data_sent & 3; --len) {
-    mmio_region_write8(hmac->base_addr, HMAC_MSG_FIFO_REG_OFFSET, *data_sent++);
+    abs_mmio_write8(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET,
+                    *data_sent++);
   }
 
   for (; len >= sizeof(uint32_t); len -= sizeof(uint32_t)) {
     // FIXME: read_32 does not work for unittests.
     uint32_t data_aligned = *(const uint32_t *)data_sent;
-    mmio_region_write32(hmac->base_addr, HMAC_MSG_FIFO_REG_OFFSET,
-                        data_aligned);
+    abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET,
+                     data_aligned);
     data_sent += sizeof(uint32_t);
   }
 
   // Handle non-32bit aligned bytes at the end of the buffer.
   for (; len != 0; --len) {
-    mmio_region_write8(hmac->base_addr, HMAC_MSG_FIFO_REG_OFFSET, *data_sent++);
+    abs_mmio_write8(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_MSG_FIFO_REG_OFFSET,
+                    *data_sent++);
   }
   return kErrorOk;
 }
 
-rom_error_t hmac_sha256_final(const hmac_t *hmac, hmac_digest_t *digest) {
-  if (hmac == NULL || digest == NULL) {
+rom_error_t hmac_sha256_final(hmac_digest_t *digest) {
+  if (digest == NULL) {
     return kErrorHmacInvalidArgument;
   }
 
   uint32_t reg = 0;
   reg = bitfield_bit32_write(reg, HMAC_CMD_HASH_PROCESS_BIT, true);
-  mmio_region_write32(hmac->base_addr, HMAC_CMD_REG_OFFSET, reg);
+  abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_CMD_REG_OFFSET, reg);
 
   do {
-    reg = mmio_region_read32(hmac->base_addr, HMAC_INTR_STATE_REG_OFFSET);
+    reg = abs_mmio_read32(TOP_EARLGREY_HMAC_BASE_ADDR +
+                          HMAC_INTR_STATE_REG_OFFSET);
   } while (!bitfield_bit32_read(reg, HMAC_INTR_STATE_HMAC_DONE_BIT));
-  mmio_region_write32(hmac->base_addr, HMAC_INTR_STATE_REG_OFFSET, reg);
+  abs_mmio_write32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_INTR_STATE_REG_OFFSET,
+                   reg);
 
   // Read the digest in reverse to preserve the numerical value.
   // The least significant word is at HMAC_DIGEST_7_REG_OFFSET.
   for (size_t i = 0; i < ARRAYSIZE(digest->digest); ++i) {
-    digest->digest[i] = mmio_region_read32(
-        hmac->base_addr, HMAC_DIGEST_7_REG_OFFSET - (i * sizeof(uint32_t)));
+    digest->digest[i] =
+        abs_mmio_read32(TOP_EARLGREY_HMAC_BASE_ADDR + HMAC_DIGEST_7_REG_OFFSET -
+                        (i * sizeof(uint32_t)));
   }
-
   return kErrorOk;
 }
diff --git a/sw/device/silicon_creator/lib/drivers/hmac.h b/sw/device/silicon_creator/lib/drivers/hmac.h
index 9eed615..34fa97c 100644
--- a/sw/device/silicon_creator/lib/drivers/hmac.h
+++ b/sw/device/silicon_creator/lib/drivers/hmac.h
@@ -7,22 +7,13 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "sw/device/lib/base/mmio.h"
 #include "sw/device/silicon_creator/lib/error.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-/**
- * Initialization parameters for HMAC.
- */
-typedef struct hmac {
-  /**
-   * The base address for the HMAC hardware registers.
-   */
-  mmio_region_t base_addr;
-} hmac_t;
+#define HMAC_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
 
 /**
  * A typed representation of the HMAC digest.
@@ -37,11 +28,8 @@
  * This function resets the HMAC module to clear the digest register.
  * It then configures the HMAC block in SHA256 mode with little endian
  * data input and digest output.
- *
- * @param hmac A HMAC handle.
- * @return The result of the operation.
  */
-rom_error_t hmac_sha256_init(const hmac_t *hmac);
+void hmac_sha256_init(void);
 
 /**
  * Sends `len` bytes from `data` to the SHA2-256 function.
@@ -50,22 +38,21 @@
  * FIFO. Since the this function is meant to run in blocking mode,
  * polling for FIFO status is equivalent to stalling on FIFO write.
  *
- * @param hmac A HMAC handle
  * @param data Buffer to copy data from.
  * @param len size of the `data` buffer.
  * @return The result of the operation.
  */
-rom_error_t hmac_sha256_update(const hmac_t *hmac, const void *data,
-                               size_t len);
+HMAC_WARN_UNUSED_RESULT
+rom_error_t hmac_sha256_update(const void *data, size_t len);
 
 /**
  * Finalizes SHA256 operation and writes `digest` buffer.
  *
- * @param hmac A HMAC handle.
  * @param[out] digest Buffer to copy digest to.
  * @return The result of the operation.
  */
-rom_error_t hmac_sha256_final(const hmac_t *hmac, hmac_digest_t *digest);
+HMAC_WARN_UNUSED_RESULT
+rom_error_t hmac_sha256_final(hmac_digest_t *digest);
 
 #ifdef __cplusplus
 }
diff --git a/sw/device/silicon_creator/lib/drivers/hmac_unittest.cc b/sw/device/silicon_creator/lib/drivers/hmac_unittest.cc
index 8e22f9e..cc083d3 100644
--- a/sw/device/silicon_creator/lib/drivers/hmac_unittest.cc
+++ b/sw/device/silicon_creator/lib/drivers/hmac_unittest.cc
@@ -9,51 +9,46 @@
 
 #include "gtest/gtest.h"
 #include "sw/device/lib/base/mmio.h"
-#include "sw/device/lib/base/testing/mock_mmio.h"
+#include "sw/device/silicon_creator/lib/base/mock_abs_mmio.h"
 #include "sw/device/silicon_creator/lib/error.h"
 
 #include "hmac_regs.h"  // Generated.
+#include "hw/top_earlgrey/sw/autogen/top_earlgrey.h"
 
 namespace hmac_unittest {
 namespace {
-using ::mock_mmio::MmioTest;
 using ::testing::ElementsAreArray;
 using ::testing::Test;
 
-class HmacTest : public Test, public MmioTest {
+class HmacTest : public mask_rom_test::MaskRomTest {
  protected:
-  hmac_t hmac_ = {.base_addr = dev().region()};
+  uint32_t base_ = TOP_EARLGREY_HMAC_BASE_ADDR;
+  mask_rom_test::MockAbsMmio mmio_;
 };
 
 class Sha256InitTest : public HmacTest {};
 
-TEST_F(Sha256InitTest, NullArgs) {
-  EXPECT_EQ(hmac_sha256_init(nullptr), kErrorHmacInvalidArgument);
-}
-
 TEST_F(Sha256InitTest, Initialize) {
-  EXPECT_WRITE32(HMAC_CFG_REG_OFFSET, 0u);
-  EXPECT_WRITE32(HMAC_INTR_ENABLE_REG_OFFSET, 0u);
-  EXPECT_WRITE32(HMAC_INTR_STATE_REG_OFFSET,
-                 std::numeric_limits<uint32_t>::max());
-  EXPECT_WRITE32(HMAC_CFG_REG_OFFSET, {
-                                          {HMAC_CFG_DIGEST_SWAP_BIT, false},
-                                          {HMAC_CFG_ENDIAN_SWAP_BIT, true},
-                                          {HMAC_CFG_SHA_EN_BIT, true},
-                                          {HMAC_CFG_HMAC_EN_BIT, false},
-                                      });
-  EXPECT_WRITE32(HMAC_CMD_REG_OFFSET, {{HMAC_CMD_HASH_START_BIT, true}});
-  EXPECT_EQ(hmac_sha256_init(&hmac_), kErrorOk);
+  EXPECT_ABS_WRITE32(mmio_, base_ + HMAC_CFG_REG_OFFSET, 0u);
+  EXPECT_ABS_WRITE32(mmio_, base_ + HMAC_INTR_ENABLE_REG_OFFSET, 0u);
+  EXPECT_ABS_WRITE32(mmio_, base_ + HMAC_INTR_STATE_REG_OFFSET,
+                     std::numeric_limits<uint32_t>::max());
+  EXPECT_ABS_WRITE32(mmio_, base_ + HMAC_CFG_REG_OFFSET,
+                     {
+                         {HMAC_CFG_DIGEST_SWAP_BIT, false},
+                         {HMAC_CFG_ENDIAN_SWAP_BIT, true},
+                         {HMAC_CFG_SHA_EN_BIT, true},
+                         {HMAC_CFG_HMAC_EN_BIT, false},
+                     });
+  EXPECT_ABS_WRITE32(mmio_, base_ + HMAC_CMD_REG_OFFSET,
+                     {{HMAC_CMD_HASH_START_BIT, true}});
+  hmac_sha256_init();
 }
 
 class Sha256UpdateTest : public HmacTest {};
 
 TEST_F(Sha256UpdateTest, NullArgs) {
-  EXPECT_EQ(hmac_sha256_update(&hmac_, nullptr, 0), kErrorHmacInvalidArgument);
-
-  uint32_t data;
-  EXPECT_EQ(hmac_sha256_update(nullptr, &data, sizeof(uint32_t)),
-            kErrorHmacInvalidArgument);
+  EXPECT_EQ(hmac_sha256_update(nullptr, 0), kErrorHmacInvalidArgument);
 }
 
 TEST_F(Sha256UpdateTest, SendData) {
@@ -63,30 +58,27 @@
   };
 
   // Trigger 8bit aligned writes.
-  EXPECT_WRITE8(HMAC_MSG_FIFO_REG_OFFSET, 0x01);
-  EXPECT_WRITE8(HMAC_MSG_FIFO_REG_OFFSET, 0x02);
-  EXPECT_EQ(hmac_sha256_update(&hmac_, &kData[1], 2), kErrorOk);
+  EXPECT_ABS_WRITE8(mmio_, base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x01);
+  EXPECT_ABS_WRITE8(mmio_, base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x02);
+  EXPECT_EQ(hmac_sha256_update(&kData[1], 2), kErrorOk);
 
   // Trigger a single 32bit aligned write.
-  EXPECT_WRITE32(HMAC_MSG_FIFO_REG_OFFSET, 0x03020100);
-  EXPECT_EQ(hmac_sha256_update(&hmac_, &kData[0], 4), kErrorOk);
+  EXPECT_ABS_WRITE32(mmio_, base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x03020100);
+  EXPECT_EQ(hmac_sha256_update(&kData[0], 4), kErrorOk);
 
   // Trigger 8bit/32bit/8bit sequence.
-  EXPECT_WRITE8(HMAC_MSG_FIFO_REG_OFFSET, 0x02);
-  EXPECT_WRITE8(HMAC_MSG_FIFO_REG_OFFSET, 0x03);
-  EXPECT_WRITE32(HMAC_MSG_FIFO_REG_OFFSET, 0x07060504);
-  EXPECT_WRITE8(HMAC_MSG_FIFO_REG_OFFSET, 0x08);
-  EXPECT_WRITE8(HMAC_MSG_FIFO_REG_OFFSET, 0x09);
-  EXPECT_EQ(hmac_sha256_update(&hmac_, &kData[2], 8), kErrorOk);
+  EXPECT_ABS_WRITE8(mmio_, base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x02);
+  EXPECT_ABS_WRITE8(mmio_, base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x03);
+  EXPECT_ABS_WRITE32(mmio_, base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x07060504);
+  EXPECT_ABS_WRITE8(mmio_, base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x08);
+  EXPECT_ABS_WRITE8(mmio_, base_ + HMAC_MSG_FIFO_REG_OFFSET, 0x09);
+  EXPECT_EQ(hmac_sha256_update(&kData[2], 8), kErrorOk);
 }
 
 class Sha256FinalTest : public HmacTest {};
 
 TEST_F(Sha256FinalTest, NullArgs) {
-  EXPECT_EQ(hmac_sha256_final(&hmac_, nullptr), kErrorHmacInvalidArgument);
-
-  hmac_digest_t digest;
-  EXPECT_EQ(hmac_sha256_final(nullptr, &digest), kErrorHmacInvalidArgument);
+  EXPECT_EQ(hmac_sha256_final(nullptr), kErrorHmacInvalidArgument);
 }
 
 TEST_F(Sha256FinalTest, GetDigest) {
@@ -96,35 +88,44 @@
   };
 
   // Request digest.
-  EXPECT_WRITE32(HMAC_CMD_REG_OFFSET, {{HMAC_CMD_HASH_PROCESS_BIT, true}});
+  EXPECT_ABS_WRITE32(mmio_, base_ + HMAC_CMD_REG_OFFSET,
+                     {{HMAC_CMD_HASH_PROCESS_BIT, true}});
 
   // Poll a couple of times before returning the result
-  EXPECT_READ32(HMAC_INTR_STATE_REG_OFFSET,
-                {
-                    {HMAC_INTR_STATE_HMAC_DONE_BIT, false},
-                });
-  EXPECT_READ32(HMAC_INTR_STATE_REG_OFFSET,
-                {
-                    {HMAC_INTR_STATE_HMAC_DONE_BIT, true},
-                });
-  EXPECT_WRITE32(HMAC_INTR_STATE_REG_OFFSET,
-                 {
-                     {HMAC_INTR_STATE_HMAC_DONE_BIT, true},
-                 });
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_INTR_STATE_REG_OFFSET,
+                    {
+                        {HMAC_INTR_STATE_HMAC_DONE_BIT, false},
+                    });
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_INTR_STATE_REG_OFFSET,
+                    {
+                        {HMAC_INTR_STATE_HMAC_DONE_BIT, true},
+                    });
+  EXPECT_ABS_WRITE32(mmio_, base_ + HMAC_INTR_STATE_REG_OFFSET,
+                     {
+                         {HMAC_INTR_STATE_HMAC_DONE_BIT, true},
+                     });
 
   // Set expectations explicitly to ensure that the registers
   // are contiguous.
-  EXPECT_READ32(HMAC_DIGEST_7_REG_OFFSET, kExpectedDigest[0]);
-  EXPECT_READ32(HMAC_DIGEST_6_REG_OFFSET, kExpectedDigest[1]);
-  EXPECT_READ32(HMAC_DIGEST_5_REG_OFFSET, kExpectedDigest[2]);
-  EXPECT_READ32(HMAC_DIGEST_4_REG_OFFSET, kExpectedDigest[3]);
-  EXPECT_READ32(HMAC_DIGEST_3_REG_OFFSET, kExpectedDigest[4]);
-  EXPECT_READ32(HMAC_DIGEST_2_REG_OFFSET, kExpectedDigest[5]);
-  EXPECT_READ32(HMAC_DIGEST_1_REG_OFFSET, kExpectedDigest[6]);
-  EXPECT_READ32(HMAC_DIGEST_0_REG_OFFSET, kExpectedDigest[7]);
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_DIGEST_7_REG_OFFSET,
+                    kExpectedDigest[0]);
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_DIGEST_6_REG_OFFSET,
+                    kExpectedDigest[1]);
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_DIGEST_5_REG_OFFSET,
+                    kExpectedDigest[2]);
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_DIGEST_4_REG_OFFSET,
+                    kExpectedDigest[3]);
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_DIGEST_3_REG_OFFSET,
+                    kExpectedDigest[4]);
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_DIGEST_2_REG_OFFSET,
+                    kExpectedDigest[5]);
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_DIGEST_1_REG_OFFSET,
+                    kExpectedDigest[6]);
+  EXPECT_ABS_READ32(mmio_, base_ + HMAC_DIGEST_0_REG_OFFSET,
+                    kExpectedDigest[7]);
 
   hmac_digest_t got_digest;
-  EXPECT_EQ(hmac_sha256_final(&hmac_, &got_digest), kErrorOk);
+  EXPECT_EQ(hmac_sha256_final(&got_digest), kErrorOk);
   EXPECT_THAT(got_digest.digest, ElementsAreArray(kExpectedDigest));
 }
 
diff --git a/sw/device/silicon_creator/lib/drivers/meson.build b/sw/device/silicon_creator/lib/drivers/meson.build
index bf97129..1e0b4f5 100644
--- a/sw/device/silicon_creator/lib/drivers/meson.build
+++ b/sw/device/silicon_creator/lib/drivers/meson.build
@@ -11,7 +11,7 @@
       'hmac.c',
     ],
     dependencies: [
-      sw_lib_mmio,
+      sw_silicon_creator_lib_base_abs_mmio,
     ],
   ),
 )
@@ -25,11 +25,11 @@
     ],
     dependencies: [
       sw_vendor_gtest,
-      sw_lib_base_testing_mock_mmio,
+      sw_silicon_creator_lib_base_mock_abs_mmio,
     ],
     native: true,
-    c_args: ['-DMOCK_MMIO'],
-    cpp_args: ['-DMOCK_MMIO'],
+    c_args: ['-DMOCK_ABS_MMIO'],
+    cpp_args: ['-DMOCK_ABS_MMIO'],
     ),
   suite: 'mask_rom',
 )
diff --git a/sw/device/silicon_creator/lib/drivers/mock_hmac.h b/sw/device/silicon_creator/lib/drivers/mock_hmac.h
index 7d8cfd5..a80ad0d 100644
--- a/sw/device/silicon_creator/lib/drivers/mock_hmac.h
+++ b/sw/device/silicon_creator/lib/drivers/mock_hmac.h
@@ -16,10 +16,9 @@
  */
 class MockHmac {
  public:
-  MOCK_METHOD(rom_error_t, sha256_init, (const hmac_t *));
-  MOCK_METHOD(rom_error_t, sha256_update,
-              (const hmac_t *, const void *, size_t));
-  MOCK_METHOD(rom_error_t, sha256_final, (const hmac_t *, hmac_digest_t *));
+  MOCK_METHOD(void, sha256_init, ());
+  MOCK_METHOD(rom_error_t, sha256_update, (const void *, size_t));
+  MOCK_METHOD(rom_error_t, sha256_final, (hmac_digest_t *));
   virtual ~MockHmac() {}
 };
 
@@ -29,17 +28,14 @@
 
 extern "C" {
 
-rom_error_t hmac_sha256_init(const hmac_t *hmac) {
-  return MockHmac::Instance().sha256_init(hmac);
+void hmac_sha256_init(void) { MockHmac::Instance().sha256_init(); }
+
+rom_error_t hmac_sha256_update(const void *data, size_t len) {
+  return MockHmac::Instance().sha256_update(data, len);
 }
 
-rom_error_t hmac_sha256_update(const hmac_t *hmac, const void *data,
-                               size_t len) {
-  return MockHmac::Instance().sha256_update(hmac, data, len);
-}
-
-rom_error_t hmac_sha256_final(const hmac_t *hmac, hmac_digest_t *digest) {
-  return MockHmac::Instance().sha256_final(hmac, digest);
+rom_error_t hmac_sha256_final(hmac_digest_t *digest) {
+  return MockHmac::Instance().sha256_final(digest);
 }
 
 }  // extern "C"
diff --git a/sw/device/silicon_creator/mask_rom/mask_rom.c b/sw/device/silicon_creator/mask_rom/mask_rom.c
index 3929d5b..851c90c 100644
--- a/sw/device/silicon_creator/mask_rom/mask_rom.c
+++ b/sw/device/silicon_creator/mask_rom/mask_rom.c
@@ -35,7 +35,6 @@
 void mask_rom_exception_handler(void) { wait_for_interrupt(); }
 void mask_rom_nmi_handler(void) { wait_for_interrupt(); }
 
-hmac_t hmac;
 uart_t uart;
 
 // FIXME: Temporary workaround to run functional test of SHA256.
@@ -46,12 +45,11 @@
     return kErrorUnknown;
   }
 
-  RETURN_IF_ERROR(hmac_sha256_init(&hmac));
-  RETURN_IF_ERROR(
-      hmac_sha256_update(&hmac, &rom_ext_identifier, sizeof(uint32_t)));
+  hmac_sha256_init();
+  RETURN_IF_ERROR(hmac_sha256_update(&rom_ext_identifier, sizeof(uint32_t)));
 
   hmac_digest_t digest;
-  RETURN_IF_ERROR(hmac_sha256_final(&hmac, &digest));
+  RETURN_IF_ERROR(hmac_sha256_final(&digest));
 
   return memcmp(digest.digest, kROMExtIdentifierExpectedDigest,
                 sizeof(digest.digest)) == 0
@@ -74,10 +72,6 @@
       .sink = uart_sink,
   });
 
-  // Map HMAC registers.
-  // TODO(lowrisc/opentitan#6283): Move to constant driver handles.
-  hmac.base_addr = mmio_region_from_addr(TOP_EARLGREY_HMAC_BASE_ADDR);
-
   // FIXME: what (if anything) should we print at startup?
   base_printf("MaskROM\r\n");
 
diff --git a/sw/device/silicon_creator/mask_rom/sig_verify.c b/sw/device/silicon_creator/mask_rom/sig_verify.c
index d4a872d..c96f9e5 100644
--- a/sw/device/silicon_creator/mask_rom/sig_verify.c
+++ b/sw/device/silicon_creator/mask_rom/sig_verify.c
@@ -92,15 +92,10 @@
 rom_error_t sigverify_rom_ext_signature_verify(
     const uint8_t *signed_region, size_t signed_region_len,
     const sigverify_rsa_buffer_t *signature, uint32_t key_id) {
-  // TODO(#39): Make this a global const.
-  hmac_t hmac = {
-      .base_addr = mmio_region_from_addr(TOP_EARLGREY_HMAC_BASE_ADDR),
-  };
-
   hmac_digest_t act_digest;
-  RETURN_IF_ERROR(hmac_sha256_init(&hmac));
-  RETURN_IF_ERROR(hmac_sha256_update(&hmac, signed_region, signed_region_len));
-  RETURN_IF_ERROR(hmac_sha256_final(&hmac, &act_digest));
+  hmac_sha256_init();
+  RETURN_IF_ERROR(hmac_sha256_update(signed_region, signed_region_len));
+  RETURN_IF_ERROR(hmac_sha256_final(&act_digest));
 
   // TODO(#21): Key validity check using OTP.
   const sigverify_rsa_key_t *key;
diff --git a/sw/device/silicon_creator/mask_rom/sig_verify_unittest.cc b/sw/device/silicon_creator/mask_rom/sig_verify_unittest.cc
index ea9d13c..4cb3b96 100644
--- a/sw/device/silicon_creator/mask_rom/sig_verify_unittest.cc
+++ b/sw/device/silicon_creator/mask_rom/sig_verify_unittest.cc
@@ -14,13 +14,6 @@
 
 #include "hw/top_earlgrey/sw/autogen/top_earlgrey.h"
 
-// Provide `==` for `hmac_t` in the global namespace to be able to use it in
-// expectations. Since `hmac_t` does not have any padding, `std::memcmp` is good
-// enough.
-bool operator==(const hmac_t &lhs, const hmac_t &rhs) {
-  return std::memcmp(&lhs, &rhs, sizeof(lhs)) == 0;
-}
-
 namespace sig_verify_unittest {
 namespace {
 using ::testing::DoAll;
@@ -30,13 +23,6 @@
 using ::testing::SetArgPointee;
 
 /**
- * Expected HMAC handle.
- */
-const hmac_t kHmacHandle = {
-    .base_addr = mmio_region_from_addr(TOP_EARLGREY_HMAC_BASE_ADDR),
-};
-
-/**
  * SHA2-256 digest of "test".
  *
  * Can be obtained using:
@@ -111,13 +97,11 @@
   // FIXME: Parameterize with key ids.
   const auto key_id = sigverify_rsa_key_id_get(&kSigVerifyRsaKeys[0]);
 
-  EXPECT_CALL(hmac_, sha256_init(Pointee(kHmacHandle)))
+  EXPECT_CALL(hmac_, sha256_init());
+  EXPECT_CALL(hmac_, sha256_update(kSignedRegion.data(), sizeof(kSignedRegion)))
       .WillOnce(Return(kErrorOk));
-  EXPECT_CALL(hmac_, sha256_update(Pointee(kHmacHandle), kSignedRegion.data(),
-                                   sizeof(kSignedRegion)))
-      .WillOnce(Return(kErrorOk));
-  EXPECT_CALL(hmac_, sha256_final(Pointee(kHmacHandle), NotNull()))
-      .WillOnce(DoAll(SetArgPointee<1>(kTestDigest), Return(kErrorOk)));
+  EXPECT_CALL(hmac_, sha256_final(NotNull()))
+      .WillOnce(DoAll(SetArgPointee<0>(kTestDigest), Return(kErrorOk)));
   EXPECT_CALL(sig_verify_mod_exp_,
               mod_exp_ibex(&kSigVerifyRsaKeys[0], &kSignature, NotNull()))
       .WillOnce(DoAll(SetArgPointee<2>(kEncMsg), Return(kErrorOk)));
@@ -139,13 +123,12 @@
     auto bad_enc_msg = kEncMsg;
     bad_enc_msg.data[i] = ~bad_enc_msg.data[i];
 
-    EXPECT_CALL(hmac_, sha256_init(Pointee(kHmacHandle)))
+    EXPECT_CALL(hmac_, sha256_init());
+    EXPECT_CALL(hmac_,
+                sha256_update(kSignedRegion.data(), sizeof(kSignedRegion)))
         .WillOnce(Return(kErrorOk));
-    EXPECT_CALL(hmac_, sha256_update(Pointee(kHmacHandle), kSignedRegion.data(),
-                                     sizeof(kSignedRegion)))
-        .WillOnce(Return(kErrorOk));
-    EXPECT_CALL(hmac_, sha256_final(Pointee(kHmacHandle), NotNull()))
-        .WillOnce(DoAll(SetArgPointee<1>(kTestDigest), Return(kErrorOk)));
+    EXPECT_CALL(hmac_, sha256_final(NotNull()))
+        .WillOnce(DoAll(SetArgPointee<0>(kTestDigest), Return(kErrorOk)));
     EXPECT_CALL(sig_verify_mod_exp_,
                 mod_exp_ibex(&kSigVerifyRsaKeys[0], &kSignature, NotNull()))
         .WillOnce(DoAll(SetArgPointee<2>(bad_enc_msg), Return(true)));