Jelajahi Sumber

ecall: fix parameter order on rv32

luojia65 2 tahun lalu
induk
melakukan
54935672f9
3 mengubah file dengan 5 tambahan dan 5 penghapusan
  1. 1 1
      src/ecall/mod.rs
  2. 2 2
      src/ecall/pmu.rs
  3. 2 2
      src/ecall/time.rs

+ 1 - 1
src/ecall/mod.rs

@@ -79,7 +79,7 @@ pub fn handle_ecall(extension: usize, function: usize, param: [usize; 6]) -> Sbi
             () => pmu::handle_ecall(function, param[0], param[1], param[2], param[3], param[4]),
             #[cfg(target_pointer_width = "32")]
             () => pmu::handle_ecall(
-                fu32, param[0], param[1], param[2], param[3], param[4], param[5],
+                function, param[0], param[1], param[2], param[3], param[4], param[5],
             ),
         },
         // handle legacy callings.

+ 2 - 2
src/ecall/pmu.rs

@@ -43,9 +43,9 @@ pub fn handle_ecall(
         PMU_NUM_COUNTERS => num_counters(),
         PMU_COUNTER_GET_INFO => counter_get_info(param0),
         PMU_COUNTER_CONFIG_MATCHING => {
-            counter_config_matching(param0, param1, param2, param3, concat_u32(param4, param5))
+            counter_config_matching(param0, param1, param2, param3, concat_u32(param5, param4))
         }
-        PMU_COUNTER_START => counter_start(param0, param1, param2, concat_u32(param3, param4)),
+        PMU_COUNTER_START => counter_start(param0, param1, param2, concat_u32(param4, param3)),
         PMU_COUNTER_STOP => counter_stop(param0, param1, param2),
         PMU_COUNTER_FW_READ => counter_fw_read(param0),
         _ => SbiRet::not_supported(),

+ 2 - 2
src/ecall/time.rs

@@ -19,13 +19,13 @@ pub(super) fn handle_ecall(function: usize, param0: usize) -> SbiRet {
 
 #[cfg(target_pointer_width = "32")]
 #[inline]
-pub(super) fn handle_ecall_timer(function: usize, param0: usize, param1: usize) -> SbiRet {
+pub(super) fn handle_ecall(function: usize, param0: usize, param1: usize) -> SbiRet {
     use super::concat_u32;
     use crate::timer::*;
     use sbi_spec::time::*;
     match function {
         SET_TIMER => {
-            if set_timer(concat_u32(a1, a0)) {
+            if set_timer(concat_u32(param1, param0)) {
                 SbiRet::success(0)
             } else {
                 SbiRet::not_supported()