Commit Graph

98418 Commits

Author SHA1 Message Date
Simon Glass
84dfe7f251 acpi Adjust dm_test_acpi_find_table() to use a fixed buffer
Most sandbox tests use a fixed address in emulated RAM so that it is
easier to debug test failures. Update dm_test_acpi_find_table() to work
this way.
2025-07-11 21:12:11 +02:00
Simon Glass
e593cc86be acpi: Move code table-writing code to lib/acpi/acpi.c
The acpi_table.c file includes ACPI_WRITER() declarations and is only
included in the build if CONFIG_ACPIGEN is enabled.

For QEMU we want to augment the tables provided via qfw, but
CONFIG_ACPIGEN is not enabled.

Move the core functions out to the acpi.c file which is included in all
x86 builds. This allows the QEMU build to make use of these functions.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:11 +02:00
Simon Glass
2d72a90152 acpi: Pull out setup code from acpi_find_table()
The start of this function determines whether xdst or rdsp is used for
locating tables. Move it into a separate function so that we can use
this logic elsewhere.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:11 +02:00
Simon Glass
ff86c28784 emulation: Simplify write_acpi_tables()
Update this function to make use of the new support for reading qfw
files, this simplifying it considerably.

Fix up the header order while we are here.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:11 +02:00
Simon Glass
e30db25efa x86: Use the existing function to find the FACP
Rather than searching for this table, use the existing search function.
Update that to check the header and checksums.

This allows the code to work correctly with boards that have the tables
in a bloblist, such as QEMU.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:11 +02:00
Simon Glass
9d4aa656de acpi: Update acpi_find_table() to verify checksums
The RSP is not valid unless the checksums are corrrect, so add a test
for this.

Add a few blank lines for readability while here.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:11 +02:00
Simon Glass
d0b607221f acpi: Move calculation of RSDP checksum into a function
Create a function for this checksumming, since it is not trivial. This
will allow the code to be shared with tests.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:11 +02:00
Simon Glass
0e44842ade x86: Enable random-number support for QEMU
Enable CONFIG_DM_RNG so the virtio driver for random numbers is
supported.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:11 +02:00
Simon Glass
c1ce4fcc9c hooks: x86: Enable support for a random-number generator
Enable the virtio-rnd-pci device in QEMU so that fdt_test_chosen() can
operated.

Since overlays are enabled for qemu-x886_64

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:11 +02:00
Simon Glass
5b5694a0f8 event: Mark test_event_probe() as sandbox-only
This test skips itself if not running on sandbox, but by that time the
driver model state has already been reset. This can impact other tests.

Change the test so that it is only started on sandbox.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:11 +02:00
Simon Glass
37e7aec2d2 efi_loader: Use the first random-number-generator device
There is no guarantee that the RNG device has a sequence number of zero.
Use the first available device instead, by default.

This resolved a failure to find the device with qemu-x86_64 when the
virtio device is used.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-11 21:12:10 +02:00
Simon Glass
cbc27536ff scripts: build-qemu: Support a random-number generator
Add a --rand option to enable access to /dev/random from QEMU.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-10 07:26:51 +02:00
Simon Glass
7f32b8d7f9 Merge branch 'qemh' into 'master'
emulation: Expand qfw and virtio commands

See merge request u-boot/u-boot!115
2025-07-09 22:08:24 +00:00
Simon Glass
28b764aafe emulation: Tidy up reading of the DMA flag
The existing code reads a single byte into a 32-bit variable. It works
fine but is a bit confusing. There is no need to read only one byte, so
update it to read the whole 32 bits.

Series-to: u-boot
Cover-letter:
emulation: Expand qfw and virtio commands
This series adds various features to the qfw command, mostly targeting
x86-specific features:

- commands to show the E820, ACPI-loader, etc. provided by QMEU
- unit tests for the qfw command
- virtio subcommand to list the devices

The bdinfo command contains some useful printing function which could be
used more generally in U-Boot. This series moves those into the lib/
directory and renames them to be more generic.

Various clean-ups are included, such as documentation for the virtio
fw_cfg selectors.

This series includes some minor test/ fixes noticed when creating this
series.

It also brings in a few qconfig patches which didn't make it into the
main U-Boot tree.
END

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:26 +02:00
Simon Glass
ad1a301a16 virtio: Set the log-category for all drivers
Most drivers have the log-category set but not all. Fill this in for
the rest.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:26 +02:00
Simon Glass
9a4aa22a70 virtio: Increase the bootdev priority
The current priority of BOOTDEVP_4_SCAN_FAST means that virtio is
scanned after SCSI. But virtio-scsi provides higher performance.

It seems better to regard virtio has an internal device, since it is
paravirtualised and thus fast. Change its bootdev priority to
BOOTDEVP_2_INTERNAL_FAST

