[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 07/12] hw/char: riscv_htif: Support console output via proxy
From: |
Alistair Francis |
Subject: |
Re: [PATCH 07/12] hw/char: riscv_htif: Support console output via proxy syscall |
Date: |
Wed, 28 Dec 2022 14:30:07 +1000 |
On Tue, Dec 27, 2022 at 4:49 PM Bin Meng <bmeng@tinylab.org> wrote:
>
> At present the HTIF proxy syscall is unsupported. On RV32, only
> device 0 is supported so there is no console device for RV32.
> The only way to implement console funtionality on RV32 is to
> support the SYS_WRITE syscall.
>
> With this commit, the Spike machine is able to boot the 32-bit
> OpenSBI generic image.
>
> Signed-off-by: Bin Meng <bmeng@tinylab.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Alistair
> ---
>
> hw/char/riscv_htif.c | 17 ++++++++++++++++-
> 1 file changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/hw/char/riscv_htif.c b/hw/char/riscv_htif.c
> index 3bb0a37a3e..1477fc0090 100644
> --- a/hw/char/riscv_htif.c
> +++ b/hw/char/riscv_htif.c
> @@ -48,6 +48,9 @@
> #define HTIF_CONSOLE_CMD_GETC 0
> #define HTIF_CONSOLE_CMD_PUTC 1
>
> +/* PK system call number */
> +#define PK_SYS_WRITE 64
> +
> static uint64_t fromhost_addr, tohost_addr;
> static int address_symbol_set;
>
> @@ -165,7 +168,19 @@ static void htif_handle_tohost_write(HTIFState *s,
> uint64_t val_written)
> int exit_code = payload >> 1;
> exit(exit_code);
> } else {
> - qemu_log_mask(LOG_UNIMP, "pk syscall proxy not supported\n");
> + uint64_t syscall[8];
> + cpu_physical_memory_read(payload, syscall, sizeof(syscall));
> + if (syscall[0] == PK_SYS_WRITE &&
> + syscall[1] == HTIF_DEV_CONSOLE &&
> + syscall[3] == HTIF_CONSOLE_CMD_PUTC) {
> + uint8_t ch;
> + cpu_physical_memory_read(syscall[2], &ch, 1);
> + qemu_chr_fe_write(&s->chr, &ch, 1);
> + resp = 0x100 | (uint8_t)payload;
> + } else {
> + qemu_log_mask(LOG_UNIMP,
> + "pk syscall proxy not supported\n");
> + }
> }
> } else {
> qemu_log("HTIF device %d: unknown command\n", device);
> --
> 2.34.1
>
>
- Re: [PATCH 04/12] hw/char: riscv_htif: Use conventional 's' for HTIFState, (continued)
- [PATCH 06/12] hw/char: riscv_htif: Remove forward declarations for non-existent variables, Bin Meng, 2022/12/27
- [PATCH 03/12] hw/char: riscv_htif: Drop useless assignment of memory region, Bin Meng, 2022/12/27
- [PATCH 07/12] hw/char: riscv_htif: Support console output via proxy syscall, Bin Meng, 2022/12/27
- [PATCH 08/12] hw/riscv: spike: Remove the out-of-date comments, Bin Meng, 2022/12/27
- [PATCH 05/12] hw/char: riscv_htif: Move registers from CPUArchState to HTIFState, Bin Meng, 2022/12/27
- [PATCH 09/12] hw/riscv/boot.c: make riscv_find_firmware() static, Bin Meng, 2022/12/27
- [PATCH 10/12] hw/riscv/boot.c: introduce riscv_default_firmware_name(), Bin Meng, 2022/12/27
- [PATCH 11/12] hw/riscv/boot.c: Introduce riscv_find_firmware(), Bin Meng, 2022/12/27