Module Name: src Committed By: riastradh Date: Tue May 14 15:16:51 UTC 2024
Modified Files: src/sys/arch/riscv/include: sysreg.h Log Message: riscv: Fix reading and writing frm and fflags. The FRRM/FSRM and FRFLAGS/FSFLAGS instructions do all the masking and shifting needed -- __SHIFTIN/__SHIFTOUT is wrong. To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 src/sys/arch/riscv/include/sysreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/riscv/include/sysreg.h diff -u src/sys/arch/riscv/include/sysreg.h:1.31 src/sys/arch/riscv/include/sysreg.h:1.32 --- src/sys/arch/riscv/include/sysreg.h:1.31 Mon Feb 5 21:46:05 2024 +++ src/sys/arch/riscv/include/sysreg.h Tue May 14 15:16:51 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: sysreg.h,v 1.31 2024/02/05 21:46:05 andvar Exp $ */ +/* $NetBSD: sysreg.h,v 1.32 2024/05/14 15:16:51 riastradh Exp $ */ /* * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -61,7 +61,6 @@ fcsr_read(void) return __fcsr; } - static inline uint32_t fcsr_write(uint32_t __new) { @@ -75,16 +74,15 @@ fcsr_fflags_read(void) { uint32_t __old; asm volatile("frflags %0" : "=r"(__old) :: "memory"); - return __SHIFTOUT(__old, FCSR_FFLAGS); + return __old; } static inline uint32_t fcsr_fflags_write(uint32_t __new) { uint32_t __old; - __new = __SHIFTIN(__new, FCSR_FFLAGS); asm volatile("fsflags %0, %1" : "=r"(__old) : "r"(__new) : "memory"); - return __SHIFTOUT(__old, FCSR_FFLAGS); + return __old; } static inline uint32_t @@ -92,19 +90,17 @@ fcsr_frm_read(void) { uint32_t __old; asm volatile("frrm\t%0" : "=r"(__old) :: "memory"); - return __SHIFTOUT(__old, FCSR_FRM); + return __old; } static inline uint32_t fcsr_frm_write(uint32_t __new) { uint32_t __old; - __new = __SHIFTIN(__new, FCSR_FRM); asm volatile("fsrm\t%0, %1" : "=r"(__old) : "r"(__new) : "memory"); - return __SHIFTOUT(__old, FCSR_FRM); + return __old; } - #define RISCVREG_READ_INLINE(regname) \ static inline uintptr_t \ csr_##regname##_read(void) \