From patchwork Tue May 5 17:43:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Claudiu Manoil X-Patchwork-Id: 245153 List-Id: U-Boot discussion From: claudiu.manoil at nxp.com (Claudiu Manoil) Date: Tue, 5 May 2020 20:43:05 +0300 Subject: [PATCH v4 3/6] test: dm: add a simple unit test for DSA class In-Reply-To: <1588700588-8587-1-git-send-email-claudiu.manoil@nxp.com> References: <1588700588-8587-1-git-send-email-claudiu.manoil@nxp.com> Message-ID: <1588700588-8587-4-git-send-email-claudiu.manoil@nxp.com> From: Alex Marginean 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 Signed-off-by: Claudiu Manoil --- 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 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 +#include +#include + +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);