summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/bloblist.c21
-rw-r--r--test/dm/phy.c83
-rw-r--r--test/py/tests/test_lsblk.py1
3 files changed, 94 insertions, 11 deletions
diff --git a/test/bloblist.c b/test/bloblist.c
index b48be38dc3e..720be7e244f 100644
--- a/test/bloblist.c
+++ b/test/bloblist.c
@@ -19,9 +19,9 @@ DECLARE_GLOBAL_DATA_PTR;
UNIT_TEST(_name, _flags, bloblist_test)
enum {
- TEST_TAG = 1,
- TEST_TAG2 = 2,
- TEST_TAG_MISSING = 3,
+ TEST_TAG = BLOBLISTT_U_BOOT_SPL_HANDOFF,
+ TEST_TAG2 = BLOBLISTT_VBOOT_CTX,
+ TEST_TAG_MISSING = 0x10000,
TEST_SIZE = 10,
TEST_SIZE2 = 20,
@@ -71,7 +71,9 @@ static int bloblist_test_init(struct unit_test_state *uts)
hdr = clear_bloblist();
ut_asserteq(-ENOENT, bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
+ ut_asserteq_ptr(NULL, bloblist_check_magic(TEST_ADDR));
ut_assertok(bloblist_new(TEST_ADDR, TEST_BLOBLIST_SIZE, 0));
+ ut_asserteq_ptr(hdr, bloblist_check_magic(TEST_ADDR));
hdr->version++;
ut_asserteq(-EPROTONOSUPPORT, bloblist_check(TEST_ADDR,
TEST_BLOBLIST_SIZE));
@@ -83,6 +85,11 @@ static int bloblist_test_init(struct unit_test_state *uts)
ut_asserteq(-EIO, bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
ut_assertok(bloblist_finish());
ut_assertok(bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
+
+ hdr->magic++;
+ ut_asserteq_ptr(NULL, bloblist_check_magic(TEST_ADDR));
+ hdr->magic--;
+
hdr->flags++;
ut_asserteq(-EIO, bloblist_check(TEST_ADDR, TEST_BLOBLIST_SIZE));
@@ -100,6 +107,8 @@ static int bloblist_test_blob(struct unit_test_state *uts)
hdr = clear_bloblist();
ut_assertnull(bloblist_find(TEST_TAG, TEST_BLOBLIST_SIZE));
ut_assertok(bloblist_new(TEST_ADDR, TEST_BLOBLIST_SIZE, 0));
+ ut_asserteq(TEST_BLOBLIST_SIZE, bloblist_get_size());
+ ut_asserteq(TEST_ADDR, bloblist_get_base());
ut_asserteq(map_to_sysmem(hdr), TEST_ADDR);
/* Add a record and check that we can find it */
@@ -281,10 +290,10 @@ static int bloblist_test_cmd_list(struct unit_test_state *uts)
ut_silence_console(uts);
console_record_reset();
run_command("bloblist list", 0);
- ut_assert_nextline("Address Size Tag Name");
- ut_assert_nextline("%08lx %8x 1 EC host event",
+ ut_assert_nextline("Address Size Tag Name");
+ ut_assert_nextline("%08lx %8x 8000 SPL hand-off",
(ulong)map_to_sysmem(data), TEST_SIZE);
- ut_assert_nextline("%08lx %8x 2 SPL hand-off",
+ ut_assert_nextline("%08lx %8x 106 Chrome OS vboot context",
(ulong)map_to_sysmem(data2), TEST_SIZE2);
ut_assert_console_end();
ut_unsilence_console(uts);
diff --git a/test/dm/phy.c b/test/dm/phy.c
index ecbd47bf12f..df4c73fc701 100644
--- a/test/dm/phy.c
+++ b/test/dm/phy.c
@@ -79,12 +79,15 @@ static int dm_test_phy_ops(struct unit_test_state *uts)
ut_assertok(generic_phy_power_off(&phy1));
/*
- * test operations after exit().
- * The sandbox phy driver does not allow it.
+ * Test power_on() failure after exit().
+ * The sandbox phy driver does not allow power-on/off after
+ * exit, but the uclass counts power-on/init calls and skips
+ * calling the driver's ops when e.g. powering off an already
+ * powered-off phy.
*/
ut_assertok(generic_phy_exit(&phy1));
ut_assert(generic_phy_power_on(&phy1) != 0);
- ut_assert(generic_phy_power_off(&phy1) != 0);
+ ut_assertok(generic_phy_power_off(&phy1));
/*
* test normal operations again (after re-init)
@@ -99,6 +102,17 @@ static int dm_test_phy_ops(struct unit_test_state *uts)
*/
ut_assertok(generic_phy_reset(&phy1));
+ /*
+ * Test power_off() failure after exit().
+ * For this we need to call exit() while the phy is powered-on,
+ * so that the uclass actually calls the driver's power-off()
+ * and reports the resulting failure.
+ */
+ ut_assertok(generic_phy_power_on(&phy1));
+ ut_assertok(generic_phy_exit(&phy1));
+ ut_assert(generic_phy_power_off(&phy1) != 0);
+ ut_assertok(generic_phy_power_on(&phy1));
+
/* PHY2 has a known problem with power off */
ut_assertok(generic_phy_init(&phy2));
ut_assertok(generic_phy_power_on(&phy2));
@@ -106,8 +120,8 @@ static int dm_test_phy_ops(struct unit_test_state *uts)
/* PHY3 has a known problem with power off and power on */
ut_assertok(generic_phy_init(&phy3));
- ut_asserteq(-EIO, generic_phy_power_off(&phy3));
- ut_asserteq(-EIO, generic_phy_power_off(&phy3));
+ ut_asserteq(-EIO, generic_phy_power_on(&phy3));
+ ut_assertok(generic_phy_power_off(&phy3));
return 0;
}
@@ -145,3 +159,62 @@ static int dm_test_phy_bulk(struct unit_test_state *uts)
return 0;
}
DM_TEST(dm_test_phy_bulk, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
+
+static int dm_test_phy_multi_exit(struct unit_test_state *uts)
+{
+ struct phy phy1_method1;
+ struct phy phy1_method2;
+ struct phy phy1_method3;
+ struct udevice *parent;
+
+ /* Get the same phy instance in 3 different ways. */
+ ut_assertok(uclass_get_device_by_name(UCLASS_SIMPLE_BUS,
+ "gen_phy_user", &parent));
+ ut_assertok(generic_phy_get_by_name(parent, "phy1", &phy1_method1));
+ ut_asserteq(0, phy1_method1.id);
+ ut_assertok(generic_phy_get_by_name(parent, "phy1", &phy1_method2));
+ ut_asserteq(0, phy1_method2.id);
+ ut_asserteq_ptr(phy1_method1.dev, phy1_method1.dev);
+
+ ut_assertok(uclass_get_device_by_name(UCLASS_SIMPLE_BUS,
+ "gen_phy_user1", &parent));
+ ut_assertok(generic_phy_get_by_name(parent, "phy1", &phy1_method3));
+ ut_asserteq(0, phy1_method3.id);
+ ut_asserteq_ptr(phy1_method1.dev, phy1_method3.dev);
+
+ /*
+ * Test using the same PHY from different handles.
+ * In non-test code these could be in different drivers.
+ */
+
+ /*
+ * These must only call the driver's ops at the first init()
+ * and power_on().
+ */
+ ut_assertok(generic_phy_init(&phy1_method1));
+ ut_assertok(generic_phy_init(&phy1_method2));
+ ut_assertok(generic_phy_power_on(&phy1_method1));
+ ut_assertok(generic_phy_power_on(&phy1_method2));
+ ut_assertok(generic_phy_init(&phy1_method3));
+ ut_assertok(generic_phy_power_on(&phy1_method3));
+
+ /*
+ * These must not call the driver's ops as other handles still
+ * want the PHY powered-on and initialized.
+ */
+ ut_assertok(generic_phy_power_off(&phy1_method3));
+ ut_assertok(generic_phy_exit(&phy1_method3));
+
+ /*
+ * We would get an error here if the generic_phy_exit() above
+ * actually called the driver's exit(), as the sandbox driver
+ * doesn't allow power-off() after exit().
+ */
+ ut_assertok(generic_phy_power_off(&phy1_method1));
+ ut_assertok(generic_phy_power_off(&phy1_method2));
+ ut_assertok(generic_phy_exit(&phy1_method1));
+ ut_assertok(generic_phy_exit(&phy1_method2));
+
+ return 0;
+}
+DM_TEST(dm_test_phy_multi_exit, UT_TESTF_SCAN_PDATA | UT_TESTF_SCAN_FDT);
diff --git a/test/py/tests/test_lsblk.py b/test/py/tests/test_lsblk.py
index 40ffe01263e..a719a48e6ee 100644
--- a/test/py/tests/test_lsblk.py
+++ b/test/py/tests/test_lsblk.py
@@ -4,6 +4,7 @@
import pytest
+@pytest.mark.boardspec('sandbox')
@pytest.mark.buildconfigspec('blk')
@pytest.mark.buildconfigspec('cmd_lsblk')
def test_lsblk(u_boot_console):