@@ -133,6 +133,7 @@ config SANDBOX
imply PHYLIB
imply DM_MDIO
imply DM_MDIO_MUX
+ imply DM_DSA
config SH
bool "SuperH architecture"
@@ -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 {
@@ -889,6 +893,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@0 {
+ reg = <0>;
+ label = "lan0";
+ };
+
+ swp_1: port@1 {
+ reg = <1>;
+ label = "lan1";
+ phy-mode = "rgmii-txid";
+ fixed-link {
+ speed = <1000>;
+ full-duplex;
+ };
+ };
+
+ swp_2: port@2 {
+ reg = <2>;
+ label = "lan2";
+ fixed-link {
+ speed = <100>;
+ full-duplex;
+ };
+ };
+
+ port@3 {
+ reg = <3>;
+ ethernet = <&dsa_eth0>;
+ fixed-link {
+ speed = <100>;
+ full-duplex;
+ };
+ };
+ };
+ };
};
#include "sandbox_pmic.dtsi"
@@ -102,6 +102,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 \
@@ -65,4 +65,5 @@ obj-$(CONFIG_VIRTIO_SANDBOX) += virtio.o
obj-$(CONFIG_DMA) += dma.o
obj-$(CONFIG_DM_MDIO) += mdio.o
obj-$(CONFIG_DM_MDIO_MUX) += mdio_mux.o
+obj-$(CONFIG_DM_DSA) += dsa.o
endif
new file mode 100644
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2019 NXP
+ */
+
+#include <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);
@@ -224,7 +224,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);
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@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