From patchwork Fri Feb 7 19:39:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 13965641 X-Patchwork-Delegate: kw@linux.com Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2062.outbound.protection.outlook.com [40.107.21.62]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F98919D07E; Fri, 7 Feb 2025 19:41:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.21.62 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738957291; cv=fail; b=qXDpjDn7VI7jrWsy+ImbnRrQLXqZwybHB2wdgGXdbG7uJz2t8FtoqxrZKGh49gQnsB9ydN8IwGLfGMJJIoA4Ca9ftwgBb5ifZYMqjkf2ChBzGYySAO8C2kYJu/5xYmtws6hYsifmxUmB6EGy/PMowI2Vo6dN/38430IikRNoL3E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738957291; c=relaxed/simple; bh=cBbHPYl59BqEWZgs9oM7up4sogl7vTD8SxSGWaSbPIk=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=VfY4oIHC+uJblkjNLzh0iJcQ4n0n7P3O9/AIjo5bRnGyIawOAn/RUuRJlpT9hR8GSLC5+03hmgtAHTzRf3S2hU/cTAsMwvxCLMU+amBz+Yv3OjUIZTnNkPe/lWcmtSEpKW74KCSsIhldPbdy0b4RTI4DR/un6lv0924qNGM+gv8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Es/b5eaA; arc=fail smtp.client-ip=40.107.21.62 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Es/b5eaA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Hqci1JKKSm2gLGLIrzOCY4R4KI126wu6vgO80RrwngSM1qHeuELDVnHTOsASE4ZHlbrRl3DJ13IaFUWZ2PrE+d0TkbSzzCQj4scSKOE8STQnvix4FSOnSQZu1B0Z7z0OefXvK3jyT8VsRxAu2mi+S7hpdKQQcrnUTbU3E5S8t46IqTDGMgfm9M/fHuCq0Cdj6KMvzQ/XSYYp4iT+Ar9Vm8z84dy7ZvrvneUaPFKXCnDX8tcOhDF5uwKtQOW1StqqAeM94Qrm3iDWKH5W4ocEEV/2TELfb5iHwi7FS8O1F7QNjECnJbC1brbpmV1SBEbdhSKngdrsg1wCXxZ6zGL9/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=GMntrNDt4uf3nylEoQt5BkoO+wskEGqCv9nSD9K1cPI=; b=ZC1QNvTuMk/w77CISseMB2qLaFR6uosEOwQ3erj/W3q78k5Grw7zkZoixxJWbqir917cJT6KapzvzOZ4A+sqREHXvaWK3IcZ2fQBLxgv/FTko9pp+gyqJe9eUn6/DmpbFIUc63EbKvl8vXhnyjy492ZQOkFnlVMQoUbKThT6OkSabvBKkXy6smW0OFWgg5+5KRgQKyWptgBfwnLJ2DFIsAPeKYG2pzzU6sDkCCKJqxPlTXQzs+HPOhvCwJ0d084s3flvmg1sFiGNQxZCRN9vLKKtYTl9WYG5zfZLuGo1bjHWYq2WzNsTtd7ei0NqKD1KWzdBLlJLazrprB/JVCpGFg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GMntrNDt4uf3nylEoQt5BkoO+wskEGqCv9nSD9K1cPI=; b=Es/b5eaAfWzDcvuzohxuzNJ35vfOxL1scAh73hyaAQi5kixoWRACn2u7D1Pn/aJmr48gYiiU5+YmCVYPH39v5aFaKRQ0yYe/KP9CD0tVIwaBHf1hUmivBrNlv3DtKKp9A0lvplDqThxKKnMUP39S2zCmp8ETloWbBWeIKu/lKfgmk6uspgt/yUOi54rzKp59Vyu2KGcPua/6+nnTCHlBe86RSEFeMZBxxNzlyuB3NBcVu6hLIbfjpei66HJslo0Cp616ZoyjvvgoRhRCO4H8CfcFZvCBQV0ds2K+23NZP+K7pZ+ikQSdjyyYQ3meS5VDOokrxaq/QcUKy45+ES/LgQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) by VI1PR04MB9787.eurprd04.prod.outlook.com (2603:10a6:800:1d8::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.14; Fri, 7 Feb 2025 19:41:26 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%6]) with mapi id 15.20.8422.012; Fri, 7 Feb 2025 19:41:26 +0000 From: Frank Li Date: Fri, 07 Feb 2025 14:39:52 -0500 Subject: [PATCH v14 10/15] misc: pci_endpoint_test: Add doorbell test case Message-Id: <20250207-ep-msi-v14-10-9671b136f2b8@nxp.com> References: <20250207-ep-msi-v14-0-9671b136f2b8@nxp.com> In-Reply-To: <20250207-ep-msi-v14-0-9671b136f2b8@nxp.com> To: Kishon Vijay Abraham I , "Rafael J. Wysocki" , Thomas Gleixner , Anup Patel , Kishon Vijay Abraham I , Marc Zyngier , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich , Manivannan Sadhasivam , =?utf-8?q?Krzysz?= =?utf-8?q?tof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Arnd Bergmann , Shuah Khan , Richard Zhu , Lucas Stach , Lorenzo Pieralisi , Rob Herring , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Krzysztof Kozlowski , Conor Dooley Cc: Niklas Cassel , dlemoal@kernel.org, jdmason@kudzu.us, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pci@vger.kernel.org, linux-kselftest@vger.kernel.org, imx@lists.linux.dev, devicetree@vger.kernel.org, Frank Li X-Mailer: b4 0.13-dev-e586c X-Developer-Signature: v=1; a=ed25519-sha256; t=1738957203; l=6317; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=cBbHPYl59BqEWZgs9oM7up4sogl7vTD8SxSGWaSbPIk=; b=8xYctc3RMTYAqWd5KEHaWPd4uhdLfAkQ6WcjDkFLnrWNCsdDAI7ZHzQ8V43vBKYI3YHgxgOtv ML2YCZMRe8VC6SJ6z5Nw1/PsDVAg+Yl4hcpiH9pnVRN83JIGD8I4bF3 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SJ0P220CA0004.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:41b::9) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|VI1PR04MB9787:EE_ X-MS-Office365-Filtering-Correlation-Id: ab585e30-19a6-4dcf-cb9d-08dd47af693f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|366016|376014|52116014|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?79X3mtae7aulr7nT0OFS73aCVOeYLun?= =?utf-8?q?6Tazg8sk2SRQE2CgovUW7YyepnAC3+MsBUmjcz7nLkb4HW3eHU1KZarhd9gG5crU9?= =?utf-8?q?xmLjBI5fd/FczkEmuUwtZW4WFcHXLEUpglVHr1LAdvgTGlPCZpRXGoYaR7PNQri1F?= =?utf-8?q?MicGZ8ItMkOLfXOJjIEzQhSOjwZkTI9KKAt7oIuUBycYQxo3BSxJRdo1GFrNpF4+k?= =?utf-8?q?qDvn72HDjkyIgfMeh/aKBY0/Tz1UNWZv5ky+R79y9UYsFJt/jA44/xUenfPU8exHU?= =?utf-8?q?9OlAGf1yozoUDeypwyg5T595BWAn6SJPv4IHcwqMAnUbpcpPOh0zGcv7Cy2HmfQCZ?= =?utf-8?q?iDanFso5Cghp2ahg6JB/bX3H5vpDcF8OHrbpwhEsu1jcvrdUpxER+UdE3E8oOv2YU?= =?utf-8?q?8il1kG6uJ4MLtz/2nICb1LDcagQ5wOXgUz/HCRPO+/wJ96gSi6UCt51KeTg4CEr+2?= =?utf-8?q?EhfowaHsHpUXK6u1eP/oZurhY03NSZqLlkD9b/ivjt41MWgP0LFB3DGeSo3yDFauX?= =?utf-8?q?rCUYQ1dbd7ALR10nUUN/5iXgfPeuNC3CAiEA1xwSf00N7l3BeWfWIzjzHF5ior2Tu?= =?utf-8?q?ylsOCsQJWvDU/VUiZgwOBlyQuDKGZ6VPINf0dD1NzjFpvVr2qeDBQdEtYpLDnrDEn?= =?utf-8?q?6aY7ZhLo9wAPLYrXgdpkcGnObCmK8XgP30/0fdJDsUiTzxg3N5h3n3/E62C4pPwZw?= =?utf-8?q?Q02BC34iTHxN535KdgmtiNkkwtwzetx0zncwBxc29BjzT2+UDebSx7n9eNZ1r5iB+?= =?utf-8?q?gNxCzzmnHc3pANHblkBJL40jfYtGALAcPNtNxY2xlx/Irnf0NQ8aKw6GLnrndtBHn?= =?utf-8?q?YMEqVYxyT8hzdC6XMsR01gpMmVRieXA7mJaMYagra9+BM2Gv/E9OJ5sFqL4brvr+T?= =?utf-8?q?0R5DF9eweNlW8Hu61RKNr0dr+nOB1f8ufdloaD28zYO9M8aAqc0Ugg5nxV+jZIABB?= =?utf-8?q?34sR+RTyuJffV9uLuWNOv7tjGEJl5KjWjH3fikB3MxYF7RaFKrTd27In3xNRaCea8?= =?utf-8?q?iMNSkQwL3tdpxMlmlhQiNS20NEwGC2GnYmiLc7SuHHIXIwwWXgR380/XMGFhrBmEy?= =?utf-8?q?6zyaDGrIiEtyVfQdDWe/PyZ8cGO/PI2HmStUBNjh6MzBuLWBat1tyxF0lB4A/K7tZ?= =?utf-8?q?tAFmJTs79VCXVoXRi8qgl2Vc9H18tZxhpz9FqhL8UGFf55K9WH7qnCNjIGsTEqmXo?= =?utf-8?q?gWpTOoo2dp3yK8/Wt3YRjxOV1K8aKTU0vGQBysG4mWrimziCuYurQtaeoC704HEGQ?= =?utf-8?q?Zr6VHLSQ1bo894hdwhWBL+qJNBM13g+9bMxNIxQE5tmwHttW2k1qkIEEwg7Qfc2If?= =?utf-8?q?QjTcen8hlXA4nO0BBCyY0qUO3clb/3E5NbQMJyay4EzsNOvucj39eQ/c9vZQ1Ia/w?= =?utf-8?q?QFT7mzsaw3VWTcrYiXGRKBZ9NcHZhXCIw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB9642.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(366016)(376014)(52116014)(921020)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?WUxU70sqnNcIxsbYPhu5NUYZFpa+?= =?utf-8?q?7Dbh1aCR/QEOiv2jJnRDxu2UQYkddADr6b7W9foaquI8PyydHSFfqZ3YI7bxlFdib?= =?utf-8?q?f35uuAXXFTrIy7oTjJSbvClq76hod6vekg5aYhO8/0Jf3vW7UurJgf8rqXJzmjmkM?= =?utf-8?q?bgKhsyoiG0Te+L5kdlWq1Rq3TtPpgubMI+ZI5t+6a5pUt3t5QTBiHR23zuxC6eWPB?= =?utf-8?q?hG2frq+h6yAB8tQby2O7ofMd909z7X71NQ09JiWjWH14PxALvuatsm7wG1wToYguY?= =?utf-8?q?uAKhsQma0+1YsizSuWY+9vqZB617cToetoHyu6TzvCNSGVt04G4unSZH1nuuTN5O0?= =?utf-8?q?oqZL22UWpIcXM6sGhv2gSHwO2CWF6og5USwDKdHWrKAf1WCE3eVw2xeP587jrge0n?= =?utf-8?q?aavfXIkIu9l1n1vAjRiGZ7LlONF/QviqGnniQ4oaolFiQwfdRAq8RBBcfsceQhW63?= =?utf-8?q?GKP25DnQ4IIm6lm7MlkDIzCsJy3nEAV+9LtAXTm1mL9S+uEuduI16Waj0UhEYxqyb?= =?utf-8?q?J+E2R9RjHddh5BN9p4pwCguiL7y3x0YOFCEFyez4SuzwGqkOj+jC8WYyQeZtQ40dn?= =?utf-8?q?V4XznzK/zeDW4tOnaVkcrJNPv17v+B2i4dzPcdsgMIZ0DZ9bXJ4j5tqlT01oreiRR?= =?utf-8?q?3ARPz1+l5PObpPUtToy7pEY2MGDfJJAfK1TZ7eCBLc3OqzrPCCvwgo1Kw7BJkcyPn?= =?utf-8?q?SnQ/mq5Kc2Ulm8YDmBQ9PtUjOR+WZYmdE7398C2tltfFesVM5r/hDUUQi5pkysHs7?= =?utf-8?q?o/nIT8x8Kttydn7La3qUpxB5nWzffB6dfqmRaZofwuJMfFeBpG9khJYyZzo9g762R?= =?utf-8?q?R0KMIRDS2hxe9u8/Lfbi4K5E3YTHzZgi3aJUaVLnRsJ2d/qZGPip0RcCCvYyYxzcl?= =?utf-8?q?RaDwAO0B92rmbCCidG6HnwpMf8VLz6WbY0boa/myVnaQPA+7mqPE8ZbvMSmL3KAlm?= =?utf-8?q?tQSNKU7m9Ugi6dPoIhgFqpj266TJ2AkKEIqzJKvK1Hm2YX8lWJ4fgrJ8iZk+ql+eR?= =?utf-8?q?7oyx/qpGxQpl9UF5D5KGvq8LvJ0SQNcf2pxRZI51BoJZx+p6YOIjSHi2B60VldTli?= =?utf-8?q?N90WauyaWfUzT/WncW2Yf5ZaMQbJlE8/p+6n7XaPkTOTvAg4y8wewerGkxJbgNEq0?= =?utf-8?q?PJt4fyVoi6gTaKw6DkXRhj/LaqdQ/yZUsd+nvP8EfEhXclayk6+GEZdPB5HIL/tvs?= =?utf-8?q?xaaAIpxILL8GKLCrvH674LLnquG2sFMF2VsKpc/WUX9dtTymZj0nWHoWD9ybsUJE+?= =?utf-8?q?6DkZ7qBqWstTnmuOA+2w2qpCzZPd6eMYlWdk9B3zC6ecQmB8sgyQZIw6ttQqvnjTO?= =?utf-8?q?9b4ZciVH+7O6LW87H/dTKZoVnHJ7s2Jxu+Nd7Ukw58eThWDk0JLB4MqueNNJT0axi?= =?utf-8?q?mCOWdyLtcUdho1aXvyKGbSeJHnh2lwDwWeCpKz1O8kFmSvLpgUGb85fu7SWOtEfuo?= =?utf-8?q?cIqfg+XqkDZW7m9DrqSZhRVOkxoeKzZNIlRC4XvHZvu640mdw5FFMOTSggDQydb5C?= =?utf-8?q?GGzZaEXPtoqG?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ab585e30-19a6-4dcf-cb9d-08dd47af693f X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Feb 2025 19:41:26.8468 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kEk0384/YyJQIbjsikMahtUdVdEbDQxMi+XfvkzOOb9iV4aiwQJqr1hn92Kri1qb88nfJbTsmAcKLDV0flSRRQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9787 Add three registers: PCIE_ENDPOINT_TEST_DB_BAR, PCIE_ENDPOINT_TEST_DB_ADDR, and PCIE_ENDPOINT_TEST_DB_DATA. Trigger the doorbell by writing data from PCI_ENDPOINT_TEST_DB_DATA to the address provided by PCI_ENDPOINT_TEST_DB_OFFSET and wait for endpoint feedback. Add two command to COMMAND_ENABLE_DOORBELL and COMMAND_DISABLE_DOORBELL to enable EP side's doorbell support and avoid compatible problem, which host side driver miss-match with endpoint side function driver. See below table: Host side new driver Host side old driver EP: new driver S F EP: old driver F F S: If EP side support MSI, 'pci_endpoint_test -f pcie_ep_doorbell' return success. If EP side doesn't support MSI, the same to 'F'. F: 'pci_endpoint_test -f pcie_ep_doorbell' return failure, other case as usual. Tested-by: Niklas Cassel Signed-off-by: Frank Li --- Change from v13 to v14 - update to use pci_endpoint_test -f pcie_ep_doorbell - change ioctrl id to fix conflict Change from v9 to v13 - none Change from v8 to v9 - change PCITEST_DOORBELL to 0xa Change form v6 to v8 - none Change from v5 to v6 - %s/PCI_ENDPOINT_TEST_DB_ADDR/PCI_ENDPOINT_TEST_DB_OFFSET/g Change from v4 to v5 - remove unused varible - add irq_type at pci_endpoint_test_doorbell(); change from v3 to v4 - Add COMMAND_ENABLE_DOORBELL and COMMAND_DISABLE_DOORBELL. - Remove new DID requirement. --- drivers/misc/pci_endpoint_test.c | 81 ++++++++++++++++++++++++++++++++++++++++ include/uapi/linux/pcitest.h | 1 + 2 files changed, 82 insertions(+) diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c index d5ac71a493865..7ac021bcc7152 100644 --- a/drivers/misc/pci_endpoint_test.c +++ b/drivers/misc/pci_endpoint_test.c @@ -42,6 +42,8 @@ #define COMMAND_READ BIT(3) #define COMMAND_WRITE BIT(4) #define COMMAND_COPY BIT(5) +#define COMMAND_ENABLE_DOORBELL BIT(6) +#define COMMAND_DISABLE_DOORBELL BIT(7) #define PCI_ENDPOINT_TEST_STATUS 0x8 #define STATUS_READ_SUCCESS BIT(0) @@ -53,6 +55,11 @@ #define STATUS_IRQ_RAISED BIT(6) #define STATUS_SRC_ADDR_INVALID BIT(7) #define STATUS_DST_ADDR_INVALID BIT(8) +#define STATUS_DOORBELL_SUCCESS BIT(9) +#define STATUS_DOORBELL_ENABLE_SUCCESS BIT(10) +#define STATUS_DOORBELL_ENABLE_FAIL BIT(11) +#define STATUS_DOORBELL_DISABLE_SUCCESS BIT(12) +#define STATUS_DOORBELL_DISABLE_FAIL BIT(13) #define PCI_ENDPOINT_TEST_LOWER_SRC_ADDR 0x0c #define PCI_ENDPOINT_TEST_UPPER_SRC_ADDR 0x10 @@ -67,11 +74,16 @@ #define PCI_ENDPOINT_TEST_IRQ_NUMBER 0x28 #define PCI_ENDPOINT_TEST_FLAGS 0x2c + #define FLAG_USE_DMA BIT(0) #define PCI_ENDPOINT_TEST_CAPS 0x30 #define CAP_UNALIGNED_ACCESS BIT(0) +#define PCI_ENDPOINT_TEST_DB_BAR 0x34 +#define PCI_ENDPOINT_TEST_DB_OFFSET 0x38 +#define PCI_ENDPOINT_TEST_DB_DATA 0x3c + #define PCI_DEVICE_ID_TI_AM654 0xb00c #define PCI_DEVICE_ID_TI_J7200 0xb00f #define PCI_DEVICE_ID_TI_AM64 0xb010 @@ -111,6 +123,7 @@ enum pci_barno { BAR_3, BAR_4, BAR_5, + NO_BAR = -1, }; struct pci_endpoint_test { @@ -829,6 +842,71 @@ static int pci_endpoint_test_set_irq(struct pci_endpoint_test *test, return 0; } +static int pci_endpoint_test_doorbell(struct pci_endpoint_test *test) +{ + struct pci_dev *pdev = test->pdev; + struct device *dev = &pdev->dev; + int irq_type = test->irq_type; + enum pci_barno bar; + u32 data, status; + u32 addr; + + if (irq_type < IRQ_TYPE_INTX || irq_type > IRQ_TYPE_MSIX) { + dev_err(dev, "Invalid IRQ type option\n"); + return -EINVAL; + } + + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, + COMMAND_ENABLE_DOORBELL); + + wait_for_completion_timeout(&test->irq_raised, msecs_to_jiffies(1000)); + + status = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); + if (status & STATUS_DOORBELL_ENABLE_FAIL) { + dev_err(dev, "Failed to enable doorbell\n"); + return -EINVAL; + } + + data = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_DB_DATA); + addr = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_DB_OFFSET); + bar = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_DB_BAR); + + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); + + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_STATUS, 0); + + bar = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_DB_BAR); + + writel(data, test->bar[bar] + addr); + + wait_for_completion_timeout(&test->irq_raised, msecs_to_jiffies(1000)); + + status = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); + + if (!(status & STATUS_DOORBELL_SUCCESS)) + dev_err(dev, "Endpoint have not received Doorbell\n"); + + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, + COMMAND_DISABLE_DOORBELL); + + wait_for_completion_timeout(&test->irq_raised, msecs_to_jiffies(1000)); + + status |= pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); + + if (status & STATUS_DOORBELL_DISABLE_FAIL) { + dev_err(dev, "Failed to disable doorbell\n"); + return -EINVAL; + } + + if (!(status & STATUS_DOORBELL_SUCCESS)) + return -EINVAL; + + return 0; +} + static long pci_endpoint_test_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -879,6 +957,9 @@ static long pci_endpoint_test_ioctl(struct file *file, unsigned int cmd, case PCITEST_CLEAR_IRQ: ret = pci_endpoint_test_clear_irq(test); break; + case PCITEST_DOORBELL: + ret = pci_endpoint_test_doorbell(test); + break; } ret: diff --git a/include/uapi/linux/pcitest.h b/include/uapi/linux/pcitest.h index acd261f498666..80f4c0e05679b 100644 --- a/include/uapi/linux/pcitest.h +++ b/include/uapi/linux/pcitest.h @@ -21,6 +21,7 @@ #define PCITEST_SET_IRQTYPE _IOW('P', 0x8, int) #define PCITEST_GET_IRQTYPE _IO('P', 0x9) #define PCITEST_BARS _IO('P', 0xa) +#define PCITEST_DOORBELL _IO('P', 0xb) #define PCITEST_CLEAR_IRQ _IO('P', 0x10) #define PCITEST_FLAGS_USE_DMA 0x00000001