]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
sandbox: Allow ethernet bootdevs to be disabled for tests
authorSimon Glass <sjg@chromium.org>
Tue, 17 Jan 2023 17:47:28 +0000 (10:47 -0700)
committerTom Rini <trini@konsulko.com>
Mon, 23 Jan 2023 23:11:39 +0000 (18:11 -0500)
Most tests don't want these and can create a lot of noise. Add a way to
disable them. Use that in tests, with a flag provided to enable them for
tests that need this feature.

Signed-off-by: Simon Glass <sjg@chromium.org>
include/net.h
include/test/test.h
net/eth-uclass.c
test/test-main.c

index ee08f3307ec7e90c92833ec3f856118c9cc43752..759d4669df103ec81d62009a595fd209bb88c743 100644 (file)
@@ -886,4 +886,20 @@ static inline struct in_addr env_get_ip(char *var)
  */
 void reset_phy(void);
 
+#if CONFIG_IS_ENABLED(NET)
+/**
+ * eth_set_enable_bootdevs() - Enable or disable binding of Ethernet bootdevs
+ *
+ * These get in the way of bootstd testing, so are normally disabled by tests.
+ * This provide control of this setting. It only affects binding of Ethernet
+ * devices, so if that has already happened, this flag does nothing.
+ *
+ * @enable: true to enable binding of bootdevs when binding new Ethernet
+ * devices, false to disable it
+ */
+void eth_set_enable_bootdevs(bool enable);
+#else
+static inline void eth_set_enable_bootdevs(bool enable) {}
+#endif
+
 #endif /* __NET_H__ */
index 76ec4d739a3ea734f17fe3633e0b51aedec457c4..beabe9333dc0ba667b59b66f3de92587c5bef15f 100644 (file)
@@ -71,6 +71,7 @@ enum {
         * since it cannot access the flags.
         */
        UT_TESTF_MANUAL         = BIT(8),
+       UT_TESTF_ETH_BOOTDEV    = BIT(9),       /* enable Ethernet bootdevs */
 };
 
 /**
@@ -194,4 +195,15 @@ static inline bool test_eth_enabled(void)
        return enabled;
 }
 
+/* Allow ethernet bootdev to be ignored for testing purposes */
+static inline bool test_eth_bootdev_enabled(void)
+{
+       bool enabled = true;
+
+#ifdef CONFIG_SANDBOX
+       enabled = sandbox_eth_enabled();
+#endif
+       return enabled;
+}
+
 #endif /* __TEST_TEST_H */
index f41da4b37b3aa59e02aac8d02191c06e64b7600c..b01a910938e1d2712144a0610995dc73c43c1c3e 100644 (file)
@@ -38,9 +38,12 @@ struct eth_device_priv {
  * struct eth_uclass_priv - The structure attached to the uclass itself
  *
  * @current: The Ethernet device that the network functions are using
+ * @no_bootdevs: true to skip binding Ethernet bootdevs (this is a negative flag
+ * so that the default value enables it)
  */
 struct eth_uclass_priv {
        struct udevice *current;
+       bool no_bootdevs;
 };
 
 /* eth_errno - This stores the most recent failure code from DM functions */
@@ -59,6 +62,14 @@ static struct eth_uclass_priv *eth_get_uclass_priv(void)
        return uclass_get_priv(uc);
 }
 
+void eth_set_enable_bootdevs(bool enable)
+{
+       struct eth_uclass_priv *priv = eth_get_uclass_priv();
+
+       if (priv)
+               priv->no_bootdevs = !enable;
+}
+
 void eth_set_current_to_next(void)
 {
        struct eth_uclass_priv *uc_priv;
@@ -477,6 +488,7 @@ int eth_initialize(void)
 
 static int eth_post_bind(struct udevice *dev)
 {
+       struct eth_uclass_priv *priv = uclass_get_priv(dev->uclass);
        int ret;
 
        if (strchr(dev->name, ' ')) {
@@ -488,7 +500,7 @@ static int eth_post_bind(struct udevice *dev)
 #ifdef CONFIG_DM_ETH_PHY
        eth_phy_binds_nodes(dev);
 #endif
-       if (CONFIG_IS_ENABLED(BOOTDEV_ETH)) {
+       if (CONFIG_IS_ENABLED(BOOTDEV_ETH) && !priv->no_bootdevs) {
                ret = bootdev_setup_for_dev(dev, "eth_bootdev");
                if (ret)
                        return log_msg_ret("bootdev", ret);
index 72aa3a0aa8f3fa4e0025bda40050e5c7a7fc1bf0..9d0f6643d5ea6debb328f5a279493a029affe651 100644 (file)
@@ -10,6 +10,7 @@
 #include <cyclic.h>
 #include <dm.h>
 #include <event.h>
+#include <net.h>
 #include <of_live.h>
 #include <os.h>
 #include <dm/ofnode.h>
@@ -303,8 +304,13 @@ static int test_pre_run(struct unit_test_state *uts, struct unit_test *test)
                ut_assertok(do_autoprobe(uts));
 
        if (!CONFIG_IS_ENABLED(OF_PLATDATA) &&
-           (test->flags & UT_TESTF_SCAN_FDT))
+           (test->flags & UT_TESTF_SCAN_FDT)) {
+               /*
+                * only set this if we know the ethernet uclass will be created
+                */
+               eth_set_enable_bootdevs(test->flags & UT_TESTF_ETH_BOOTDEV);
                ut_assertok(dm_extended_scan(false));
+       }
 
        /*
         * Do this after FDT scan since dm_scan_other() in bootstd-uclass.c