Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp656437imm; Fri, 1 Jun 2018 07:27:05 -0700 (PDT) X-Google-Smtp-Source: ADUXVKK9SyfXXFaQbv4NgnaSn6TwEsyXx//fbsQxlKWh+uHxnX71AJRRLrKIDHTeMPt/MCGHFXWn X-Received: by 2002:a17:902:1029:: with SMTP id b38-v6mr11305368pla.277.1527863225150; Fri, 01 Jun 2018 07:27:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527863225; cv=none; d=google.com; s=arc-20160816; b=y2zoPomF3jlWHA7luMUlZMjzIbqR0RtqO7Q6Fl1PlKQzcPGoiA/pQsJYH0rt36T6EO LI/BnMBsR+c0/cNzReNcQMCSNmmHHxxjbZqSwxeBZdQWfFuZS4a3/BHBlZwt4DVOJWsS fRwX8TyhbHRaeYmQsvlN0OyIvuintdKkV9L2Qut4pGJQSTqkeRZhzkCOv+BSS9/6vP5n 7PfxeBuBcIupjiTrUZ4nT2OUBsOvG3Hkh82+tuG9Z0qB9U/yOn1sVL3sG+4QH33EpnTC YkhjTtOSF+uXve6RcHkVOZ1/x4H50e7/Gduc2dIylGoDE2r2hDf7DXj1T2OnDptV5x3O 5Nsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=zRcNz9fYfhtsge7RyTU6oSRAttBa3ZvnaAIDJX3mYfU=; b=pwACtvf/UOXvXZbul1Vlrs+occLAL6KdDYNADh3BPK7Sl69OSTOPeJEzcIkhFB4yMu VhN+tMFEcowRPEUhB9hi8LOg068G8dBJO+E4Wh+DMotXnqOCcdUPFtyJ3M1LXfquxDU4 OiruEyFTJ4ghZaZ6JOmm0dNgO/Lg8Rljr+bFKwvKCEddR7/CMAAbzI+xpSgkcYzdhayS Jecf5Z9B3AqM1AhxSRoEIqgd3QTW3VXF+VS8uWpD+meIhDlg15GLCy8kZI4o8j5rpYL9 y3fw9WP50y+tavQ555XMitDVEC3RkSxlwzNJwwqZcWGAw2SLumR09YWCPQbX7i5J/B14 Yv/w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=HjUnSzm4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x12-v6si39053998pln.97.2018.06.01.07.26.50; Fri, 01 Jun 2018 07:27:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=HjUnSzm4; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=synopsys.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752486AbeFAOZi (ORCPT + 99 others); Fri, 1 Jun 2018 10:25:38 -0400 Received: from smtprelay6.synopsys.com ([198.182.37.59]:42600 "EHLO smtprelay.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751525AbeFAOZF (ORCPT ); Fri, 1 Jun 2018 10:25:05 -0400 Received: from mailhost.synopsys.com (mailhost2.synopsys.com [10.13.184.66]) by smtprelay.synopsys.com (Postfix) with ESMTP id ECD0A1E15E1; Fri, 1 Jun 2018 16:25:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1527863103; bh=uV0N/SWn0gFsPITGXKqTFxYsKOeYNCFelcmSlIfNu3c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:In-Reply-To: References:From; b=HjUnSzm4DDK54x9R4XPIZXS3N379Dpv5nv85LvRNeVuSso8tAMPyF4fkcXifq92K0 3zL/KnE/4pH6ZRB88+AYAk+hQRc5PDeD609Ln0fNonRvdxhbfCc2gS9acKCZvGtsNl rgbyOWwPUCTzbDyZRkUz0rX6u9y+lrzpEouIiFrunKX3ODurzSAYGIlZ3M+0+XyYQw +yRr9sEu+Bz1GvXmWoDAbflbXvAGP4Qowlrb1xPPzmc9tPGIZioU+osnUJvTixi/uO KXYofeOaRclIFJEeEmO7nna9M4wfBcGFJupwtDyfbvk+7SFAPw9N5Zc+SktF8lh2/J /N7kbfW33BHJQ== Received: from pt02.synopsys.com (pt02.internal.synopsys.com [10.107.23.240]) by mailhost.synopsys.com (Postfix) with ESMTP id 284683167; Fri, 1 Jun 2018 07:25:02 -0700 (PDT) Received: from UbuntuMate-64Bits.internal.synopsys.com (gustavo-e7480.internal.synopsys.com [10.107.25.102]) by pt02.synopsys.com (Postfix) with ESMTP id A29403D7A9; Fri, 1 Jun 2018 15:25:00 +0100 (WEST) From: Gustavo Pimentel To: bhelgaas@google.com, lorenzo.pieralisi@arm.com, Joao.Pinto@synopsys.com, jingoohan1@gmail.com, kishon@ti.com, adouglas@cadence.com, jesper.nilsson@axis.com Cc: linux-pci@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Gustavo Pimentel Subject: [PATCH v3 10/10] tools: PCI: Add MSI-X support Date: Fri, 1 Jun 2018 15:24:52 +0100 Message-Id: X-Mailer: git-send-email 2.7.4 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add MSI-X support to pcitest tool. Add 2 new IOCTL commands: - Allow to reconfigure driver IRQ type in runtime. - Allow to retrieve current driver IRQ type configured. Modify pcitest.sh script to accommodate MSI-X interrupt tests. Signed-off-by: Gustavo Pimentel --- Change v1->v2: - Allow IRQ type driver reconfiguring in runtime, follwing Kishon's suggestion. Change v2->v3: - Nothing changed, just to follow the patch set version. include/uapi/linux/pcitest.h | 3 +++ tools/pci/pcitest.c | 51 +++++++++++++++++++++++++++++++++++++++++++- tools/pci/pcitest.sh | 15 +++++++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/pcitest.h b/include/uapi/linux/pcitest.h index 953cf03..cbf422e 100644 --- a/include/uapi/linux/pcitest.h +++ b/include/uapi/linux/pcitest.h @@ -16,5 +16,8 @@ #define PCITEST_WRITE _IOW('P', 0x4, unsigned long) #define PCITEST_READ _IOW('P', 0x5, unsigned long) #define PCITEST_COPY _IOW('P', 0x6, unsigned long) +#define PCITEST_MSIX _IOW('P', 0x7, int) +#define PCITEST_SET_IRQTYPE _IOW('P', 0x8, int) +#define PCITEST_GET_IRQTYPE _IO('P', 0x9) #endif /* __UAPI_LINUX_PCITEST_H */ diff --git a/tools/pci/pcitest.c b/tools/pci/pcitest.c index 9074b47..af146bb 100644 --- a/tools/pci/pcitest.c +++ b/tools/pci/pcitest.c @@ -31,12 +31,17 @@ #define BILLION 1E9 static char *result[] = { "NOT OKAY", "OKAY" }; +static char *irq[] = { "LEGACY", "MSI", "MSI-X" }; struct pci_test { char *device; char barnum; bool legacyirq; unsigned int msinum; + unsigned int msixnum; + int irqtype; + bool set_irqtype; + bool get_irqtype; bool read; bool write; bool copy; @@ -65,6 +70,24 @@ static int run_test(struct pci_test *test) fprintf(stdout, "%s\n", result[ret]); } + if (test->set_irqtype) { + ret = ioctl(fd, PCITEST_SET_IRQTYPE, test->irqtype); + fprintf(stdout, "SET IRQ TYPE TO %s:\t\t", irq[test->irqtype]); + if (ret < 0) + fprintf(stdout, "FAILED\n"); + else + fprintf(stdout, "%s\n", result[ret]); + } + + if (test->get_irqtype) { + ret = ioctl(fd, PCITEST_GET_IRQTYPE); + fprintf(stdout, "GET IRQ TYPE:\t\t"); + if (ret < 0) + fprintf(stdout, "FAILED\n"); + else + fprintf(stdout, "%s\n", irq[ret]); + } + if (test->legacyirq) { ret = ioctl(fd, PCITEST_LEGACY_IRQ, 0); fprintf(stdout, "LEGACY IRQ:\t"); @@ -83,6 +106,15 @@ static int run_test(struct pci_test *test) fprintf(stdout, "%s\n", result[ret]); } + if (test->msixnum > 0 && test->msixnum <= 2048) { + ret = ioctl(fd, PCITEST_MSIX, test->msixnum); + fprintf(stdout, "MSI-X%d:\t\t", test->msixnum); + if (ret < 0) + fprintf(stdout, "TEST FAILED\n"); + else + fprintf(stdout, "%s\n", result[ret]); + } + if (test->write) { ret = ioctl(fd, PCITEST_WRITE, test->size); fprintf(stdout, "WRITE (%7ld bytes):\t\t", test->size); @@ -133,7 +165,7 @@ int main(int argc, char **argv) /* set default endpoint device */ test->device = "/dev/pci-endpoint-test.0"; - while ((c = getopt(argc, argv, "D:b:m:lrwcs:")) != EOF) + while ((c = getopt(argc, argv, "D:b:m:x:i:Ilrwcs:")) != EOF) switch (c) { case 'D': test->device = optarg; @@ -151,6 +183,20 @@ int main(int argc, char **argv) if (test->msinum < 1 || test->msinum > 32) goto usage; continue; + case 'x': + test->msixnum = atoi(optarg); + if (test->msixnum < 1 || test->msixnum > 2048) + goto usage; + continue; + case 'i': + test->irqtype = atoi(optarg); + if (test->irqtype < 0 || test->irqtype > 2) + goto usage; + test->set_irqtype = true; + continue; + case 'I': + test->get_irqtype = true; + continue; case 'r': test->read = true; continue; @@ -173,6 +219,9 @@ int main(int argc, char **argv) "\t-D PCI endpoint test device {default: /dev/pci-endpoint-test.0}\n" "\t-b BAR test (bar number between 0..5)\n" "\t-m MSI test (msi number between 1..32)\n" + "\t-x \tMSI-X test (msix number between 1..2048)\n" + "\t-i \tSet IRQ type (0 - Legacy, 1 - MSI, 2 - MSI-X)\n" + "\t-I Get current IRQ type configured\n" "\t-l Legacy IRQ test\n" "\t-r Read buffer test\n" "\t-w Write buffer test\n" diff --git a/tools/pci/pcitest.sh b/tools/pci/pcitest.sh index 77e8c85..75ed48f 100644 --- a/tools/pci/pcitest.sh +++ b/tools/pci/pcitest.sh @@ -16,7 +16,10 @@ echo echo "Interrupt tests" echo +pcitest -i 0 pcitest -l + +pcitest -i 1 msi=1 while [ $msi -lt 33 ] @@ -26,9 +29,21 @@ do done echo +pcitest -i 2 +msix=1 + +while [ $msix -lt 2049 ] +do + pcitest -x $msix + msix=`expr $msix + 1` +done +echo + echo "Read Tests" echo +pcitest -i 1 + pcitest -r -s 1 pcitest -r -s 1024 pcitest -r -s 1025 -- 2.7.4