From patchwork Wed Oct 2 14:50:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 13819877 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 60D16CF6D34 for ; Wed, 2 Oct 2024 14:51:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Cc:To:In-Reply-To: References:Message-Id:Subject:Date:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=rpmrdtcvEAbpk2WoHF9OXQWpNc0CP7W8rXH7kvACD/Q=; b=qQjmYUSXYgcddAMNADbV8165jv lSOvH9rGrXu7qWOig+IueTt5NFj8T0QgOz/vTLrvttJJeyQtHzOPGlmCknqA1kgsfEJHHHL75Eslt ID7Suo6Wr9IaQJMEKUAKOCHk9V982tZVwKsOoaYFDE7ax11YQvyYGF62mqV78Uc3I2KmUkgWxeX9K 0YfLtUoAMSL05BcPcBJ1uxZ5QBQSqgkrK3PkQOLcWqchVrxkr1zOuNqxf7ZyziMslB1CyhD3dt9EY olvOJBcClpGK1sXaT9fquzdE6JgEF8SJOngBk5doA737cLxHHwD+DmU0Lv6WBrCaSy+8YvyGn03d+ WyT6Ifjg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1sw0hr-00000006Sx6-0Nhg; Wed, 02 Oct 2024 14:51:59 +0000 Received: from mail-am6eur05on20610.outbound.protection.outlook.com ([2a01:111:f403:2612::610] helo=EUR05-AM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1sw0h3-00000006Sin-3veZ for linux-i3c@lists.infradead.org; Wed, 02 Oct 2024 14:51:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nXkh5eALk5vyRhsUdVGILm+dGYBIk5oeuRaj+gZOBUDJUkYmXgZPrg6h4dCTO8cpOBaQB8gi4L9kmWK452CWppmH3TOODVrjlb/Djq4XIEP5uOuxs2qhAIbrkbs2NgtbQJQQ8mTUCMCAcbbSMpH5bI+1tOamF9Ievxys5zCVX4LkJRLjMkzW92mcb6Byr87EuLR0WiaTVblRIqhI5JdKkrsuDzhmH335GmLUE0+LjzIAqY1d3eFxBSE3YOvSXa6H6XUXjeT6IcOqbay06XEAHcNdAEb1+QPl9/xMlp09zSQp4Fkdu8jGFxY+a+tx/Vu8u6PpQsSsBjDlj5oNuCysXA== 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=xCabqBI/J+Um2gFtk/c1eujjBGuD7tYM07r5dx9+W6Q=; b=jxdP2DcKPBe0zDSp+8mzcrWWYge39sggik/ye06ecGSDVTLcZkw+y9dmK2p2yryun+GAup7KO8i4naz9XLy+uTOwrhAmXYhSQC7mA4tpiB2Wl/GfbR6mkmGic72Nv+4zRA4nLCmj8/dvY64JEifwdYqUdhnwHdRn6jsFFthID1mQMfuRYINfaUpmGUX3kbS04KXrss5OmJmR9U3Plb4ifmzWt9dcv/Al1unOPC8o9O01XQRyA5Hu8LdQOiIhxvNOLo+qjkXByge6JIhgz7BpA3MPvV1zyAFjY/yVzZtBL7a1j6jPfHoHaIXn7h63M/7OTUIZ1ZneEiZtg7J8XQK4QA== 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=xCabqBI/J+Um2gFtk/c1eujjBGuD7tYM07r5dx9+W6Q=; b=PEXUPkiiO8XmHi0q/MkPrTL4+Bta8iS9vIrlsqMXWLLFKYb6VWEs6EQdyQS3NxFBZNAfsyxoclRM3dEzIUsNKGDGNuvBVwIeIivOs6yfW0GOpQwn6yX50zhHU4nhVxzLurGrZvZpOKMpxWSQhr1slRXju5Dw0MZEHZbns8N8Mqb1Mv49Xv1ekz1Pr3anl0GullU3nqLwZn0BJiavZj1hwKEf3st+o9fGrxxIxU1kORPSwyC7aaV/ISY/4RqL1PktUZATXeWNy8BiLsa7qjU68INIe503EZ0f6VqnpblGvMgbVvM9vcQlBTrpNnXPJvoGNJxDex8H7rzM1N0w4k/f8Q== 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 AS1PR04MB9699.eurprd04.prod.outlook.com (2603:10a6:20b:482::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8005.27; Wed, 2 Oct 2024 14:51:06 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%4]) with mapi id 15.20.8005.024; Wed, 2 Oct 2024 14:51:03 +0000 From: Frank Li Date: Wed, 02 Oct 2024 10:50:37 -0400 Subject: [PATCH v6 5/6] i3c: master: svc: wait for Manual ACK/NACK Done before next step Message-Id: <20241002-svc-i3c-hj-v6-5-7e6e1d3569ae@nxp.com> References: <20241002-svc-i3c-hj-v6-0-7e6e1d3569ae@nxp.com> In-Reply-To: <20241002-svc-i3c-hj-v6-0-7e6e1d3569ae@nxp.com> To: Miquel Raynal , Conor Culhane , Alexandre Belloni Cc: linux-i3c@lists.infradead.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, Frank Li X-Mailer: b4 0.13-dev-e586c X-Developer-Signature: v=1; a=ed25519-sha256; t=1727880649; l=3372; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=G9/ttx8HfBwzcCCJhNo04kopgONzp6KBdwhqa41YDTc=; b=j0Cy3zpyiNPCgiiRenemJPXQtFjOsLeN0k4YpZehwlftlCPnvrOwh84fLbeXlV3tjg/OQC8vk cLXKwyPyjfWC8euOFJY6eV/24w2f7PuVitZptCbp8suugX96dVVqxqO X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SJ0PR13CA0177.namprd13.prod.outlook.com (2603:10b6:a03:2c7::32) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|AS1PR04MB9699:EE_ X-MS-Office365-Filtering-Correlation-Id: 35375ec9-9797-4301-1bff-08dce2f1a324 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|52116014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?efM1SY8QXvO8tn7bmGT1mXLJ6MhyjoG?= =?utf-8?q?6h3Fg7cQoeWQIKTjMuviqM3WEnA8QFd4MscdZm2b8xgTw7jl1eV16r9mDhTbhLUsI?= =?utf-8?q?niZRO52YFuFzyiXMyvsdl79Dd35vOvCjIUY2q1ihbtnWKxCRYv8GwolcfHNpxPzL8?= =?utf-8?q?EO7UaqkuRQFeA9O3T9mGCJnf7eIE1w/Crcw0c3w5t/WDIbm/OpgfplG+92jrlqcP5?= =?utf-8?q?4yXo5sUmBYl0x3IWE2hxIRgDw9MfKJdhRWCEMPtqnLaK2YyW0OcHwKZT3Chjsu8sr?= =?utf-8?q?B468z6KREOQlhcFD9TO/liB2axxIxbFC38UQea8X5W0GuEilodo1g2Jar5TbO5W5n?= =?utf-8?q?vBR6klN2qlFJEHZZxNYBfbLHDuUHYYXR5HQ3HPt3kN1svH7TpL40vwN29xz1DzevN?= =?utf-8?q?M1W1ko2MCYsVETv1tpw8S+Oaszd8x2nzCriZMjM7uzkwzthLUT90erRMiealHuSer?= =?utf-8?q?VDwdC6XVHz8oenRQ+81OYdYmjGDBOJWPsgvy/n1jkuReEJFuI7xzJdxBam2VOLLjE?= =?utf-8?q?0UPLPAqvQZWkYNmssiK3sgL4gCp4gyO8wbwIKRDmKkk4V99QFzbXeVMhKxYEkkXrb?= =?utf-8?q?ktSYs7Jnucy1aU8i9ZN/W1q9JX4AeToc6vd8l7oLqArxWAK9ZGCgrYUprIoG9Sgy/?= =?utf-8?q?CZsCnHwTzdm//VOo0ctFv0+uLW1wrrAH5BhsxCjfxruCx1R3o3sZNQhiCjFPK7Rxn?= =?utf-8?q?4dNHy7kzPXkyDc47Bf6J9259gQ5QPK8Y07uiGAtNdTsSdm/o5Pp60n49oEMJUNIhD?= =?utf-8?q?gRx4LktmaOl2Ao35x60buKM3M1y0okDyzAqWPVaAec10W8XKjmM106oA5V59pST3M?= =?utf-8?q?qwXi0JN+4R2CzL8ojhr4WjxcQIc4YdBAwO00KRdvKQY1FtL+n6iwxEdqx+e+NUJC1?= =?utf-8?q?2+C5CHfKWI+0ZTCWWm62onkyvLU07fLBoCoHOGAHrHPM4rMMKLmYeXOeabN5KeodE?= =?utf-8?q?+KHNwrVPPe/6gr6HgkuQs+KLwNaNeQU1fUMG+fxbrBxnVu+gb1Qb0pTsHEH/Jsq7o?= =?utf-8?q?7EE8weYi1Ujs8u41fX5w3IoQ6/rOi01vSmIjJPaP9j7uWcQhb/grs6n8jOaveXey9?= =?utf-8?q?nVdGqhecXy+fEpJ3LqdVxQ3qUEe5XWxk/+mwK6jmJo3at6xSX+F6zwwWoG1S/lX7d?= =?utf-8?q?MZjMt0I5W+tlR/RZE2Sp6tgwwj5f/mWiVj2jUcqfhO8L3GPlaujck/T0DJHa8S/QR?= =?utf-8?q?ZlobmJznZdya5FKrHEHbvobtWva1ZYRwDNmTocFgXuvUwyyMFyzznrXzwXt2ieKGF?= =?utf-8?q?01vTvboo9AqsqaFg6sIZHcebqdQNAON5F9A=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)(376014)(1800799024)(52116014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?qHrZHFVmC4yj4OoUsKw/ZcM9oaIE?= =?utf-8?q?iqzEROKWvsr8ZDtS0IBuBqLgpLowzO1Eihrwq4HQPAL7/P0w5hY26SpRrU/1safVM?= =?utf-8?q?6sVT+zewLpRtd6ZUClw/9ODkQsAC3uveSLSichbiFF9xYCc2GHKRBOnCtK5zsNWbu?= =?utf-8?q?SzupPkhSTU2f4/gMJcR0z5he/TY7/JZvNGvNaWhWLngAN/eu0pvuQ5j4Qy8qjhae/?= =?utf-8?q?ZtTD4op8YyuISTn7C9wM+wsvdJl1t7+szRvC6SRkThMxYHmNBkI4vJUHHZn+SwVbj?= =?utf-8?q?trsuN4mIjuV5w+cC5u7uSDTYDIV5h6AFn04JQLuzGmIIWAIsqGfvGLk0+x9dWzOnn?= =?utf-8?q?eqr24C357J1GSL+KbmmySA8xzOF5QOK+faLCH4N2YJMww3cGQKlrIC1q+gqfJxFgz?= =?utf-8?q?M0X+7h6Iq0pGxTY43iqpVzgYZJ/rHDh2p/YzZuwONisEwLlP6swtGFBFybquJoGlq?= =?utf-8?q?Zy1zdSu/Sfm3QEEC8V38cVaUWx/ERXYM1iQcOe+Hmf7/E65lNKyeiBrse90MFh8+s?= =?utf-8?q?TLakQehTj+kav7qLeAZ9wSH0lk/WlhZv+jM9j7xOJ5wovdHhVlgOJahbKV3THfTVY?= =?utf-8?q?YWZ5ayLD2RiOEGxWHlDFnqFAUO8fnawfXhIXspU3gsZN1PJZ46Tw+WTg60ieWf53u?= =?utf-8?q?k6KLYA6wJEkZ/shcmyx+Zt/cpAkiGQW4NttqU86ab/l29r4T5lXGzV3eBOSkEnW/f?= =?utf-8?q?nnMRnqKCmkfdHfLlLhxNi40IyL3hoUyHa+stuNJmRui5ZuW58/6mIF9tw2DN3Srwx?= =?utf-8?q?30u3R5W7qHWRwA3GQN/nr6SXg/2ZVzNKyN5cBaZLwkzl00Mz030itYP3bN2fQD4Hp?= =?utf-8?q?b5ix2W9VHP0yG8/SEUeac1hT0+Ft8OYRGhZqfm3rmgfoOQtXRSrlj9M3m+bzu7CKJ?= =?utf-8?q?Ay63xKsSQZg74sDElgKYBzZ1SA/R65TTw5t4g8CB8ryO6eFdyyMEnsX5pwllcLER+?= =?utf-8?q?tN5QPii1N1OzGzXrHFR1k6wnoIRh5ewf7gqXfPWdM/6FXeCLeHMKDBzilHwWFKX4H?= =?utf-8?q?4acY7VBvH/5VDxioQAae3opmAN5Xanx8O914dzRB7hhRQRI5LQHBPkSB9Oe8/MqFs?= =?utf-8?q?rg3UfgBTcfMh88FhYM2WtohBNUYK5WItQXMLU0Z+JTNtxAZ7eTCr+u3DMPN3OPnY6?= =?utf-8?q?iQPKkDlgP3qLOBX2mRe5I+Pz35dY6mw6oHGyKs2r8s0bGLBdCuUC93GCXMSzE97vE?= =?utf-8?q?LON6RKedeQskoM/snLQy162gIx7oPJJgpFP0pYMqzAiWZyIPDh8kKUg+zZU45HX6F?= =?utf-8?q?+DqbIxIErQ6jz9j6rXmbtKYcqDHWx6mIGErUcSmx5R/e47pse2BGDyplTxqRvjm0I?= =?utf-8?q?rx6D0fC/2MOYbteRQKa+Jd+UwUaEj8O3o0NVcaHVJJZ3I23H+n5muX7NIJgERAFvq?= =?utf-8?q?il5AH1JeiGqI3+XDBG27ICdCRJK/pM1ugAhpfVWKHL5yCpg5KPSIv84p+A9wBakMP?= =?utf-8?q?UCXlmoNLgTMis6lDuk5BYXN2nlUiN7VlVbrSsvfl/xOU+A0eiQq9IbBBlCd00y17k?= =?utf-8?q?x8YMAQezCkT0?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 35375ec9-9797-4301-1bff-08dce2f1a324 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2024 14:51:03.2566 (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: Cx1JgCw6BMVgYqsPZbDQA7JO//otiwWncNvPum3BFme3Cn73gxxpXcIZZbEz08MHSWJPLzNmvUwfZSAjEpAacA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS1PR04MB9699 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20241002_075110_009311_6180D548 X-CRM114-Status: GOOD ( 15.48 ) X-BeenThere: linux-i3c@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-i3c" Errors-To: linux-i3c-bounces+linux-i3c=archiver.kernel.org@lists.infradead.org Wait for the controller to complete emitting ACK/NACK, otherwise the next command may be omitted by the hardware. Add a "command done" check in svc_i3c_master_nack(ack)_ibi() and change the return type to int to flag possible timeouts. Reviewed-by: Miquel Raynal Signed-off-by: Frank Li --- Change from v5 to v6 - add "add a" at commit message - Add Miquel review tag Change from v3 to v4 - rework commit message - add miquel's review tag - directly return readl(...) --- drivers/i3c/master/svc-i3c-master.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index ed3f1bfbea37a..7ef7e50b4b916 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -388,10 +388,11 @@ static int svc_i3c_master_handle_ibi(struct svc_i3c_master *master, return 0; } -static void svc_i3c_master_ack_ibi(struct svc_i3c_master *master, +static int svc_i3c_master_ack_ibi(struct svc_i3c_master *master, bool mandatory_byte) { unsigned int ibi_ack_nack; + u32 reg; ibi_ack_nack = SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK; if (mandatory_byte) @@ -400,18 +401,30 @@ static void svc_i3c_master_ack_ibi(struct svc_i3c_master *master, ibi_ack_nack |= SVC_I3C_MCTRL_IBIRESP_ACK_WITHOUT_BYTE; writel(ibi_ack_nack, master->regs + SVC_I3C_MCTRL); + + return readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS, reg, + SVC_I3C_MSTATUS_MCTRLDONE(reg), 1, 1000); + } -static void svc_i3c_master_nack_ibi(struct svc_i3c_master *master) +static int svc_i3c_master_nack_ibi(struct svc_i3c_master *master) { + int ret; + u32 reg; + writel(SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK | SVC_I3C_MCTRL_IBIRESP_NACK, master->regs + SVC_I3C_MCTRL); + + ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS, reg, + SVC_I3C_MSTATUS_MCTRLDONE(reg), 1, 1000); + return ret; } static int svc_i3c_master_handle_ibi_won(struct svc_i3c_master *master, u32 mstatus) { u32 ibitype; + int ret = 0; ibitype = SVC_I3C_MSTATUS_IBITYPE(mstatus); @@ -421,10 +434,10 @@ static int svc_i3c_master_handle_ibi_won(struct svc_i3c_master *master, u32 msta switch (ibitype) { case SVC_I3C_MSTATUS_IBITYPE_HOT_JOIN: case SVC_I3C_MSTATUS_IBITYPE_MASTER_REQUEST: - svc_i3c_master_nack_ibi(master); + ret = svc_i3c_master_nack_ibi(master); } - return 0; + return ret; } static void svc_i3c_master_ibi_work(struct work_struct *work) @@ -935,7 +948,9 @@ static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master, if (ret) break; } else if (SVC_I3C_MSTATUS_IBIWON(reg)) { - svc_i3c_master_handle_ibi_won(master, reg); + ret = svc_i3c_master_handle_ibi_won(master, reg); + if (ret) + break; continue; } else if (SVC_I3C_MSTATUS_MCTRLDONE(reg)) { if (SVC_I3C_MSTATUS_STATE_IDLE(reg) && @@ -1209,7 +1224,9 @@ static int svc_i3c_master_xfer(struct svc_i3c_master *master, * start. */ if (SVC_I3C_MSTATUS_IBIWON(reg)) { - svc_i3c_master_handle_ibi_won(master, reg); + ret = svc_i3c_master_handle_ibi_won(master, reg); + if (ret) + goto emit_stop; continue; }