forked from Mirrors/opensbi
lib: sbi: Map/Unmap debug console shared memory buffers
With Smepmp enabled, it is necessary for shared memory from S/U mode to be mapped/unmapped before and after read/write of the memory region. This patch maps the debug console shared memory before accessing it. Signed-off-by: Himanshu Chauhan <hchauhan@ventanamicro.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:

committed by
Anup Patel

parent
6e44ef686a
commit
0ad866067d
@@ -14,6 +14,7 @@
|
|||||||
#include <sbi/sbi_ecall_interface.h>
|
#include <sbi/sbi_ecall_interface.h>
|
||||||
#include <sbi/sbi_trap.h>
|
#include <sbi/sbi_trap.h>
|
||||||
#include <sbi/riscv_asm.h>
|
#include <sbi/riscv_asm.h>
|
||||||
|
#include <sbi/sbi_hart.h>
|
||||||
|
|
||||||
static int sbi_ecall_dbcn_handler(unsigned long extid, unsigned long funcid,
|
static int sbi_ecall_dbcn_handler(unsigned long extid, unsigned long funcid,
|
||||||
const struct sbi_trap_regs *regs,
|
const struct sbi_trap_regs *regs,
|
||||||
@@ -46,10 +47,12 @@ static int sbi_ecall_dbcn_handler(unsigned long extid, unsigned long funcid,
|
|||||||
regs->a1, regs->a0, smode,
|
regs->a1, regs->a0, smode,
|
||||||
SBI_DOMAIN_READ|SBI_DOMAIN_WRITE))
|
SBI_DOMAIN_READ|SBI_DOMAIN_WRITE))
|
||||||
return SBI_ERR_INVALID_PARAM;
|
return SBI_ERR_INVALID_PARAM;
|
||||||
|
sbi_hart_map_saddr(regs->a1, regs->a0);
|
||||||
if (funcid == SBI_EXT_DBCN_CONSOLE_WRITE)
|
if (funcid == SBI_EXT_DBCN_CONSOLE_WRITE)
|
||||||
*out_val = sbi_nputs((const char *)regs->a1, regs->a0);
|
*out_val = sbi_nputs((const char *)regs->a1, regs->a0);
|
||||||
else
|
else
|
||||||
*out_val = sbi_ngets((char *)regs->a1, regs->a0);
|
*out_val = sbi_ngets((char *)regs->a1, regs->a0);
|
||||||
|
sbi_hart_unmap_saddr();
|
||||||
return 0;
|
return 0;
|
||||||
case SBI_EXT_DBCN_CONSOLE_WRITE_BYTE:
|
case SBI_EXT_DBCN_CONSOLE_WRITE_BYTE:
|
||||||
sbi_putc(regs->a0);
|
sbi_putc(regs->a0);
|
||||||
|
Reference in New Issue
Block a user