]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ptp: add testptp mask test
authorXabier Marquiegui <reibax@gmail.com>
Wed, 11 Oct 2023 22:39:58 +0000 (00:39 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Feb 2026 15:44:03 +0000 (16:44 +0100)
[ Upstream commit 26285e689c6cd2cf3849568c83b2ebe53f467143 ]

Add option to test timestamp event queue mask manipulation in testptp.

Option -F allows the user to specify a single channel that will be
applied on the mask filter via IOCTL.

The test program will maintain the file open until user input is
received.

This allows checking the effect of the IOCTL in debugfs.

eg:

Console 1:
```
Channel 12 exclusively enabled. Check on debugfs.
Press any key to continue
```

Console 2:
```
0x00000000 0x00000001 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000
```

Signed-off-by: Xabier Marquiegui <reibax@gmail.com>
Suggested-by: Richard Cochran <richardcochran@gmail.com>
Suggested-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Stable-dep-of: 76868642e427 ("testptp: Add option to open PHC in readonly mode")
Signed-off-by: Sasha Levin <sashal@kernel.org>
tools/testing/selftests/ptp/testptp.c

index 863699434296a7de9e46c324e8b324b338270066..b609efbdea55d64f19b2407353ecaf17f50d2ce7 100644 (file)
@@ -121,6 +121,7 @@ static void usage(char *progname)
                " -d name    device to open\n"
                " -e val     read 'val' external time stamp events\n"
                " -f val     adjust the ptp clock frequency by 'val' ppb\n"
+               " -F chan    Enable single channel mask and keep device open for debugfs verification.\n"
                " -g         get the ptp clock time\n"
                " -h         prints this message\n"
                " -i val     index for event/trigger\n"
@@ -187,6 +188,7 @@ int main(int argc, char *argv[])
        int pps = -1;
        int seconds = 0;
        int settime = 0;
+       int channel = -1;
 
        int64_t t1, t2, tp;
        int64_t interval, offset;
@@ -196,7 +198,7 @@ int main(int argc, char *argv[])
 
        progname = strrchr(argv[0], '/');
        progname = progname ? 1+progname : argv[0];
-       while (EOF != (c = getopt(argc, argv, "cd:e:f:ghH:i:k:lL:n:o:p:P:sSt:T:w:x:Xz"))) {
+       while (EOF != (c = getopt(argc, argv, "cd:e:f:F:ghH:i:k:lL:n:o:p:P:sSt:T:w:x:Xz"))) {
                switch (c) {
                case 'c':
                        capabilities = 1;
@@ -210,6 +212,9 @@ int main(int argc, char *argv[])
                case 'f':
                        adjfreq = atoi(optarg);
                        break;
+               case 'F':
+                       channel = atoi(optarg);
+                       break;
                case 'g':
                        gettime = 1;
                        break;
@@ -602,6 +607,18 @@ int main(int argc, char *argv[])
                free(xts);
        }
 
+       if (channel >= 0) {
+               if (ioctl(fd, PTP_MASK_CLEAR_ALL)) {
+                       perror("PTP_MASK_CLEAR_ALL");
+               } else if (ioctl(fd, PTP_MASK_EN_SINGLE, (unsigned int *)&channel)) {
+                       perror("PTP_MASK_EN_SINGLE");
+               } else {
+                       printf("Channel %d exclusively enabled. Check on debugfs.\n", channel);
+                       printf("Press any key to continue\n.");
+                       getchar();
+               }
+       }
+
        close(fd);
        return 0;
 }