mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
Merge tag 'efi-2026-01-rc3-2' of https://source.denx.de/u-boot/custodians/u-boot-efi
Pull request efi-2026-01-rc3-2 CIL https://source.denx.de/u-boot/custodians/u-boot-efi/-/pipelines/28454 Documentation: * board: ti: am6254atl_sk: correct value of PRELOADED_BL33_BASE * pytest: fix u-boot-test-flash typo * samsung: Fix PXE description for the E850-96 board * board: ti: k3: Update TI firmware repository URL to GitHub * add missing macro descriptions to include/test/ut.h and add it to the API documenation * rearrange the description of DM tests and describe return values Testing: * Enable CI testing ACPI on qemu-riscv64_smode_acpi_defconfig * Add qemu-riscv64_smode_defconfig to the CI tests * Generalize tests such that they can run on RISC-V QEMU - fdt_test_apply requires CONFIG_OF_LIBFDT_OVERLAY - cmd/fdt: do not assume RNG device exists - cmd/bdinfo: make no flash assumption - cmd/bdinfo: consider arch_print_bdinfo() output - common/print: do not use fixed buffer addresses - cmd/fdt: do not use fixed buffer addresses - raise CONFIG_CONSOLE_RECORD_OUT_SIZE default to 0x6000 * enable CONFIG_CONSOLE_RECORD=y on qemu-riscv64_smode_acpi # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEEbcT5xx8ppvoGt20zxIHbvCwFGsQFAmkg1IsACgkQxIHbvCwF # GsQVLA//dmiApob+J9FUhD8joD+DaKSNfLYmv8zwfIFL2xRxx7D+CQT+r+I9FJYI # KojiLyn4PE/5VOm+wrsvAoYoMLJwAHvg5nmYJLLzvm6V//DLd1AEopP/+Uh8gEVW # xYGLcvDyGgZpraAhcmqRnAS89py3SigwGzhcUMbT6ZC6pgMVEsBpg8XeMpY7N05c # rwyqFAAPD8RcF7veQCpry87NiK5o+9YuM1zKl5sDFOpEWKq5ToNwhQ00bnux9lUd # HWz9X6ge58iFiMXRqUCnOaPeXeChn9ejyEiKtfQ0JtykOf9NT2WMdD2VKe9PCYsd # f7OynJTGG2OXTKBhon/xj75itiTm7EELc/FHwHEdtZIIHgpi/C33yQgKxLf9mtUo # Z7DKYpPoaTCbJhs9LCK942KPtshbtAJLKTVqyBPo7Jn0mneeCQUsbaQRU7JruJTK # hKluUjsAry3Do3wv/w6B8R6MMgfpBktPkqjg9e/maSdhYdkNAYpjajtORgpqmJRV # HTGJXfL3qFC50jlenlMYOm4Qake33MIMzubaxoM3j5ENDUJ7KAbWADEoWDpve8Tu # b/fX8uuW+g2T18Y/M9Bsk/jaUjDTx0xtZUSYNIIQJFDaJMzUxGYWlmtXhLZwFU8g # 7S5pBmgxoSAtQSMAeoJPJp9FSgXYqiGLUeSwcOH2NaPn0lLFvK0= # =D0Yy # -----END PGP SIGNATURE----- # gpg: Signature made Fri 21 Nov 2025 03:07:23 PM CST # gpg: using RSA key 6DC4F9C71F29A6FA06B76D33C481DBBC2C051AC4 # gpg: Good signature from "Heinrich Schuchardt <xypron.glpk@gmx.de>" [unknown] # gpg: aka "[jpeg image of size 1389]" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6DC4 F9C7 1F29 A6FA 06B7 6D33 C481 DBBC 2C05 1AC4
This commit is contained in:
@@ -510,6 +510,12 @@ stages:
|
||||
qemu_riscv64_spl:
|
||||
TEST_PY_BD: "qemu-riscv64_spl"
|
||||
TEST_PY_TEST_SPEC: "not sleep"
|
||||
qemu_riscv64_smode:
|
||||
TEST_PY_BD: "qemu-riscv64_smode"
|
||||
TEST_PY_TEST_SPEC: "not sleep"
|
||||
qemu_riscv64_smode_acpi:
|
||||
TEST_PY_BD: "qemu-riscv64_smode_acpi"
|
||||
TEST_PY_TEST_SPEC: "not sleep"
|
||||
qemu_x86:
|
||||
TEST_PY_BD: "qemu-x86"
|
||||
TEST_PY_TEST_SPEC: "not sleep"
|
||||
|
||||
@@ -466,6 +466,18 @@ qemu-riscv64_spl test.py:
|
||||
TEST_PY_TEST_SPEC: "not sleep"
|
||||
<<: *buildman_and_testpy_dfn
|
||||
|
||||
qemu-riscv64_smode test.py:
|
||||
variables:
|
||||
TEST_PY_BD: "qemu-riscv64_smode"
|
||||
TEST_PY_TEST_SPEC: "not sleep"
|
||||
<<: *buildman_and_testpy_dfn
|
||||
|
||||
qemu-riscv64_smode_acpi test.py:
|
||||
variables:
|
||||
TEST_PY_BD: "qemu-riscv64_smode_acpi"
|
||||
TEST_PY_TEST_SPEC: "not sleep"
|
||||
<<: *buildman_and_testpy_dfn
|
||||
|
||||
qemu-x86 test.py:
|
||||
variables:
|
||||
TEST_PY_BD: "qemu-x86"
|
||||
|
||||
@@ -26,7 +26,7 @@ config CONSOLE_RECORD_INIT_F
|
||||
config CONSOLE_RECORD_OUT_SIZE
|
||||
hex "Output buffer size"
|
||||
depends on CONSOLE_RECORD
|
||||
default 0x400 if CONSOLE_RECORD
|
||||
default 0x6000
|
||||
help
|
||||
Set the size of the console recording output buffer. When this fills
|
||||
up, no more data will be recorded until some is removed. The buffer
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
#include <configs/qemu-riscv64_smode_defconfig>
|
||||
#include <board/emulation/configs/acpi.config>
|
||||
CONFIG_CONSOLE_RECORD=y
|
||||
|
||||
@@ -27,6 +27,7 @@ U-Boot API documentation
|
||||
serial
|
||||
setjmp
|
||||
sysreset
|
||||
test
|
||||
timer
|
||||
unicode
|
||||
uthread
|
||||
|
||||
11
doc/api/test.rst
Normal file
11
doc/api/test.rst
Normal file
@@ -0,0 +1,11 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
.. Copyright (c) 2025 Heinrich Schuchardt
|
||||
|
||||
Test Framework
|
||||
==============
|
||||
|
||||
Assertions and reporting functions
|
||||
----------------------------------
|
||||
|
||||
.. kernel-doc:: include/test/ut.h
|
||||
:internal:
|
||||
@@ -637,9 +637,14 @@ machine:
|
||||
`-- pxelinux.cfg
|
||||
`-- 01-02-36-f5-1c-81-13
|
||||
|
||||
where ``'01-02-36-f5-1c-81-13'`` file contains extlinux configuration for
|
||||
TFTP to load and boot. The name of this file is the Ethernet MAC address,
|
||||
which can be looked up in the ``$ethaddr`` environment variable in U-Boot.
|
||||
where ``'01-02-36-f5-1c-81-13'`` file contains extlinux configuration for TFTP
|
||||
to load and boot. The name of this file has to be in the format of
|
||||
``'01-MAC-address'``. The Ethernet MAC address in this case is
|
||||
``02-36-f5-1c-81-13``, and it can be looked up in the ``$ethaddr`` environment
|
||||
variable in U-Boot::
|
||||
|
||||
=> env print ethaddr
|
||||
ethaddr=02:36:f5:1c:81:13
|
||||
|
||||
An example of such configuration file is::
|
||||
|
||||
@@ -667,11 +672,11 @@ machine:
|
||||
arch/arm64/configs/defconfig
|
||||
----------------------------
|
||||
|
||||
# Needed for boot from USB storage (mounting rootfs from USB drive)
|
||||
# Keep USB PHY driver built-in, as the Ethernet controller sits on USB bus
|
||||
CONFIG_PHY_EXYNOS5_USBDRD=y
|
||||
CONFIG_TYPEC=y
|
||||
|
||||
# Needed for NFS boot
|
||||
# Keep Ethernet driver built-in
|
||||
CONFIG_USB_NET_SMSC95XX=y
|
||||
CONFIG_USB_USBNET=y
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ Set the variables corresponding to this platform:
|
||||
export UBOOT_CFG_CORTEXR=am6254atl_evm_r5_defconfig
|
||||
export UBOOT_CFG_CORTEXA=am6254atl_evm_a53_defconfig
|
||||
export TFA_BOARD=lite
|
||||
export TFA_EXTRA_ARGS="PRELOADED_BL33_BASE=0x81880000 BL32_BASE=0x80080000"
|
||||
export TFA_EXTRA_ARGS="PRELOADED_BL33_BASE=0x82000000 BL32_BASE=0x80080000"
|
||||
export OPTEE_PLATFORM=k3-am62x
|
||||
export OPTEE_EXTRA_ARGS="CFG_TZDRAM_START=0x80080000"
|
||||
|
||||
|
||||
@@ -184,7 +184,7 @@ online
|
||||
|
||||
* **TI Firmware (TIFS, DM, SYSFW)**
|
||||
|
||||
| **source:** https://git.ti.com/git/processor-firmware/ti-linux-firmware.git
|
||||
| **source:** https://github.com/TexasInstruments/ti-linux-firmware
|
||||
| **branch:** ti-linux-firmware
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -392,7 +392,7 @@ to flash, pulsing the board's reset signal is likely all this script needs to
|
||||
do. However, in some scenarios, this script may perform other actions. For
|
||||
example, it may call out to some SoC- or board-specific vendor utility in order
|
||||
to download the U-Boot binary directly into RAM and execute it. This would
|
||||
avoid the need for ``u-boot-test-flash1`` to actually write U-Boot to flash,
|
||||
avoid the need for ``u-boot-test-flash`` to actually write U-Boot to flash,
|
||||
thus saving wear on the flash chip(s).
|
||||
|
||||
u-boot-test-release
|
||||
|
||||
@@ -206,8 +206,44 @@ some common test tasks.
|
||||
|
||||
(there are also UEFI C tests in lib/efi_selftest/ not considered here.)
|
||||
|
||||
Add a C test to an existing suite
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Use this when you are adding to or modifying an existing feature outside driver
|
||||
model. An example is bloblist.
|
||||
|
||||
Add a new function in the same file as the rest of the suite and register it
|
||||
with the suite. For example, to add a new mem_search test::
|
||||
|
||||
/* Test 'ms' command with 32-bit values */
|
||||
static int mem_test_ms_new_thing(struct unit_test_state *uts)
|
||||
{
|
||||
/* test code here */
|
||||
|
||||
return 0;
|
||||
}
|
||||
MEM_TEST(mem_test_ms_new_thing, UTF_CONSOLE);
|
||||
|
||||
Note that the MEM_TEST() macros is defined at the top of the file.
|
||||
|
||||
Example commit: 9fe064646d2 ("bloblist: Support relocating to a larger space") [1]
|
||||
|
||||
* A successful test returns 0.
|
||||
* A skipped test returns -EAGAIN.
|
||||
* Any other value signals a failure.
|
||||
|
||||
Include ``test/ut.h`` defines a number of macros to check values and to return
|
||||
from the test function if the assertion fails. See :doc:`../api/test`
|
||||
for details.
|
||||
|
||||
[1] https://gitlab.denx.de/u-boot/u-boot/-/commit/9fe064646d2
|
||||
|
||||
|
||||
Add a new driver model test
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
'''''''''''''''''''''''''''
|
||||
|
||||
``dm`` is the test suite that contains C tests for U-boot
|
||||
:doc:`Driver Model <driver-model/index>`.
|
||||
|
||||
Use this when adding a test for a new or existing uclass, adding new operations
|
||||
or features to a uclass, adding new ofnode or dev_read_() functions, or anything
|
||||
@@ -249,31 +285,6 @@ Example commit: c48cb7ebfb4 ("sandbox: add ADC unit tests") [1]
|
||||
[1] https://gitlab.denx.de/u-boot/u-boot/-/commit/c48cb7ebfb4
|
||||
|
||||
|
||||
Add a C test to an existing suite
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Use this when you are adding to or modifying an existing feature outside driver
|
||||
model. An example is bloblist.
|
||||
|
||||
Add a new function in the same file as the rest of the suite and register it
|
||||
with the suite. For example, to add a new mem_search test::
|
||||
|
||||
/* Test 'ms' command with 32-bit values */
|
||||
static int mem_test_ms_new_thing(struct unit_test_state *uts)
|
||||
{
|
||||
/* test code here */
|
||||
|
||||
return 0;
|
||||
}
|
||||
MEM_TEST(mem_test_ms_new_thing, UTF_CONSOLE);
|
||||
|
||||
Note that the MEM_TEST() macros is defined at the top of the file.
|
||||
|
||||
Example commit: 9fe064646d2 ("bloblist: Support relocating to a larger space") [1]
|
||||
|
||||
[1] https://gitlab.denx.de/u-boot/u-boot/-/commit/9fe064646d2
|
||||
|
||||
|
||||
Add a new test suite
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -130,18 +130,28 @@ int ut_check_console_end(struct unit_test_state *uts);
|
||||
*
|
||||
* This only supports a byte dump.
|
||||
*
|
||||
* @total_bytes: Size of the expected dump in bytes`
|
||||
* Return: 0 if OK (looks like a dump and the length matches), other value on
|
||||
* error
|
||||
* @uts: Test state
|
||||
* @total_bytes: Size of the expected dump in bytes
|
||||
* Return: 0 if OK (looks like a dump and the length matches),
|
||||
* other value on error
|
||||
*/
|
||||
int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
|
||||
/* Report a failure, with printf() string */
|
||||
/**
|
||||
* ut_report() - Report a failure, with printf() string
|
||||
*
|
||||
* @fmt: format string
|
||||
* @args: arguments to be printed
|
||||
*/
|
||||
#define ut_reportf(fmt, args...) \
|
||||
ut_failf(uts, __FILE__, __LINE__, __func__, "report", \
|
||||
fmt, ##args)
|
||||
|
||||
/* Assert that a condition is non-zero */
|
||||
/**
|
||||
* ut_assert() - Assert that a condition is true (not 0)
|
||||
*
|
||||
* @cond: condition
|
||||
*/
|
||||
#define ut_assert(cond) ({ \
|
||||
int __ret = 0; \
|
||||
\
|
||||
@@ -152,7 +162,13 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that a condition is non-zero, with printf() string */
|
||||
/**
|
||||
* ut_assertf() - Assert that a condition is true with printf string
|
||||
*
|
||||
* @cond: condition
|
||||
* @fmt: format string
|
||||
* @args: arguments to be printed
|
||||
*/
|
||||
#define ut_assertf(cond, fmt, args...) ({ \
|
||||
int __ret = 0; \
|
||||
\
|
||||
@@ -164,7 +180,12 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that two int expressions are equal */
|
||||
/**
|
||||
* ut_asserteq() - Assert that two int32 expressions are equal
|
||||
*
|
||||
* @expr1: expected value
|
||||
* @expr2: actual value
|
||||
*/
|
||||
#define ut_asserteq(expr1, expr2) ({ \
|
||||
unsigned int _val1 = (expr1), _val2 = (expr2); \
|
||||
int __ret = 0; \
|
||||
@@ -179,7 +200,12 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that two 64 int expressions are equal */
|
||||
/**
|
||||
* ut_asserteq_64() - Assert that two int64 expressions are equal
|
||||
*
|
||||
* @expr1: expected value
|
||||
* @expr2: actual value
|
||||
*/
|
||||
#define ut_asserteq_64(expr1, expr2) ({ \
|
||||
u64 _val1 = (expr1), _val2 = (expr2); \
|
||||
int __ret = 0; \
|
||||
@@ -197,7 +223,12 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that two string expressions are equal */
|
||||
/**
|
||||
* ut_asserteq_str() - Assert that two string expressions are equal
|
||||
*
|
||||
* @expr1: expected value
|
||||
* @expr2: actual value
|
||||
*/
|
||||
#define ut_asserteq_str(expr1, expr2) ({ \
|
||||
const char *_val1 = (expr1), *_val2 = (expr2); \
|
||||
int __ret = 0; \
|
||||
@@ -211,9 +242,12 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/*
|
||||
* Assert that two string expressions are equal, up to length of the
|
||||
* first
|
||||
/**
|
||||
* ut_asserteq_strn() - Assert that two string expressions are equal
|
||||
* up to the length of the first expression
|
||||
*
|
||||
* @expr1: expected value
|
||||
* @expr2: actual value
|
||||
*/
|
||||
#define ut_asserteq_strn(expr1, expr2) ({ \
|
||||
const char *_val1 = (expr1), *_val2 = (expr2); \
|
||||
@@ -230,7 +264,13 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that two memory areas are equal */
|
||||
/**
|
||||
* ut_asserteq_mem() - Assert that two memory areas are equal
|
||||
*
|
||||
* @expr1: expected value
|
||||
* @expr2: actual value
|
||||
* @len: length of the memory areas
|
||||
*/
|
||||
#define ut_asserteq_mem(expr1, expr2, len) ({ \
|
||||
const u8 *_val1 = (u8 *)(expr1), *_val2 = (u8 *)(expr2); \
|
||||
const uint __len = len; \
|
||||
@@ -250,7 +290,12 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that two pointers are equal */
|
||||
/**
|
||||
* ut_asserteq_ptr() - Assert that two string pointers are equal
|
||||
*
|
||||
* @expr1: expected value
|
||||
* @expr2: actual value
|
||||
*/
|
||||
#define ut_asserteq_ptr(expr1, expr2) ({ \
|
||||
const void *_val1 = (expr1), *_val2 = (expr2); \
|
||||
int __ret = 0; \
|
||||
@@ -264,7 +309,13 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that two addresses (converted from pointers) are equal */
|
||||
/**
|
||||
* ut_asserteq_addr() - Assert that two addresses (converted from pointers)
|
||||
* are equal
|
||||
*
|
||||
* @expr1: expected value
|
||||
* @expr2: actual value
|
||||
*/
|
||||
#define ut_asserteq_addr(expr1, expr2) ({ \
|
||||
ulong _val1 = map_to_sysmem(expr1); \
|
||||
ulong _val2 = map_to_sysmem(expr2); \
|
||||
@@ -279,7 +330,11 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that a pointer is NULL */
|
||||
/**
|
||||
* ut_assertnull() - Assert that a pointer is NULL
|
||||
*
|
||||
* @expr: pointer
|
||||
*/
|
||||
#define ut_assertnull(expr) ({ \
|
||||
const void *_val = (expr); \
|
||||
int __ret = 0; \
|
||||
@@ -293,7 +348,11 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that a pointer is not NULL */
|
||||
/**
|
||||
* ut_assertnonnull() - Assert that a pointer is not NULL
|
||||
*
|
||||
* @expr: pointer
|
||||
*/
|
||||
#define ut_assertnonnull(expr) ({ \
|
||||
const void *_val = (expr); \
|
||||
int __ret = 0; \
|
||||
@@ -307,7 +366,11 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that a pointer is not an error pointer */
|
||||
/**
|
||||
* ut_assertok_ptr() - Assert that a pointer is not an error pointer
|
||||
*
|
||||
* @expr: pointer
|
||||
*/
|
||||
#define ut_assertok_ptr(expr) ({ \
|
||||
const void *_val = (expr); \
|
||||
int __ret = 0; \
|
||||
@@ -322,10 +385,19 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that an operation succeeds (returns 0) */
|
||||
/**
|
||||
* ut_assertok() - Assert that an operation succeeds (returns 0)
|
||||
*
|
||||
* @cond: expression
|
||||
*/
|
||||
#define ut_assertok(cond) ut_asserteq(0, cond)
|
||||
|
||||
/* Assert that the next console output line matches */
|
||||
/**
|
||||
* ut_assert_nextline() - Assert that the next console output line matches
|
||||
*
|
||||
* @fmt: format string
|
||||
* @args: print arguments
|
||||
*/
|
||||
#define ut_assert_nextline(fmt, args...) ({ \
|
||||
int __ret = 0; \
|
||||
\
|
||||
@@ -338,7 +410,13 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that the next console output line matches up to the length */
|
||||
/**
|
||||
* ut_assert_nextlinen() - Assert that the next console output line matches
|
||||
* up to the length of the expected string.
|
||||
*
|
||||
* @fmt: format string
|
||||
* @args: print arguments
|
||||
*/
|
||||
#define ut_assert_nextlinen(fmt, args...) ({ \
|
||||
int __ret = 0; \
|
||||
\
|
||||
@@ -351,7 +429,10 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that there is a 'next' console output line, and skip it */
|
||||
/**
|
||||
* ut_assert_skipline() - Assert that there is a 'next' console output line,
|
||||
* and skip it
|
||||
*/
|
||||
#define ut_assert_skipline() ({ \
|
||||
int __ret = 0; \
|
||||
\
|
||||
@@ -363,7 +444,13 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that a following console output line matches */
|
||||
/**
|
||||
* ut_assert_skip_to_line() - Assert that a following console output line
|
||||
* matches
|
||||
*
|
||||
* @fmt: format string
|
||||
* @args: print arguments
|
||||
*/
|
||||
#define ut_assert_skip_to_line(fmt, args...) ({ \
|
||||
int __ret = 0; \
|
||||
\
|
||||
@@ -376,7 +463,13 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that a following console output line matches */
|
||||
/**
|
||||
* ut_assert_skip_to_linen() - Assert that a following console output line
|
||||
* matches up to the length of the expected string
|
||||
*
|
||||
* @fmt: format string
|
||||
* @args: print arguments
|
||||
*/
|
||||
#define ut_assert_skip_to_linen(fmt, args...) ({ \
|
||||
int __ret = 0; \
|
||||
\
|
||||
@@ -389,7 +482,9 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that there is no more console output */
|
||||
/**
|
||||
* ut_assert_console_end() - Assert that there is no more console output
|
||||
*/
|
||||
#define ut_assert_console_end() ({ \
|
||||
int __ret = 0; \
|
||||
\
|
||||
@@ -402,7 +497,12 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that the next lines are print_buffer() dump at an address */
|
||||
/**
|
||||
* ut_assert_nextlines_are_dump - Assert that the next lines are print_buffer()
|
||||
* dump at an address
|
||||
*
|
||||
* @total_bytes: Size of the expected dump in bytes
|
||||
*/
|
||||
#define ut_assert_nextlines_are_dump(total_bytes) ({ \
|
||||
int __ret = 0; \
|
||||
\
|
||||
@@ -416,7 +516,10 @@ int ut_check_console_dump(struct unit_test_state *uts, int total_bytes);
|
||||
__ret; \
|
||||
})
|
||||
|
||||
/* Assert that the next console output line is empty */
|
||||
/**
|
||||
* ut_assert_nextline_empty() - Assert that the next console output line is
|
||||
* empty
|
||||
*/
|
||||
#define ut_assert_nextline_empty() \
|
||||
ut_assert_nextline("%s", "")
|
||||
|
||||
@@ -451,6 +554,8 @@ void ut_silence_console(struct unit_test_state *uts);
|
||||
*
|
||||
* This restarts console output again and turns off console recording. This
|
||||
* happens on all boards, including sandbox.
|
||||
*
|
||||
* @uts: Test state
|
||||
*/
|
||||
void ut_unsilence_console(struct unit_test_state *uts);
|
||||
|
||||
|
||||
@@ -161,9 +161,9 @@ static int bdinfo_test_all(struct unit_test_state *uts)
|
||||
ut_assertok(bdinfo_check_mem(uts));
|
||||
|
||||
/* CONFIG_SYS_HAS_SRAM testing not supported */
|
||||
ut_assertok(test_num_l(uts, "flashstart", 0));
|
||||
ut_assertok(test_num_l(uts, "flashsize", 0));
|
||||
ut_assertok(test_num_l(uts, "flashoffset", 0));
|
||||
ut_check_console_linen(uts, "flashstart");
|
||||
ut_check_console_linen(uts, "flashsize");
|
||||
ut_check_console_linen(uts, "flashoffset");
|
||||
ut_assert_nextline("baudrate = %lu bps",
|
||||
env_get_ulong("baudrate", 10, 1234));
|
||||
ut_assertok(test_num_l(uts, "relocaddr", gd->relocaddr));
|
||||
@@ -215,8 +215,15 @@ static int bdinfo_test_all(struct unit_test_state *uts)
|
||||
ut_assertok(test_num_l(uts, "malloc base", gd_malloc_start()));
|
||||
}
|
||||
|
||||
/* Check arch_print_bdinfo() output */
|
||||
if (IS_ENABLED(CONFIG_X86))
|
||||
ut_check_skip_to_linen(uts, " high end =");
|
||||
ut_check_skip_to_linen(uts, "tsc");
|
||||
|
||||
#ifdef CONFIG_RISCV
|
||||
ut_check_console_linen(uts, "boot hart");
|
||||
if (gd->arch.firmware_fdt_addr)
|
||||
ut_check_console_linen(uts, "firmware fdt");
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <fdt_support.h>
|
||||
#include <mapmem.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <dm/uclass.h>
|
||||
#include <linux/libfdt.h>
|
||||
#include <test/ut.h>
|
||||
|
||||
@@ -264,7 +265,7 @@ FDT_TEST(fdt_test_addr_resize, UTF_CONSOLE);
|
||||
static int fdt_test_move(struct unit_test_state *uts)
|
||||
{
|
||||
char fdt[256];
|
||||
ulong addr, newaddr = 0x10000;
|
||||
ulong addr, newaddr;
|
||||
const int size = sizeof(fdt);
|
||||
uint32_t ts;
|
||||
void *buf;
|
||||
@@ -274,8 +275,10 @@ static int fdt_test_move(struct unit_test_state *uts)
|
||||
ts = fdt_totalsize(fdt);
|
||||
|
||||
/* Moved target DT location */
|
||||
buf = map_sysmem(newaddr, size);
|
||||
buf = memalign(8, size);
|
||||
ut_assertnonnull(buf);
|
||||
memset(buf, 0, size);
|
||||
newaddr = map_to_sysmem(buf);
|
||||
|
||||
/* Test moving the working FDT to a new location */
|
||||
ut_assertok(run_commandf("fdt move %08lx %08lx %x", addr, newaddr, ts));
|
||||
@@ -287,6 +290,8 @@ static int fdt_test_move(struct unit_test_state *uts)
|
||||
ut_assert_nextline("Total of %d byte(s) were the same", ts);
|
||||
ut_assert_console_end();
|
||||
|
||||
free(buf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
FDT_TEST(fdt_test_move, UTF_CONSOLE);
|
||||
@@ -1267,6 +1272,7 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
{
|
||||
const char *env_bootargs = env_get("bootargs");
|
||||
char fdt[8192];
|
||||
struct udevice *dev;
|
||||
ulong addr;
|
||||
|
||||
ut_assertok(make_test_fdt(uts, fdt, sizeof(fdt), &addr));
|
||||
@@ -1280,11 +1286,16 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
/* Test add new chosen node without initrd */
|
||||
ut_assertok(run_commandf("fdt chosen"));
|
||||
ut_assertok(run_commandf("fdt print /chosen"));
|
||||
ut_assert_nextline("chosen {");
|
||||
ut_assert(0 < console_record_readline(uts->actual_str,
|
||||
sizeof(uts->actual_str)));
|
||||
if (!strcmp("No RNG device", uts->actual_str))
|
||||
ut_assert(0 < console_record_readline(uts->actual_str,
|
||||
sizeof(uts->actual_str)));
|
||||
ut_asserteq_str("chosen {", uts->actual_str);
|
||||
ut_assert_nextlinen("\tu-boot,version = "); /* Ignore the version string */
|
||||
if (env_bootargs)
|
||||
ut_assert_nextline("\tbootargs = \"%s\";", env_bootargs);
|
||||
if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
if (!uclass_get_device(UCLASS_RNG, 0, &dev) &&
|
||||
!IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
!IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
ut_assert_nextlinen("\tkaslr-seed = ");
|
||||
@@ -1294,7 +1305,12 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
/* Test add new chosen node with initrd */
|
||||
ut_assertok(run_commandf("fdt chosen 0x1234 0x5678"));
|
||||
ut_assertok(run_commandf("fdt print /chosen"));
|
||||
ut_assert_nextline("chosen {");
|
||||
ut_assert(0 < console_record_readline(uts->actual_str,
|
||||
sizeof(uts->actual_str)));
|
||||
if (!strcmp("No RNG device", uts->actual_str))
|
||||
ut_assert(0 < console_record_readline(uts->actual_str,
|
||||
sizeof(uts->actual_str)));
|
||||
ut_asserteq_str("chosen {", uts->actual_str);
|
||||
ut_assert_nextline("\tlinux,initrd-end = <0x%08x 0x%08x>;",
|
||||
upper_32_bits(0x1234 + 0x5678 - 1),
|
||||
lower_32_bits(0x1234 + 0x5678 - 1));
|
||||
@@ -1303,7 +1319,7 @@ static int fdt_test_chosen(struct unit_test_state *uts)
|
||||
ut_assert_nextlinen("\tu-boot,version = "); /* Ignore the version string */
|
||||
if (env_bootargs)
|
||||
ut_assert_nextline("\tbootargs = \"%s\";", env_bootargs);
|
||||
if (IS_ENABLED(CONFIG_DM_RNG) &&
|
||||
if (!uclass_get_device(UCLASS_RNG, 0, &dev) &&
|
||||
!IS_ENABLED(CONFIG_MEASURED_BOOT) &&
|
||||
!IS_ENABLED(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT))
|
||||
ut_assert_nextlinen("\tkaslr-seed = ");
|
||||
@@ -1319,6 +1335,9 @@ static int fdt_test_apply(struct unit_test_state *uts)
|
||||
char fdt[8192], fdto[8192];
|
||||
ulong addr, addro;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_OF_LIBFDT_OVERLAY))
|
||||
return -EAGAIN;
|
||||
|
||||
/* Create base DT with __symbols__ node */
|
||||
ut_assertok(fdt_create(fdt, sizeof(fdt)));
|
||||
ut_assertok(fdt_finish_reservemap(fdt));
|
||||
|
||||
@@ -168,12 +168,8 @@ static int print_display_buffer(struct unit_test_state *uts)
|
||||
u8 *buf;
|
||||
int i;
|
||||
|
||||
/* This test requires writable memory at zero */
|
||||
if (IS_ENABLED(CONFIG_X86))
|
||||
return -EAGAIN;
|
||||
|
||||
buf = map_sysmem(0, BUF_SIZE);
|
||||
memset(buf, '\0', BUF_SIZE);
|
||||
buf = calloc(1, BUF_SIZE);
|
||||
ut_assertnonnull(buf);
|
||||
for (i = 0; i < 0x11; i++)
|
||||
buf[i] = i * 0x11;
|
||||
|
||||
@@ -232,7 +228,7 @@ static int print_display_buffer(struct unit_test_state *uts)
|
||||
ut_assert_nextline("00000000: 00 1f 20 21 7e 7f 80 81 ff 99 .. !~.....");
|
||||
ut_assert_console_end();
|
||||
|
||||
unmap_sysmem(buf);
|
||||
free(buf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -244,13 +240,14 @@ static int print_hexdump_line(struct unit_test_state *uts)
|
||||
u8 *buf;
|
||||
int i;
|
||||
|
||||
buf = map_sysmem(0, BUF_SIZE);
|
||||
memset(buf, '\0', BUF_SIZE);
|
||||
buf = calloc(1, BUF_SIZE);
|
||||
ut_assertnonnull(buf);
|
||||
for (i = 0; i < 0x11; i++)
|
||||
buf[i] = i * 0x11;
|
||||
|
||||
/* Check buffer size calculations */
|
||||
linebuf = map_sysmem(0x400, BUF_SIZE);
|
||||
linebuf = calloc(1, BUF_SIZE);
|
||||
ut_assertnonnull(buf);
|
||||
memset(linebuf, '\xff', BUF_SIZE);
|
||||
ut_asserteq(-ENOSPC, hexdump_line(0, buf, 1, 0x10, 0, linebuf, 75));
|
||||
ut_asserteq(0xff, linebuf[0]);
|
||||
@@ -258,7 +255,8 @@ static int print_hexdump_line(struct unit_test_state *uts)
|
||||
ut_asserteq('\0', linebuf[75]);
|
||||
ut_asserteq(0xff, linebuf[76]);
|
||||
|
||||
unmap_sysmem(buf);
|
||||
free(linebuf);
|
||||
free(buf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -268,70 +266,71 @@ static int print_do_hex_dump(struct unit_test_state *uts)
|
||||
{
|
||||
u8 *buf;
|
||||
int i;
|
||||
ulong addr;
|
||||
|
||||
/* This test requires writable memory at zero */
|
||||
if (IS_ENABLED(CONFIG_X86))
|
||||
return -EAGAIN;
|
||||
|
||||
buf = map_sysmem(0, BUF_SIZE);
|
||||
memset(buf, '\0', BUF_SIZE);
|
||||
buf = calloc(1, BUF_SIZE);
|
||||
ut_assertnonnull(buf);
|
||||
addr = map_to_sysmem(buf);
|
||||
for (i = 0; i < 0x11; i++)
|
||||
buf[i] = i * 0x11;
|
||||
|
||||
/* bytes */
|
||||
print_hex_dump_bytes("", DUMP_PREFIX_ADDRESS, buf, 0x12);
|
||||
ut_assert_nextline("%0*lx: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff ..\"3DUfw........",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x0UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
|
||||
ut_assert_nextline("%0*lx: 10 00 ..",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x10UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
|
||||
addr + 0x10UL);
|
||||
ut_assert_console_end();
|
||||
|
||||
/* line length */
|
||||
print_hex_dump("", DUMP_PREFIX_ADDRESS, 8, 1, buf, 0x12, true);
|
||||
ut_assert_nextline("%0*lx: 00 11 22 33 44 55 66 77 ..\"3DUfw",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x0UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
|
||||
ut_assert_nextline("%0*lx: 88 99 aa bb cc dd ee ff ........",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x8UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
|
||||
addr + 0x8UL);
|
||||
ut_assert_nextline("%0*lx: 10 00 ..",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x10UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
|
||||
addr + 0x10UL);
|
||||
ut_assert_console_end();
|
||||
unmap_sysmem(buf);
|
||||
|
||||
/* long line */
|
||||
buf[0x41] = 0x41;
|
||||
print_hex_dump("", DUMP_PREFIX_ADDRESS, 0x40, 1, buf, 0x42, true);
|
||||
ut_assert_nextline("%0*lx: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..\"3DUfw........................................................",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x0UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
|
||||
ut_assert_nextline("%0*lx: 00 41 .A",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x40UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
|
||||
addr + 0x40UL);
|
||||
ut_assert_console_end();
|
||||
|
||||
/* 16-bit */
|
||||
print_hex_dump("", DUMP_PREFIX_ADDRESS, 0, 2, buf, 0x12, true);
|
||||
ut_assert_nextline("%0*lx: 1100 3322 5544 7766 9988 bbaa ddcc ffee ..\"3DUfw........",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x0UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
|
||||
ut_assert_nextline("%0*lx: 0010 ..",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x10UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
|
||||
addr + 0x10UL);
|
||||
ut_assert_console_end();
|
||||
unmap_sysmem(buf);
|
||||
|
||||
/* 32-bit */
|
||||
print_hex_dump("", DUMP_PREFIX_ADDRESS, 0, 4, buf, 0x14, true);
|
||||
ut_assert_nextline("%0*lx: 33221100 77665544 bbaa9988 ffeeddcc ..\"3DUfw........",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x0UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
|
||||
ut_assert_nextline("%0*lx: 00000010 ....",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x10UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
|
||||
addr + 0x10UL);
|
||||
ut_assert_console_end();
|
||||
unmap_sysmem(buf);
|
||||
|
||||
/* 64-bit */
|
||||
print_hex_dump("", DUMP_PREFIX_ADDRESS, 16, 8, buf, 0x18, true);
|
||||
ut_assert_nextline("%0*lx: 7766554433221100 ffeeddccbbaa9988 ..\"3DUfw........",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x0UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
|
||||
ut_assert_nextline("%0*lx: 0000000000000010 ........",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x10UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8,
|
||||
addr + 0x10UL);
|
||||
ut_assert_console_end();
|
||||
unmap_sysmem(buf);
|
||||
|
||||
/* ASCII */
|
||||
buf[1] = 31;
|
||||
@@ -342,9 +341,9 @@ static int print_do_hex_dump(struct unit_test_state *uts)
|
||||
buf[8] = 255;
|
||||
print_hex_dump("", DUMP_PREFIX_ADDRESS, 0, 1, buf, 10, true);
|
||||
ut_assert_nextline("%0*lx: 00 1f 20 21 7e 7f 80 81 ff 99 .. !~.....",
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, 0x0UL);
|
||||
IS_ENABLED(CONFIG_PHYS_64BIT) ? 16 : 8, addr);
|
||||
ut_assert_console_end();
|
||||
unmap_sysmem(buf);
|
||||
free(buf);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user