@@ -136,6 +136,7 @@ config SANDBOX
imply ACPI_PMC
imply ACPI_PMC_SANDBOX
imply CMD_PMC
+ 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 {
@@ -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"
@@ -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 \
@@ -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
new file mode 100644
@@ -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);
@@ -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);