[otbn] Align ERR_BITS and FATAL_ALERT_CAUSE

* Have all fatal error bits present in both ERR_BITS and
  FATAL_ALERT_CAUSE, in the same order.
* Shift fatal errors to bit position 16+ in ERR_BITS to give room for
  expansion of software errors below that without having to redo the
  stuct layout.
Fixes #8259

Signed-off-by: Philipp Wagner <phw@lowrisc.org>
diff --git a/hw/ip/otbn/data/otbn.hjson b/hw/ip/otbn/data/otbn.hjson
index 5cc42b0..40a3804 100644
--- a/hw/ip/otbn/data/otbn.hjson
+++ b/hw/ip/otbn/data/otbn.hjson
@@ -268,6 +268,7 @@
       swaccess: "ro",
       hwaccess: "hwo",
       fields: [
+        // Software errors
         { bits: "0",
           name: "bad_data_addr"
           resval: 0,
@@ -293,27 +294,34 @@
           resval: 0,
           desc: "A `LOOP` error was observed."
         }
-        { bits: "5",
+
+        // Fatal errors. Keep in sync with list in FATAL_ALERT_CAUSE.
+        { bits: "16",
           name: "imem_intg_violation"
           resval: 0,
           desc: "A `IMEM_INTG_VIOLATION` error was observed."
         }
-        { bits: "6",
+        { bits: "17",
           name: "dmem_intg_violation"
           resval: 0,
           desc: "A `DMEM_INTG_VIOLATION` error was observed."
         }
-        { bits: "7",
+        { bits: "18",
           name: "reg_intg_violation"
           resval: 0,
           desc: "A `REG_INTG_VIOLATION` error was observed."
         }
-        { bits: "8",
+        { bits: "19",
+          name: "bus_intg_violation"
+          resval: 0,
+          desc: "A `BUS_INTG_VIOLATION` error was observed."
+        }
+        { bits: "20",
           name: "illegal_bus_access"
           resval: 0,
           desc: "An `ILLEGAL_BUS_ACCESS` error was observed."
         }
-        { bits: "9",
+        { bits: "21",
           name: "lifecycle_escalation"
           resval: 0,
           desc: "A `LIFECYCLE_ESCALATION` error was observed."
@@ -346,26 +354,27 @@
       swaccess: "ro",
       hwaccess: "hwo",
       fields: [
+        // Keep the list in sync with the fatal errors in ERR_BITS.
         { bits: "0",
-          name: "bus_intg_violation",
-          resval: 0,
-          desc: "A `BUS_INTG_VIOLATION` error was observed."
-        }
-        { bits: "1",
           name: "imem_intg_violation",
           resval: 0,
           desc: "A `IMEM_INTG_VIOLATION` error was observed."
         }
-        { bits: "2",
+        { bits: "1",
           name: "dmem_intg_violation",
           resval: 0,
           desc: "A `DMEM_INTG_VIOLATION` error was observed."
         }
-        { bits: "3",
+        { bits: "2",
           name: "reg_intg_violation",
           resval: 0,
           desc: "A `REG_INTG_VIOLATION` error was observed."
         }
+        { bits: "3",
+          name: "bus_intg_violation",
+          resval: 0,
+          desc: "A `BUS_INTG_VIOLATION` error was observed."
+        }
         { bits: "4",
           name: "illegal_bus_access"
           resval: 0,
diff --git a/hw/ip/otbn/dv/otbnsim/sim/constants.py b/hw/ip/otbn/dv/otbnsim/sim/constants.py
index a232e11..e50237f 100644
--- a/hw/ip/otbn/dv/otbnsim/sim/constants.py
+++ b/hw/ip/otbn/dv/otbnsim/sim/constants.py
@@ -27,8 +27,9 @@
     CALL_STACK = 1 << 2
     ILLEGAL_INSN = 1 << 3
     LOOP = 1 << 4
-    IMEM_INTG_VIOLATION = 1 << 5
-    DMEM_INTG_VIOLATION = 1 << 6
-    REG_INTG_VIOLATION = 1 << 7
-    ILLEGAL_BUS_ACCESS = 1 << 8
-    LIFECYCLE_ESCALATION = 1 << 9
+    IMEM_INTG_VIOLATION = 1 << 16
+    DMEM_INTG_VIOLATION = 1 << 17
+    REG_INTG_VIOLATION = 1 << 18
+    BUS_INTG_VIOLATION = 1 << 19
+    ILLEGAL_BUS_ACCESS = 1 << 20
+    LIFECYCLE_ESCALATION = 1 << 21
diff --git a/hw/ip/otbn/dv/verilator/otbn_top_sim.sv b/hw/ip/otbn/dv/verilator/otbn_top_sim.sv
index ad22c80..6b0d012 100644
--- a/hw/ip/otbn/dv/verilator/otbn_top_sim.sv
+++ b/hw/ip/otbn/dv/verilator/otbn_top_sim.sv
@@ -98,6 +98,7 @@
 
     .insn_cnt_o             ( insn_cnt         ),
 
+    .bus_intg_violation_i   ( 1'b0             ),
     .illegal_bus_access_i   ( 1'b0             ),
     .lifecycle_escalation_i ( 1'b0             )
   );
diff --git a/hw/ip/otbn/rtl/otbn.sv b/hw/ip/otbn/rtl/otbn.sv
index 834f3b6..1d89cfe 100644
--- a/hw/ip/otbn/rtl/otbn.sv
+++ b/hw/ip/otbn/rtl/otbn.sv
@@ -624,6 +624,9 @@
   assign hw2reg.err_bits.reg_intg_violation.de = done;
   assign hw2reg.err_bits.reg_intg_violation.d = err_bits.reg_intg_violation;
 
+  assign hw2reg.err_bits.bus_intg_violation.de = done;
+  assign hw2reg.err_bits.bus_intg_violation.d = bus_intg_violation;
+
   assign hw2reg.err_bits.illegal_bus_access.de = done;
   assign hw2reg.err_bits.illegal_bus_access.d = err_bits.illegal_bus_access;
 
@@ -637,8 +640,6 @@
 
   // FATAL_ALERT_CAUSE register. The .de and .d values are equal for each bit, so that it can only
   // be set, not cleared.
-  assign hw2reg.fatal_alert_cause.bus_intg_violation.de = bus_intg_violation;
-  assign hw2reg.fatal_alert_cause.bus_intg_violation.d  = bus_intg_violation;
   assign hw2reg.fatal_alert_cause.imem_intg_violation.de = imem_rerror;
   assign hw2reg.fatal_alert_cause.imem_intg_violation.d  = imem_rerror;
   assign hw2reg.fatal_alert_cause.dmem_intg_violation.de = dmem_rerror;
@@ -646,6 +647,8 @@
   // TODO: Register file errors
   assign hw2reg.fatal_alert_cause.reg_intg_violation.de = 0;
   assign hw2reg.fatal_alert_cause.reg_intg_violation.d  = 0;
+  assign hw2reg.fatal_alert_cause.bus_intg_violation.de = bus_intg_violation;
+  assign hw2reg.fatal_alert_cause.bus_intg_violation.d  = bus_intg_violation;
   assign hw2reg.fatal_alert_cause.illegal_bus_access.de = illegal_bus_access_d;
   assign hw2reg.fatal_alert_cause.illegal_bus_access.d  = illegal_bus_access_d;
   assign hw2reg.fatal_alert_cause.lifecycle_escalation.de = lifecycle_escalation;
@@ -846,6 +849,7 @@
 
       .insn_cnt_o             (insn_cnt_rtl),
 
+      .bus_intg_violation_i   (bus_intg_violation),
       .illegal_bus_access_i   (illegal_bus_access_q),
       .lifecycle_escalation_i (lifecycle_escalation)
     );
@@ -894,6 +898,7 @@
 
       .insn_cnt_o             (insn_cnt),
 
+      .bus_intg_violation_i   (bus_intg_violation),
       .illegal_bus_access_i   (illegal_bus_access_q),
       .lifecycle_escalation_i (lifecycle_escalation)
     );
diff --git a/hw/ip/otbn/rtl/otbn_controller.sv b/hw/ip/otbn/rtl/otbn_controller.sv
index 436a039..101ccb8 100644
--- a/hw/ip/otbn/rtl/otbn_controller.sv
+++ b/hw/ip/otbn/rtl/otbn_controller.sv
@@ -125,6 +125,7 @@
 
   input  logic        state_reset_i,
   output logic [31:0] insn_cnt_o,
+  input  logic        bus_intg_violation_i,
   input  logic        illegal_bus_access_i,
   input  logic        lifecycle_escalation_i
 );
@@ -338,9 +339,10 @@
 
   assign err_bits_o.lifecycle_escalation = lifecycle_escalation_i;
   assign err_bits_o.illegal_bus_access   = illegal_bus_access_i;
+  assign err_bits_o.bus_intg_violation   = bus_intg_violation_i;
   assign err_bits_o.reg_intg_violation   = rf_base_rd_data_err_i | rf_bignum_rd_data_err_i;
-  assign err_bits_o.imem_intg_violation  = insn_fetch_err_i;
   assign err_bits_o.dmem_intg_violation  = lsu_rdata_err_i;
+  assign err_bits_o.imem_intg_violation  = insn_fetch_err_i;
   assign err_bits_o.illegal_insn         = illegal_insn_static | rf_indirect_err;
   assign err_bits_o.bad_data_addr        = dmem_addr_err;
   assign err_bits_o.loop                 = loop_err;
diff --git a/hw/ip/otbn/rtl/otbn_core.sv b/hw/ip/otbn/rtl/otbn_core.sv
index cc47588..2aab4d7 100644
--- a/hw/ip/otbn/rtl/otbn_core.sv
+++ b/hw/ip/otbn/rtl/otbn_core.sv
@@ -68,6 +68,9 @@
 
   output logic [31:0]             insn_cnt_o,
 
+  // An integrity check on an incoming bus transaction failed. Results in a fatal error.
+  input  logic                    bus_intg_violation_i,
+
   // Asserted by system when bus tries to access OTBN memories whilst OTBN is active. Results in a
   // fatal error.
   input  logic                    illegal_bus_access_i,
@@ -356,6 +359,7 @@
 
     .state_reset_i      (state_reset),
     .insn_cnt_o         (insn_cnt),
+    .bus_intg_violation_i,
     .illegal_bus_access_i,
     .lifecycle_escalation_i
   );
diff --git a/hw/ip/otbn/rtl/otbn_pkg.sv b/hw/ip/otbn/rtl/otbn_pkg.sv
index 47f970a..ac6d303 100644
--- a/hw/ip/otbn/rtl/otbn_pkg.sv
+++ b/hw/ip/otbn/rtl/otbn_pkg.sv
@@ -72,6 +72,7 @@
   typedef struct packed {
     logic lifecycle_escalation;
     logic illegal_bus_access;
+    logic bus_intg_violation;
     logic reg_intg_violation;
     logic dmem_intg_violation;
     logic imem_intg_violation;
diff --git a/hw/ip/otbn/rtl/otbn_reg_pkg.sv b/hw/ip/otbn/rtl/otbn_reg_pkg.sv
index 5c9fce7..9fe76b4 100644
--- a/hw/ip/otbn/rtl/otbn_reg_pkg.sv
+++ b/hw/ip/otbn/rtl/otbn_reg_pkg.sv
@@ -94,6 +94,10 @@
     struct packed {
       logic        d;
       logic        de;
+    } bus_intg_violation;
+    struct packed {
+      logic        d;
+      logic        de;
     } illegal_bus_access;
     struct packed {
       logic        d;
@@ -105,10 +109,6 @@
     struct packed {
       logic        d;
       logic        de;
-    } bus_intg_violation;
-    struct packed {
-      logic        d;
-      logic        de;
     } imem_intg_violation;
     struct packed {
       logic        d;
@@ -121,6 +121,10 @@
     struct packed {
       logic        d;
       logic        de;
+    } bus_intg_violation;
+    struct packed {
+      logic        d;
+      logic        de;
     } illegal_bus_access;
     struct packed {
       logic        d;
@@ -144,9 +148,9 @@
 
   // HW -> register type
   typedef struct packed {
-    otbn_hw2reg_intr_state_reg_t intr_state; // [73:72]
-    otbn_hw2reg_status_reg_t status; // [71:64]
-    otbn_hw2reg_err_bits_reg_t err_bits; // [63:44]
+    otbn_hw2reg_intr_state_reg_t intr_state; // [75:74]
+    otbn_hw2reg_status_reg_t status; // [73:66]
+    otbn_hw2reg_err_bits_reg_t err_bits; // [65:44]
     otbn_hw2reg_fatal_alert_cause_reg_t fatal_alert_cause; // [43:32]
     otbn_hw2reg_insn_cnt_reg_t insn_cnt; // [31:0]
   } otbn_hw2reg_t;
@@ -204,7 +208,7 @@
     4'b 0001, // index[3] OTBN_ALERT_TEST
     4'b 0001, // index[4] OTBN_CMD
     4'b 0001, // index[5] OTBN_STATUS
-    4'b 0011, // index[6] OTBN_ERR_BITS
+    4'b 0111, // index[6] OTBN_ERR_BITS
     4'b 1111, // index[7] OTBN_START_ADDR
     4'b 0001, // index[8] OTBN_FATAL_ALERT_CAUSE
     4'b 1111  // index[9] OTBN_INSN_CNT
diff --git a/hw/ip/otbn/rtl/otbn_reg_top.sv b/hw/ip/otbn/rtl/otbn_reg_top.sv
index 09284ac..3c137e2 100644
--- a/hw/ip/otbn/rtl/otbn_reg_top.sv
+++ b/hw/ip/otbn/rtl/otbn_reg_top.sv
@@ -184,14 +184,15 @@
   logic err_bits_imem_intg_violation_qs;
   logic err_bits_dmem_intg_violation_qs;
   logic err_bits_reg_intg_violation_qs;
+  logic err_bits_bus_intg_violation_qs;
   logic err_bits_illegal_bus_access_qs;
   logic err_bits_lifecycle_escalation_qs;
   logic start_addr_we;
   logic [31:0] start_addr_wd;
-  logic fatal_alert_cause_bus_intg_violation_qs;
   logic fatal_alert_cause_imem_intg_violation_qs;
   logic fatal_alert_cause_dmem_intg_violation_qs;
   logic fatal_alert_cause_reg_intg_violation_qs;
+  logic fatal_alert_cause_bus_intg_violation_qs;
   logic fatal_alert_cause_illegal_bus_access_qs;
   logic fatal_alert_cause_lifecycle_escalation_qs;
   logic insn_cnt_re;
@@ -451,7 +452,7 @@
     .qs     (err_bits_loop_qs)
   );
 
-  //   F[imem_intg_violation]: 5:5
+  //   F[imem_intg_violation]: 16:16
   prim_subreg #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRO),
@@ -476,7 +477,7 @@
     .qs     (err_bits_imem_intg_violation_qs)
   );
 
-  //   F[dmem_intg_violation]: 6:6
+  //   F[dmem_intg_violation]: 17:17
   prim_subreg #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRO),
@@ -501,7 +502,7 @@
     .qs     (err_bits_dmem_intg_violation_qs)
   );
 
-  //   F[reg_intg_violation]: 7:7
+  //   F[reg_intg_violation]: 18:18
   prim_subreg #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRO),
@@ -526,7 +527,32 @@
     .qs     (err_bits_reg_intg_violation_qs)
   );
 
-  //   F[illegal_bus_access]: 8:8
+  //   F[bus_intg_violation]: 19:19
+  prim_subreg #(
+    .DW      (1),
+    .SwAccess(prim_subreg_pkg::SwAccessRO),
+    .RESVAL  (1'h0)
+  ) u_err_bits_bus_intg_violation (
+    .clk_i   (clk_i),
+    .rst_ni  (rst_ni),
+
+    // from register interface
+    .we     (1'b0),
+    .wd     ('0),
+
+    // from internal hardware
+    .de     (hw2reg.err_bits.bus_intg_violation.de),
+    .d      (hw2reg.err_bits.bus_intg_violation.d),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (err_bits_bus_intg_violation_qs)
+  );
+
+  //   F[illegal_bus_access]: 20:20
   prim_subreg #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRO),
@@ -551,7 +577,7 @@
     .qs     (err_bits_illegal_bus_access_qs)
   );
 
-  //   F[lifecycle_escalation]: 9:9
+  //   F[lifecycle_escalation]: 21:21
   prim_subreg #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRO),
@@ -604,32 +630,7 @@
 
 
   // R[fatal_alert_cause]: V(False)
-  //   F[bus_intg_violation]: 0:0
-  prim_subreg #(
-    .DW      (1),
-    .SwAccess(prim_subreg_pkg::SwAccessRO),
-    .RESVAL  (1'h0)
-  ) u_fatal_alert_cause_bus_intg_violation (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (1'b0),
-    .wd     ('0),
-
-    // from internal hardware
-    .de     (hw2reg.fatal_alert_cause.bus_intg_violation.de),
-    .d      (hw2reg.fatal_alert_cause.bus_intg_violation.d),
-
-    // to internal hardware
-    .qe     (),
-    .q      (),
-
-    // to register interface (read)
-    .qs     (fatal_alert_cause_bus_intg_violation_qs)
-  );
-
-  //   F[imem_intg_violation]: 1:1
+  //   F[imem_intg_violation]: 0:0
   prim_subreg #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRO),
@@ -654,7 +655,7 @@
     .qs     (fatal_alert_cause_imem_intg_violation_qs)
   );
 
-  //   F[dmem_intg_violation]: 2:2
+  //   F[dmem_intg_violation]: 1:1
   prim_subreg #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRO),
@@ -679,7 +680,7 @@
     .qs     (fatal_alert_cause_dmem_intg_violation_qs)
   );
 
-  //   F[reg_intg_violation]: 3:3
+  //   F[reg_intg_violation]: 2:2
   prim_subreg #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRO),
@@ -704,6 +705,31 @@
     .qs     (fatal_alert_cause_reg_intg_violation_qs)
   );
 
+  //   F[bus_intg_violation]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SwAccess(prim_subreg_pkg::SwAccessRO),
+    .RESVAL  (1'h0)
+  ) u_fatal_alert_cause_bus_intg_violation (
+    .clk_i   (clk_i),
+    .rst_ni  (rst_ni),
+
+    // from register interface
+    .we     (1'b0),
+    .wd     ('0),
+
+    // from internal hardware
+    .de     (hw2reg.fatal_alert_cause.bus_intg_violation.de),
+    .d      (hw2reg.fatal_alert_cause.bus_intg_violation.d),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (fatal_alert_cause_bus_intg_violation_qs)
+  );
+
   //   F[illegal_bus_access]: 4:4
   prim_subreg #(
     .DW      (1),
@@ -860,11 +886,12 @@
         reg_rdata_next[2] = err_bits_call_stack_qs;
         reg_rdata_next[3] = err_bits_illegal_insn_qs;
         reg_rdata_next[4] = err_bits_loop_qs;
-        reg_rdata_next[5] = err_bits_imem_intg_violation_qs;
-        reg_rdata_next[6] = err_bits_dmem_intg_violation_qs;
-        reg_rdata_next[7] = err_bits_reg_intg_violation_qs;
-        reg_rdata_next[8] = err_bits_illegal_bus_access_qs;
-        reg_rdata_next[9] = err_bits_lifecycle_escalation_qs;
+        reg_rdata_next[16] = err_bits_imem_intg_violation_qs;
+        reg_rdata_next[17] = err_bits_dmem_intg_violation_qs;
+        reg_rdata_next[18] = err_bits_reg_intg_violation_qs;
+        reg_rdata_next[19] = err_bits_bus_intg_violation_qs;
+        reg_rdata_next[20] = err_bits_illegal_bus_access_qs;
+        reg_rdata_next[21] = err_bits_lifecycle_escalation_qs;
       end
 
       addr_hit[7]: begin
@@ -872,10 +899,10 @@
       end
 
       addr_hit[8]: begin
-        reg_rdata_next[0] = fatal_alert_cause_bus_intg_violation_qs;
-        reg_rdata_next[1] = fatal_alert_cause_imem_intg_violation_qs;
-        reg_rdata_next[2] = fatal_alert_cause_dmem_intg_violation_qs;
-        reg_rdata_next[3] = fatal_alert_cause_reg_intg_violation_qs;
+        reg_rdata_next[0] = fatal_alert_cause_imem_intg_violation_qs;
+        reg_rdata_next[1] = fatal_alert_cause_dmem_intg_violation_qs;
+        reg_rdata_next[2] = fatal_alert_cause_reg_intg_violation_qs;
+        reg_rdata_next[3] = fatal_alert_cause_bus_intg_violation_qs;
         reg_rdata_next[4] = fatal_alert_cause_illegal_bus_access_qs;
         reg_rdata_next[5] = fatal_alert_cause_lifecycle_escalation_qs;
       end
diff --git a/sw/device/lib/dif/dif_otbn.c b/sw/device/lib/dif/dif_otbn.c
index 0188f5e..f5f3a6e 100644
--- a/sw/device/lib/dif/dif_otbn.c
+++ b/sw/device/lib/dif/dif_otbn.c
@@ -32,6 +32,9 @@
 static_assert(kDifOtbnErrBitsRegIntgViolation ==
                   (1 << OTBN_ERR_BITS_REG_INTG_VIOLATION_BIT),
               "Layout of error bits changed.");
+static_assert(kDifOtbnErrBitsBusIntgViolation ==
+                  (1 << OTBN_ERR_BITS_BUS_INTG_VIOLATION_BIT),
+              "Layout of error bits changed.");
 static_assert(kDifOtbnErrBitsIllegalBusAccess ==
                   (1 << OTBN_ERR_BITS_ILLEGAL_BUS_ACCESS_BIT),
               "Layout of error bits changed.");
diff --git a/sw/device/lib/dif/dif_otbn.h b/sw/device/lib/dif/dif_otbn.h
index f67620c..1a99118 100644
--- a/sw/device/lib/dif/dif_otbn.h
+++ b/sw/device/lib/dif/dif_otbn.h
@@ -105,15 +105,17 @@
   /** A LOOP error was observed. */
   kDifOtbnErrBitsLoop = (1 << 4),
   /** A IMEM_INTG_VIOLATION error was observed. */
-  kDifOtbnErrBitsImemIntgViolation = (1 << 5),
+  kDifOtbnErrBitsImemIntgViolation = (1 << 16),
   /** A DMEM_INTG_VIOLATION error was observed. */
-  kDifOtbnErrBitsDmemIntgViolation = (1 << 6),
+  kDifOtbnErrBitsDmemIntgViolation = (1 << 17),
   /** A REG_INTG_VIOLATION error was observed. */
-  kDifOtbnErrBitsRegIntgViolation = (1 << 7),
+  kDifOtbnErrBitsRegIntgViolation = (1 << 18),
+  /** A BUS_INTG_VIOLATION error was observed. */
+  kDifOtbnErrBitsBusIntgViolation = (1 << 19),
   /** An ILLEGAL_BUS_ACCESS error was observed. */
-  kDifOtbnErrBitsIllegalBusAccess = (1 << 8),
+  kDifOtbnErrBitsIllegalBusAccess = (1 << 20),
   /** A LIFECYCLE_ESCALATION error was observed. */
-  kDifOtbnErrBitsLifecycleEscalation = (1 << 9),
+  kDifOtbnErrBitsLifecycleEscalation = (1 << 21),
 } dif_otbn_err_bits_t;
 
 /**
diff --git a/sw/device/silicon_creator/lib/drivers/otbn.c b/sw/device/silicon_creator/lib/drivers/otbn.c
index 7c9326e..46c89cb 100644
--- a/sw/device/silicon_creator/lib/drivers/otbn.c
+++ b/sw/device/silicon_creator/lib/drivers/otbn.c
@@ -30,6 +30,8 @@
                      OTBN_ERR_BITS_DMEM_INTG_VIOLATION_BIT);
 ASSERT_ERR_BIT_MATCH(kOtbnErrBitsRegIntgViolation,
                      OTBN_ERR_BITS_REG_INTG_VIOLATION_BIT);
+ASSERT_ERR_BIT_MATCH(kOtbnErrBitsBusIntgViolation,
+                     OTBN_ERR_BITS_BUS_INTG_VIOLATION_BIT);
 ASSERT_ERR_BIT_MATCH(kOtbnErrBitsIllegalBusAccess,
                      OTBN_ERR_BITS_ILLEGAL_BUS_ACCESS_BIT);
 ASSERT_ERR_BIT_MATCH(kOtbnErrBitsLifecycleEscalation,
diff --git a/sw/device/silicon_creator/lib/drivers/otbn.h b/sw/device/silicon_creator/lib/drivers/otbn.h
index e5067a4..4be57f0 100644
--- a/sw/device/silicon_creator/lib/drivers/otbn.h
+++ b/sw/device/silicon_creator/lib/drivers/otbn.h
@@ -81,15 +81,17 @@
   /** A LOOP error was observed. */
   kOtbnErrBitsLoop = (1 << 4),
   /** A IMEM_INTG_VIOLATION error was observed. */
-  kOtbnErrBitsImemIntgViolation = (1 << 5),
+  kOtbnErrBitsImemIntgViolation = (1 << 16),
   /** A DMEM_INTG_VIOLATION error was observed. */
-  kOtbnErrBitsDmemIntgViolation = (1 << 6),
+  kOtbnErrBitsDmemIntgViolation = (1 << 17),
   /** A REG_INTG_VIOLATION error was observed. */
-  kOtbnErrBitsRegIntgViolation = (1 << 7),
+  kOtbnErrBitsRegIntgViolation = (1 << 18),
+  /** A BUS_INTG_VIOLATION error was observed. */
+  kOtbnErrBitsBusIntgViolation = (1 << 19),
   /** An ILLEGAL_BUS_ACCESS error was observed. */
-  kOtbnErrBitsIllegalBusAccess = (1 << 8),
+  kOtbnErrBitsIllegalBusAccess = (1 << 20),
   /** A LIFECYCLE_ESCALATION error was observed. */
-  kOtbnErrBitsLifecycleEscalation = (1 << 9),
+  kOtbnErrBitsLifecycleEscalation = (1 << 21),
 } otbn_err_bits_t;
 
 /**