diff mbox series

[v2] selftests: drivers: fpga: A test for interrupt support

Message ID 20210116193321.385848-1-trix@redhat.com
State Superseded
Headers show
Series [v2] selftests: drivers: fpga: A test for interrupt support | expand

Commit Message

Tom Rix Jan. 16, 2021, 7:33 p.m. UTC
From: Tom Rix <trix@redhat.com>

Check that the ioctl DFL_FPGA_PORT_ERR_GET_IRQ_NUM returns
an expected result.

Tested on vf device 0xbcc1

Sample run with
 # make -C tools/testing/selftests TARGETS=drivers/fpga run_tests
 ...
 TAP version 13
 1..1
 # selftests: drivers/fpga: intr
 # TAP version 13
 # 1..1
 # # Starting 1 tests from 1 test cases.
 # #  RUN           global.afu_intr ...
 # #            OK  global.afu_intr
 # ok 1 global.afu_intr
 # # PASSED: 1 / 1 tests passed.
 # # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0
 ok 1 selftests: drivers/fpga: intr

Signed-off-by: Tom Rix <trix@redhat.com>
---
v1: Convert to kselftest_harness.h framework
---
 MAINTAINERS                                   |  1 +
 tools/testing/selftests/Makefile              |  1 +
 tools/testing/selftests/drivers/fpga/Makefile |  7 ++++
 tools/testing/selftests/drivers/fpga/config   |  1 +
 tools/testing/selftests/drivers/fpga/intr.c   | 36 +++++++++++++++++++
 5 files changed, 46 insertions(+)
 create mode 100644 tools/testing/selftests/drivers/fpga/Makefile
 create mode 100644 tools/testing/selftests/drivers/fpga/config
 create mode 100644 tools/testing/selftests/drivers/fpga/intr.c

Comments

Moritz Fischer Jan. 17, 2021, 3:43 a.m. UTC | #1
Hi Tom,

On Sat, Jan 16, 2021 at 11:33:21AM -0800, trix@redhat.com wrote:
> From: Tom Rix <trix@redhat.com>

> 

> Check that the ioctl DFL_FPGA_PORT_ERR_GET_IRQ_NUM returns

> an expected result.

> 

> Tested on vf device 0xbcc1

> 

> Sample run with

>  # make -C tools/testing/selftests TARGETS=drivers/fpga run_tests

>  ...

>  TAP version 13

>  1..1

>  # selftests: drivers/fpga: intr

>  # TAP version 13

>  # 1..1

>  # # Starting 1 tests from 1 test cases.

>  # #  RUN           global.afu_intr ...

>  # #            OK  global.afu_intr

>  # ok 1 global.afu_intr

>  # # PASSED: 1 / 1 tests passed.

>  # # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0

>  ok 1 selftests: drivers/fpga: intr

> 

> Signed-off-by: Tom Rix <trix@redhat.com>

> ---

> v1: Convert to kselftest_harness.h framework

> ---

>  MAINTAINERS                                   |  1 +

>  tools/testing/selftests/Makefile              |  1 +

>  tools/testing/selftests/drivers/fpga/Makefile |  7 ++++

>  tools/testing/selftests/drivers/fpga/config   |  1 +

>  tools/testing/selftests/drivers/fpga/intr.c   | 36 +++++++++++++++++++

>  5 files changed, 46 insertions(+)

>  create mode 100644 tools/testing/selftests/drivers/fpga/Makefile

>  create mode 100644 tools/testing/selftests/drivers/fpga/config

>  create mode 100644 tools/testing/selftests/drivers/fpga/intr.c

> 

> diff --git a/MAINTAINERS b/MAINTAINERS

> index de610a06cb5c..7ed3ce58d95e 100644

> --- a/MAINTAINERS

> +++ b/MAINTAINERS

> @@ -6973,6 +6973,7 @@ F:	Documentation/driver-api/fpga/

>  F:	Documentation/fpga/

>  F:	drivers/fpga/

>  F:	include/linux/fpga/

> +F:	tools/testing/selftests/drivers/fpga/

>  

>  FPGA SECURITY MANAGER DRIVERS

>  M:	Russ Weight <russell.h.weight@intel.com>

> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile

> index afbab4aeef3c..aad4763ec348 100644

> --- a/tools/testing/selftests/Makefile

> +++ b/tools/testing/selftests/Makefile

