[PATCH v2 7/7] x86: qemu: Enable ramfb by default
Simon Glass
sjg at chromium.org
Tue Aug 22 20:56:38 CEST 2023
Hi Alper,
On Tue, 22 Aug 2023 at 06:10, Alper Nebi Yasak <alpernebiyasak at gmail.com> wrote:
>
> Now that we have everything in place to support ramfb, let's wire it up
> by default in the x86 QEMU targets. That way, we can use ramfb graphical
> console instead of the default by passing -vga none -device ramfb to the
> QEMU command line.
>
> Also increase SYS_MALLOC_F_LEN for QEMU x86_64 to be the same as its SPL
> counterpart, because we're running out of alloc space in pre-reloc stage
> with ramfb enabled.
>
> Signed-off-by: Alper Nebi Yasak <alpernebiyasak at gmail.com>
> ---
> This also suffers from the same issue with distros as the Bochs display
> driver [1], where it results in a hang after GRUB menu selection before
> the kernel can display anything. Couldn't reproduce on arm*/riscv*.
Yes I see that problem too. I wonder how we can debug it?
>
> But just having it enabled doesn't seem to cause problems unless you run
> QEMU with -device ramfb, so this (unlike the Bochs video driver) can
> actually be co-enabled with VIDEO_VESA.
Indeed...which makes me wonder if we can do something similar with
Bochs, so that (from the cmdline) it is possible to chose ramfb, bochs
or vesa?
>
> [1] https://lore.kernel.org/u-boot/20230724145210.304917-4-sjg@chromium.org/
>
> Changes in v2:
> - Add patch "x86: qemu: Enable ramfb by default"
>
> arch/x86/cpu/qemu/Kconfig | 4 +++
> board/emulation/qemu-x86/qemu-x86.c | 47 +++++++++++++++++++++++++++++
> configs/qemu-x86_64_defconfig | 4 +--
> configs/qemu-x86_defconfig | 1 -
> 4 files changed, 52 insertions(+), 4 deletions(-)
>
> diff --git a/arch/x86/cpu/qemu/Kconfig b/arch/x86/cpu/qemu/Kconfig
> index f8f2f6473088..e0a57ac2d687 100644
> --- a/arch/x86/cpu/qemu/Kconfig
> +++ b/arch/x86/cpu/qemu/Kconfig
> @@ -13,6 +13,10 @@ config QEMU
> imply USB
> imply USB_EHCI_HCD
> imply VIDEO_VESA
> + imply VIDEO_RAMFB
> + imply BOARD_EARLY_INIT_F
> + imply BOARD_EARLY_INIT_R
> + imply CMD_QFW
>
> if QEMU
>
> diff --git a/board/emulation/qemu-x86/qemu-x86.c b/board/emulation/qemu-x86/qemu-x86.c
> index e69de29bb2d1..3a8a580cc591 100644
> --- a/board/emulation/qemu-x86/qemu-x86.c
> +++ b/board/emulation/qemu-x86/qemu-x86.c
> @@ -0,0 +1,47 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <init.h>
> +#include <log.h>
> +#include <qfw.h>
> +
> +int board_early_init_f(void)
> +{
> + struct udevice *dev;
> + int ret;
> +
> + /*
> + * Make sure we enumerate the QEMU Firmware device to bind ramfb
> + * so video_reserve() can reserve memory for it.
> + */
> + if (IS_ENABLED(CONFIG_QFW)) {
> + ret = qfw_get_dev(&dev);
> + if (ret) {
> + log_err("Failed to get QEMU FW device: %d\n", ret);
> + return ret;
> + }
> + }
> +
> + return 0;
Same point about DT here.
> +}
> +
> +int board_early_init_r(void)
> +{
> + struct udevice *dev;
> + int ret;
> +
> + /*
> + * Make sure we enumerate the QEMU Firmware device to find ramfb
> + * before console_init.
> + */
> + if (IS_ENABLED(CONFIG_QFW)) {
> + ret = qfw_get_dev(&dev);
> + if (ret) {
> + log_err("Failed to get QEMU FW device: %d\n", ret);
> + return ret;
> + }
> + }
> +
> + return 0;
> +}
> diff --git a/configs/qemu-x86_64_defconfig b/configs/qemu-x86_64_defconfig
> index c6f30674a8fc..c9ad6eebd35c 100644
> --- a/configs/qemu-x86_64_defconfig
> +++ b/configs/qemu-x86_64_defconfig
> @@ -1,13 +1,12 @@
> CONFIG_X86=y
> CONFIG_TEXT_BASE=0x1110000
> -CONFIG_SYS_MALLOC_F_LEN=0x1000
> +CONFIG_SYS_MALLOC_F_LEN=0x2000
> CONFIG_NR_DRAM_BANKS=8
> CONFIG_ENV_SIZE=0x40000
> CONFIG_MAX_CPUS=2
> CONFIG_SPL_DM_SPI=y
> CONFIG_DEFAULT_DEVICE_TREE="qemu-x86_i440fx"
> CONFIG_SPL_TEXT_BASE=0xfffd8000
> -CONFIG_SPL_SYS_MALLOC_F_LEN=0x2000
> CONFIG_DEBUG_UART_BASE=0x3f8
> CONFIG_DEBUG_UART_CLOCK=1843200
> CONFIG_X86_RUN_64BIT=y
> @@ -59,7 +58,6 @@ CONFIG_CMD_USB=y
> CONFIG_BOOTP_BOOTFILESIZE=y
> CONFIG_CMD_EFIDEBUG=y
> CONFIG_CMD_TIME=y
> -CONFIG_CMD_QFW=y
What is happening here? Why disable it?
> CONFIG_CMD_BOOTSTAGE=y
> CONFIG_CMD_EXT4_WRITE=y
> CONFIG_ENV_OVERWRITE=y
> diff --git a/configs/qemu-x86_defconfig b/configs/qemu-x86_defconfig
> index 24682a5387df..8a2311720f02 100644
> --- a/configs/qemu-x86_defconfig
> +++ b/configs/qemu-x86_defconfig
> @@ -37,7 +37,6 @@ CONFIG_CMD_USB=y
> CONFIG_BOOTP_BOOTFILESIZE=y
> CONFIG_CMD_EFIDEBUG=y
> CONFIG_CMD_TIME=y
> -CONFIG_CMD_QFW=y
> CONFIG_CMD_BOOTSTAGE=y
> CONFIG_CMD_EXT4_WRITE=y
> CONFIG_MAC_PARTITION=y
> --
> 2.40.1
>
Regards,
Simon
More information about the U-Boot
mailing list