On Mon, Nov 16, 2020 at 02:46:22PM -0800, Hemant Kumar wrote: > Loopback test opens the MHI device file node and writes > a data buffer to it. MHI UCI kernel space driver copies > the data and sends it to MHI uplink (Tx) LOOPBACK channel. > MHI device loops back the same data to MHI downlink (Rx) > LOOPBACK channel. This data is read by test application > and compared against the data sent. Test passes if data > buffer matches between Tx and Rx. Test application performs > open(), poll(), write(), read() and close() file operations. > > Signed-off-by: Hemant Kumar <hemantk@xxxxxxxxxxxxxx> One nitpick below, with that addressed: Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> > --- > Documentation/mhi/uci.rst | 32 + > tools/testing/selftests/Makefile | 1 + > tools/testing/selftests/drivers/.gitignore | 1 + > tools/testing/selftests/drivers/mhi/Makefile | 8 + > tools/testing/selftests/drivers/mhi/config | 2 + > .../testing/selftests/drivers/mhi/loopback_test.c | 802 +++++++++++++++++++++ > 6 files changed, 846 insertions(+) > create mode 100644 tools/testing/selftests/drivers/mhi/Makefile > create mode 100644 tools/testing/selftests/drivers/mhi/config > create mode 100644 tools/testing/selftests/drivers/mhi/loopback_test.c > > diff --git a/Documentation/mhi/uci.rst b/Documentation/mhi/uci.rst > index ce8740e..0a04afe 100644 > --- a/Documentation/mhi/uci.rst > +++ b/Documentation/mhi/uci.rst > @@ -79,6 +79,38 @@ MHI client driver performs read operation, same data gets looped back to MHI > host using LOOPBACK channel 1. LOOPBACK channel is used to verify data path > and data integrity between MHI Host and MHI device. > > +Loopback Test > +~~~~~~~~~~~~~ > + > +Loopback test application is used to verify data integrity between MHI host and > +MHI device over LOOPBACK channel. This also confirms that basic MHI data path > +is working properly. Test performs write() to send tx buffer to MHI device file > +node for LOOPBACK uplink channel. MHI LOOPBACK downlink channel loops back > +transmit data to MHI Host. Test application receives data in receive buffer as > +part of read(). It verifies if tx buffer matches rx buffer. Test application > +performs poll() before making write() and read() system calls. Test passes if > +match is found. > + > +Test is present under tools/testing/selftests/drivers/mhi. It is compiled using > +following command in same dir:- > + > +make loopback_test > + > +Test is run using following command arguments:- > + > +loopback_test -c <device_node> -b <transmit buffer size> -l <log level> -i > +<number of iterations> > + > +Required argument: > +-c : loopback chardev node > + > +Optional argument: > +-b : transmit buffer size. If not present 1024 bytes size transmit buffer > + is sent. > +-i : Number of iterations to perform, If not present only one transmit buffer > + is sent. > +-l : Log level. If not present defaults to DBG_LVL_INFO. > + > Other Use Cases > --------------- > > diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile > index d9c2835..084bc1e 100644 > --- a/tools/testing/selftests/Makefile > +++ b/tools/testing/selftests/Makefile > @@ -10,6 +10,7 @@ TARGETS += core > TARGETS += cpufreq > TARGETS += cpu-hotplug > TARGETS += drivers/dma-buf > +TARGETS += drivers/mhi > TARGETS += efivarfs > TARGETS += exec > TARGETS += filesystems > diff --git a/tools/testing/selftests/drivers/.gitignore b/tools/testing/selftests/drivers/.gitignore > index ca74f2e..e4806d5 100644 > --- a/tools/testing/selftests/drivers/.gitignore > +++ b/tools/testing/selftests/drivers/.gitignore > @@ -1,2 +1,3 @@ > # SPDX-License-Identifier: GPL-2.0-only > /dma-buf/udmabuf > +/mhi/loopback_test > diff --git a/tools/testing/selftests/drivers/mhi/Makefile b/tools/testing/selftests/drivers/mhi/Makefile > new file mode 100644 > index 0000000..c06c925 > --- /dev/null > +++ b/tools/testing/selftests/drivers/mhi/Makefile > @@ -0,0 +1,8 @@ > +# SPDX-License-Identifier: GPL-2.0-only > +CFLAGS += -I../../../../../usr/include/ -g -Wall > + > +LDLIBS = -lpthread > +TEST_GEN_PROGS := loopback_test > + > +include ../../lib.mk > + > diff --git a/tools/testing/selftests/drivers/mhi/config b/tools/testing/selftests/drivers/mhi/config > new file mode 100644 > index 0000000..471dc92 > --- /dev/null > +++ b/tools/testing/selftests/drivers/mhi/config > @@ -0,0 +1,2 @@ > +CONFIG_MHI_BUS=y > +CONFIG_MHi_UCI=y > diff --git a/tools/testing/selftests/drivers/mhi/loopback_test.c b/tools/testing/selftests/drivers/mhi/loopback_test.c > new file mode 100644 > index 0000000..99b7712 > --- /dev/null > +++ b/tools/testing/selftests/drivers/mhi/loopback_test.c > @@ -0,0 +1,802 @@ > + [...] > +int main(int argc, char *argv[]) > +{ > + int ret = 0; > + > + loopback_test_set_defaults(); > + test_log(DBG_LVL_INFO, "MHI Loopback test App\n"); > + > + if (argc > 1) > + ret = loopback_test_parse(argc, argv); Effectively this functions does parse and run, so this should be called as, "loopback_test_parse_run" or pthread creation should be moved here. Thanks, Mani > + else > + usage(); > + > + return ret; > +} > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project >