> @@ -9,6 +9,7 @@ TARGETS += core

>  TARGETS += cpufreq

>  TARGETS += cpu-hotplug

>  TARGETS += drivers/dma-buf

> +TARGETS += drivers/fpga

>  TARGETS += efivarfs

>  TARGETS += exec

>  TARGETS += filesystems

> diff --git a/tools/testing/selftests/drivers/fpga/Makefile b/tools/testing/selftests/drivers/fpga/Makefile

> new file mode 100644

> index 000000000000..eba35c405d5b

> --- /dev/null

> +++ b/tools/testing/selftests/drivers/fpga/Makefile

> @@ -0,0 +1,7 @@

> +# SPDX-License-Identifier: GPL-2.0-only

> +CFLAGS += -I../../../../../usr/include/

> +CFLAGS += -I../../../../../include/uapi/

> +

> +TEST_GEN_PROGS := intr

> +

> +include ../../lib.mk

> diff --git a/tools/testing/selftests/drivers/fpga/config b/tools/testing/selftests/drivers/fpga/config

> new file mode 100644

> index 000000000000..e2111b81d8d7

> --- /dev/null

> +++ b/tools/testing/selftests/drivers/fpga/config

> @@ -0,0 +1 @@

> +CONFIG_FPGA_DFL_AFU=m

> diff --git a/tools/testing/selftests/drivers/fpga/intr.c b/tools/testing/selftests/drivers/fpga/intr.c

> new file mode 100644

> index 000000000000..b362fb1f788d

> --- /dev/null

> +++ b/tools/testing/selftests/drivers/fpga/intr.c

> @@ -0,0 +1,36 @@

> +// SPDX-License-Identifier: GPL-2.0

> +#include <stdio.h>

> +#include <stdlib.h>

> +#include <stdint.h>

> +#include <string.h>

> +#include <sys/fcntl.h>

> +#include <sys/ioctl.h>

> +#include <linux/fpga-dfl.h>

> +

> +#include "../../kselftest_harness.h"


Is that how it works with selftests?
> +

> +TEST(afu_intr)

> +{

> +	int devfd, status;

> +	struct dfl_fpga_port_info port_info;

> +	uint32_t irq_num = UINT32_MAX;

Can you order those?

xxxx
xx
x
> +

> +	devfd = open("/dev/dfl-port.0", O_RDONLY);

> +	if (devfd < 0)

> +		SKIP(0, "no fpga afu device 0");

> +	/*

> +	 * From fpga-dl.h :

> +	 * Currently hardware supports up to 1 irq.

> +	 * Return: 0 on success, -errno on failure.

> +	 */

> +	status = ioctl(devfd, DFL_FPGA_PORT_ERR_GET_IRQ_NUM, &irq_num);

> +	ASSERT_EQ(0, status) {

> +		TH_LOG("ioctl() failed to get the number irqs");

> +	}

> +	ASSERT_LT(irq_num, 256) {

> +		TH_LOG("unexpeced number of irqs");

> +	}

> +	close(devfd);

> +}

> +

> +TEST_HARNESS_MAIN

> -- 

> 2.27.0

> 


Thanks for starting this, I don't know a lot about selftests (yet).
So we probably want to get a look at this from corresponding maintainers.

- Moritz
Tom Rix Jan. 17, 2021, 4:12 p.m. UTC | #2
On 1/16/21 7:43 PM, Moritz Fischer wrote:
> Hi Tom,

>

> On Sat, Jan 16, 2021 at 11:33:21AM -0800, trix@redhat.com wrote:

>> From: Tom Rix <trix@redhat.com>

>>

>> Check that the ioctl DFL_FPGA_PORT_ERR_GET_IRQ_NUM returns

>> an expected result.

>>

>> Tested on vf device 0xbcc1

>>

>> Sample run with

>>  # make -C tools/testing/selftests TARGETS=drivers/fpga run_tests

>>  ...

>>  TAP version 13

>>  1..1

>>  # selftests: drivers/fpga: intr

>>  # TAP version 13

>>  # 1..1

>>  # # Starting 1 tests from 1 test cases.

>>  # #  RUN           global.afu_intr ...

>>  # #            OK  global.afu_intr

>>  # ok 1 global.afu_intr

>>  # # PASSED: 1 / 1 tests passed.

