[PATCH 18/18] riscv: qemu: Enable usb keyboard as an input device

Mark Kettenis mark.kettenis at xs4all.nl
Sun Jul 23 12:11:54 CEST 2023


> Date: Sun, 23 Jul 2023 11:30:31 +0200
> From: Heinrich Schuchardt <xypron.glpk at gmx.de>
> 
> Am 23. Juli 2023 10:38:00 MESZ schrieb Mark Kettenis <mark.kettenis at xs4all.nl>:
> >> From: Bin Meng <bmeng at tinylab.org>
> >> Date: Sun, 23 Jul 2023 12:40:41 +0800
> >> 
> >> This brings PCI xHCI support to QEMU RISC-V and uses a usb keyboard
> >> as one of the input devices.
> >> 
> >> Signed-off-by: Bin Meng <bmeng at tinylab.org>
> >> 
> >> ---
> >> 
> >>  board/emulation/qemu-riscv/Kconfig      | 5 +++++
> >>  board/emulation/qemu-riscv/qemu-riscv.c | 5 +++++
> >>  doc/board/emulation/qemu-riscv.rst      | 5 +++++
> >>  include/configs/qemu-riscv.h            | 2 +-
> >>  4 files changed, 16 insertions(+), 1 deletion(-)
> >> 
> >> diff --git a/board/emulation/qemu-riscv/Kconfig b/board/emulation/qemu-riscv/Kconfig
> >> index 7220c55350..b503578d27 100644
> >> --- a/board/emulation/qemu-riscv/Kconfig
> >> +++ b/board/emulation/qemu-riscv/Kconfig
> >> @@ -76,5 +76,10 @@ config BOARD_SPECIFIC_OPTIONS # dummy
> >>  	imply VIDEO_BOCHS
> >>  	imply SYS_WHITE_ON_BLACK
> >>  	imply PRE_CONSOLE_BUFFER
> >> +	imply USB
> >> +	imply USB_XHCI_HCD
> >> +	imply USB_XHCI_PCI
> >> +	imply USB_KEYBOARD
> >> +	imply CMD_USB
> >>  
> >>  endif
> >> diff --git a/board/emulation/qemu-riscv/qemu-riscv.c b/board/emulation/qemu-riscv/qemu-riscv.c
> >> index f39f3be366..181abbbf97 100644
> >> --- a/board/emulation/qemu-riscv/qemu-riscv.c
> >> +++ b/board/emulation/qemu-riscv/qemu-riscv.c
> >> @@ -12,6 +12,7 @@
> >>  #include <log.h>
> >>  #include <spl.h>
> >>  #include <init.h>
> >> +#include <usb.h>
> >>  #include <virtio_types.h>
> >>  #include <virtio.h>
> >>  
> >> @@ -41,6 +42,10 @@ int board_init(void)
> >>  
> >>  int board_late_init(void)
> >>  {
> >> +	/* start usb so that usb keyboard can be used as input device */
> >> +	if (CONFIG_IS_ENABLED(USB_KEYBOARD))
> >> +		usb_init();
> >> +
> >
> >This is typically handled by including "usb start" in CONFIG_PREBOOT,
> >which is done by boot/Kconfig.  Any reason why that doesn't work for
> >you?
> 
> We run pci_init() in board_r.c. Why don't do the same for USB
> instead of the PREBOOT quirk?

Well, yes, that was going to be my next question.  If using PREBOOT is
for some reason no longer the preferred way to do this, should there
be some other generic method to make sure the USB controllers are
started when a USB keyboard is configured as an input method.  Doing
something generic like this in board-specific code seems wrong to me.

Cheers,

Mark

> >
> >>  	return 0;
> >>  }
> >>  
> >> diff --git a/doc/board/emulation/qemu-riscv.rst b/doc/board/emulation/qemu-riscv.rst
> >> index 9d21f3270c..61137bcbf1 100644
> >> --- a/doc/board/emulation/qemu-riscv.rst
> >> +++ b/doc/board/emulation/qemu-riscv.rst
> >> @@ -138,6 +138,11 @@ and adding::
> >>  
> >>      -serial stdio -device VGA
> >>  
> >> +In addition, a usb keyboard can be attached to an emulated xHCI controller in
> >> +RISC-V virt machine as an option of input devices by adding::
> >> +
> >> +    -device qemu-xhci,id=xhci -device usb-kbd,bus=xhci.0
> >> +
> >>  Running with KVM
> >>  ----------------
> >>  
> >> diff --git a/include/configs/qemu-riscv.h b/include/configs/qemu-riscv.h
> >> index d5146e70f7..584559cfa3 100644
> >> --- a/include/configs/qemu-riscv.h
> >> +++ b/include/configs/qemu-riscv.h
> >> @@ -17,7 +17,7 @@
> >>  
> >>  /* Environment options */
> >>  
> >> -#define CFG_STD_DEVICES_SETTINGS	"stdin=serial\0" \
> >> +#define CFG_STD_DEVICES_SETTINGS	"stdin=serial,usbkbd\0" \
> >>  					"stdout=serial,vidconsole\0" \
> >>  					"stderr=serial,vidconsole\0"
> >>  
> >> -- 
> >> 2.34.1
> >> 
> >> 
> 


More information about the U-Boot mailing list