mirror of
https://xff.cz/git/u-boot/
synced 2025-10-04 08:51:43 +02:00
bootstd: Add test for bootmeth_android
Add a unit test for testing the Android bootmethod. This requires another mmc image (mmc7) to contain the following partitions: - misc: contains the Bootloader Control Block (BCB) - boot_a: contains a fake generic kernel image - vendor_boot_a: contains a fake vendor_boot image Also add BOOTMETH_ANDROID as a dependency on sandbox so that we can test this with: $ ./test/py/test.py --bd sandbox --build -k test_ut # build the mmc7.img $ ./test/py/test.py --bd sandbox --build -k bootflow_android Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Reviewed-by: Julien Masson <jmasson@baylibre.com> Reviewed-by: Guillaume La Roque <glaroque@baylibre.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
committed by
Tom Rini
parent
125d9f3306
commit
c2a2a06e01
@@ -27,6 +27,7 @@
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
extern U_BOOT_DRIVER(bootmeth_android);
|
||||
extern U_BOOT_DRIVER(bootmeth_cros);
|
||||
extern U_BOOT_DRIVER(bootmeth_2script);
|
||||
|
||||
@@ -518,12 +519,12 @@ BOOTSTD_TEST(bootflow_cmd_boot, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
|
||||
* @uts: Unit test state
|
||||
* @mmc_dev: MMC device to use, e.g. "mmc4". Note that this must remain valid
|
||||
* in the caller until
|
||||
* @bind_cros: true to bind the ChromiumOS bootmeth
|
||||
* @bind_cros: true to bind the ChromiumOS and Android bootmeths
|
||||
* @old_orderp: Returns the original bootdev order, which must be restored
|
||||
* Returns 0 on success, -ve on failure
|
||||
*/
|
||||
static int prep_mmc_bootdev(struct unit_test_state *uts, const char *mmc_dev,
|
||||
bool bind_cros, const char ***old_orderp)
|
||||
bool bind_cros_android, const char ***old_orderp)
|
||||
{
|
||||
static const char *order[] = {"mmc2", "mmc1", NULL, NULL};
|
||||
struct udevice *dev, *bootstd;
|
||||
@@ -545,12 +546,19 @@ static int prep_mmc_bootdev(struct unit_test_state *uts, const char *mmc_dev,
|
||||
"bootmeth_script", 0, ofnode_null(), &dev));
|
||||
|
||||
/* Enable the cros bootmeth if needed */
|
||||
if (IS_ENABLED(CONFIG_BOOTMETH_CROS) && bind_cros) {
|
||||
if (IS_ENABLED(CONFIG_BOOTMETH_CROS) && bind_cros_android) {
|
||||
ut_assertok(uclass_first_device_err(UCLASS_BOOTSTD, &bootstd));
|
||||
ut_assertok(device_bind(bootstd, DM_DRIVER_REF(bootmeth_cros),
|
||||
"cros", 0, ofnode_null(), &dev));
|
||||
}
|
||||
|
||||
/* Enable the android bootmeths if needed */
|
||||
if (IS_ENABLED(CONFIG_BOOTMETH_ANDROID) && bind_cros_android) {
|
||||
ut_assertok(uclass_first_device_err(UCLASS_BOOTSTD, &bootstd));
|
||||
ut_assertok(device_bind(bootstd, DM_DRIVER_REF(bootmeth_android),
|
||||
"android", 0, ofnode_null(), &dev));
|
||||
}
|
||||
|
||||
/* Change the order to include the device */
|
||||
std = dev_get_priv(bootstd);
|
||||
old_order = std->bootdev_order;
|
||||
@@ -589,6 +597,37 @@ static int scan_mmc_bootdev(struct unit_test_state *uts, const char *mmc_dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* scan_mmc_android_bootdev() - Set up an mmc bootdev so we can access other
|
||||
* distros. Android bootflow might print "ANDROID:*" while scanning
|
||||
*
|
||||
* @uts: Unit test state
|
||||
* @mmc_dev: MMC device to use, e.g. "mmc4"
|
||||
* Returns 0 on success, -ve on failure
|
||||
*/
|
||||
static int scan_mmc_android_bootdev(struct unit_test_state *uts, const char *mmc_dev)
|
||||
{
|
||||
struct bootstd_priv *std;
|
||||
struct udevice *bootstd;
|
||||
const char **old_order;
|
||||
|
||||
ut_assertok(prep_mmc_bootdev(uts, mmc_dev, true, &old_order));
|
||||
|
||||
console_record_reset_enable();
|
||||
ut_assertok(run_command("bootflow scan", 0));
|
||||
/* Android bootflow might print one or two 'ANDROID:*' logs */
|
||||
ut_check_skipline(uts);
|
||||
ut_check_skipline(uts);
|
||||
ut_assert_console_end();
|
||||
|
||||
/* Restore the order used by the device tree */
|
||||
ut_assertok(uclass_first_device_err(UCLASS_BOOTSTD, &bootstd));
|
||||
std = dev_get_priv(bootstd);
|
||||
std->bootdev_order = old_order;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* scan_mmc4_bootdev() - Set up the mmc4 bootdev so we can access a fake Armbian
|
||||
*
|
||||
@@ -1160,3 +1199,26 @@ static int bootflow_cros(struct unit_test_state *uts)
|
||||
return 0;
|
||||
}
|
||||
BOOTSTD_TEST(bootflow_cros, 0);
|
||||
|
||||
/* Test Android bootmeth */
|
||||
static int bootflow_android(struct unit_test_state *uts)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_BOOTMETH_ANDROID))
|
||||
return -EAGAIN;
|
||||
|
||||
ut_assertok(scan_mmc_android_bootdev(uts, "mmc7"));
|
||||
ut_assertok(run_command("bootflow list", 0));
|
||||
|
||||
ut_assert_nextlinen("Showing all");
|
||||
ut_assert_nextlinen("Seq");
|
||||
ut_assert_nextlinen("---");
|
||||
ut_assert_nextlinen(" 0 extlinux");
|
||||
ut_assert_nextlinen(" 1 android ready mmc 0 mmc7.bootdev.whole ");
|
||||
ut_assert_nextlinen("---");
|
||||
ut_assert_skip_to_line("(2 bootflows, 2 valid)");
|
||||
|
||||
ut_assert_console_end();
|
||||
|
||||
return 0;
|
||||
}
|
||||
BOOTSTD_TEST(bootflow_android, 0);
|
||||
|
Reference in New Issue
Block a user