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.margin...@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 --git a/arch/Kconfig b/arch/Kconfig index 141e48bc43..70907d69a1 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -133,6 +133,7 @@ config SANDBOX imply PHYLIB imply DM_MDIO imply DM_MDIO_MUX + imply DM_DSA config SH bool "SuperH architecture" diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index fdb08f2111..0f565f066a 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 { @@ -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" diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h index 5d75021ed6..a586a93415 100644 --- a/include/configs/sandbox.h +++ b/include/configs/sandbox.h @@ -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 \ diff --git a/test/dm/Makefile b/test/dm/Makefile index 0c2fd5cb5e..69e9feed91 100644 --- a/test/dm/Makefile +++ b/test/dm/Makefile @@ -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 diff --git a/test/dm/dsa.c b/test/dm/dsa.c new file mode 100644 index 0000000000..c8e76be16f --- /dev/null +++ b/test/dm/dsa.c @@ -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); diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c index 1fb8b5c248..0d7dd053e2 100644 --- a/test/dm/test-fdt.c +++ b/test/dm/test-fdt.c @@ -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); -- 2.17.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot