Message ID | 20240903221549.1215842-2-mohan.prasad@microchip.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | lan743x: This series of patches are for lan743x driver testing | expand |
On 9/3/2024 3:15 PM, Mohan Prasad J wrote: > Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding. > > > Add testfile for lan743x network driver. > Testfile includes the verification of status of autonegotiation. > Ksft modules and ethtool are used for the testing. > net/lib libraries are included for testing. > Add the __init__.py file. > Include /microchip/lan743x as a target in Makefile. > Updated MAINTAINERS list. > > Signed-off-by: Mohan Prasad J <mohan.prasad@microchip.com> > --- > MAINTAINERS | 2 + > tools/testing/selftests/Makefile | 2 +- > .../drivers/net/hw/microchip/lan743x/Makefile | 7 +++ > .../net/hw/microchip/lan743x/lan743x.py | 51 +++++++++++++++++++ > .../hw/microchip/lan743x/lib/py/__init__.py | 16 ++++++ > 5 files changed, 77 insertions(+), 1 deletion(-) > create mode 100644 tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile > create mode 100755 tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py > create mode 100644 tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__init__.py > > diff --git a/MAINTAINERS b/MAINTAINERS > index baf88e74c..461f94ae0 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -14960,10 +14960,12 @@ F: net/dsa/tag_ksz.c > > MICROCHIP LAN743X ETHERNET DRIVER > M: Bryan Whitehead <bryan.whitehead@microchip.com> > +M: Mohan Prasad J <mohan.prasad@microchip.com> It seems like updating the maintainers list should be a separate patch. Thanks, Brett > M: UNGLinuxDriver@microchip.com > L: netdev@vger.kernel.org > S: Maintained > F: drivers/net/ethernet/microchip/lan743x_* > +F: tools/testing/selftests/drivers/net/hw/microchip/lan743x/ > > MICROCHIP LAN87xx/LAN937x T1 PHY DRIVER > M: Arun Ramadoss <arun.ramadoss@microchip.com> > diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile > index a5f1c0c27..8059529c9 100644 > --- a/tools/testing/selftests/Makefile > +++ b/tools/testing/selftests/Makefile > @@ -122,7 +122,7 @@ TARGETS_HOTPLUG = cpu-hotplug > TARGETS_HOTPLUG += memory-hotplug > > # Networking tests want the net/lib target, include it automatically > -ifneq ($(filter net drivers/net drivers/net/hw,$(TARGETS)),) > +ifneq ($(filter net drivers/net drivers/net/hw drivers/net/hw/microchip/lan743x,$(TARGETS)),) > ifeq ($(filter net/lib,$(TARGETS)),) > INSTALL_DEP_TARGETS := net/lib > endif > diff --git a/tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile > new file mode 100644 > index 000000000..542128678 > --- /dev/null > +++ b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile > @@ -0,0 +1,7 @@ > +# SPDX-License-Identifier: GPL-2.0 > + > +TEST_INCLUDES := $(wildcard lib/py/*.py ../../../lib/py/*.py) > + > +TEST_PROGS := lan743x.py > + > +include ../../../../../lib.mk > diff --git a/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py > new file mode 100755 > index 000000000..f1ad97dc2 > --- /dev/null > +++ b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py > @@ -0,0 +1,51 @@ > +#!/usr/bin/env python3 > +# SPDX-License-Identifier: GPL-2.0 > + > +import time > +import re > +from lib.py import ksft_run, ksft_exit, ksft_pr, ksft_eq > +from lib.py import KsftFailEx, KsftSkipEx > +from lib.py import NetDrvEpEnv > +from lib.py import cmd > +from lib.py import ethtool > + > +def verify_link_up(ifname: str) -> None: > + """Verify whether the link is up initially""" > + with open(f"/sys/class/net/{ifname}/operstate", "r") as fp: > + link_state = fp.read().strip() > + > + if link_state == "down": > + raise KsftSkipEx(f"Link state of interface {ifname} is DOWN") > + > +def set_autonegotiation_state(ifname: str, state: str) -> None: > + """Set the autonegotiation state for the interface""" > + process = ethtool(f"-s {ifname} speed 10 duplex half autoneg {state}") > + if process.ret != 0: > + raise KsftFailEx(f"Not able to set autoneg parameter for {ifname}") > + ksft_pr(f"Autoneg set as {state} for {ifname}") > + > +def verify_autonegotiation(ifname: str, expected_state: str) -> None: > + verify_link_up(ifname) > + """Verifying the autonegotiation state""" > + output = ethtool(f"{ifname}") > + autoneg_match = re.search(r'Auto-negotiation:\s+(\w+)', output.stdout) > + > + if not autoneg_match: > + raise KsftFailEx("Failed to find autonegotiation information in ethtool output.") > + > + actual_state = autoneg_match.group(1) > + ksft_eq(actual_state, expected_state) > + > +def test_autonegotiation(cfg) -> None: > + for state in ["off", "on"]: > + set_autonegotiation_state(cfg.ifname, state) > + time.sleep(5) > + verify_autonegotiation(cfg.ifname, state) > + > +def main() -> None: > + with NetDrvEpEnv(__file__) as cfg: > + ksft_run(globs=globals(), case_pfx={"test_"}, args=(cfg,)) > + ksft_exit() > + > +if __name__ == "__main__": > + main() > diff --git a/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__init__.py b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__init__.py > new file mode 100644 > index 000000000..e571631af > --- /dev/null > +++ b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__init__.py > @@ -0,0 +1,16 @@ > +# SPDX-License-Identifier: GPL-2.0 > + > +import sys > +from pathlib import Path > + > +KSFT_DIR = (Path(__file__).parent / "../../../../../../..").resolve() > + > +try: > + sys.path.append(KSFT_DIR.as_posix()) > + from net.lib.py import * > + from drivers.net.lib.py import * > +except ModuleNotFoundError as e: > + ksft_pr("Failed importing `net` library from kernel sources") > + ksft_pr(str(e)) > + ktap_result(True, comment="SKIP") > + sys.exit(4) > -- > 2.43.0 >
Hi Brett, Thank you for the review comments. > EXTERNAL EMAIL: Do not click links or open attachments unless you know the > content is safe > > On 9/3/2024 3:15 PM, Mohan Prasad J wrote: > > Caution: This message originated from an External Source. Use proper > caution when opening attachments, clicking links, or responding. > > > > > > Add testfile for lan743x network driver. > > Testfile includes the verification of status of autonegotiation. > > Ksft modules and ethtool are used for the testing. > > net/lib libraries are included for testing. > > Add the __init__.py file. > > Include /microchip/lan743x as a target in Makefile. > > Updated MAINTAINERS list. > > > > Signed-off-by: Mohan Prasad J <mohan.prasad@microchip.com> > > --- > > MAINTAINERS | 2 + > > tools/testing/selftests/Makefile | 2 +- > > .../drivers/net/hw/microchip/lan743x/Makefile | 7 +++ > > .../net/hw/microchip/lan743x/lan743x.py | 51 +++++++++++++++++++ > > .../hw/microchip/lan743x/lib/py/__init__.py | 16 ++++++ > > 5 files changed, 77 insertions(+), 1 deletion(-) > > create mode 100644 > tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile > > create mode 100755 > tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py > > create mode 100644 > > tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__init > > __.py > > > > diff --git a/MAINTAINERS b/MAINTAINERS index baf88e74c..461f94ae0 > > 100644 > > --- a/MAINTAINERS > > +++ b/MAINTAINERS > > @@ -14960,10 +14960,12 @@ F: net/dsa/tag_ksz.c > > > > MICROCHIP LAN743X ETHERNET DRIVER > > M: Bryan Whitehead <bryan.whitehead@microchip.com> > > +M: Mohan Prasad J <mohan.prasad@microchip.com> > > It seems like updating the maintainers list should be a separate patch. I will update it in the next version. > > Thanks, > > Brett > > > M: UNGLinuxDriver@microchip.com > > L: netdev@vger.kernel.org > > S: Maintained > > F: drivers/net/ethernet/microchip/lan743x_* > > +F: tools/testing/selftests/drivers/net/hw/microchip/lan743x/ > > > > MICROCHIP LAN87xx/LAN937x T1 PHY DRIVER > > M: Arun Ramadoss <arun.ramadoss@microchip.com> > > diff --git a/tools/testing/selftests/Makefile > > b/tools/testing/selftests/Makefile > > index a5f1c0c27..8059529c9 100644 > > --- a/tools/testing/selftests/Makefile > > +++ b/tools/testing/selftests/Makefile > > @@ -122,7 +122,7 @@ TARGETS_HOTPLUG = cpu-hotplug > > TARGETS_HOTPLUG += memory-hotplug > > > > # Networking tests want the net/lib target, include it automatically > > -ifneq ($(filter net drivers/net drivers/net/hw,$(TARGETS)),) > > +ifneq ($(filter net drivers/net drivers/net/hw > > +drivers/net/hw/microchip/lan743x,$(TARGETS)),) > > ifeq ($(filter net/lib,$(TARGETS)),) > > INSTALL_DEP_TARGETS := net/lib > > endif > > diff --git > > a/tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile > > b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile > > new file mode 100644 > > index 000000000..542128678 > > --- /dev/null > > +++ b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefil > > +++ e > > @@ -0,0 +1,7 @@ > > +# SPDX-License-Identifier: GPL-2.0 > > + > > +TEST_INCLUDES := $(wildcard lib/py/*.py ../../../lib/py/*.py) > > + > > +TEST_PROGS := lan743x.py > > + > > +include ../../../../../lib.mk > > diff --git > > a/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py > > b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py > > new file mode 100755 > > index 000000000..f1ad97dc2 > > --- /dev/null > > +++ b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x > > +++ .py > > @@ -0,0 +1,51 @@ > > +#!/usr/bin/env python3 > > +# SPDX-License-Identifier: GPL-2.0 > > + > > +import time > > +import re > > +from lib.py import ksft_run, ksft_exit, ksft_pr, ksft_eq from lib.py > > +import KsftFailEx, KsftSkipEx from lib.py import NetDrvEpEnv from > > +lib.py import cmd from lib.py import ethtool > > + > > +def verify_link_up(ifname: str) -> None: > > + """Verify whether the link is up initially""" > > + with open(f"/sys/class/net/{ifname}/operstate", "r") as fp: > > + link_state = fp.read().strip() > > + > > + if link_state == "down": > > + raise KsftSkipEx(f"Link state of interface {ifname} is DOWN") > > + > > +def set_autonegotiation_state(ifname: str, state: str) -> None: > > + """Set the autonegotiation state for the interface""" > > + process = ethtool(f"-s {ifname} speed 10 duplex half autoneg {state}") > > + if process.ret != 0: > > + raise KsftFailEx(f"Not able to set autoneg parameter for {ifname}") > > + ksft_pr(f"Autoneg set as {state} for {ifname}") > > + > > +def verify_autonegotiation(ifname: str, expected_state: str) -> None: > > + verify_link_up(ifname) > > + """Verifying the autonegotiation state""" > > + output = ethtool(f"{ifname}") > > + autoneg_match = re.search(r'Auto-negotiation:\s+(\w+)', > > +output.stdout) > > + > > + if not autoneg_match: > > + raise KsftFailEx("Failed to find autonegotiation information > > + in ethtool output.") > > + > > + actual_state = autoneg_match.group(1) > > + ksft_eq(actual_state, expected_state) > > + > > +def test_autonegotiation(cfg) -> None: > > + for state in ["off", "on"]: > > + set_autonegotiation_state(cfg.ifname, state) > > + time.sleep(5) > > + verify_autonegotiation(cfg.ifname, state) > > + > > +def main() -> None: > > + with NetDrvEpEnv(__file__) as cfg: > > + ksft_run(globs=globals(), case_pfx={"test_"}, args=(cfg,)) > > + ksft_exit() > > + > > +if __name__ == "__main__": > > + main() > > diff --git > > a/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__in > > it__.py > > b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__in > > it__.py > > new file mode 100644 > > index 000000000..e571631af > > --- /dev/null > > +++ b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/ > > +++ __init__.py > > @@ -0,0 +1,16 @@ > > +# SPDX-License-Identifier: GPL-2.0 > > + > > +import sys > > +from pathlib import Path > > + > > +KSFT_DIR = (Path(__file__).parent / "../../../../../../..").resolve() > > + > > +try: > > + sys.path.append(KSFT_DIR.as_posix()) > > + from net.lib.py import * > > + from drivers.net.lib.py import * > > +except ModuleNotFoundError as e: > > + ksft_pr("Failed importing `net` library from kernel sources") > > + ksft_pr(str(e)) > > + ktap_result(True, comment="SKIP") > > + sys.exit(4) > > -- > > 2.43.0 > >
diff --git a/MAINTAINERS b/MAINTAINERS index baf88e74c..461f94ae0 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14960,10 +14960,12 @@ F: net/dsa/tag_ksz.c MICROCHIP LAN743X ETHERNET DRIVER M: Bryan Whitehead <bryan.whitehead@microchip.com> +M: Mohan Prasad J <mohan.prasad@microchip.com> M: UNGLinuxDriver@microchip.com L: netdev@vger.kernel.org S: Maintained F: drivers/net/ethernet/microchip/lan743x_* +F: tools/testing/selftests/drivers/net/hw/microchip/lan743x/ MICROCHIP LAN87xx/LAN937x T1 PHY DRIVER M: Arun Ramadoss <arun.ramadoss@microchip.com> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile index a5f1c0c27..8059529c9 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile @@ -122,7 +122,7 @@ TARGETS_HOTPLUG = cpu-hotplug TARGETS_HOTPLUG += memory-hotplug # Networking tests want the net/lib target, include it automatically -ifneq ($(filter net drivers/net drivers/net/hw,$(TARGETS)),) +ifneq ($(filter net drivers/net drivers/net/hw drivers/net/hw/microchip/lan743x,$(TARGETS)),) ifeq ($(filter net/lib,$(TARGETS)),) INSTALL_DEP_TARGETS := net/lib endif diff --git a/tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile new file mode 100644 index 000000000..542128678 --- /dev/null +++ b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: GPL-2.0 + +TEST_INCLUDES := $(wildcard lib/py/*.py ../../../lib/py/*.py) + +TEST_PROGS := lan743x.py + +include ../../../../../lib.mk diff --git a/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py new file mode 100755 index 000000000..f1ad97dc2 --- /dev/null +++ b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: GPL-2.0 + +import time +import re +from lib.py import ksft_run, ksft_exit, ksft_pr, ksft_eq +from lib.py import KsftFailEx, KsftSkipEx +from lib.py import NetDrvEpEnv +from lib.py import cmd +from lib.py import ethtool + +def verify_link_up(ifname: str) -> None: + """Verify whether the link is up initially""" + with open(f"/sys/class/net/{ifname}/operstate", "r") as fp: + link_state = fp.read().strip() + + if link_state == "down": + raise KsftSkipEx(f"Link state of interface {ifname} is DOWN") + +def set_autonegotiation_state(ifname: str, state: str) -> None: + """Set the autonegotiation state for the interface""" + process = ethtool(f"-s {ifname} speed 10 duplex half autoneg {state}") + if process.ret != 0: + raise KsftFailEx(f"Not able to set autoneg parameter for {ifname}") + ksft_pr(f"Autoneg set as {state} for {ifname}") + +def verify_autonegotiation(ifname: str, expected_state: str) -> None: + verify_link_up(ifname) + """Verifying the autonegotiation state""" + output = ethtool(f"{ifname}") + autoneg_match = re.search(r'Auto-negotiation:\s+(\w+)', output.stdout) + + if not autoneg_match: + raise KsftFailEx("Failed to find autonegotiation information in ethtool output.") + + actual_state = autoneg_match.group(1) + ksft_eq(actual_state, expected_state) + +def test_autonegotiation(cfg) -> None: + for state in ["off", "on"]: + set_autonegotiation_state(cfg.ifname, state) + time.sleep(5) + verify_autonegotiation(cfg.ifname, state) + +def main() -> None: + with NetDrvEpEnv(__file__) as cfg: + ksft_run(globs=globals(), case_pfx={"test_"}, args=(cfg,)) + ksft_exit() + +if __name__ == "__main__": + main() diff --git a/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__init__.py b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__init__.py new file mode 100644 index 000000000..e571631af --- /dev/null +++ b/tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__init__.py @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: GPL-2.0 + +import sys +from pathlib import Path + +KSFT_DIR = (Path(__file__).parent / "../../../../../../..").resolve() + +try: + sys.path.append(KSFT_DIR.as_posix()) + from net.lib.py import * + from drivers.net.lib.py import * +except ModuleNotFoundError as e: + ksft_pr("Failed importing `net` library from kernel sources") + ksft_pr(str(e)) + ktap_result(True, comment="SKIP") + sys.exit(4)
Add testfile for lan743x network driver. Testfile includes the verification of status of autonegotiation. Ksft modules and ethtool are used for the testing. net/lib libraries are included for testing. Add the __init__.py file. Include /microchip/lan743x as a target in Makefile. Updated MAINTAINERS list. Signed-off-by: Mohan Prasad J <mohan.prasad@microchip.com> --- MAINTAINERS | 2 + tools/testing/selftests/Makefile | 2 +- .../drivers/net/hw/microchip/lan743x/Makefile | 7 +++ .../net/hw/microchip/lan743x/lan743x.py | 51 +++++++++++++++++++ .../hw/microchip/lan743x/lib/py/__init__.py | 16 ++++++ 5 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/drivers/net/hw/microchip/lan743x/Makefile create mode 100755 tools/testing/selftests/drivers/net/hw/microchip/lan743x/lan743x.py create mode 100644 tools/testing/selftests/drivers/net/hw/microchip/lan743x/lib/py/__init__.py