>>  # # Totals: pass:1 fail:0 xfail:0 xpass:0 skip:0 error:0

>>  ok 1 selftests: drivers/fpga: intr

>>

>> Signed-off-by: Tom Rix <trix@redhat.com>

>> ---

>> v1: Convert to kselftest_harness.h framework

>> ---

>>  MAINTAINERS                                   |  1 +

>>  tools/testing/selftests/Makefile              |  1 +

>>  tools/testing/selftests/drivers/fpga/Makefile |  7 ++++

>>  tools/testing/selftests/drivers/fpga/config   |  1 +

>>  tools/testing/selftests/drivers/fpga/intr.c   | 36 +++++++++++++++++++

>>  5 files changed, 46 insertions(+)

>>  create mode 100644 tools/testing/selftests/drivers/fpga/Makefile

>>  create mode 100644 tools/testing/selftests/drivers/fpga/config

>>  create mode 100644 tools/testing/selftests/drivers/fpga/intr.c

>>

>> diff --git a/MAINTAINERS b/MAINTAINERS

>> index de610a06cb5c..7ed3ce58d95e 100644

>> --- a/MAINTAINERS

>> +++ b/MAINTAINERS

>> @@ -6973,6 +6973,7 @@ F:	Documentation/driver-api/fpga/

>>  F:	Documentation/fpga/

>>  F:	drivers/fpga/

>>  F:	include/linux/fpga/

>> +F:	tools/testing/selftests/drivers/fpga/

>>  

>>  FPGA SECURITY MANAGER DRIVERS

>>  M:	Russ Weight <russell.h.weight@intel.com>

>> diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile

>> index afbab4aeef3c..aad4763ec348 100644

>> --- a/tools/testing/selftests/Makefile

>> +++ b/tools/testing/selftests/Makefile

>> @@ -9,6 +9,7 @@ TARGETS += core

>>  TARGETS += cpufreq

>>  TARGETS += cpu-hotplug

>>  TARGETS += drivers/dma-buf

>> +TARGETS += drivers/fpga

>>  TARGETS += efivarfs

>>  TARGETS += exec

>>  TARGETS += filesystems

>> diff --git a/tools/testing/selftests/drivers/fpga/Makefile b/tools/testing/selftests/drivers/fpga/Makefile

>> new file mode 100644

>> index 000000000000..eba35c405d5b

>> --- /dev/null

>> +++ b/tools/testing/selftests/drivers/fpga/Makefile

>> @@ -0,0 +1,7 @@

>> +# SPDX-License-Identifier: GPL-2.0-only

>> +CFLAGS += -I../../../../../usr/include/

>> +CFLAGS += -I../../../../../include/uapi/

>> +

>> +TEST_GEN_PROGS := intr

>> +

>> +include ../../lib.mk

>> diff --git a/tools/testing/selftests/drivers/fpga/config b/tools/testing/selftests/drivers/fpga/config

>> new file mode 100644

>> index 000000000000..e2111b81d8d7

>> --- /dev/null

>> +++ b/tools/testing/selftests/drivers/fpga/config

>> @@ -0,0 +1 @@

>> +CONFIG_FPGA_DFL_AFU=m

>> diff --git a/tools/testing/selftests/drivers/fpga/intr.c b/tools/testing/selftests/drivers/fpga/intr.c

>> new file mode 100644

>> index 000000000000..b362fb1f788d

>> --- /dev/null

>> +++ b/tools/testing/selftests/drivers/fpga/intr.c

>> @@ -0,0 +1,36 @@

>> +// SPDX-License-Identifier: GPL-2.0

>> +#include <stdio.h>

>> +#include <stdlib.h>

>> +#include <stdint.h>

>> +#include <string.h>

>> +#include <sys/fcntl.h>

>> +#include <sys/ioctl.h>

>> +#include <linux/fpga-dfl.h>

>> +

>> +#include "../../kselftest_harness.h"

> Is that how it works with selftests?


I believe so, the big change over v1, is me reading the manual

https://www.kernel.org/doc/html/latest/dev-tools/kselftest.html

>> +

>> +TEST(afu_intr)

