diff mbox series

[v4,3/6] test: dm: add a simple unit test for DSA class

Message ID 1588700588-8587-4-git-send-email-claudiu.manoil@nxp.com
State New
Headers show
Series Introduce DSA Ethernet switch class and Felix driver | expand

Commit Message

Claudiu Manoil May 5, 2020, 5:43 p.m. UTC
From: Alex Marginean <alexandru.marginean at nxp.com>

The test pings the local IP address though different ports of a sandbox
DSA device.  Port traffic is filtered and the test verifies that ping
works only on enabled ports.
The additional interfaces require MAC addresses, these have been added
to sandbox default environment.

Signed-off-by: Alex Marginean <alexandru.marginean at nxp.com>
Signed-off-by: Claudiu Manoil <claudiu.manoil at nxp.com>
---
 arch/Kconfig              |  1 +
 arch/sandbox/dts/test.dts | 49 +++++++++++++++++++++++++++++++++
 include/configs/sandbox.h |  4 +++
 test/dm/Makefile          |  1 +
 test/dm/dsa.c             | 58 +++++++++++++++++++++++++++++++++++++++
 test/dm/test-fdt.c        |  2 +-
 6 files changed, 114 insertions(+), 1 deletion(-)
 create mode 100644 test/dm/dsa.c
diff mbox series

Patch

diff --git a/arch/Kconfig b/arch/Kconfig
index ae9c93ed7b..d13a53a548 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -136,6 +136,7 @@  config SANDBOX
 	imply ACPI_PMC
 	imply ACPI_PMC_SANDBOX
 	imply CMD_PMC
+	imply DM_DSA
 
 config SH
 	bool "SuperH architecture"
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 4a277934a7..7c54200e71 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -40,6 +40,10 @@ 
 		usb2 = &usb_2;
 		axi0 = &axi;
 		osd0 = "/osd";
+		eth8 = &swp_0;
+		eth9 = &swp_1;
+		eth10 = &swp_2;
+		eth11 = &dsa_eth0;
 	};
 
 	audio: audio-codec {
@@ -934,6 +938,51 @@ 
 	mdio: mdio-test {
 		compatible = "sandbox,mdio";
 	};
+
+	dsa_eth0: dsa-test-eth {
+		compatible = "sandbox,dsa-eth";
+	};
+
+	dsa-test {
+		compatible = "sandbox,dsa";
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			swp_0: port at 0 {
+				reg = <0>;
+				label = "lan0";
+			};
+
+			swp_1: port at 1 {
+				reg = <1>;
+				label = "lan1";
+				phy-mode = "rgmii-txid";
+				fixed-link {
+					speed = <1000>;
+					full-duplex;
+				};
+			};
+
+			swp_2: port at 2 {
+				reg = <2>;
+				label = "lan2";
+				fixed-link {
+					speed = <100>;
+					full-duplex;
+				};
+			};
+
+			port at 3 {
+				reg = <3>;
+				ethernet = <&dsa_eth0>;
+				fixed-link {
+					speed = <100>;
+					full-duplex;
+				};
+			};
+		};
+	};
 };
 
 #include "sandbox_pmic.dtsi"
diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h
index 1c13055cdc..35a5676eb9 100644
--- a/include/configs/sandbox.h
+++ b/include/configs/sandbox.h
@@ -100,6 +100,10 @@ 
 					"eth1addr=00:00:11:22:33:45\0" \
 					"eth3addr=00:00:11:22:33:46\0" \
 					"eth5addr=00:00:11:22:33:47\0" \
+					"eth8addr=00:00:11:22:33:48\0" \
+					"eth9addr=00:00:11:22:33:49\0" \
+					"eth10addr=00:00:11:22:33:4a\0" \
+					"eth11addr=00:00:11:22:33:4b\0" \
 					"ipaddr=1.2.3.4\0"
 
 #define MEM_LAYOUT_ENV_SETTINGS \
diff --git a/test/dm/Makefile b/test/dm/Makefile
index dd1ceff86c..1807795bec 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -70,4 +70,5 @@  obj-$(CONFIG_DMA) += dma.o
 obj-$(CONFIG_DM_MDIO) += mdio.o
 obj-$(CONFIG_DM_MDIO_MUX) += mdio_mux.o
 obj-$(CONFIG_DM_RNG) += rng.o
+obj-$(CONFIG_DM_DSA) += dsa.o
 endif
diff --git a/test/dm/dsa.c b/test/dm/dsa.c
new file mode 100644
index 0000000000..8a55554a0c
--- /dev/null
+++ b/test/dm/dsa.c
@@ -0,0 +1,58 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019-2020 NXP
+ */
+
+#include <net/dsa.h>
+#include <dm/test.h>
+#include <test/ut.h>
+
+extern int dsa_sandbox_port_mask;
+
+/* this test sends ping requests with the local address through each DSA port
+ * via the dummy DSA master Eth.
+ * The dummy Eth filters traffic based on DSA port used to Tx and the port
+ * mask set here, so we can check that port information gets trough correctly.
+ */
+static int dm_test_dsa(struct unit_test_state *uts)
+{
+	dsa_sandbox_port_mask = 0x5;
+
+	env_set("ethrotate", "no");
+	net_ping_ip = string_to_ip("1.2.3.4");
+
+	env_set("ethact", "dsa-test-eth");
+	ut_assertok(net_loop(PING));
+
+	dsa_sandbox_port_mask = 0x7;
+	env_set("ethact", "lan0");
+	ut_assertok(net_loop(PING));
+	env_set("ethact", "lan1");
+	ut_assertok(net_loop(PING));
+	env_set("ethact", "lan2");
+	ut_assertok(net_loop(PING));
+
+	dsa_sandbox_port_mask = 0x1;
+	env_set("ethact", "lan0");
+	ut_assertok(net_loop(PING));
+	env_set("ethact", "lan1");
+	ut_assert(net_loop(PING) != 0);
+	env_set("ethact", "lan2");
+	ut_assert(net_loop(PING) != 0);
+
+	dsa_sandbox_port_mask = 0x6;
+	env_set("ethact", "lan0");
+	ut_assert(net_loop(PING) != 0);
+	env_set("ethact", "lan1");
+	ut_assertok(net_loop(PING));
+	env_set("ethact", "lan2");
+	ut_assertok(net_loop(PING));
+
+	dsa_sandbox_port_mask = 0;
+	env_set("ethact", "");
+	env_set("ethrotate", "yes");
+
+	return 0;
+}
+
+DM_TEST(dm_test_dsa, DM_TESTF_SCAN_FDT);
diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c
index 75ae08081c..992c040b2c 100644
--- a/test/dm/test-fdt.c
+++ b/test/dm/test-fdt.c
@@ -283,7 +283,7 @@  static int dm_test_alias_highest_id(struct unit_test_state *uts)
 	int ret;
 
 	ret = dev_read_alias_highest_id("eth");
-	ut_asserteq(5, ret);
+	ut_asserteq(11, ret);
 
 	ret = dev_read_alias_highest_id("gpio");
 	ut_asserteq(2, ret);