From patchwork Mon Aug 19 16:02:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Li X-Patchwork-Id: 13768538 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 57154C5472F for ; Mon, 19 Aug 2024 16:03:23 +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=ANbTOB8YCovHMAdoPOqO5UQIZEJY/VDzj/5Y6FevqBI=; b=SjzbyCZTW9LuxMLtiQSI3Cl0Ys NLOSKrQberLSWWXIGzqI62T/zozFFGtrzJW/Dn4+vP34jJ32C5eZEh/vpaX/9rQZyTrwoYVEa453i PGuTYL5cv/5wLutCUwXln+FR8lJFNdVu91N2vOiSIDZGwYPIGY2Ve/GzKyHRNhSdCuSjHTHNXu6ZZ o1cOSmfEKybDsZzNpcJrNTXxMwQbZX54ouTsB0wN4I2dJMaAGotNhQOR7WHgAJD09HrdKyzMC9chb GIrKJ9iS0XkgMN+CsQRpJThNpCj+yalLvgy+zKE9VThWky5HjgM5XgnQQyuOlCN+H27gcjOoEOYUF EvaCJGlQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sg4qp-000000024kR-0CPG; Mon, 19 Aug 2024 16:03:23 +0000 Received: from mail-northeuropeazlp170110001.outbound.protection.outlook.com ([2a01:111:f403:c200::1] helo=DB3PR0202CU003.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sg4qG-000000024HY-0rsJ for linux-i3c@lists.infradead.org; Mon, 19 Aug 2024 16:02:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wO8Ml8bpm8pCOMfrFfmKQfvrmmlH7wG2mbUJBWJdZ/waYY/00M/VvbhfEV0Rmp4QsYhpNtcAQUlkUxbRPr4p35tg1/Eym2CTXPIcJNOCuUE9PyH4dp4NEHo0TcpQDf9LeJZZrPTSxC76ijM8jW8zGVpKtp7vXmglASFYGNHfMT+fqTCl0hrGHEMxanwsdlwIDMYqLKrI7aXS8Lunb+Xhw9IjROM2671Nrt09efiblTZHG4pUKEUC1brBO/AdElKMJhiIpO9fjCboIO5RNw926JOrupJMiOjtUH2Q5TmQTclxhyqSihv4fnQfUkokxdEjEdrgN1Ng4DVfu7jp6vGgjw== 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=MEdVL+pyB93zAIEI3T1O9Db0QOqRxjZN/Oi8sHzMIOo=; b=UHxvUSRQOVwVzuPUvg6QdSV3Dg/94AVd/IXLDCpYPU4dhZ4b9aH1D74VLMvCN0woV7Kf6d/rQ0NzpIy8h6TdllfMUSxRBNF47+7umvht8eFQlJIYbLo1C7kCLVPhKXEVhQGPXYraiXyOdKzrGRVNlds3v8E4bViQmOSW40YRDkcEQBg6lyu4O4fTThX1c15YFZm/UgFEBoJGA+VCTabXc+44LcVsxq0Y3Am94LRClIHq7c8r8lW/VDHOPvlVEqWDov6aMExsPtTV0LCHGhYQmrokSvMhzrUetgHXxLfjog/r/GLIrpk/FnX9GH3Fnv1BmedmtF5YOs07zgcEBLqigg== 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=MEdVL+pyB93zAIEI3T1O9Db0QOqRxjZN/Oi8sHzMIOo=; b=eYKAB4pjFgSf3QTFZ0YWxv9roZu0FfoPGqcZfZ+yMRhLeSt919KpVTvR0+JgIP7yyjLx38sRTRxLsMzZ75WssE06IH3K9OxX+XNhiMvmE6pcmiJQ0GhXNVjz6CpsRAupwH71m7/AQJsgEYg+zBgHrquVI5qAPxPKrWvLQQ1kaInvcRZXC3e5YcQUO+UdS2WhJZd0NdVxLnQCBLHoMWD8jDwPYOw6sRsKeGRLQRW6du3U9uWISXEORaA/Nx9gQGhcswayd0/VlNWpi5whSMuiYdzxPxzhJ+ey4WA6nNZPFhyLZGakZzEBq+YCIQy0cH+9EbutyovEJMJzSKTSAHN4gQ== 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 DU0PR04MB9659.eurprd04.prod.outlook.com (2603:10a6:10:320::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7875.21; Mon, 19 Aug 2024 16:02:30 +0000 Received: from PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06]) by PAXPR04MB9642.eurprd04.prod.outlook.com ([fe80::9126:a61e:341d:4b06%3]) with mapi id 15.20.7875.019; Mon, 19 Aug 2024 16:02:30 +0000 From: Frank Li Date: Mon, 19 Aug 2024 12:02:04 -0400 Subject: [PATCH v3 10/11] i3c: master: svc: wait for Manual ACK/NACK Done before next step Message-Id: <20240819-i3c_fix-v3-10-7d69f7b0a05e@nxp.com> References: <20240819-i3c_fix-v3-0-7d69f7b0a05e@nxp.com> In-Reply-To: <20240819-i3c_fix-v3-0-7d69f7b0a05e@nxp.com> To: Alexandre Belloni , Boris Brezillon , Parshuram Thombare , Greg Kroah-Hartman , Boris Brezillon , Arnd Bergmann , Miquel Raynal , Conor Culhane 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=1724083326; l=3150; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=Hh0q3o0ccZLTR2dgGNnC93iysep2t/1zblPjKc+L/EE=; b=7BuLoeBKoGN+8U+MgzzIxW/CbXsgpGth92q7FZLdgrl75sujgcY3Vn770RRHmPkABe5ZpElHX ZKTjPmremckD55edf0juU7bOPzxS60Bd+TmfOVafXzq/946HBi2H9zF X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA9PR03CA0005.namprd03.prod.outlook.com (2603:10b6:806:20::10) To PAXPR04MB9642.eurprd04.prod.outlook.com (2603:10a6:102:240::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB9642:EE_|DU0PR04MB9659:EE_ X-MS-Office365-Filtering-Correlation-Id: 36f76cd1-dbde-48c2-03b6-08dcc068549c X-LD-Processed: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?HbJSoGhv92u8ApXYAjVdm9mWWN6JLD9?= =?utf-8?q?cQGfJqqfPrHREGpIYWgjuCDG0ZE/5DmG7xXCbgBnm+GBUrvPC33xu+H24R0BBTxsz?= =?utf-8?q?JPUmbTEYVQlczTs/sKanPMXNdoKDpFl65xVrI5KfV1HqQTCCgmoiuMPzjpB14Kacn?= =?utf-8?q?W2KoIeq0Mc+tyS1+Ajev1vJK/fy++k94nYj8P/U0oFhVPndJUW8nvIOdIqYLsAdBO?= =?utf-8?q?batfC/PjOREUfDsHG1kzzNXLFYy0ENG0twNdVsyx+39B0Op85gbtSzCCrLjc9VLXM?= =?utf-8?q?5wsduhzk1528F1Anwmi6ZtQnwdHl4TL4YorPvOTkLKekae/bKL6oTWavyxWXGXzB5?= =?utf-8?q?KpKe7t3b8gbgaTCq3+N/McA77qY6JoLpCWsnuBsNDnDixSmFo8suxh5W0XJW5zugw?= =?utf-8?q?6q5dGV2SOvbEBOX9792nA/mA8gUMH3D2fO5KCQwL2EdAVl/3lTn6S7CapKT9SQNFF?= =?utf-8?q?LRXO+luav2Z7EpPVNX6h4wdSAhGHEw+HRmRORQPCZHk6836H+8k0ITZgB63hO49K/?= =?utf-8?q?9GxS3OoOSTwlJ35DjU1qlMPCRNcU2EUpTC3K+AVKaNlXXM74HEk0z4EAihZ6oozRx?= =?utf-8?q?S3ocJLAGN8VvcinrfM+ND3ZRZW4HsJOioh/4aCls6c7859tMuA7u72fE/sL1g01gn?= =?utf-8?q?zvMtfwgqoasUWErWsSabZjhSMHKjxsVazzdj06COnGXobVWMiolfsLmCKB7FFbZim?= =?utf-8?q?e7e++VjBttt1wdu6WTSWMVPHMma4tXa2SpucTRyr1kbbpQkVhR4ZY/U9SdMmGF2eW?= =?utf-8?q?SCpqR27dPSAlGglZS+aeROLW72tjILn4YEsxx9RIqxOI5mWj4viC4mQ3b2kmxWcAg?= =?utf-8?q?KKBP9HBVODVH3B/5j9Z6fe8piu8NIakqHsPV0vCXHkBuCSS5ZCnweltePuQlSmAXt?= =?utf-8?q?JxMUmdhtzMFQ2Xh7kokG/UAlM8R5frjMlwkqdiJ/f4TpAk95GLAe5TY1ZxDL5+H5u?= =?utf-8?q?f5bA5GYuyrzvzQwe66LIw3o3ntOlVNuLfmRIfeFLQpBtc6QoHmaSQuu0gsmDd9pMC?= =?utf-8?q?3M+5Zv8ks/k2Yumbg2EZnuu31t8WKwqWS2d7RqYB9e0NNtt+aBRhncX5t5ZHWtP8A?= =?utf-8?q?EcXUS7FHtzAEOquEwkC+rLzr1zZyYyTxFMvGmPEuij4dRa1W6zeP3d/V0pXmjYEmt?= =?utf-8?q?Dklk0iOS2d2LxPG2w/Oh3qUrgilBtcXXBHBrC5UcpQlt2zXdG6roZV1LwLfcBy3TO?= =?utf-8?q?/PxSsFJE0T0MokXbNQq3zrztANoL9kzRVmfXudoHFh3G0PSOCgQVNOU9GRArjfMVg?= =?utf-8?q?ZAeRCKkQokE1iz6CgwyAoejVQ5KZ09pdgNlua2aG/eS8m+6Fgwg6mwXYVh0lCYhvB?= =?utf-8?q?HykNu0DBUoPz+wCAzv476SpV3uUUeQw7ow=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)(366016)(1800799024)(376014)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?v+YT0f9mdRerNAV/AUX2R0qpIQMS?= =?utf-8?q?9gCjXG4xlf03SnTH9UfgBzIZb1YC75NX9kALwdyugZTnnMOZmQTgXYmAdr7nOWv0/?= =?utf-8?q?+g2q/FfGAT3R3P8A0UW4eOQuzs2pUlska0rVkLIfgY+yK1IT83vElsc0/04SFJg6e?= =?utf-8?q?R/WE2g4vicCH77yDvGhVT+pur5LhzPluseKzkJBXOUfc1bz4Jv9hi7fAVP9CzLafI?= =?utf-8?q?u4qOQKwlJvYZcye58c3bBh2DIoShJaTrlUQslXEgGcFHP80a4zLveoXMGt1VBDs/G?= =?utf-8?q?Ts1pvzw0HQu+qVjvIV5oDIC+EyJqL0eJy8SCv6VYM5AwMGUiR+Z/LmyoKLR9jIl4x?= =?utf-8?q?ew3HYSA8xu0IxwDqtiURlRYYClAJEBrV+tB6seWh9lpeLLvnd/lup32Ac15CmKh4k?= =?utf-8?q?V7FFlmrBtXyIVfIYElUmXnKd6i8AqRB57G551Qf2IrMimcrPj/3cezG4dgR6WtB6z?= =?utf-8?q?bwmQrU2QbhvTVMh+UjKkjoegxDqhZ5vmFhnuKO9NfhaSzofxdyKwXqdu/ApEiaSMp?= =?utf-8?q?aVxAGJWyoen/qcDWBbvf0T3XxTZcenkTutBIi7aT+0N+OlducLwflanCLoP6LhdKZ?= =?utf-8?q?nwFSaq6/gS5hf2luzF03H7rdLhNnvGhSjs7ubi0t/5y5QWSRUubzQyjd93+5Sgezs?= =?utf-8?q?FEZc4nScxF5ZCY9HFprIxUN/hlVqZuZO9ZzVkOgLjDCX2yJLZrz2DYkDasNue52nj?= =?utf-8?q?buvtBjwAXQfvwskp2dQ7PPW77zoNLK2yG9DP3KTgIh7VA/884OQL5V+Y/eZR2pjmZ?= =?utf-8?q?8rWKHy04mZInTuYsO8jC8lAHWjseMTmVVQanOTq1kiunHD535czkhGIKT49kMWvbO?= =?utf-8?q?acjhRl6DvOE59hJ/3FGeMuS68I21nboZx8Udl6K9lLqG0xh6mWttT5YCZSyFt2nqu?= =?utf-8?q?ACHAtB9iUaC17E5sbtQkcJOC7Ac6vXE/g9tfqIEipu4xpFi2vu4pQhkdfFS79nWvb?= =?utf-8?q?lzejTufrgzJOoo+alZhidcL4zEklkBO3lkoP9yJDJQBYiHk42eckegT+E32Us0ShT?= =?utf-8?q?rOTCnaWlZgkgcDJGgTJ3g/l6w2BV9JZZ4a2kDD7qcbCKhHOSkRkxoNlQAwELezevY?= =?utf-8?q?dDM12blYPBEoF1QOr6x+POrlHIp9aH16Z+/Jou4U+xeobrGSQxCfAlHiQc7YhWG4V?= =?utf-8?q?AWNdiDb5pft9ytdTZ2vYvV4nQZeXcuXYmCgaAIH8qohJsCA4wGhCWa9YORU//XZiE?= =?utf-8?q?IhA7YV3wJ9W17g/Aut1YAP95Qou+2cho1gSqBT8bWdO7rVBNwgcgxH/6xrQSLXTob?= =?utf-8?q?SKAOTesRi04W7Mq1sYQDCaO1RZWinqJsPUnJK/98hw92TQ34/PzTqyt7BQzJurnnk?= =?utf-8?q?jmXts94axm67wGO2s5kvPa6I+jw/Oiao09dOabOXroliI15R+ibJEAiXwvP8qT1MW?= =?utf-8?q?tXCc3RUkPvZ5scTglEBVaNNlVVzKckw90R1vaAy9aN81G/yBFuvq88lOm2aK5i00y?= =?utf-8?q?N9gbV3mbZZU125EPniX3yPPhNiAuVbDmUkKiT8BFOIkbZLgjJH5Pl0GfKFMc4n/x5?= =?utf-8?q?JX5H/ptcx8Ce?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36f76cd1-dbde-48c2-03b6-08dcc068549c X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB9642.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Aug 2024 16:02:30.9044 (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: 7STn8EcBqX61Fw6yVPmEaWm82TI9VvttR976QGZjKtAzbxUvYXlpbCbDGgCypTUREKon4Z1pQCFpWX5dqN365g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR04MB9659 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240819_090248_467443_FEAFB55C X-CRM114-Status: GOOD ( 14.52 ) 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 command done check at svc_i3c_master_nack(ack)_ibi() and change return type to int to indicate wait done timeout. Signed-off-by: Frank Li Reviewed-by: Miquel Raynal --- drivers/i3c/master/svc-i3c-master.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index fbb6cef405577..2010495906eb3 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -384,10 +384,12 @@ 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; + int ret; + u32 reg; ibi_ack_nack = SVC_I3C_MCTRL_REQUEST_IBI_ACKNACK; if (mandatory_byte) @@ -396,18 +398,31 @@ 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); + + ret = readl_poll_timeout_atomic(master->regs + SVC_I3C_MSTATUS, reg, + SVC_I3C_MSTATUS_MCTRLDONE(reg), 1, 1000); + return ret; + } -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); @@ -417,10 +432,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) @@ -871,7 +886,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) && @@ -1145,7 +1162,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; }