Files
Dave Patel 718e1d194f lib: sbi: Add floating-point context save/restore support.
Add support for saving and restoring RISC-V floating-point (F/D) extension
state in OpenSBI. This introduces a floating-point context structure and
helper routines to perform full context save and restore.

The floating-point context includes storage for all 32 FPi registers (f0–f31)
along with the fcsr control and status register. The register state is saved
and restored using double-precision load/store instructions (fsd/fld), and
single-precision load/store instructions (fsw/flw) on an RV64 system with
F and D-extension support.

The implementation follows an eager context switching model where the entire
FP state is saved and restored on every context switch. This avoids the need
for trap-based lazy management and keeps the design simple and deterministic.

Signed-off-by: Dave Patel <dave.patel@riscstar.com>
Signed-off-by: Anup Patel <anup.patel@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20260518083023.997323-3-anup.patel@oss.qualcomm.com
Signed-off-by: Anup Patel <anup@brainfault.org>
2026-05-18 14:02:28 +05:30

36 lines
680 B
C

/*
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2026 RISCstar Solutions.
*
* Authors:
* Dave Patel <dave.patel@riscstar.com>
*/
#ifndef __SBI_FP_H__
#define __SBI_FP_H__
#include <sbi/sbi_types.h>
struct sbi_fp_context {
#if __riscv_d
uint64_t f[32];
#else
uint32_t f[32];
#endif
unsigned long fcsr;
};
#if defined(__riscv_f) || defined(__riscv_d)
void sbi_fp_save(struct sbi_fp_context *dst);
void sbi_fp_restore(const struct sbi_fp_context *src);
#else
static inline void sbi_fp_save(struct sbi_fp_context *dst)
{
}
static inline void sbi_fp_restore(const struct sbi_fp_context *src)
{
}
#endif /* __riscv_f || __riscv_d */
#endif /*__SBI_FP_H__ */