>> +{

>> +	int devfd, status;

>> +	struct dfl_fpga_port_info port_info;

>> +	uint32_t irq_num = UINT32_MAX;

> Can you order those?

>

> xxxx

> xx

> x

yes, v3 is on its way.
>> +

>> +	devfd = open("/dev/dfl-port.0", O_RDONLY);

>> +	if (devfd < 0)

>> +		SKIP(0, "no fpga afu device 0");

>> +	/*

>> +	 * From fpga-dl.h :

>> +	 * Currently hardware supports up to 1 irq.

>> +	 * Return: 0 on success, -errno on failure.

>> +	 */

>> +	status = ioctl(devfd, DFL_FPGA_PORT_ERR_GET_IRQ_NUM, &irq_num);

>> +	ASSERT_EQ(0, status) {

>> +		TH_LOG("ioctl() failed to get the number irqs");

>> +	}

>> +	ASSERT_LT(irq_num, 256) {

>> +		TH_LOG("unexpeced number of irqs");

>> +	}

>> +	close(devfd);

>> +}

>> +

>> +TEST_HARNESS_MAIN

>> -- 

>> 2.27.0

>>

> Thanks for starting this, I don't know a lot about selftests (yet).

> So we probably want to get a look at this from corresponding maintainers.


Me either, that's why I am starting small.

It would be nice to have a set of smoke tests to hook into a c/i.

Tom

> - Moritz

>
diff mbox series

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index de610a06cb5c..7ed3ce58d95e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6973,6 +6973,7 @@  F:	Documentation/driver-api/fpga/
 F:	Documentation/fpga/
 F:	drivers/fpga/
 F:	include/linux/fpga/
+F:	tools/testing/selftests/drivers/fpga/
 
 FPGA SECURITY MANAGER DRIVERS
 M:	Russ Weight <russell.h.weight@intel.com>
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
index afbab4aeef3c..aad4763ec348 100644
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@ -9,6 +9,7 @@  TARGETS += core
 TARGETS += cpufreq
 TARGETS += cpu-hotplug
 TARGETS += drivers/dma-buf
+TARGETS += drivers/fpga
 TARGETS += efivarfs
 TARGETS += exec
 TARGETS += filesystems
diff --git a/tools/testing/selftests/drivers/fpga/Makefile b/tools/testing/selftests/drivers/fpga/Makefile
new file mode 100644
index 000000000000..eba35c405d5b
--- /dev/null
+++ b/tools/testing/selftests/drivers/fpga/Makefile
@@ -0,0 +1,7 @@ 
+# SPDX-License-Identifier: GPL-2.0-only
+CFLAGS += -I../../../../../usr/include/
+CFLAGS += -I../../../../../include/uapi/
+
+TEST_GEN_PROGS := intr
+
+include ../../lib.mk
diff --git a/tools/testing/selftests/drivers/fpga/config b/tools/testing/selftests/drivers/fpga/config
new file mode 100644
index 000000000000..e2111b81d8d7
--- /dev/null
+++ b/tools/testing/selftests/drivers/fpga/config
@@ -0,0 +1 @@ 
+CONFIG_FPGA_DFL_AFU=m
diff --git a/tools/testing/selftests/drivers/fpga/intr.c b/tools/testing/selftests/drivers/fpga/intr.c
new file mode 100644
index 000000000000..b362fb1f788d
--- /dev/null
+++ b/tools/testing/selftests/drivers/fpga/intr.c
@@ -0,0 +1,36 @@ 
+// SPDX-License-Identifier: GPL-2.0
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <sys/fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/fpga-dfl.h>
+
+#include "../../kselftest_harness.h"
+
+TEST(afu_intr)
+{
+	int devfd, status;
+	struct dfl_fpga_port_info port_info;
+	uint32_t irq_num = UINT32_MAX;
+
+	devfd = open("/dev/dfl-port.0", O_RDONLY);
+	if (devfd < 0)
+		SKIP(0, "no fpga afu device 0");
+	/*
+	 * From fpga-dl.h :
+	 * Currently hardware supports up to 1 irq.
+	 * Return: 0 on success, -errno on failure.
+	 */
+	status = ioctl(devfd, DFL_FPGA_PORT_ERR_GET_IRQ_NUM, &irq_num);
+	ASSERT_EQ(0, status) {
+		TH_LOG("ioctl() failed to get the number irqs");
+	}
+	ASSERT_LT(irq_num, 256) {
+		TH_LOG("unexpeced number of irqs");
+	}
+	close(devfd);
+}
+
+TEST_HARNESS_MAIN