Disable the virtio-fs feature on sandbox, since the virtio queue is not
not yet supported by the emulator.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:26 +02:00
Simon Glass
bbd1cc14c1 virtio: Provide a command to list virtio devices
U-Boot only supports a subset of the devices supported by QEMU. For
example, U-Boot does not currently support the vsock device.

It is helpful to see what devices are provided by QEMU and whether there
is a driver for it in U-Boot.

Add a new 'virtio list' command to provide this.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:26 +02:00
Simon Glass
7013d9f2f1 virtio: Fill in all the QEMU device types
Even if U-Boot doesn't have a driver for all of the virtio devices
provided by QEMU, it is still useful to see what they are. Fill out the
table of device types and names, so that 'virtio list' lists them all.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:26 +02:00
Simon Glass
b82b94d6c4 virtio: doc: Document the virtio command
Add documentation for this command, including some examples.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:25 +02:00
Simon Glass
2fdacb4753 qfw: Add a subcommand to decode the QEMU E820 data
Provide a simple command to display the memory map described by this
table.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:25 +02:00
Simon Glass
d75533b613 qfw: Add a subcommand to read a QEMU file into memory
Provide a simple command to read a named file into memory.

Skip this test on sandbox for now, as it doesn't support this feature in
its emulation of QEMU.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:25 +02:00
Simon Glass
1541ec049b qfw: Add a subcommand to show QEMU arch-specific details
There are a few selectors in a different region which contain what seems
to be arch-specific information. Add a way to display this. So far it
only works on x86.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:25 +02:00
Simon Glass
6d80f5476b qfw: Add a subcommand to show ACPI-loader details
QEMU provides a table containing the ACPI tables and information on how
to relocate them to any suitable memory address. Add a command to show
this information.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:25 +02:00
Simon Glass
af7eb623d0 qfw: Add a subcommand to show the main QEMU details
There are quite a few values provided by QEMU and used by U-Boot, for
which it isn't possible to see the values. Add a new 'qfw dump' command
to support this.

Skip this test on sandbox for now, as it doesn't support this feature in
its emulation of QEMU.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:33:24 +02:00
Simon Glass
676abe19cb qemu: Tidy up and complete fw_cfg_selector docs
There are a few entries missing from this enum. Add them and add
comments for all items, since this doesn't seem to be clearly documented
within QEMU itself.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:26:02 +02:00
Simon Glass
92ad9c9554 emulation: Add more functions to access qfw files
Provide a few more functions to allow accessing arbitrary files easily.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:26:02 +02:00
Simon Glass
9d9f440c7a qfw: Add more fields and a heading to qfw list
Update the command to show the size and selected file, since this is
useful information at times. Add a heading so it is clear what each
field refers to.

Add a simple test as well.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:26:02 +02:00
Simon Glass
8ed299f3be display_options: Support printing a 32-bit value
On 64-bit machines we don't always want to show 16 hex digits,
particularly if the value is 32-bit. Add a new function to show a 32-bit
value.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:26:02 +02:00
Simon Glass
0f640f96c8 Make the bdinfo printing-functions more generic
The bdinfo command makes use of quite a few functions which show a label
followed by a value, on a single line.

This sort of thing is generally useful outside of bdinfo, so move it to
a generic place. Use 'l' (for label) as the prefix.

The margin is still hard-coded to 12, which seems a reasonable limit for
a label.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:26:02 +02:00
Simon Glass
6ab28ecf2a test: Increase console-recording size if UNIT_TEST
Some unit tests generate more than 1K of output. Use a higher default
limit by default.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:26:02 +02:00
Simon Glass
c6a4651fa6 x86: Enable console-recording on qemu-x86_64
Some tests are skipped without console recording. Enable to improve test
coverage on this target.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:25:35 +02:00
Simon Glass
32863b34a4 x86: Update msr test to run on qemu-x86_64
This test is not currently enabled. Update it so that it can be enabled
on the qemu-x86_64 target.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:25:25 +02:00
Simon Glass
2d2057f4d5 test: fdt: Make fdt-overlay test depend on overlays
This test requires FDT-overlay support so skip it if this is not
present.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:11:33 +02:00
Simon Glass
7363d1517d test: Disable truetype and meminfo tests on QEMU
These tests are designed to work on sandbox only. The truetype font
changes the current font, which QEMU targets may not support. The
meminfo test assumes a particular memory size.

Mark them as sandbox-only.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:11:33 +02:00
Simon Glass
8170ab591f x86: bdinfo: Update test for output of tsc
The bdinfo command on x86 now outputs the TSC value, do update the tests
to account for this.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:11:33 +02:00
Simon Glass
c1949994d3 test: Fix the return value when a test fails
When a unit test fails, it returns the error code, which results in a
warning:

   exit not allowed from main input shell.

