From patchwork Tue Feb 11 19:22:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 864710 Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2088.outbound.protection.outlook.com [40.107.104.88]) (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 340DE2641D5; Tue, 11 Feb 2025 19:23:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.104.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739301812; cv=fail; b=cwsq6OCmDYIZSbJkztz7dkk+JzwNO7n+XfNlEC+9jl78buAxfLzKnF5KFF24vrXWPFJ34aLQvNj0TVm52YZJGiLAF4IZQdZ5tv+56NWnKCgRBigdGcZT56C+ByL0Yp7RdZ5L1iyakK4cPY/r2S9kMKrn1qUldVTb9o3MfDfrcNY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739301812; c=relaxed/simple; bh=UlDKmhIPNgdPqhQOfM6ZLjMvuoDnzZk8pznO1GKD4fM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=MPtl8ZyuteMK2DU0eAqZp4G14Ut94+fKLK9+7tmtcTUl7/mkDW51afWZH6/Kb+/cSZNF73Yr0wwbg55rYMnPYBp3rqVEhxysZJcX5jDPdtcJAXYH3CTGePPzpWTr1HOJp/MFk05xzbiCWkeQexujJn50KtnM81zYT/HSD965UlM= 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=d26wn6UV; arc=fail smtp.client-ip=40.107.104.88 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="d26wn6UV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Gj4u+9uUcb+h+4k29lhU2I+D+AYHrntqWi6tXdhk4BKxEno78Bcx07sRiOp6OhJbNW8+9QXlmFKizFuDquIaMKK210ysx6R2MkffcOdIgc8BjYcHPE0LeTF2ihrTR7498Y07jurlCt/C4Ae+PSDTwaH6DwqmIg3o7PN11CP2biMFfgL7HhraOYoa2InEe9fma7NSXTSV5JDsSjLNUEdY9eHSBuH2QWRxXgvu+FyCcy7sGIwx75lOF0o0w1I/RKWUBI83eWQpIKyxCj6N8474HsiKrTdVnRL4yVMzpQYZrtN4CJD8gva01CmLU8TXj+9wg1p2MN6mIWo1ihXPpQKohw== 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=oOFt8LX5UPTafSuC84L8Wuvjx/N1K1KamY3mQ/+ddjc=; b=HpHFfpG84y/nE/NMYP5Sdun5/lQbYbmSIWViO5ql7QNYFUVzlZKP4veVxkREw30j8rzu2gNe90XnEAmzXl+r/9p35o/QRKbApTu8jE9XWg6BvQcM6RyxI6dPL2C3xaoijF3lWgtmZyjD5I7LYT2KOy9wdOnWr2KIALJ+vP3rmnutg0uH3J32DPyYBoDsj/6gBxy+8aOPmrPVkvP1zEKPf2O7Zqs3iHmxQlfbMcv1Pkd+asXxShfuqYOSUeHdUv/sCGDVpUf+yFTNhwUoMNBsIT7Lc3ZrYsztLGlIkDfhns8w4spZbtbq4zwiisGzC2kKF3ef3dwv0yw1rcyiLS3rzw== 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=oOFt8LX5UPTafSuC84L8Wuvjx/N1K1KamY3mQ/+ddjc=; b=d26wn6UVxD3vpBZ/oNszaaVP5uomJGoNqXn4c9Av9VfZ0Pgu+41rhmjwyiDK1V0YNkuHYfEiSNSYrj7kMpXoiqjIdJJabhLwXYgRfAwReG2EUAHki3cQxkHgID4kG+oywU8mcdjdlRep7ymjU9ygfTUXUN2TaXl7SRtgD2NoirqcudVi4AHR7Is1q8G1C4S10OmmPBRmOc8XnKgqA0OmtiHFH6aPXEH9bxL49HA9TxjIVLPBHyjqKex5UDo9/Si6yQuCnvnKh+Y24Eks1kBUUphZJxjsU66lnhhchdpEt7W46SysvLkTTPUhzsTeeJTT6QfYpi3oZ8IfcOUs0XsdBA== 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 AM9PR04MB8553.eurprd04.prod.outlook.com (2603:10a6:20b:434::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.19; Tue, 11 Feb 2025 19:23:27 +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; Tue, 11 Feb 2025 19:23:27 +0000 From: Frank Li Date: Tue, 11 Feb 2025 14:22:03 -0500 Subject: [PATCH v15 10/15] misc: pci_endpoint_test: Add doorbell test case Message-Id: <20250211-ep-msi-v15-10-bcacc1f2b1a9@nxp.com> References: <20250211-ep-msi-v15-0-bcacc1f2b1a9@nxp.com> In-Reply-To: <20250211-ep-msi-v15-0-bcacc1f2b1a9@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=1739301723; l=6351; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=UlDKmhIPNgdPqhQOfM6ZLjMvuoDnzZk8pznO1GKD4fM=; b=KRa+YQI1Ef4Kh0XipCzg+dHbW3HtpPExBhBXmuLI8GcRVcMxHjtLFf3ZieAm4xFugxbga/bY9 sP9utOCHyPCB3tsQMglFKJ7GEtEEVr4bFmy4Fr7MzcmV6uMr0OUyQTX X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SJ0PR13CA0231.namprd13.prod.outlook.com (2603:10b6:a03:2c1::26) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AM9PR04MB8553:EE_ X-MS-Office365-Filtering-Correlation-Id: 021f3305-3919-4ac9-6141-08dd4ad18f8d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|376014|1800799024|7416014|366016|921020|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?2eXUxzicTnbI/C1GeWl3CH9GFJnCfHN?= =?utf-8?q?G5OeEZ22CXP4mETmCnmeAL8h/tBKxdG+DjZFp9wAMev4OLuBW/XV4IN0PcA6kCPEp?= =?utf-8?q?lNwczf9cXk47o8CqIbO9sI7ENHZVCc/yQLCmyo2QeFauYXwsid8QnKoW9PLqe7YyF?= =?utf-8?q?KzhIPE4zOFUMjPzAgjZ09QegbF3xvh5bsSX2V+30558w5p3NXW2WksyezTo6JRctk?= =?utf-8?q?k79b0XnXWz3c2fU7yJaP2/h6OlsHGlqN8mqf74M+jm1fVfvtqzJzmIH2T2uN2/oNL?= =?utf-8?q?Z1EGYpxltl1as+e0ZRqP4LB7h6h+GGI7OAOIejBqC6MOC3A4Yl4CyzADPLYswsu2U?= =?utf-8?q?cLMPdeIgREbEq529oPceNSgQIk3THdP1g0Ji117RFx4Ojnz86Sd0Lr+kigxsKXpur?= =?utf-8?q?TC07Nf+zaGaO8BzOnUwy3WTlIvM0P7TvvBGH8ZIwVOqtSlpaWugUDu7By9fVX1Ffl?= =?utf-8?q?IvpsOAauE73DBwkpNnwNf2A+b02xnr6O3P/+544WlQMOBb+zEOKpnMf3Jl2XxL0sE?= =?utf-8?q?0QOF7s23D0T3fuE75U14hK3g05T0Gafm3AhsjnqX0pvQ0QHd1MlWLdnuSU8BEeURX?= =?utf-8?q?lJIg5QuSshYyRU6F1OQE2TiogZeekkzV+Jw98i7L7RN3FBkUNw4mx2HganU536wCO?= =?utf-8?q?DXEe5r94i6tbMhFCFXI26rcxbohQDptdDctji0VhrxEUg0VA+HfRywe2MGoLEvUwd?= =?utf-8?q?0h20yctKq2h6krwpXSx8P1iFcKetdFQMB3JXqMKXqzzg1pbP4PcITAZ0kuGt3Aw4B?= =?utf-8?q?XkWuzGXH1omCcWJQDkZnb4mFtMRi9uZQrB9EDQ/iFGJefN6pBYuak8ozi8v174V2h?= =?utf-8?q?nlvJZWRpU74rRYr0ZApT19pNyHLyuav5g5snGbtvag4EWf+dfotyECRKYGc1J8ulL?= =?utf-8?q?sMLUNxJCuEcDm9YdMrFEpPFQwiZffqaMajAv9HwItKuqMCEFE03SPjmm1jejRw3Ai?= =?utf-8?q?6M4xBR8DDSmH1/+zOc9Bgt8mDV6BldjqfwPcX68m0z5YojzdzDNFbZi5y0vp4y+Gs?= =?utf-8?q?DdNl2oxHBG7zCIhX+qu08q7viEOm7j1H27FjsR15i62rtEsQunpLUC6HyqzkJg81h?= =?utf-8?q?IHWK9SqhGby3BS9Vk7bYpFA2UfMogyBNKy7Qkp8hgAEqhb+7K55tOdZEECxkXQX30?= =?utf-8?q?o1IPZtZ2jQXVDhQ+/4zckbWJXGuWQk7U2n4u4dsVdbt84JhSxb/03oTnoA7+sgYY+?= =?utf-8?q?b1RZarWePWGYT6c+7Sk+N8c1ka18rTc9ZeU7NnD9euyxgxSvC+l/KlZTodRLHsL8k?= =?utf-8?q?D33Qzq/7UpdeeceYhCxdcv0neTTre6X9Cve5jyhrGnCZ7wHobUrZYumO4DdmMdcS+?= =?utf-8?q?5d+or6zL0p0s42jaMydsfu5ULPyrOvj8w4BOnOmCxZ0ExLJeKgvj+4aWiSWwjZnzc?= =?utf-8?q?KPOlynnLD5VUJ/I8iUpQpEb5w++V83wFQ=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)(52116014)(376014)(1800799024)(7416014)(366016)(921020)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?79JUMWW/8hHrMeBv75blB7TkWmfA?= =?utf-8?q?W0h8FCcA+Udi9SlNKrRH0/qWEwk+w3QGqbSuyCRed1jHapGDuW1Jt+Usr6qOatzzp?= =?utf-8?q?PNCJD6CWMqU/YHob03FUPARBYU8wdlwlOD72MrJE7fM8AFJoACW9A50qN5FLDwTLB?= =?utf-8?q?9qYG3jNrxFCq4keooU9WmxaTVhkhOIANkH22Lkhkede/UVtc7tiZzSkmqzZdbjWRw?= =?utf-8?q?e6eYB9APb5T2+v2hpnOuKMuP5X9yvL8MRC8v/+hfhr8UUvx0bCexIHF6wpI/bVVKo?= =?utf-8?q?C5wkmH8vf48CFZh8VYB3sbrNKP4AAs3Vn3t9zZlf2KOnB4SbGLBiGhuSWMF8246AP?= =?utf-8?q?Szil5xO5VLHVNdGcjYI101CZ6HSCHjXfBOcgTMHWhJGSnw3lf9Gpq+Gu8Emup0d/y?= =?utf-8?q?k2PpAx8voHGgFNnZqEOdHoTmgkqFX8HCiAdXMH9POBk6CmoQkMUn8qKszhW/kXMcK?= =?utf-8?q?fsB5hvnzfDZKcPSARVn/tS0Y6+xKIF5SVbZcWvKRYGGNnFsWD5qNWMWKGQiQ0OT2j?= =?utf-8?q?Z+J5tcRjuDDyHPo+hhtTg6tFS6t3uuUM6Va8o4U1iydiw+sM0GRrtuSvvxKYvUuRs?= =?utf-8?q?1X835stGS6BRzjreS6oVmlqZRZsemfvgyOCyYQWJrFdY/EU4OM2Bx7a5K/aJKQpNu?= =?utf-8?q?fcJ7H7YfJgiU1to5yw90bxHDeDS0E6Gp8nwpSyziGC36kOpYbVoTCw+gsFsQTvha/?= =?utf-8?q?1Q175p/Qz8pCHzGNcnVWHv19S60sAzFuSnsT+nxe0MbMZb170Oe0U15g9cRVscu53?= =?utf-8?q?duNuZldmVbmnOT1IK6Zk8mT4eIYkVo2eKghbKSKEFCESlK29ptk+x8qhw4IE2tWUp?= =?utf-8?q?bvDs/qRUFM2JZLKU+RGn9coJ7ZQNHTYIT9qs6NTjdbwpsZT0kt1GwSsgkTE3R5CbU?= =?utf-8?q?RUt92kVRUkN+qME5j7jm9ra9RD2tEiSRjHrGJn5JwMuC3DyKIEFbkNKnSgqaWuW2G?= =?utf-8?q?cuDl09Qem86I05ncB8kL7BDeYnlRbilSXzpwtrXt8Jkh7vk/T54uXvdvj+anRJSQg?= =?utf-8?q?epvMOj4xwKGXzEhbJQ+YffvDwAYrLJXFBBiDqG5fs2s+z+v/tAip8O4t132Sx27uy?= =?utf-8?q?bbdDtw44GFaXqLLfjhz9Jk0Gk+2gDQXVDZhJht5Ny94GWyIFVp1SjIzNCv59yfbY7?= =?utf-8?q?swuHp6pUa3uQYYWkgV7RidLcUl8zPVEXm+TnO4WCw4vlFlrTR1RP7ts9ERQe8VJW4?= =?utf-8?q?w9fowwB2x8ZdVcN6IRgrNjXst4vMxPSKUiQOq+JzdKcwMH5P8tFQoyUZrtST+eHrq?= =?utf-8?q?u4J1Z1kGu2p/jcUTmHiXBKtCCKENKDnxGffF5A9EFuYR3Ft4dF7XeMTzWdHbzL+Q6?= =?utf-8?q?PU/88SsvPdDW6yUHo5oq9kgKxYmQV1RAGOIz8lKrQ29PCWbqnCZhYBveL9LGHHPna?= =?utf-8?q?Kme0Kr0bktAV0rJZ79GeVb4dDFDr4j0QJAUr9DiTdFmVorHX1sQTBxSAoHNm3zP4Y?= =?utf-8?q?163ly7WQSWe1IuzQgamPylOn6UectdfcdmKamoPqdPNJY6QmKrLD22i913h4WM4Yl?= =?utf-8?q?vvc8AoIHApaI?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 021f3305-3919-4ac9-6141-08dd4ad18f8d X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Feb 2025 19:23:27.4528 (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: 2XFaU1cDc8ROXj9inhACXjNg6HtQOvNGeqRpCyMxaKMOyrYKomL+OZk0q5W75DKMhXARwMdLPYLmQrJV0IQh7Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8553 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 v14 to v15 - none 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