summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2026-05-06 08:44:55 -0600
committerTom Rini <[email protected]>2026-05-06 08:44:55 -0600
commit980f8a4589626ca2b9c6c5f74eefe72f4b5606c6 (patch)
tree85f6976ec8145a37453ede406afc5aad72811183 /test
parentffdce9d3fbd7c4d0d4d9f241d32ef2970ee8800b (diff)
parent5245bdc98b9fff46e4bcec2e44e915be44824537 (diff)
Merge tag 'net-20260506' of https://source.denx.de/u-boot/custodians/u-boot-net
Pull request net-20260506. net: - phy: dp83867: default to 2ns delay if unspecified in device-tree - nfs: fix buffer overflow in nfs_readlink_reply() - cpsw: Add cpsw-switch DT binding support - phy: add common PHY polarity properties support - phy: adin: add support for the ADIN1200 phy - macb: support for instances with less features - phy: mscc: add support for the VSC8572 net-lwip: - wget: correct diagnostic output
Diffstat (limited to 'test')
-rw-r--r--test/dm/Makefile1
-rw-r--r--test/dm/phy_common_props.c319
2 files changed, 320 insertions, 0 deletions
diff --git a/test/dm/Makefile b/test/dm/Makefile
index 771b703b737..d69b0e08d66 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -88,6 +88,7 @@ obj-$(CONFIG_P2SB) += p2sb.o
obj-$(CONFIG_PCI_ENDPOINT) += pci_ep.o
obj-$(CONFIG_PCH) += pch.o
obj-$(CONFIG_PHY) += phy.o
+obj-$(CONFIG_PHY_COMMON_PROPS) += phy_common_props.o
ifneq ($(CONFIG_PINMUX),)
obj-$(CONFIG_PINCONF) += pinmux.o
endif
diff --git a/test/dm/phy_common_props.c b/test/dm/phy_common_props.c
new file mode 100644
index 00000000000..21f5042b7a0
--- /dev/null
+++ b/test/dm/phy_common_props.c
@@ -0,0 +1,319 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * U-Boot sandbox DM tests for PHY common props
+ *
+ * Ported from Linux KUnit test:
+ * linux/drivers/phy/phy-common-props-test.c
+ *
+ * Copyright 2025-2026 NXP
+ */
+#include <dm.h>
+#include <dm/ofnode.h>
+#include <dm/test.h>
+#include <linux/bitops.h>
+#include <linux/phy/phy-common-props.h>
+#include <dt-bindings/phy/phy.h>
+#include <test/test.h>
+#include <test/ut.h>
+
+/* --- RX polarity tests -------------------------------------------------- */
+
+/* Test: rx-polarity property is missing => default PHY_POL_NORMAL */
+static int dm_test_phy_common_props_rx_missing(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-missing");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_NORMAL, val);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_rx_missing, UTF_SCAN_FDT);
+
+/* Test: rx-polarity has more values than rx-polarity-names => -EINVAL */
+static int dm_test_phy_common_props_rx_more_values(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-more-values");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
+ ut_asserteq(-EINVAL, ret);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_rx_more_values, UTF_SCAN_FDT);
+
+/* Test: rx-polarity has 1 value and rx-polarity-names does not exist */
+static int dm_test_phy_common_props_rx_single_value(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-single");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_INVERT, val);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_rx_single_value, UTF_SCAN_FDT);
+
+/* Test: rx-polarity-names has more values than rx-polarity => -EINVAL */
+static int dm_test_phy_common_props_rx_more_names(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-more-names");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
+ ut_asserteq(-EINVAL, ret);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_rx_more_names, UTF_SCAN_FDT);
+
+/* Test: valid arrays, find polarity by mode name */
+static int dm_test_phy_common_props_rx_find_by_name(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-find-by-name");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_NORMAL, val);
+
+ ret = phy_get_manual_rx_polarity(node, "2500base-x", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_INVERT, val);
+
+ /* "usb-ss" has PHY_POL_AUTO; auto is supported here */
+ ret = phy_get_rx_polarity(node, "usb-ss", BIT(PHY_POL_AUTO),
+ PHY_POL_AUTO, &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_AUTO, val);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_rx_find_by_name, UTF_SCAN_FDT);
+
+/* Test: name not found, no "default" entry => -EINVAL */
+static int dm_test_phy_common_props_rx_no_default(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-no-default");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
+ ut_asserteq(-EINVAL, ret);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_rx_no_default, UTF_SCAN_FDT);
+
+/* Test: name not found, "default" entry exists => use default polarity */
+static int dm_test_phy_common_props_rx_with_default(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-with-default");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_INVERT, val);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_rx_with_default, UTF_SCAN_FDT);
+
+/* Test: polarity value found but not in supported set => -EOPNOTSUPP */
+static int dm_test_phy_common_props_rx_unsupported(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-unsupported");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_rx_polarity(node, "sgmii", &val);
+ ut_asserteq(-EOPNOTSUPP, ret);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_rx_unsupported, UTF_SCAN_FDT);
+
+/* --- TX polarity tests -------------------------------------------------- */
+
+/* Test: tx-polarity property is missing => default PHY_POL_NORMAL */
+static int dm_test_phy_common_props_tx_missing(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-missing");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_tx_polarity(node, "sgmii", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_NORMAL, val);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_tx_missing, UTF_SCAN_FDT);
+
+/* Test: tx-polarity has more values than tx-polarity-names => -EINVAL */
+static int dm_test_phy_common_props_tx_more_values(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-more-values");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_tx_polarity(node, "sgmii", &val);
+ ut_asserteq(-EINVAL, ret);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_tx_more_values, UTF_SCAN_FDT);
+
+/* Test: tx-polarity has 1 value and tx-polarity-names does not exist */
+static int dm_test_phy_common_props_tx_single_value(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-single");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_tx_polarity(node, "sgmii", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_INVERT, val);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_tx_single_value, UTF_SCAN_FDT);
+
+/* Test: tx-polarity-names has more values than tx-polarity => -EINVAL */
+static int dm_test_phy_common_props_tx_more_names(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-more-names");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_tx_polarity(node, "sgmii", &val);
+ ut_asserteq(-EINVAL, ret);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_tx_more_names, UTF_SCAN_FDT);
+
+/* Test: valid arrays, find polarity by mode name */
+static int dm_test_phy_common_props_tx_find_by_name(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-find-by-name");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_tx_polarity(node, "sgmii", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_NORMAL, val);
+
+ ret = phy_get_manual_tx_polarity(node, "2500base-x", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_INVERT, val);
+
+ ret = phy_get_manual_tx_polarity(node, "1000base-x", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_NORMAL, val);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_tx_find_by_name, UTF_SCAN_FDT);
+
+/* Test: name not found, no "default" entry => -EINVAL */
+static int dm_test_phy_common_props_tx_no_default(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-no-default");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_tx_polarity(node, "sgmii", &val);
+ ut_asserteq(-EINVAL, ret);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_tx_no_default, UTF_SCAN_FDT);
+
+/* Test: name not found, "default" entry exists => use default polarity */
+static int dm_test_phy_common_props_tx_with_default(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-with-default");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_tx_polarity(node, "sgmii", &val);
+ ut_asserteq(0, ret);
+ ut_asserteq(PHY_POL_INVERT, val);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_tx_with_default, UTF_SCAN_FDT);
+
+/* Test: polarity value found but not in supported set => -EOPNOTSUPP */
+static int dm_test_phy_common_props_tx_unsupported(struct unit_test_state *uts)
+{
+ ofnode node = ofnode_path("/phy-common-props-unsupported");
+ unsigned int val;
+ int ret;
+
+ ut_assert(ofnode_valid(node));
+
+ ret = phy_get_manual_tx_polarity(node, "sgmii", &val);
+ ut_asserteq(-EOPNOTSUPP, ret);
+
+ return 0;
+}
+
+DM_TEST(dm_test_phy_common_props_tx_unsupported, UTF_SCAN_FDT);