Fix it by returning a failure code instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:11:33 +02:00
Simon Glass
5814f040a7 qconfig: Ignore defconfigs containing #include
Running "tools/qconfig.py -s" will re-sync files with #include in them
and so un-#include them.

Ignore these and mark them as failures.

Signed-off-by: Simon Glass <sjg@chromium.org>
Fixes: https://source.denx.de/u-boot/custodians/u-boot-dm/-/issues/28
2025-07-09 23:11:33 +02:00
Simon Glass
4da27e4529 qconfig: Add an way to select defconfigs without stdin
Sometimes it is useful to process just one or two defconfigs and it is
convenient to do this just by listing them in the arguments. Add a -D
option for this.

Update the docs to avoid mentioning boards which have been removed.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
2025-07-09 23:11:33 +02:00
Simon Glass
1492937d63 scripts: Allow -d to specify multiple disks in build_helper
Sometimes it is useful to provide several disks to QEMU. Update the -d
flag to support this. It can be used like this:

   scripts/build-qemu -d root.img mmc6.img -r

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 23:11:32 +02:00
Simon Glass
0280f7f8be Merge branch 'qemg' into 'master'
emulation: Restructure the Kconfig

See merge request u-boot/u-boot!114
2025-07-09 04:20:56 +00:00
Simon Glass
87161abea6 emulation: Move common qfw file in with other code
This file provide common functions related to QFW, so move it into
driver/qfw with the other code.

Series-to: concept
Cover-letter:
emulation: Restructure the Kconfig
At present ARM and x86 use differently named symbols to mean similar
things. For x86, board/emulation/Kconfig contains the targets, but ARM
has them in a different file. While ARM uses ARCH_QEMU to mean QEMU,
x86 uses VENDOR_EMULATION.

This series adjusts the Kconfig for emulation targets on x86 and ARM, to
improve consistency.

A new arch-neutral MACH_QEMU is introduced. This is enabled for all
ARM/x86 emulation targets. Furture work could add this for other archs
too.
END

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 05:22:09 +02:00
Simon Glass
f00c74d474 emulation: Rename the uclass file to qfw-uclass.c
The qfw.c file mostly contains the uclass implementation, so rename it
to fit with other uclass files.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 05:22:09 +02:00
Simon Glass
20959f5c4a emulation: Move QFW drivers to drivers/qfw
There seems to be enough QFW code now to have its own directory. Move
the files there before adding more.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 05:22:09 +02:00
Simon Glass
17c152fc7f arm: Move inclusion of board/emulation into board/
Now that ARM is using board/emulation/Kconfig, put the includes for the
board-specific Kconfig into this file too.

With this, both ARM and x86 use board/emulation/Kconfig to list the
targets.
2025-07-09 05:22:09 +02:00
Simon Glass
be47cbc296 arm: x86: Move Kconfig from arch/ to board/
Set up a single place in Kconfig where board/emulation/Kconfig is
included, removing the two sites in arch/arm and arch/x86

Move the ARM-specific Kconfig into this file.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 05:22:09 +02:00
Simon Glass
cd93381ec5 emulation: x86: Rename VENDOR_EMULATION to ARCH_QEMU_X86
This name matches the ARM name and 'emulation' is not really a vendor.
Use ARCH_QEMU_X86 instead, moving that option from its existing location.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-09 05:21:59 +02:00
Simon Glass
537e97237e x86: Rename QEMU to ARCH_QEMU_X86
CONFIG_QEMU is too generic for an x86-specific option. Rename it to
ARCH_QEMU_X86

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-05 05:48:28 -06:00
Simon Glass
50d0aeeeff emulation: efi_loader: Set MACH_QEMU with ARCH_QEMU_ARM
Define MACH_QEMU whenever ARCH_QEMU_ARM is used.

Some of the uses of ARCH_QEMU_ARM with efi_loader should clearly apply
to all QEMU variables, so update these.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-05 05:48:28 -06:00
Simon Glass
ab3b9d1d88 emulation: Rename ARCH_QEMU to ARCH_QEMU_ARM
This option looks generic but in fact is specific to ARM. Rename it to
reflect this.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-05 05:48:28 -06:00
Simon Glass
a9d552407a emulation: Introduction MACH_QEMU
We have QEMU targets across various architecture. So there is not really
a QEMU archicture. So 'ARCH_QEMU' seems a bit peculiar.

We have a board/emulation directory where much of the arch-specific code
is kept. But QEMU is not really a board; in fact many boards use QEMU.

While 'emulation' is a useful concept, QEMU is only one of the emulators
available. so MACH_EMULATION seems too vague to capture QEMU-specific
features.

On ARM the code is in the arch/arm/mach-qemu directory and it seems
reasonable to go with this approach and consider QEMU to be a machine.

So add a MACH_QEMU option. For now nothing uses it.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-07-05 05:48:28 -06:00