lib: sbi: Remove the SBI_ETRAP error code
authorAnup Patel <apatel@ventanamicro.com>
Mon, 11 Dec 2023 15:41:03 +0000 (21:11 +0530)
committerAnup Patel <anup@brainfault.org>
Tue, 19 Dec 2023 10:26:37 +0000 (15:56 +0530)
The SBI_ETRAP error code was introduced only for doing trap
redirection in generic sbi_ecall_handler(). Now the trap
redirection is moved into sbi_ecall_legacy.c and SBI_ETRAP
error code is only used in this source file so let us remove
it.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
include/sbi/sbi_error.h
lib/sbi/sbi_ecall_legacy.c

index 7f97506d8bd5f5f4407779ca2c6d4162dedfbc70..a77e3f8bb3cd5c5301e71c840b384a7a53dbf6aa 100644 (file)
@@ -32,9 +32,8 @@
 #define SBI_EILL               -1004
 #define SBI_ENOSPC             -1005
 #define SBI_ENOMEM             -1006
-#define SBI_ETRAP              -1007
-#define SBI_EUNKNOWN           -1008
-#define SBI_ENOENT             -1009
+#define SBI_EUNKNOWN           -1007
+#define SBI_ENOENT             -1008
 
 /* clang-format on */
 
index 48bd2274d75190a4bf26415771e1cfc012416e42..14913c962a991a89314a29613530960dd73a192c 100644 (file)
 #include <sbi/sbi_unpriv.h>
 #include <sbi/sbi_hart.h>
 
-static int sbi_load_hart_mask_unpriv(ulong *pmask, ulong *hmask,
-                                    struct sbi_trap_info *uptrap)
+static bool sbi_load_hart_mask_unpriv(ulong *pmask, ulong *hmask,
+                                     struct sbi_trap_info *uptrap)
 {
        ulong mask = 0;
 
        if (pmask) {
                mask = sbi_load_ulong(pmask, uptrap);
                if (uptrap->cause)
-                       return SBI_ETRAP;
+                       return false;
        } else {
                sbi_hsm_hart_interruptible_mask(sbi_domain_thishart_ptr(),
                                                0, &mask);
        }
        *hmask = mask;
 
-       return 0;
+       return true;
 }
 
 static int sbi_ecall_legacy_handler(unsigned long extid, unsigned long funcid,
@@ -70,56 +70,48 @@ static int sbi_ecall_legacy_handler(unsigned long extid, unsigned long funcid,
                sbi_ipi_clear_smode();
                break;
        case SBI_EXT_0_1_SEND_IPI:
-               ret = sbi_load_hart_mask_unpriv((ulong *)regs->a0,
-                                               &hmask, &trap);
-               if (ret != SBI_ETRAP) {
+               if (sbi_load_hart_mask_unpriv((ulong *)regs->a0,
+                                               &hmask, &trap)) {
                        ret = sbi_ipi_send_smode(hmask, 0);
                } else {
-                       ret = 0;
                        trap.epc = regs->mepc;
                        sbi_trap_redirect(regs, &trap);
                        out->skip_regs_update = true;
                }
                break;
        case SBI_EXT_0_1_REMOTE_FENCE_I:
-               ret = sbi_load_hart_mask_unpriv((ulong *)regs->a0,
-                                               &hmask, &trap);
-               if (ret != SBI_ETRAP) {
+               if (sbi_load_hart_mask_unpriv((ulong *)regs->a0,
+                                               &hmask, &trap)) {
                        SBI_TLB_INFO_INIT(&tlb_info, 0, 0, 0, 0,
                                          SBI_TLB_FENCE_I, source_hart);
                        ret = sbi_tlb_request(hmask, 0, &tlb_info);
                } else {
-                       ret = 0;
                        trap.epc = regs->mepc;
                        sbi_trap_redirect(regs, &trap);
                        out->skip_regs_update = true;
                }
                break;
        case SBI_EXT_0_1_REMOTE_SFENCE_VMA:
-               ret = sbi_load_hart_mask_unpriv((ulong *)regs->a0,
-                                               &hmask, &trap);
-               if (ret != SBI_ETRAP) {
+               if (sbi_load_hart_mask_unpriv((ulong *)regs->a0,
+                                               &hmask, &trap)) {
                        SBI_TLB_INFO_INIT(&tlb_info, regs->a1, regs->a2, 0, 0,
                                          SBI_TLB_SFENCE_VMA, source_hart);
                        ret = sbi_tlb_request(hmask, 0, &tlb_info);
                } else {
-                       ret = 0;
                        trap.epc = regs->mepc;
                        sbi_trap_redirect(regs, &trap);
                        out->skip_regs_update = true;
                }
                break;
        case SBI_EXT_0_1_REMOTE_SFENCE_VMA_ASID:
-               ret = sbi_load_hart_mask_unpriv((ulong *)regs->a0,
-                                               &hmask, &trap);
-               if (ret != SBI_ETRAP) {
+               if (sbi_load_hart_mask_unpriv((ulong *)regs->a0,
+                                               &hmask, &trap)) {
                        SBI_TLB_INFO_INIT(&tlb_info, regs->a1,
                                          regs->a2, regs->a3, 0,
                                          SBI_TLB_SFENCE_VMA_ASID,
                                          source_hart);
                        ret = sbi_tlb_request(hmask, 0, &tlb_info);
                } else {
-                       ret = 0;
                        trap.epc = regs->mepc;
                        sbi_trap_redirect(regs, &trap);
                        out->skip_regs_update = true;