]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
phy: test: Implement sandbox PHY .set_mode and DM test
authorMarek Vasut <marek.vasut+renesas@mailbox.org>
Sun, 8 Sep 2024 21:09:05 +0000 (23:09 +0200)
committerMarek Vasut <marex@denx.de>
Mon, 9 Sep 2024 15:18:04 +0000 (17:18 +0200)
Implement trivial extension to the sandbox PHY, which makes it pretend
to support selecting USB Host mode and nothing else. Any other mode is
rejected with -EINVAL. Any submode except for default submode 0 is
rejected with -EOPNOTSUPP . The implementation behaves in this trivial
way to permit easy unit testing using test which is also added in this
commit.

To run the test, use e.g. sandbox64_defconfig and run U-Boot as follows:
$ ./u-boot -Tc 'ut dm phy_setup'

Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
drivers/phy/sandbox-phy.c
test/dm/phy.c

index b159147a765bbea8b39dc22a2d50c50fb1597bb2..e70d20432e036d9c5ebd3ad02d72a9307f957c9b 100644 (file)
@@ -72,6 +72,18 @@ static int sandbox_phy_exit(struct phy *phy)
        return 0;
 }
 
+static int
+sandbox_phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
+{
+       if (submode)
+               return -EOPNOTSUPP;
+
+       if (mode != PHY_MODE_USB_HOST)
+               return -EINVAL;
+
+       return 0;
+}
+
 static int sandbox_phy_bind(struct udevice *dev)
 {
        if (dev_get_driver_data(dev) != DRIVER_DATA)
@@ -96,6 +108,7 @@ static struct phy_ops sandbox_phy_ops = {
        .power_off = sandbox_phy_power_off,
        .init = sandbox_phy_init,
        .exit = sandbox_phy_exit,
+       .set_mode = sandbox_phy_set_mode,
 };
 
 static const struct udevice_id sandbox_phy_ids[] = {
index 8808ca3689c94898a96a948d4dc4c827d01cf952..194cad0bf706c529895b26d56284ac03cc8afe24 100644 (file)
@@ -246,6 +246,13 @@ static int dm_test_phy_setup(struct unit_test_state *uts)
        ut_assertok(generic_setup_phy(parent, &phy, 0, PHY_MODE_USB_HOST, 0));
        ut_assertok(generic_shutdown_phy(&phy));
 
+       /* set_mode as USB Host passes, anything else is not supported */
+       ut_assertok(generic_setup_phy(parent, &phy, 0, PHY_MODE_USB_HOST, 0));
+       ut_assertok(generic_phy_set_mode(&phy, PHY_MODE_USB_HOST, 0));
+       ut_asserteq(-EOPNOTSUPP, generic_phy_set_mode(&phy, PHY_MODE_USB_HOST, 1));
+       ut_asserteq(-EINVAL, generic_phy_set_mode(&phy, PHY_MODE_USB_DEVICE, 0));
+       ut_assertok(generic_shutdown_phy(&phy));
+
        /* power_off fail with -EIO */
        ut_assertok(generic_setup_phy(parent, &phy, 1, PHY_MODE_USB_HOST, 0));
        ut_asserteq(-EIO, generic_shutdown_phy(&phy));