Skip to content

Commit aea4547

Browse files
committed
Xqci (Xqciint) extension: Fix IDL code for Smdbltrp and Smrnmi spec compatibility for qc.c.mret and qc.c.mnret instructions
Signed-off-by: Albert Yosher <[email protected]>
1 parent 6cd9df2 commit aea4547

File tree

4 files changed

+27
-2
lines changed

4 files changed

+27
-2
lines changed

arch_overlay/qc_iu/ext/Xqci.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ versions:
289289
- Fix wrong mantissa bit selection in qc.norm, qc.normu and qc.normeu instructions
290290
- Fix wrong exponent calculation in qc.normeu instruction
291291
- Fix IDL code and description of qc.setwm instruction to state that number of words written 0..31.
292+
- Fix IDL code for Smdbltrp and Smrnmi spec compatibility for qc.c.mret and qc.c.mnret instructions
292293
implies:
293294
- { name: Xqcia, version: "0.6.0" }
294295
- { name: Xqciac, version: "0.3.0" }
@@ -298,7 +299,7 @@ versions:
298299
- { name: Xqcicm, version: "0.2.0" }
299300
- { name: Xqcics, version: "0.2.0" }
300301
- { name: Xqcicsr, version: "0.3.0" }
301-
- { name: Xqciint, version: "0.5.0" }
302+
- { name: Xqciint, version: "0.6.0" }
302303
- { name: Xqciio, version: "0.1.0" }
303304
- { name: Xqcilb, version: "0.2.0" }
304305
- { name: Xqcili, version: "0.2.0" }

arch_overlay/qc_iu/ext/Xqciint.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,19 @@ versions:
8080
changes:
8181
- Add stack checks to qc.c.mienter, qc.c.mienter.nest, qc.c.mileaveret
8282
requires: { name: Zca, version: ">= 1.0.0" }
83+
- version: "0.6.0"
84+
state: frozen
85+
ratification_date: null
86+
contributors:
87+
- name: Albert Yosher
88+
company: Qualcomm Technologies, Inc.
89+
90+
- name: Derek Hower
91+
company: Qualcomm Technologies, Inc.
92+
93+
changes:
94+
- Fix IDL code for Smdbltrp and Smrnmi spec compatibility for qc.c.mret and qc.c.mnret instructions
95+
requires: { name: Zca, version: ">= 1.0.0" }
8396
description: |
8497
The Xqciint extension includes eleven instructions to accelerate interrupt
8598
servicing by performing common actions during ISR prologue/epilogue.

arch_overlay/qc_iu/inst/Xqci/qc.c.mnret.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ operation(): |
3030
CSR[qc.mcause].sw_write(qc_mcause_val_masked |
3131
(1<<28) | (mnpie_val<<26) | (1<<30) |
3232
(mnpil_val << 12) | (0xF << 20));
33+
if (CSR[mnstatus].MNPP != 2'b11) {
34+
CSR[mstatus].MPRV = 0;
35+
if (implemented?(ExtensionName::Smdbltrp)) {
36+
CSR[mstatush].MDT = 1'b0;
37+
}
38+
}
3339
if (CSR[mnstatus].MNPP == 2'b00) {
3440
set_mode(PrivilegeMode::U);
3541
} else if (CSR[mnstatus].MNPP == 2'b01) {

arch_overlay/qc_iu/inst/Xqci/qc.c.mret.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,16 @@ operation(): |
2828
Bits<4> mpil_val = (qc_mcause_val >> 16) & 0xF;
2929
CSR[mstatus].MIE = mpie_val;
3030
CSR[mstatus].MPIE = 1'b1;
31-
CSR[mstatush].MDT = mpdt_val;
31+
if (implemented?(ExtensionName::Smdbltrp)) {
32+
CSR[mstatush].MDT = mpdt_val;
33+
}
3234
CSR[qc.mcause].sw_write(qc_mcause_val_masked |
3335
(1<<27) | (mpie_val<<26) | (0<<29) |
3436
(mpil_val << 12) | (0xF << 16));
3537
if (mpdt_val == 1'b0) {
38+
if (CSR[mstatus].MPP != 2'b11) {
39+
CSR[mstatus].MPRV = 0;
40+
}
3641
if (CSR[mstatus].MPP == 2'b00) {
3742
set_mode(PrivilegeMode::U);
3843
} else if (CSR[mstatus].MPP == 2'b01) {

0 commit comments

Comments
 (0)