From patchwork Thu Dec 19 09:08:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyrone Ting X-Patchwork-Id: 2025608 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=JOgKmyJL; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4YDPrJ4vs4z1yQN for ; Thu, 19 Dec 2024 20:09:36 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4YDPqy4yBGz3dBv for ; Thu, 19 Dec 2024 20:09:18 +1100 (AEDT) X-Original-To: openbmc@lists.ozlabs.org Delivered-To: openbmc@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip="2607:f8b0:4864:20::635" ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1734599352; cv=none; b=fR7C5jkkr3Os1XRsoqDRVX/c9BWxr9bYY468CZMm+/XV683gDagPU3emVxLFN5h5w7DvMtKkGzyxeXLTzUoNd5xl5ZGJ/mF4Kfd4RF2HBaqWSV+RA3PMp/cGfMZE34i+vi2wlz/IEu1jdplwE88tvjXwJFfnRdCV9BI6ZdztpcvXJ1XcKPTh9km+mxXZIg5z72oAVZAO+Zmognxm7ifiW8RQPGLEFfSPq6oE68X/crzJEjE+OyEnscGMfYL3IQZ9jnZ99cbwuWCllwLDmz/f6j9pECQpme+uCBCxEE/R1mu+uU09Ntcvp4aVOCnueWyiY2+ZNo9jbvV5LAUEpBpSPQ== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1734599352; c=relaxed/relaxed; bh=sUTvgfGYPu+IPYUs2nFsjwTZ63vlpmHE9eVnRYu8l/s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=IFDpCGJ2srGIK0urmRxJJQDmeJomaQZt52ajfa4pUyvz+GGDquOwaruO8LiQUAlV7KcqiAQCefxvdA0/y4hkhhHwcd0wWR6NrHX8HKIdcMrjUHOida7laEgoU58wfPhLvhtQGvHkI2lm1jZK7CNNAJp4thxGJfvBw/1rQai7L/baVliRYy9UBbVPL5nqTcodJjo1Xu8lcqx3TAyFbiQeG+RDxi0DpRnuh3F/WH559+8tseaJhcgIPm6jNG9yPfUrrJw/M76o9Mo6RfiwMiA6itZ3UNPAt2yFIIzkRLsCtsTRUnlbmdmjTRveOEVhnrwcjyz3VCTT9T2VDZNvGOcCig== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=JOgKmyJL; dkim-atps=neutral; spf=pass (client-ip=2607:f8b0:4864:20::635; helo=mail-pl1-x635.google.com; envelope-from=warp5tw@gmail.com; receiver=lists.ozlabs.org) smtp.mailfrom=gmail.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=JOgKmyJL; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::635; helo=mail-pl1-x635.google.com; envelope-from=warp5tw@gmail.com; receiver=lists.ozlabs.org) Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4YDPqq5bdhz2yNc for ; Thu, 19 Dec 2024 20:09:11 +1100 (AEDT) Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-21631789fcdso11091725ad.1 for ; Thu, 19 Dec 2024 01:09:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734599349; x=1735204149; darn=lists.ozlabs.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=sUTvgfGYPu+IPYUs2nFsjwTZ63vlpmHE9eVnRYu8l/s=; b=JOgKmyJLHVHNM2Sxmv0qFTO9xj2uLttcxTnNB887sZcHneTt9ElBiQLB0TaXbyYuZk yXPbZVT085PFm1xgsLv9+xtPZKGkB/MFq9SUehHhe7T3JpW+q3mGlsZBK/tu/BYjrWQL 4NLToj1oXWPgrKdsUADKtpvMXHitBSGO84JKmL94VYVhKcKEQmihJgeRLRhc030TXwK5 BAP7QNorE5JM3NdZd8+2YbxqZgZ+RTNTkwAb94R9iOxYjqNxIwmVfwq9Zm9vpJ7Ppogk Gp9IzOpGAJnGiPNgRCK+x+ujteKbjZ3qrYIOztg/IGh7reoF9mvQJ3uhFtLru65+Mhrl jtQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734599349; x=1735204149; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=sUTvgfGYPu+IPYUs2nFsjwTZ63vlpmHE9eVnRYu8l/s=; b=Z6ubuzJzXy+p5KtZTocMy3WsVg9U3AI/dVHCl12v9NcrI8nw3jWehGnqH+6tCPQc71 bAt1KUMQy9u+xNB3SkyEi9/nJiwZuikqcw4FWNLWR8nF8ghGK4yotaXjWK4df4rfGKrK V/8RdkG9plWeH9IMPX+WLMtPCoV8qOPFIud596S4Ayj9ZIo5TIIY/wLSgvUp5QtUYzWe fiXqd4yVHXpbBwUPtE6Ixps3eYCNnaJCJf+JhSmD6JlANwB1AYH9+seegzusXuyfwUD5 gCf8w4A7SqpSE8fvDKIgT2XJQDJYf/SfTbmf8hIAT++2ZG5wH/HIB0YrkyW0QiRTam1G FdWA== X-Gm-Message-State: AOJu0YznSN3NAf9bwpgmmimJt16h0X6/TujTwmg9r9+aVslwFbfJo+05 6FrZ+T+A2GNl6+/BH6jpQUDShRWBE/l/cmvLXqIB5jJZKXJC2jc= X-Gm-Gg: ASbGncuybDLDnxvkJcAQ5szMHq7nsIa8fNpIdFccejkgbqQoGkZbK8TzS8yk6pcSd0G bAmPOOmuBKuGOaQKsKFdZ2xcTCMcV8qmte2YavAve0v6iGUueA51ZNGay5aaq1kcUXhoTJDJ1CM Xe8ANjaOms5Asde9Lwxcd0eIbJ+AWY4grTpNobak7RNT2RgR1OCm9nmVZ13YK3Z/BUdexRJkYnB ptNV+W2k5IIg6p7O2rIeB/0DNVP+y47WX/Xv6Na9nOKdSHnxnVZu7d1YCFjp9ZYC3uTPDJX3w08 o8rCqqxzqrc0CPzR9fbFxtFov0gFzFbwSDTvRy7RT7AElb2I X-Google-Smtp-Source: AGHT+IG3ozXV/JZXCvMKLY0p+P+fsSoQftBArX2wWb9Rq3a6/vq1cDweO1cvd0cvjFNqium7LTNmfA== X-Received: by 2002:a17:902:ef03:b0:215:58be:334e with SMTP id d9443c01a7336-219da5d67f4mr41922355ad.10.1734599348454; Thu, 19 Dec 2024 01:09:08 -0800 (PST) Received: from localhost (2001-b400-e356-b45b-f574-35d0-91d3-527b.emome-ip6.hinet.net. [2001:b400:e356:b45b:f574:35d0:91d3:527b]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-219dca0194bsm8086265ad.248.2024.12.19.01.09.07 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 19 Dec 2024 01:09:07 -0800 (PST) From: Tyrone Ting X-Google-Original-From: Tyrone Ting To: avifishman70@gmail.com, tmaimon77@gmail.com, tali.perry1@gmail.com, venture@google.com, yuenn@google.com, benjaminfair@google.com, andi.shyti@kernel.org, andriy.shevchenko@linux.intel.com, wsa@kernel.org, rand.sec96@gmail.com, wsa+renesas@sang-engineering.com, warp5tw@gmail.com, tali.perry@nuvoton.com, Avi.Fishman@nuvoton.com, tomer.maimon@nuvoton.com, KWLIU@nuvoton.com, JJLIU0@nuvoton.com, kfting@nuvoton.com Subject: [PATCH v8 1/4] i2c: npcm: Modify timeout evaluation mechanism Date: Thu, 19 Dec 2024 17:08:56 +0800 Message-Id: <20241219090859.18722-2-kfting@nuvoton.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20241219090859.18722-1-kfting@nuvoton.com> References: <20241219090859.18722-1-kfting@nuvoton.com> X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org X-BeenThere: openbmc@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development list for OpenBMC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: openbmc@lists.ozlabs.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Errors-To: openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "openbmc" From: Tyrone Ting The users want to connect a lot of masters on the same bus. This timeout is used to determine the time it takes to take bus ownership. The transactions are very long, so waiting 35ms is not enough. Increase the timeout and treat it as the total timeout, including retries. The total timeout is 2 seconds now. The i2c core layer will have chances to retry to call the i2c driver transfer function if the i2c driver reports that the bus is busy and returns -EAGAIN. Signed-off-by: Tyrone Ting Reviewed-by: Tali Perry --- drivers/i2c/busses/i2c-npcm7xx.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index 482a0074d448..c96a25d37c14 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c @@ -2132,19 +2132,12 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, } } - /* - * Adaptive TimeOut: estimated time in usec + 100% margin: - * 2: double the timeout for clock stretching case - * 9: bits per transaction (including the ack/nack) - */ - timeout_usec = (2 * 9 * USEC_PER_SEC / bus->bus_freq) * (2 + nread + nwrite); - timeout = max_t(unsigned long, bus->adap.timeout, usecs_to_jiffies(timeout_usec)); if (nwrite >= 32 * 1024 || nread >= 32 * 1024) { dev_err(bus->dev, "i2c%d buffer too big\n", bus->num); return -EINVAL; } - time_left = jiffies + timeout + 1; + time_left = jiffies + bus->adap.timeout / bus->adap.retries + 1; do { /* * we must clear slave address immediately when the bus is not @@ -2192,6 +2185,14 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, if (npcm_i2c_master_start_xmit(bus, slave_addr, nwrite, nread, write_data, read_data, read_PEC, read_block)) { + /* + * Adaptive TimeOut: estimated time in usec + 100% margin: + * 2: double the timeout for clock stretching case + * 9: bits per transaction (including the ack/nack) + */ + timeout_usec = (2 * 9 * USEC_PER_SEC / bus->bus_freq) * (2 + nread + nwrite); + timeout = max_t(unsigned long, bus->adap.timeout / bus->adap.retries, + usecs_to_jiffies(timeout_usec)); time_left = wait_for_completion_timeout(&bus->cmd_complete, timeout); @@ -2317,7 +2318,12 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev) adap = &bus->adap; adap->owner = THIS_MODULE; adap->retries = 3; - adap->timeout = msecs_to_jiffies(35); + /* + * The users want to connect a lot of masters on the same bus. + * This timeout is used to determine the time it takes to take bus ownership. + * The transactions are very long, so waiting 35ms is not enough. + */ + adap->timeout = 2 * HZ; adap->algo = &npcm_i2c_algo; adap->quirks = &npcm_i2c_quirks; adap->algo_data = bus; From patchwork Thu Dec 19 09:08:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyrone Ting X-Patchwork-Id: 2025611 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=FT+0B9Y3; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4YDPrT6C0jz1yQN for ; Thu, 19 Dec 2024 20:09:45 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4YDPr258YHz3fSG for ; Thu, 19 Dec 2024 20:09:22 +1100 (AEDT) X-Original-To: openbmc@lists.ozlabs.org Delivered-To: openbmc@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip="2607:f8b0:4864:20::531" ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1734599357; cv=none; b=R6hf9RCdh+hGxn2gAo7mfqr8+3ZfF7pJfVx1lM8323BY9IVvIaCziH4wh4af/YlEf+avY9S/ql4xwk0WlAKYJgVlDp0u51ROL2cT/3X3x8lUxvkOsX580nSFmuTPeSc6TbBPP/EjOyZrgqr8UbOBxwbp/6xn8wvp0Ib9offb88F9yvBX8uVm52Pmw9cgKuSuYaiT9TgV1+ry9nVBk01vSBmXWIyQLRvgSg9V7Zd3Ybfc1aw3dotSgMADj7Qhn2mwnK77UJTd3bl2lyCkamC0MZglv3NFafKNDRIcjNtLH40MVRKujUpKFJ3bbVZ0omYnKPHn7uSljHGSy21u9Xtiyg== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1734599357; c=relaxed/relaxed; bh=piYN//2t/Q3gekIk2iV6YPjUEpOk8bMx3T+8iGXFsUI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=J6bEPIegeNojgGK9rYVqifgwUPE0tiN2xx313YO9xAqmhUrre3/OnOGOkLnEvfugLNuwEOLZFupWLm7vJISh61upbSFBedkiOR5jwdTZ2PjbgATUR4bFXNuIfPJmhfODe32ibZ07/arnv3LRngUw2GuHiY8rRDMuFIE+Wfxvak5q2vCU051AHK+I3WHzSqqRu3BxlMmsCiLzfRNV++uvQTe5f0LokWcJcgQk1RCbT0i7DDuAOCm2Sv74hjhmqKny6YliDQrqGhO5lEVZF68NJaDqbbU35OklzoDJ2Rc7y637QLCyWOM4d3a7mZ2Mb5W9twC+fwfOuWNAuUx0SxkkNg== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=FT+0B9Y3; dkim-atps=neutral; spf=pass (client-ip=2607:f8b0:4864:20::531; helo=mail-pg1-x531.google.com; envelope-from=warp5tw@gmail.com; receiver=lists.ozlabs.org) smtp.mailfrom=gmail.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=FT+0B9Y3; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::531; helo=mail-pg1-x531.google.com; envelope-from=warp5tw@gmail.com; receiver=lists.ozlabs.org) Received: from mail-pg1-x531.google.com (mail-pg1-x531.google.com [IPv6:2607:f8b0:4864:20::531]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4YDPqv3bkfz3c5h for ; Thu, 19 Dec 2024 20:09:14 +1100 (AEDT) Received: by mail-pg1-x531.google.com with SMTP id 41be03b00d2f7-801986033f9so284236a12.1 for ; Thu, 19 Dec 2024 01:09:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734599352; x=1735204152; darn=lists.ozlabs.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=piYN//2t/Q3gekIk2iV6YPjUEpOk8bMx3T+8iGXFsUI=; b=FT+0B9Y36IyGUad6sm07nKLHucmClAOyF892EAwMMtnWVaaQHOkrW/aSnGmsQtIi/n rjZ/iDeQsu3p/QpHuChPh2HMv7U0KKqjx8Fg3/tqHYPzowKYbnIMHYOp9tPPXdy47wxT 0XqMJLJWPfdi91jtlBPYqUXaN7Eyhm5iiRrm1ZSKbTQKakYxZO4KWPcX7Aeue68iBq/q FY//bHVLpWVEd/wsTYbhb6utddiucMbNLC6Hy3LNB3u6DyfIuaKDvMm2szpPtO7snrTE QPg3bGTzukpprOIadM4QVDZoDCULW8ZCu3kI2lhHcqc2y8sPjhoLc8wHppM2isoOIUOm LRJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734599352; x=1735204152; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=piYN//2t/Q3gekIk2iV6YPjUEpOk8bMx3T+8iGXFsUI=; b=IHPZ8qvlqGDYuefCCaoNu5Kyw+CIiOJ6YfJuugr3HDNSZ3i137OYO4rWI1rEpwyOHT 4NTIct974x+x5kuBLup8mHAS0i8GpNIDGSNS0XOwfVzcgJHN3oPrC3IaSF8GdRtRH/bo yt1xzDTrxBfv9eF9F2641N8f64Ya0Njc7dggr7cZxmO+arj7/AT6W0yr5tAWHMEejak+ /gGwuCdFqpolLQnKEMcDxT6JN2hfiuQVbCn7uzcMhfmDxScz4TcEKAn3edN5lfwS55Ng yRf9p0yOFeqxtpSmRTb7P4LuCc8cnowrqRSu1DfvC01SLNspv0/Y31Hp/uEg0X2zmEVt Hzqw== X-Gm-Message-State: AOJu0Yw3qZkL7xgMYmuNw1BcIt1VgELdUnbbSXj2RSjN1j4CWHlIa0sb VFSJIKeB97Zj4XCtoRB9b5qjkBfSXCsRXDL1jAmnxq/YUcbykGM= X-Gm-Gg: ASbGncscVXrVUXmPKSB7TY30aSGUY52NOXdDaRFW1QryYT3vLi+IVT08Iobm1cDOD9b /kEIO80JnR9RlBdIW+mA4kcA2Fo+Gs08KcyjsJgc+q4ajT0nrhoofaYsQpn9T4nK7++LUsxUCu8 oxTIUF05ltk7P2tIPXcc2t0HFVmf9fxM482M44QpU5De6/cRVf4sNdiXHacDYHK8akZpBvbcTbQ 1U7aC+UT8FnZRDcksp2Dsq5fxZF7A3Mz67wKkhAIhkVCsPvgXiZ8xMZLIQ2pGBkc+F/19m1ZPRp nmgE45tTy+v/MYWvVaRczvbGEu9Y1+ixtTR4KQxK8oIsIEvE X-Google-Smtp-Source: AGHT+IHTqzdBHtaXdUfJQLh5OtQUwGieCVyrC3tJXdDiWFRu/A8iaXaQpl+DwoVlL2pK77Rw42fZNw== X-Received: by 2002:a17:90b:2f03:b0:2ee:d7d3:3019 with SMTP id 98e67ed59e1d1-2f2e91f0dc9mr10901708a91.12.1734599351937; Thu, 19 Dec 2024 01:09:11 -0800 (PST) Received: from localhost (2001-b400-e356-b45b-f574-35d0-91d3-527b.emome-ip6.hinet.net. [2001:b400:e356:b45b:f574:35d0:91d3:527b]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2f4477e8222sm956016a91.23.2024.12.19.01.09.11 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 19 Dec 2024 01:09:11 -0800 (PST) From: Tyrone Ting X-Google-Original-From: Tyrone Ting To: avifishman70@gmail.com, tmaimon77@gmail.com, tali.perry1@gmail.com, venture@google.com, yuenn@google.com, benjaminfair@google.com, andi.shyti@kernel.org, andriy.shevchenko@linux.intel.com, wsa@kernel.org, rand.sec96@gmail.com, wsa+renesas@sang-engineering.com, warp5tw@gmail.com, tali.perry@nuvoton.com, Avi.Fishman@nuvoton.com, tomer.maimon@nuvoton.com, KWLIU@nuvoton.com, JJLIU0@nuvoton.com, kfting@nuvoton.com Subject: [PATCH v8 2/4] i2c: npcm: Assign client address earlier for `i2c_recover_bus()` Date: Thu, 19 Dec 2024 17:08:57 +0800 Message-Id: <20241219090859.18722-3-kfting@nuvoton.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20241219090859.18722-1-kfting@nuvoton.com> References: <20241219090859.18722-1-kfting@nuvoton.com> X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org X-BeenThere: openbmc@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development list for OpenBMC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: openbmc@lists.ozlabs.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Errors-To: openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "openbmc" From: Tyrone Ting Store the client address earlier since it might get called in the i2c_recover_bus() logic flow at the early stage of npcm_i2c_master_xfer(). Signed-off-by: Tyrone Ting Reviewed-by: Tali Perry --- drivers/i2c/busses/i2c-npcm7xx.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index c96a25d37c14..760608fdd075 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c @@ -2035,7 +2035,7 @@ static irqreturn_t npcm_i2c_bus_irq(int irq, void *dev_id) } static bool npcm_i2c_master_start_xmit(struct npcm_i2c *bus, - u8 slave_addr, u16 nwrite, u16 nread, + u16 nwrite, u16 nread, u8 *write_data, u8 *read_data, bool use_PEC, bool use_read_block) { @@ -2043,7 +2043,6 @@ static bool npcm_i2c_master_start_xmit(struct npcm_i2c *bus, bus->cmd_err = -EBUSY; return false; } - bus->dest_addr = slave_addr << 1; bus->wr_buf = write_data; bus->wr_size = nwrite; bus->wr_ind = 0; @@ -2086,7 +2085,6 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, unsigned long time_left, flags; u16 nwrite, nread; u8 *write_data, *read_data; - u8 slave_addr; unsigned long timeout; bool read_block = false; bool read_PEC = false; @@ -2099,7 +2097,6 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, } msg0 = &msgs[0]; - slave_addr = msg0->addr; if (msg0->flags & I2C_M_RD) { /* read */ nwrite = 0; write_data = NULL; @@ -2155,6 +2152,21 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, } while (time_is_after_jiffies(time_left) && bus_busy); + /* + * Store the address early in a global position to ensure it is + * accessible for a potential call to i2c_recover_bus(). + * + * Since the transfer might be a read operation, remove the I2C_M_RD flag + * from the bus->dest_addr for the i2c_recover_bus() call later. + * + * The i2c_recover_bus() uses the address in a write direction to recover + * the i2c bus if some error condition occurs. + * + * Remove the I2C_M_RD flag from the address since npcm_i2c_master_start_xmit() + * handles the read/write operation internally. + */ + bus->dest_addr = i2c_8bit_addr_from_msg(msg0) & ~I2C_M_RD; + /* * Check the BER (bus error) state, when ber_state is true, it means that the module * detects the bus error which is caused by some factor like that the electricity @@ -2172,7 +2184,6 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, } npcm_i2c_init_params(bus); - bus->dest_addr = slave_addr; bus->msgs = msgs; bus->msgs_num = num; bus->cmd_err = 0; @@ -2182,7 +2193,7 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, npcm_i2c_int_enable(bus, true); - if (npcm_i2c_master_start_xmit(bus, slave_addr, nwrite, nread, + if (npcm_i2c_master_start_xmit(bus, nwrite, nread, write_data, read_data, read_PEC, read_block)) { /* From patchwork Thu Dec 19 09:08:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyrone Ting X-Patchwork-Id: 2025612 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=VLoL5PkY; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4YDPrj18RKz1yQN for ; Thu, 19 Dec 2024 20:09:57 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4YDPr70zBdz3fs8 for ; Thu, 19 Dec 2024 20:09:27 +1100 (AEDT) X-Original-To: openbmc@lists.ozlabs.org Delivered-To: openbmc@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip="2607:f8b0:4864:20::42e" ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1734599362; cv=none; b=asYlxr0E+5yR4zy7j0toKMbOUVXbXMAI94X1EnUXuvgnWMviLjsWuFiHc6PO3iNU1paViujdh72QyRRlcCGVQnTNZleYgOIuEOtet5wD1pjd39pqnECQdd4ngoW4lNYoKOtEc/7pV7OYIfNSimSutO0yd8JGksIzle8pXOG8kUO/Q/zF+42+xkP2h0gjHbMZi55Gt5tEeHMqBcVo5xCEXukRDuBiHcm0vU3o4cMrDvqp01xpxE3DAFhRPvtYEGcZd2VJj7LMV5nad2Yu2FhIlWhv9oKltOSVXw7FLCOFNpoqz863FnkSmZE9ykoHUbYkm5cn9lvVGDB2WPjOc/RWyQ== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1734599362; c=relaxed/relaxed; bh=LRxrdan5tHoMlrGZXe9w+RTf9KmkjJ92usLwMDr0nrc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=IG8kipKDjqbWIz6H/79W6aSzFtIeP62hdV4E6kFz84pGYxi5YEQMKfjQwvPqdQxawjC/4jc5/52LXfiJbFpBvuWGcTBmbLyckWa6W9vxaO1J1woGVsaikiwNufR5SX5P9vGy/FRYcwuCxrLniuiD7uFCbhk35jm3Jl9AvRWh9hctqh1HX/fW7zg9rvgb16wiXzwzrrNhbDTrYG6IYHnCefpVagi4BX+ixAmAISjUwYKUUcFsMJzAbwI/oXTm9uWEJLQmwtjwkBdXBuYgeMcrMeum/fx49syOlx+JCglw805zDWZbT6N8X4YCDzoF2FR0dOwmAWqHNaGDAw/vdbWHfg== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=VLoL5PkY; dkim-atps=neutral; spf=pass (client-ip=2607:f8b0:4864:20::42e; helo=mail-pf1-x42e.google.com; envelope-from=warp5tw@gmail.com; receiver=lists.ozlabs.org) smtp.mailfrom=gmail.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=VLoL5PkY; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::42e; helo=mail-pf1-x42e.google.com; envelope-from=warp5tw@gmail.com; receiver=lists.ozlabs.org) Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4YDPqy6MGHz3dDx for ; Thu, 19 Dec 2024 20:09:18 +1100 (AEDT) Received: by mail-pf1-x42e.google.com with SMTP id d2e1a72fcca58-728eedfca37so630670b3a.2 for ; Thu, 19 Dec 2024 01:09:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734599355; x=1735204155; darn=lists.ozlabs.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=LRxrdan5tHoMlrGZXe9w+RTf9KmkjJ92usLwMDr0nrc=; b=VLoL5PkY3UdcHkKZwPDRXvwIiWMlVf+2F09OtW7TPW+VTkn5JrLssid14RoSTFtL2B Vk3lvDI5jmJaByPEj+NA2P+9tH5v910Rusa5itlHrp7HaTFeL4UWkyFEF8fV/ZObFAHL k3+DaVNoJ5e+9useR/zWwaP8tabBoVrUyd0qTWI2wxpIHZJdUymwilzse0cr8Va9oITH GZ8GMQNaTGyzerNS7WgEty/L+G/+0itRINWaoCswRTc42JMiO3xBMa0kxkcPfdPkeN2R yB+5EgVAF7ZYCnqleNJ0FlcMOZFx8o/SdWkBTMUlQiBphwcDwDtqllQ+NJteeQ+7nTeF ErvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734599355; x=1735204155; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=LRxrdan5tHoMlrGZXe9w+RTf9KmkjJ92usLwMDr0nrc=; b=uT81qQMxH2Rt1f2HJW+8IFsQj9m/FsjjvbIniclChpUIFn/LMnefDcyKNk05s6oyXM r5xSvndiclXVry81Z8Yur87+ZHSZ6u47pcLrfN8Cw2FMtr8/e7Hlp4pX77YYql/zdFje 1U5osO2j5r+91ULKLSLBAVcToqHzmcfF2aHdEdJ0IeXwxznuX9j/RtRDWvv1s175nDvT e3FYlG1GcB8oYPReb/TQZgggO5JaCSWtNyLv9Y6IZi68o9x9+yGNuo9JkSS7ntVOg66d 5s3dlV6bUb2XEU4lJkwhzzOyJhTVVG/cHvnNjeUyqQ63mg4lSre3jKbCifGTRjHBi9ds TFoA== X-Gm-Message-State: AOJu0YzTN073Eo20iMeWhsZkQZ7KK09qm2Q/FzeRO4OOKKKUxgQ+4XtH xzEyBLLCrsLfkBSVjmX03Yw3ORdu/rL8FShaSeONUmCnqJoalmE= X-Gm-Gg: ASbGncsCzq7cPefn17t+o+zq1znFA3WKiWYKgOnHUdunN2OYz6J7eYzwOi9kKUEr/OU 0hTD9w5ilVfw4fg4jrCeCi656vqrqkFvWVDsk8m+ukWsEvSWleaGITHvX7zilno2ZRMrOYIF38o U0aRhsbyaEAs7P+EbJauXtVoZUJssJAqdjLjicehfJQopicJsDyavg4lFhL2vmpHq0yvYP5Ivmv 6fnyna9QB/n6x4IW+W7N61k1zsuWXUB+lNYaWDlFiFSafQbm5Yx7R5bKETruajm0xWskWfH5enW IjyIdZw53TaqMuA5OAjBGFz3KNWAfBpftEomaHBuLK62RiFz X-Google-Smtp-Source: AGHT+IGmXYteJJlUcoAavZ+KIoD3czehp0N0Ue4e6GT89wgj0kegwbwWZSbvo2mGJxNaByTfgAu/pg== X-Received: by 2002:a05:6a00:a81:b0:725:8b00:167e with SMTP id d2e1a72fcca58-72aa8dab6edmr4287520b3a.16.1734599355482; Thu, 19 Dec 2024 01:09:15 -0800 (PST) Received: from localhost (2001-b400-e356-b45b-f574-35d0-91d3-527b.emome-ip6.hinet.net. [2001:b400:e356:b45b:f574:35d0:91d3:527b]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-72aad8dbb70sm813090b3a.98.2024.12.19.01.09.14 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 19 Dec 2024 01:09:14 -0800 (PST) From: Tyrone Ting X-Google-Original-From: Tyrone Ting To: avifishman70@gmail.com, tmaimon77@gmail.com, tali.perry1@gmail.com, venture@google.com, yuenn@google.com, benjaminfair@google.com, andi.shyti@kernel.org, andriy.shevchenko@linux.intel.com, wsa@kernel.org, rand.sec96@gmail.com, wsa+renesas@sang-engineering.com, warp5tw@gmail.com, tali.perry@nuvoton.com, Avi.Fishman@nuvoton.com, tomer.maimon@nuvoton.com, KWLIU@nuvoton.com, JJLIU0@nuvoton.com, kfting@nuvoton.com Subject: [PATCH v8 3/4] i2c: npcm: use i2c frequency table Date: Thu, 19 Dec 2024 17:08:58 +0800 Message-Id: <20241219090859.18722-4-kfting@nuvoton.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20241219090859.18722-1-kfting@nuvoton.com> References: <20241219090859.18722-1-kfting@nuvoton.com> X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org X-BeenThere: openbmc@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development list for OpenBMC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: openbmc@lists.ozlabs.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Errors-To: openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "openbmc" From: Tyrone Ting Modify i2c frequency from table parameters for NPCM i2c modules. Supported frequencies are: 1. 100KHz 2. 400KHz 3. 1MHz The original equations were tested on a variety of chips and base clocks. Since we added devices that use higher frequencies of the module we saw that there is a mismatch between the equation and the actual results on the bus itself, measured on scope. Meanwhile, the equations were not accurate to begin with. They are an approximation of the ideal value. The ideal value is calculated per frequency of the core module. So instead of using the equations we did an optimization per module frequency, verified on a device. Most of the work was focused on the rise time of the SCL and SDA, which depends on external load of the bus and PU. Different PCB designs, or specifically to this case: the number and type of targets on the bus, impact the required values for the timing registers. Users can recalculate the numbers for each bus and get an even better optimization, but our users chose not to. We manually picked values per frequency that match the entire valid range of targets (from 1 to max number). Then we check against the AMR described in SMB spec and make sure that none of the values is exceeding. This process was led by the chip architect and included a lot of testing. Signed-off-by: Tyrone Ting Reviewed-by: Tali Perry --- drivers/i2c/busses/i2c-npcm7xx.c | 374 ++++++++++++++++++++++++------- 1 file changed, 288 insertions(+), 86 deletions(-) diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index 760608fdd075..1aae1a8a8055 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c @@ -263,6 +263,265 @@ static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = { #define I2C_FREQ_MIN_HZ 10000 #define I2C_FREQ_MAX_HZ I2C_MAX_FAST_MODE_PLUS_FREQ +struct smb_timing_t { + u32 core_clk; + u8 hldt; + u8 dbcnt; + u16 sclfrq; + u8 scllt; + u8 sclht; + bool fast_mode; +}; + +static struct smb_timing_t smb_timing_100khz[] = { + { + .core_clk = 100000000, .hldt = 0x2A, .dbcnt = 0x4, + .sclfrq = 0xFB, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 62500000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x9D, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 50000000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x7E, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 48000000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x79, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 40000000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x65, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 30000000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x4C, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 29000000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x49, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 26000000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x42, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 25000000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x3F, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 24000000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x3D, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 20000000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x33, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 16180000, .hldt = 0x2A, .dbcnt = 0x1, + .sclfrq = 0x29, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 15000000, .hldt = 0x23, .dbcnt = 0x1, + .sclfrq = 0x26, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 13000000, .hldt = 0x1D, .dbcnt = 0x1, + .sclfrq = 0x21, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 12000000, .hldt = 0x1B, .dbcnt = 0x1, + .sclfrq = 0x1F, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 10000000, .hldt = 0x18, .dbcnt = 0x1, + .sclfrq = 0x1A, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 9000000, .hldt = 0x16, .dbcnt = 0x1, + .sclfrq = 0x17, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 8090000, .hldt = 0x14, .dbcnt = 0x1, + .sclfrq = 0x15, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 7500000, .hldt = 0x7, .dbcnt = 0x1, + .sclfrq = 0x13, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 6500000, .hldt = 0xE, .dbcnt = 0x1, + .sclfrq = 0x11, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, + { + .core_clk = 4000000, .hldt = 0x9, .dbcnt = 0x1, + .sclfrq = 0xB, .scllt = 0x0, .sclht = 0x0, + .fast_mode = false, + }, +}; + +static struct smb_timing_t smb_timing_400khz[] = { + { + .core_clk = 100000000, .hldt = 0x2A, .dbcnt = 0x3, + .sclfrq = 0x0, .scllt = 0x47, .sclht = 0x35, + .fast_mode = true, + }, + { + .core_clk = 62500000, .hldt = 0x2A, .dbcnt = 0x2, + .sclfrq = 0x0, .scllt = 0x2C, .sclht = 0x22, + .fast_mode = true, + }, + { + .core_clk = 50000000, .hldt = 0x21, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x24, .sclht = 0x1B, + .fast_mode = true, + }, + { + .core_clk = 48000000, .hldt = 0x1E, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x24, .sclht = 0x19, + .fast_mode = true, + }, + { + .core_clk = 40000000, .hldt = 0x1B, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x1E, .sclht = 0x14, + .fast_mode = true, + }, + { + .core_clk = 33000000, .hldt = 0x15, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x19, .sclht = 0x11, + .fast_mode = true, + }, + { + .core_clk = 30000000, .hldt = 0x15, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x19, .sclht = 0xD, + .fast_mode = true, + }, + { + .core_clk = 29000000, .hldt = 0x11, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x15, .sclht = 0x10, + .fast_mode = true, + }, + { + .core_clk = 26000000, .hldt = 0x10, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x13, .sclht = 0xE, + .fast_mode = true, + }, + { + .core_clk = 25000000, .hldt = 0xF, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x13, .sclht = 0xD, + .fast_mode = true, + }, + { + .core_clk = 24000000, .hldt = 0xD, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x12, .sclht = 0xD, + .fast_mode = true, + }, + { + .core_clk = 20000000, .hldt = 0xB, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0xF, .sclht = 0xA, + .fast_mode = true, + }, + { + .core_clk = 16180000, .hldt = 0xA, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0xC, .sclht = 0x9, + .fast_mode = true, + }, + { + .core_clk = 15000000, .hldt = 0x9, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0xB, .sclht = 0x8, + .fast_mode = true, + }, + { + .core_clk = 13000000, .hldt = 0x7, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0xA, .sclht = 0x7, + .fast_mode = true, + }, + { + .core_clk = 12000000, .hldt = 0x7, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0xA, .sclht = 0x6, + .fast_mode = true, + }, + { + .core_clk = 10000000, .hldt = 0x6, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x8, .sclht = 0x5, + .fast_mode = true, + }, +}; + +static struct smb_timing_t smb_timing_1000khz[] = { + { + .core_clk = 100000000, .hldt = 0x15, .dbcnt = 0x4, + .sclfrq = 0x0, .scllt = 0x1C, .sclht = 0x15, + .fast_mode = true, + }, + { + .core_clk = 62500000, .hldt = 0xF, .dbcnt = 0x3, + .sclfrq = 0x0, .scllt = 0x11, .sclht = 0xE, + .fast_mode = true, + }, + { + .core_clk = 50000000, .hldt = 0xA, .dbcnt = 0x2, + .sclfrq = 0x0, .scllt = 0xE, .sclht = 0xB, + .fast_mode = true, + }, + { + .core_clk = 48000000, .hldt = 0x9, .dbcnt = 0x2, + .sclfrq = 0x0, .scllt = 0xD, .sclht = 0xB, + .fast_mode = true, + }, + { + .core_clk = 41000000, .hldt = 0x9, .dbcnt = 0x2, + .sclfrq = 0x0, .scllt = 0xC, .sclht = 0x9, + .fast_mode = true, + }, + { + .core_clk = 40000000, .hldt = 0x8, .dbcnt = 0x2, + .sclfrq = 0x0, .scllt = 0xB, .sclht = 0x9, + .fast_mode = true, + }, + { + .core_clk = 33000000, .hldt = 0x7, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0xA, .sclht = 0x7, + .fast_mode = true, + }, + { + .core_clk = 25000000, .hldt = 0x4, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x7, .sclht = 0x6, + .fast_mode = true, + }, + { + .core_clk = 24000000, .hldt = 0x7, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x8, .sclht = 0x5, + .fast_mode = true, + }, + { + .core_clk = 20000000, .hldt = 0x4, .dbcnt = 0x1, + .sclfrq = 0x0, .scllt = 0x6, .sclht = 0x4, + .fast_mode = true, + }, +}; + struct npcm_i2c_data { u8 fifo_size; u32 segctl_init_val; @@ -1805,102 +2064,45 @@ static void npcm_i2c_recovery_init(struct i2c_adapter *_adap) */ static int npcm_i2c_init_clk(struct npcm_i2c *bus, u32 bus_freq_hz) { - u32 k1 = 0; - u32 k2 = 0; - u8 dbnct = 0; - u32 sclfrq = 0; - u8 hldt = 7; + struct smb_timing_t *smb_timing; + u8 scl_table_cnt = 0, table_size = 0; u8 fast_mode = 0; - u32 src_clk_khz; - u32 bus_freq_khz; - src_clk_khz = bus->apb_clk / 1000; - bus_freq_khz = bus_freq_hz / 1000; bus->bus_freq = bus_freq_hz; - /* 100KHz and below: */ - if (bus_freq_hz <= I2C_MAX_STANDARD_MODE_FREQ) { - sclfrq = src_clk_khz / (bus_freq_khz * 4); - - if (sclfrq < SCLFRQ_MIN || sclfrq > SCLFRQ_MAX) - return -EDOM; - - if (src_clk_khz >= 40000) - hldt = 17; - else if (src_clk_khz >= 12500) - hldt = 15; - else - hldt = 7; - } - - /* 400KHz: */ - else if (bus_freq_hz <= I2C_MAX_FAST_MODE_FREQ) { - sclfrq = 0; + switch (bus_freq_hz) { + case I2C_MAX_STANDARD_MODE_FREQ: + smb_timing = smb_timing_100khz; + table_size = ARRAY_SIZE(smb_timing_100khz); + break; + case I2C_MAX_FAST_MODE_FREQ: + smb_timing = smb_timing_400khz; + table_size = ARRAY_SIZE(smb_timing_400khz); fast_mode = I2CCTL3_400K_MODE; - - if (src_clk_khz < 7500) - /* 400KHZ cannot be supported for core clock < 7.5MHz */ - return -EDOM; - - else if (src_clk_khz >= 50000) { - k1 = 80; - k2 = 48; - hldt = 12; - dbnct = 7; - } - - /* Master or Slave with frequency > 25MHz */ - else if (src_clk_khz > 25000) { - hldt = clk_coef(src_clk_khz, 300) + 7; - k1 = clk_coef(src_clk_khz, 1600); - k2 = clk_coef(src_clk_khz, 900); - } - } - - /* 1MHz: */ - else if (bus_freq_hz <= I2C_MAX_FAST_MODE_PLUS_FREQ) { - sclfrq = 0; + break; + case I2C_MAX_FAST_MODE_PLUS_FREQ: + smb_timing = smb_timing_1000khz; + table_size = ARRAY_SIZE(smb_timing_1000khz); fast_mode = I2CCTL3_400K_MODE; - - /* 1MHZ cannot be supported for core clock < 24 MHz */ - if (src_clk_khz < 24000) - return -EDOM; - - k1 = clk_coef(src_clk_khz, 620); - k2 = clk_coef(src_clk_khz, 380); - - /* Core clk > 40 MHz */ - if (src_clk_khz > 40000) { - /* - * Set HLDT: - * SDA hold time: (HLDT-7) * T(CLK) >= 120 - * HLDT = 120/T(CLK) + 7 = 120 * FREQ(CLK) + 7 - */ - hldt = clk_coef(src_clk_khz, 120) + 7; - } else { - hldt = 7; - dbnct = 2; - } + break; + default: + return -EINVAL; } - /* Frequency larger than 1 MHz is not supported */ - else - return -EINVAL; + for (scl_table_cnt = 0; scl_table_cnt < table_size; scl_table_cnt++) + if (bus->apb_clk >= smb_timing[scl_table_cnt].core_clk) + break; - if (bus_freq_hz >= I2C_MAX_FAST_MODE_FREQ) { - k1 = round_up(k1, 2); - k2 = round_up(k2 + 1, 2); - if (k1 < SCLFRQ_MIN || k1 > SCLFRQ_MAX || - k2 < SCLFRQ_MIN || k2 > SCLFRQ_MAX) - return -EDOM; - } + if (scl_table_cnt == table_size) + return -EINVAL; /* write sclfrq value. bits [6:0] are in I2CCTL2 reg */ - iowrite8(FIELD_PREP(I2CCTL2_SCLFRQ6_0, sclfrq & 0x7F), + iowrite8(FIELD_PREP(I2CCTL2_SCLFRQ6_0, smb_timing[scl_table_cnt].sclfrq & 0x7F), bus->reg + NPCM_I2CCTL2); /* bits [8:7] are in I2CCTL3 reg */ - iowrite8(fast_mode | FIELD_PREP(I2CCTL3_SCLFRQ8_7, (sclfrq >> 7) & 0x3), + iowrite8(FIELD_PREP(I2CCTL3_SCLFRQ8_7, (smb_timing[scl_table_cnt].sclfrq >> 7) & 0x3) | + fast_mode, bus->reg + NPCM_I2CCTL3); /* Select Bank 0 to access NPCM_I2CCTL4/NPCM_I2CCTL5 */ @@ -1912,13 +2114,13 @@ static int npcm_i2c_init_clk(struct npcm_i2c *bus, u32 bus_freq_hz) * k1 = 2 * SCLLT7-0 -> Low Time = k1 / 2 * k2 = 2 * SCLLT7-0 -> High Time = k2 / 2 */ - iowrite8(k1 / 2, bus->reg + NPCM_I2CSCLLT); - iowrite8(k2 / 2, bus->reg + NPCM_I2CSCLHT); + iowrite8(smb_timing[scl_table_cnt].scllt, bus->reg + NPCM_I2CSCLLT); + iowrite8(smb_timing[scl_table_cnt].sclht, bus->reg + NPCM_I2CSCLHT); - iowrite8(dbnct, bus->reg + NPCM_I2CCTL5); + iowrite8(smb_timing[scl_table_cnt].dbcnt, bus->reg + NPCM_I2CCTL5); } - iowrite8(hldt, bus->reg + NPCM_I2CCTL4); + iowrite8(smb_timing[scl_table_cnt].hldt, bus->reg + NPCM_I2CCTL4); /* Return to Bank 1, and stay there by default: */ npcm_i2c_select_bank(bus, I2C_BANK_1); From patchwork Thu Dec 19 09:08:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tyrone Ting X-Patchwork-Id: 2025613 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=kFoteS00; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4YDPrv6Txlz1yS6 for ; Thu, 19 Dec 2024 20:10:07 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4YDPrB3dhDz3g2P for ; Thu, 19 Dec 2024 20:09:30 +1100 (AEDT) X-Original-To: openbmc@lists.ozlabs.org Delivered-To: openbmc@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip="2607:f8b0:4864:20::631" ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1734599363; cv=none; b=fk6OCyOIO8lVID10apqkr6h5j/31JjGtjo/tnzOb+/aRs+OpDw9g0b+NeTOhNyTGq8N1w30i3OjuIXf1Fjpc4DX3Ye/F3JX9/OAXle2c84EO21FUUvx5sXw/fdzBdDvH9Zy9VuJzcofnTGVppCcRobdWJj6KcuOWqIdkaDbEKAq3e0JA0Sdl6kwdhxek5UWFb8kezD3zLMXgPJCVh+A4W9SV3W8W7IMM4tb0F7SwQY9JJFaVdaqgXX4Kvnw2IqwHSf1Ut5VSGePvvX2qvfwVGzjzIpBkNG92rltrWllSUnZc/M18CT31/MEXihIcJiyVhu3xWG5/J4NbBBVoxHPMNw== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1734599363; c=relaxed/relaxed; bh=jzZT6TwhtRV8As1g0Br4z6oNEAAXSFB3IR9CjR0VtHs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References; b=WC2QzZKwVlXa2drmMvOmvBy1hXEfCw34t2O4WwyAPYn8f8PfWXPQm1V0DxIhHXj7UD7x0nxj1vb1O1BhJj8bJFwTRtTJtEu5l6wkVqWcUK6Goct0y7n8BMscuDzocl10VISpblrLKDSKejAnapCYaiSK7FzMvfSTiRY8j8bYxnyGGa6DTTc5ixK1/+9hZjdpS5rxcsXBM6fks3zU7UMNKTeYA9NzSParD21dfps+LXi7fCTpKaZCjB3gmO1cik+TqBHLDXaeHA8RKBh5+SmdQMqI9/nQLyQVsnWtX70/CqTewPZd49eISe1Sug8cuaBs6xtBGuEReBhln9QJGIprMw== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=kFoteS00; dkim-atps=neutral; spf=pass (client-ip=2607:f8b0:4864:20::631; helo=mail-pl1-x631.google.com; envelope-from=warp5tw@gmail.com; receiver=lists.ozlabs.org) smtp.mailfrom=gmail.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=kFoteS00; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::631; helo=mail-pl1-x631.google.com; envelope-from=warp5tw@gmail.com; receiver=lists.ozlabs.org) Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4YDPr10MvGz3dW2 for ; Thu, 19 Dec 2024 20:09:20 +1100 (AEDT) Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-215770613dbso3578205ad.2 for ; Thu, 19 Dec 2024 01:09:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734599358; x=1735204158; darn=lists.ozlabs.org; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=jzZT6TwhtRV8As1g0Br4z6oNEAAXSFB3IR9CjR0VtHs=; b=kFoteS004SFh3zjbwmAMjqK0aeU57akwSRmRVBjXytY0juTSWE5HdS2gXhjnlPAVYZ bArZVU1SJ99ydqR2aOdqodUJMsB6CPEOAOFdMpWACdMVWVN5GeUCGwZ1vDzpVgeoXsQL nefgt5T+0VfO4AALJOiBQkk7RY+gg5snmHlP3eXk20TTFEkpRA0I/4uUmdqA3Od24Wok B2oIrlVkFWC9DwSK6S4B8afDV/wsBsXSR6P7OKtbgREtmd4+pPib+c9WY02e7B0oYsTc Qk1+Pvy7LhfyBvxPORbJeNNDgVHPjbBk3jWE7UaqUkbgCO7R5cIfTCt0X3DH0WoTM6/f nLnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734599358; x=1735204158; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=jzZT6TwhtRV8As1g0Br4z6oNEAAXSFB3IR9CjR0VtHs=; b=tfEHMgjkOWS6CvXonc3atA1nbcxXhz1qH0vHaK2SZ2syAqOShgLrq3Wd2WUiGMgtE4 4ktErJEhGajr7HtpUsW18Cr8zKnO70Ul/mc05w1tMLJv/jX5GdGOhKjo2B6zEjd0b9Q2 OKkmzN6YSIRfwL07DObq/E5vK6s7RLdb34owCIo11I/PMW8lci3TPMxKXJnv6NInIpI8 SQWv1c0Crmgs1GPdwj2d1O3QMWD36X47HOKxdsjvY9wDL2zAiC07h+hC0VV/yIbCKJkq kuAkgEqYMc87hFzVk6HFrSHuzC3pzDrGovFlKSng14hWTqSaIUdl8lKJGWF8+kICiZBM UstA== X-Gm-Message-State: AOJu0YwqT2VMKQw7XAP7aYlPN7j0nmBI0wPQ6NOFcsEJwV9l3yvb2DIh wFN8kjDsTFjztpTDCt2m+kTQVaNYFlMp9XSnEzMQXNJdyVeYNME= X-Gm-Gg: ASbGncsrL6Ic7MtYuWpDvHHo95mH9to2knL5B9RzfX7Gct+vllyp5EZ3LdZzzFHlfB5 5ErRT73ETKrtvN//HERPwE6BMbyMkoA13UatULf0JTudoHAgtcbQyZvsuEw/G27lHfF0zGHdy/u /xCNGLJUSzxfMGMTud7t232OXxutVALboySCLs8ntpaWjO5Q2j3Xx6SDzH9P+pcSJeu7e9Lg1m8 K8aEBH8j77AvAl64oFzCO30KNJhrX2HeuE/wgbg5abshDD2t1l0urcNldhtnPsn5ey1AskJ3XEi IAVwgDq/JyWCprRTMhKtOIR1oKWP3XX2GW6YcdAlElgFrxX2 X-Google-Smtp-Source: AGHT+IErJZuvW91Ox1GbnItc2RtMNO/lrRVXIpHpCWNjIRs59rsAH/atATMYg7HsgdgvdzF4Cm1AQA== X-Received: by 2002:a17:902:fc4d:b0:216:2dc5:233c with SMTP id d9443c01a7336-219d9692f2dmr44680875ad.41.1734599358516; Thu, 19 Dec 2024 01:09:18 -0800 (PST) Received: from localhost (2001-b400-e356-b45b-f574-35d0-91d3-527b.emome-ip6.hinet.net. [2001:b400:e356:b45b:f574:35d0:91d3:527b]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-219dc962db4sm8151225ad.7.2024.12.19.01.09.17 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 19 Dec 2024 01:09:18 -0800 (PST) From: Tyrone Ting X-Google-Original-From: Tyrone Ting To: avifishman70@gmail.com, tmaimon77@gmail.com, tali.perry1@gmail.com, venture@google.com, yuenn@google.com, benjaminfair@google.com, andi.shyti@kernel.org, andriy.shevchenko@linux.intel.com, wsa@kernel.org, rand.sec96@gmail.com, wsa+renesas@sang-engineering.com, warp5tw@gmail.com, tali.perry@nuvoton.com, Avi.Fishman@nuvoton.com, tomer.maimon@nuvoton.com, KWLIU@nuvoton.com, JJLIU0@nuvoton.com, kfting@nuvoton.com Subject: [PATCH v8 4/4] i2c: npcm: Enable slave in eob interrupt Date: Thu, 19 Dec 2024 17:08:59 +0800 Message-Id: <20241219090859.18722-5-kfting@nuvoton.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20241219090859.18722-1-kfting@nuvoton.com> References: <20241219090859.18722-1-kfting@nuvoton.com> X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org X-BeenThere: openbmc@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development list for OpenBMC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: openbmc@lists.ozlabs.org, Charles Boyer , Vivekanand Veeracholan , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Errors-To: openbmc-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "openbmc" From: Charles Boyer Nuvoton slave enable was in user space API call master_xfer, so it is subject to delays from the OS scheduler. If the BMC is not enabled for slave mode in time for master to send response, then it will NAK the address match. Then the PLDM request timeout occurs. If the slave enable is moved to the EOB interrupt service routine, then the BMC can be ready in slave mode by the time it needs to receive a response. Signed-off-by: Charles Boyer Signed-off-by: Vivekanand Veeracholan Signed-off-by: Tyrone Ting Reviewed-by: Tali Perry --- drivers/i2c/busses/i2c-npcm7xx.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index 1aae1a8a8055..3ca08b8ef8af 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c @@ -1925,6 +1925,12 @@ static int npcm_i2c_int_master_handler(struct npcm_i2c *bus) (FIELD_GET(NPCM_I2CCST3_EO_BUSY, ioread8(bus->reg + NPCM_I2CCST3)))) { npcm_i2c_irq_handle_eob(bus); +#if IS_ENABLED(CONFIG_I2C_SLAVE) + /* reenable slave if it was enabled */ + if (bus->slave) + iowrite8(bus->slave->addr | NPCM_I2CADDR_SAEN, + bus->reg + NPCM_I2CADDR1); +#endif return 0; }