From 2ffa0a153d804910c20b82974bfe2dedcf35a777 Mon Sep 17 00:00:00 2001 From: Xiang W Date: Mon, 23 Sep 2024 09:37:53 +0800 Subject: [PATCH] lib: sbi: fix missing high 32bits when sbi_cppc_write on rv32 sbi_cppc_write was writing to the a1 register only, which under rv32 would cause the high 32 bits to always be 0. This patch fixes that. Closes: https://github.com/riscv-software-src/opensbi/issues/334 Signed-off-by: Xiang W Reported-by: Wesley Norris Reviewed-by: Anup Patel --- lib/sbi/sbi_ecall_cppc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/sbi/sbi_ecall_cppc.c b/lib/sbi/sbi_ecall_cppc.c index c26bb401..dab78299 100644 --- a/lib/sbi/sbi_ecall_cppc.c +++ b/lib/sbi/sbi_ecall_cppc.c @@ -32,7 +32,13 @@ static int sbi_ecall_cppc_handler(unsigned long extid, unsigned long funcid, #endif break; case SBI_EXT_CPPC_WRITE: - ret = sbi_cppc_write(regs->a0, regs->a1); +#if __riscv_xlen == 32 + temp = regs->a2; + temp = (temp << 32) | regs->a1; +#else + temp = regs->a1; +#endif + ret = sbi_cppc_write(regs->a0, temp); break; case SBI_EXT_CPPC_PROBE: ret = sbi_cppc_probe(regs->a0);