@@ -154,6 +154,7 @@ module soc_ifc_top
154
154
output logic fw_update_rst_window,
155
155
156
156
input logic crypto_error,
157
+ input logic dcls_error,
157
158
158
159
// caliptra uncore jtag ports
159
160
input logic cptra_uncore_dmi_reg_en,
@@ -1284,18 +1285,21 @@ wdt #(
1284
1285
// Also calculate whether or not an unmasked event is being set, so we can
1285
1286
// trigger the SOC interrupt signal
1286
1287
always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .crypto_err .we = crypto_error;
1288
+ always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .dcls_error .we = dcls_error;
1287
1289
always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .iccm_ecc_unc.we = rv_ecc_sts.cptra_iccm_ecc_double_error & ~ fw_update_rst_window;
1288
1290
always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .dccm_ecc_unc.we = rv_ecc_sts.cptra_dccm_ecc_double_error & ~ fw_update_rst_window;
1289
1291
always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .nmi_pin .we = nmi_intr;
1290
1292
// Using we+next instead of hwset allows us to encode the reserved fields in some fashion
1291
1293
// other than bit-hot in the future, if needed (e.g. we need to encode > 32 FATAL events)
1292
1294
always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .crypto_err .next = 1'b1 ;
1295
+ always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .dcls_error .next = 1'b1 ;
1293
1296
always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .iccm_ecc_unc.next = 1'b1 ;
1294
1297
always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .dccm_ecc_unc.next = 1'b1 ;
1295
1298
always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .nmi_pin .next = 1'b1 ;
1296
- always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .rsvd.next[27 : 0 ] = 28 'h0 ;
1299
+ always_comb soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .rsvd.next[26 : 0 ] = 27 'h0 ;
1297
1300
// Flag the write even if the field being written to is already set to 1 - this is a new occurrence of the error and should trigger a new interrupt
1298
1301
always_comb unmasked_hw_error_fatal_write = (soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .crypto_err .we && | soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .crypto_err .next) ||
1302
+ (soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .dcls_error .we && | soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .dcls_error .next) ||
1299
1303
(soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .iccm_ecc_unc.we && ~ soc_ifc_reg_hwif_out.internal_hw_error_fatal_mask.mask_iccm_ecc_unc.value && | soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .iccm_ecc_unc.next) ||
1300
1304
(soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .dccm_ecc_unc.we && ~ soc_ifc_reg_hwif_out.internal_hw_error_fatal_mask.mask_dccm_ecc_unc.value && | soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .dccm_ecc_unc.next) ||
1301
1305
(soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .nmi_pin .we && ~ soc_ifc_reg_hwif_out.internal_hw_error_fatal_mask.mask_nmi_pin .value && | soc_ifc_reg_hwif_in.CPTRA_HW_ERROR_FATAL .nmi_pin .next);
@@ -1342,7 +1346,8 @@ always_comb cptra_uncore_dmi_locked_reg_rdata_in = ({32{(cptra_uncore_dmi_reg_ad
1342
1346
({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_CPTRA_FW_ERROR_ENC )}} & soc_ifc_reg_hwif_out.CPTRA_FW_ERROR_ENC .error_code.value) |
1343
1347
({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_BOOTFSM_GO )}} & { 31'b0 , soc_ifc_reg_hwif_out.CPTRA_BOOTFSM_GO .GO .value} ) |
1344
1348
({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_CPTRA_DBG_MANUF_SERVICE_REG )}} & soc_ifc_reg_hwif_out.CPTRA_DBG_MANUF_SERVICE_REG .DATA .value) |
1345
- ({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_HW_FATAL_ERROR )}} & { soc_ifc_reg_hwif_in .CPTRA_HW_ERROR_FATAL .rsvd.next[27 : 0 ],
1349
+ ({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_HW_FATAL_ERROR )}} & { soc_ifc_reg_hwif_in .CPTRA_HW_ERROR_FATAL .rsvd.next[26 : 0 ],
1350
+ soc_ifc_reg_hwif_out.CPTRA_HW_ERROR_FATAL .dcls_error.value,
1346
1351
soc_ifc_reg_hwif_out.CPTRA_HW_ERROR_FATAL .crypto_err.value,
1347
1352
soc_ifc_reg_hwif_out.CPTRA_HW_ERROR_FATAL .nmi_pin.value,
1348
1353
soc_ifc_reg_hwif_out.CPTRA_HW_ERROR_FATAL .dccm_ecc_unc.value,
@@ -1377,7 +1382,8 @@ always_comb cptra_uncore_dmi_unlocked_reg_rdata_in = ({32{(cptra_uncore_dmi_reg_
1377
1382
({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_CPTRA_FW_ERROR_ENC )}} & soc_ifc_reg_hwif_out.CPTRA_FW_ERROR_ENC .error_code.value) |
1378
1383
({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_BOOTFSM_GO )}} & { 31'b0 , soc_ifc_reg_hwif_out.CPTRA_BOOTFSM_GO .GO .value} ) |
1379
1384
({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_CPTRA_DBG_MANUF_SERVICE_REG )}} & soc_ifc_reg_hwif_out.CPTRA_DBG_MANUF_SERVICE_REG .DATA .value) |
1380
- ({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_HW_FATAL_ERROR )}} & { soc_ifc_reg_hwif_in .CPTRA_HW_ERROR_FATAL .rsvd.next[27 : 0 ],
1385
+ ({ 32 { (cptra_uncore_dmi_reg_addr == DMI_REG_HW_FATAL_ERROR )}} & { soc_ifc_reg_hwif_in .CPTRA_HW_ERROR_FATAL .rsvd.next[26 : 0 ],
1386
+ soc_ifc_reg_hwif_out.CPTRA_HW_ERROR_FATAL .dcls_error.value,
1381
1387
soc_ifc_reg_hwif_out.CPTRA_HW_ERROR_FATAL .crypto_err.value,
1382
1388
soc_ifc_reg_hwif_out.CPTRA_HW_ERROR_FATAL .nmi_pin.value,
1383
1389
soc_ifc_reg_hwif_out.CPTRA_HW_ERROR_FATAL .dccm_ecc_unc.value,
0 commit comments