From patchwork Fri Feb 21 06:35:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 13984870 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 AE3F9C021AA for ; Fri, 21 Feb 2025 06:35:41 +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:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6BD0pgIzkQz9ljgnrlAZ5kS6yXXF+QlF3NXolDNs6ck=; b=YeT/dDgTRo+fKm K8/2KhFfPgg9YNHZ3xpz+MRQdKF6oTdiLNSzy+a41EsKxj1kz/PMYszqJ/mcX0SVtPnxcj4aPD48s bRLQM00FEt+BkR9NsKaLOXx88aOSjvW91gRcDlr0xpJOr4/O/vbCeH2rSOFMrseD5LRjTG4q+W/ZK Dhr6220Jm9+K+NKhS5xwfcn+G9XooRgjI/R1G0kRbGp1/BuEsI+wY7hXd7vzpx/OZellvuIs0WBWK tPPnyC0nr91QenW0VbiFa10VwxHcfHvVLqpmgqYFGRaKCQcOhI5B6QANpbXrHwt8825IoOmLjLBV2 cgjUdweFJJHIQT4yHNDg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlMdR-00000004ONc-1vN5; Fri, 21 Feb 2025 06:35:41 +0000 Received: from mail-pl1-x631.google.com ([2607:f8b0:4864:20::631]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlMdO-00000004OL6-2jEd for linux-i3c@lists.infradead.org; Fri, 21 Feb 2025 06:35:39 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-220d398bea9so25705465ad.3 for ; Thu, 20 Feb 2025 22:35:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740119738; x=1740724538; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AwO/SkbYtwZTs4AM8sYV7gCvk2UZJpUu9dv4BdAdEOY=; b=a24/yv+iVdld2UTnmvON8nXdwGphLhabVEd7ZT8Sll/CRrZfXrsWth8UzClj6cZKRs 2fma9TjALKftSufJnSzA0T3LMmDT8JxJCDk1FnoWu3+Sb/76bJ3nYEzAv6wK1ImdeLZE R3zwLTJc85UNy/7Dl5HRry+UmdfCcX2qN23zgQW0t+gZHaBKnbz6wHm1NnlKkCfi9T6i 54yFP+2bRV555GISDxHHwb6r+r/xnp4/liEyHy2rOAXBJcBOMu1gKThF7vKEnLzFi25w 6QxnbD+jQl135ICib8FMAv4VB0ejW7UfZCl1pPuG2XQQhZUfMe7T3wSuuKPdFc9j0mBh EdFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740119738; x=1740724538; h=content-transfer-encoding:mime-version: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=AwO/SkbYtwZTs4AM8sYV7gCvk2UZJpUu9dv4BdAdEOY=; b=KcSqAUZd+VPRUXLC49OJqFWrcytdgiAoD2kozSU20HbE4iM968bIF+aEuT0v9bWkcg c6uQ5WAL2yrrAZlZQxNYyDSJHfQJ2DYkBlLVG6Xwm4MkPIe11E7zhCoZDXl7/S51+JMa 7qCtPUYqX8JKTmGXtRFgq+gAwy6I/X6oALzeCXNiSuzVLs/D/kDFpaUMovM6z2CZusxF NuoSnaqXpe/nhj4AwrcaLH1XnctQs6w6iMFFTfamxJbNWE18RG/FYw7AZP1BS8c40qAo tUw2MNCRvZ1Z3tGhWnVqq8Rjn7J2OErjYh67PqngxL62fuaB+v8Beq1xXf4C+7gcyxVp Qb6A== X-Forwarded-Encrypted: i=1; AJvYcCV/Q2ic0vAzUXzaNA94ZVLYxB2qMs9lyA6Bmocwep7dIGornVDG0Ju4vuW8HGpUJPZeq36dIkBXmtI=@lists.infradead.org X-Gm-Message-State: AOJu0Yw09gpcKe/k46dNSkQo6sEd1JYVF/Ta5LpZ41VBoDQngOq2Ycfb YSZ4NrAj00f7+kjcH00IxIVWkTwxqK91uBWElj6byJmoxUdqkaKF X-Gm-Gg: ASbGncvTBagoELu5vKCJJkndQJIs0j+FvWUqEd8okNlGbq3KsdFtyM1jgteMy6JNWWY TMBaKNerxB9flENffzYEVc/oCfBYBtlYqkjtVp1VnZFtwhoOYGmTxJdHGCkNMeLACg/7WYfU0QE qrWJqb7Egbf88mlB0oScJbpn44MQF0XGihddKP4ETkvniBldxFnPJPZNfuPsx2TSF6IKj89gaHY +tOR8frmgHKdVEE1VLLJifCQux6/W6hXxY/8/YnTz0cO5u0SrcvesRxqNKEB4aS03JN/i/9b5kd b9kivmnaJvKfVggcFVkqh96ac176ElEmf+P/ X-Google-Smtp-Source: AGHT+IF1irUoX48lK4y0HS1OgtbhNS+wWRgPDk7H704bIktSj2/k9kSPBlJNGGRV0ZdISZdA+3mOZg== X-Received: by 2002:a05:6a20:c998:b0:1ee:d8c8:4b82 with SMTP id adf61e73a8af0-1eef5558f37mr3519911637.31.1740119737763; Thu, 20 Feb 2025 22:35:37 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:dc0a:4fe5:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-adb57c5dc68sm13777275a12.9.2025.02.20.22.35.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 22:35:37 -0800 (PST) From: Stanley Chu X-Google-Original-From: Stanley Chu To: frank.li@nxp.com, miquel.raynal@bootlin.com, alexandre.belloni@bootlin.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, linux-i3c@lists.infradead.org Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, tomer.maimon@nuvoton.com, kwliu@nuvoton.com, yschu@nuvoton.com Subject: [PATCH v3 1/4] dt-bindings: i3c: silvaco: Add npcm845 compatible string Date: Fri, 21 Feb 2025 14:35:25 +0800 Message-Id: <20250221063528.1810007-2-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250221063528.1810007-1-yschu@nuvoton.com> References: <20250221063528.1810007-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250220_223538_690719_41F142DA X-CRM114-Status: UNSURE ( 9.35 ) X-CRM114-Notice: Please train this message. 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 From: Stanley Chu Nuvoton npcm845 SoC uses the same Silvico IP but an older version. Need to add a new compatible string to distinguish between different hardware versions. Signed-off-by: Stanley Chu Acked-by: Krzysztof Kozlowski --- Documentation/devicetree/bindings/i3c/silvaco,i3c-master.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/i3c/silvaco,i3c-master.yaml b/Documentation/devicetree/bindings/i3c/silvaco,i3c-master.yaml index c56ff77677f1..4fbdcdac0aee 100644 --- a/Documentation/devicetree/bindings/i3c/silvaco,i3c-master.yaml +++ b/Documentation/devicetree/bindings/i3c/silvaco,i3c-master.yaml @@ -14,7 +14,9 @@ allOf: properties: compatible: - const: silvaco,i3c-master-v1 + enum: + - nuvoton,npcm845-i3c + - silvaco,i3c-master-v1 reg: maxItems: 1 From patchwork Fri Feb 21 06:35:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 13984871 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 24224C021AA for ; Fri, 21 Feb 2025 06:35:44 +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:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1vWbY81ustA8NpLjxMOTQyOIk0ph7/latzF0mUdZmCs=; b=VJAq7q0LEqzq7j HWOS1bC/v8q2fXAcFpdcxEanySkFASBId3KrNUbvPHvkDmy5u15KzddTpXHOn7EorSphM6/ysyVwY byiSCWweuRN7/Bww0cQXaOyGpVYCyT0wQsW/Cg7aFUdHxbPOW4SeQHxwEIIhZuqfWI77KymMFf+bS JOsEqx6aDUOOrfqmVBD+zCWyltHpl7Whx5DnapbKU8SLPia74tZULSmmGSMKSAwTMgIGXKt96jP+F ItuFW09XeyVom2P/5vfKZ+qDQe17xSmt1f8btUwW2XUAc0OeJq365DQkK2Hv799Q5U6IFSVUDByla 2QelnLgzPsYF3/n//K+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlMdT-00000004OOm-3DUv; Fri, 21 Feb 2025 06:35:43 +0000 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlMdR-00000004ONT-2bCI for linux-i3c@lists.infradead.org; Fri, 21 Feb 2025 06:35:42 +0000 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-221050f3f00so36974795ad.2 for ; Thu, 20 Feb 2025 22:35:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740119741; x=1740724541; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=N0UmhVr497ovNg9ejUAc8bbMw7RbeVAmmP57+q0HxTw=; b=kxQd+TiRuXSflHDWXau5+q8QwCkb4OjP0KtR32t2KGT4f+0uSby4dcJuYohovR6Wqz TxCxzUTFb59GNnNxiuq6fZRjZ9EkBBNsoZO5idC0rGFYYe+4KumuKlnAxO0nYsB8NACn h1dSaFAe2+loTnQ2qFwV54RgdtmYLKGMkOs75zxOVvaWuSW8r0Ip68MYWcQ/BLCuuiwx M8L91f/YiDJsKk/jdbUPw7/Xwo/Nz7RVQWuf+uHRYq3SefURc/8nhCg9AVe24/xqeyxA BngChLJ6bwpFU89gTuG/jA02aUNRNoKrt7YpgnyMbXShQjK4YBstGVeMiwmA4SqcQ0OX v29A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740119741; x=1740724541; h=content-transfer-encoding:mime-version: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=N0UmhVr497ovNg9ejUAc8bbMw7RbeVAmmP57+q0HxTw=; b=KqnWymAtim8ZPmwyrV8cp7nVcvc9de4Ft1UIxC9zO19iH5QGx2NrEJCA3JSPaapZWN YjADA+yx0iGnoTIKaPDVg3bDGTgaFROt38Ihky5oQRXY+d3U1ddUqwS8UEZARCv4d/mV MFuPfME85c62ACalzbKeQoh5umZosV9ohRh2Ll0+nx8vVQ9SR8vfgFMQVb4eBiAMd7PF gaS/3lhbMmREF0jqbk8zmJ3DXNcuh/G4ZmARtPB565DOnjPei5h1iFGT7SXGXfHdbsOv oidRMJOGKma+5UWYgvKRo2uDPUF75hBfie3WdG0VYQdNYq5BMOV2uw/mFOrVzkf5LXAk B8vg== X-Forwarded-Encrypted: i=1; AJvYcCUsjiml+t/zCySYbRPxeTajXN1GOCTZmSFU+kUQqQFGsoUzM9ujK5B1ky8VFQo6ZHkjFpV4nnucZAQ=@lists.infradead.org X-Gm-Message-State: AOJu0YzWbxBsKqM1IGmscvmhQo2CFHgyKhbA4iMM+xfSAB7nn/mz9neg 2ojMv+9BqsdkGrGC0GZVZTLOsNvFYQrFZCMUKKIDByyf5PyzfAe3UGcZpg== X-Gm-Gg: ASbGncsTzNA47mFUjKt0DKu17BHRckK9TZCzHS04TPTyGKnOElSHJznoFS0fmccyBjh FWz2jTV++nmGN4VhPmtIk6lLAXHBdvngmBdUH9lifFkI1EPkwOsxkSBDlgSVSU8KjfyICI33PoQ mwScd9UW42ijqfxWj5hxq4SHYQDfiDpbrolBv2OP5NzlpAOGEkh9TzUkI+TLWXe8reIENpQiFgJ nalv4s/JtDwaAZcd+rjP4LgAFCxTSBQM2Mmr+oiZU2iaHl6FDBlvo985kEkj3UTen/StYE/wej5 zG1spBjC71xJNNvT/ewBhyU32uhirDLGEPt0 X-Google-Smtp-Source: AGHT+IExk4fm0MpazRHrquV5b4b+qLPghd14iv0oO0qS+yk53d9y18NJGOOCf2qnXgXgyqH2xQdxBg== X-Received: by 2002:a05:6a21:6b0f:b0:1ee:c093:e23c with SMTP id adf61e73a8af0-1eef3db70e6mr4214308637.41.1740119740736; Thu, 20 Feb 2025 22:35:40 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:dc0a:4fe5:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-adb57c5dc68sm13777275a12.9.2025.02.20.22.35.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 22:35:40 -0800 (PST) From: Stanley Chu X-Google-Original-From: Stanley Chu To: frank.li@nxp.com, miquel.raynal@bootlin.com, alexandre.belloni@bootlin.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, linux-i3c@lists.infradead.org Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, tomer.maimon@nuvoton.com, kwliu@nuvoton.com, yschu@nuvoton.com Subject: [PATCH v3 2/4] i3c: master: svc: Add support for Nuvoton npcm845 i3c Date: Fri, 21 Feb 2025 14:35:26 +0800 Message-Id: <20250221063528.1810007-3-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250221063528.1810007-1-yschu@nuvoton.com> References: <20250221063528.1810007-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250220_223541_661824_28A32AAE X-CRM114-Status: GOOD ( 13.86 ) 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 From: Stanley Chu Nuvoton npcm845 SoC uses the same Silvico IP but an older version. Add npcm845 specific quirks. Signed-off-by: Stanley Chu --- drivers/i3c/master/svc-i3c-master.c | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index d6057d8c7dec..1e7e3e1f3d22 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -133,6 +133,22 @@ #define SVC_I3C_EVENT_IBI GENMASK(7, 0) #define SVC_I3C_EVENT_HOTJOIN BIT(31) +/* + * SVC_I3C_QUIRK_FIFO_EMPTY: + * I3C HW stalls the write transfer if the transmit FIFO becomes empty, + * when new data is written to FIFO, I3C HW resumes the transfer but + * the first transmitted data bit may have the wrong value. + * Workaround: + * Fill the FIFO in advance to prevent FIFO from becoming empty. + */ +#define SVC_I3C_QUIRK_FIFO_EMPTY BIT(0) +/* + * SVC_I3C_QUIRK_FLASE_SLVSTART: + * I3C HW may generate an invalid SlvStart event when emitting a STOP. + * If it is a true SlvStart, the MSTATUS state is SLVREQ. + */ +#define SVC_I3C_QUIRK_FALSE_SLVSTART BIT(1) + struct svc_i3c_cmd { u8 addr; bool rnw; @@ -158,6 +174,10 @@ struct svc_i3c_regs_save { u32 mdynaddr; }; +struct svc_i3c_drvdata { + u32 quirks; +}; + /** * struct svc_i3c_master - Silvaco I3C Master structure * @base: I3C master controller @@ -214,6 +234,7 @@ struct svc_i3c_master { spinlock_t lock; } ibi; struct mutex lock; + const struct svc_i3c_drvdata *drvdata; u32 enabled_events; u32 mctrl_config; }; @@ -230,6 +251,15 @@ struct svc_i3c_i2c_dev_data { struct i3c_generic_ibi_pool *ibi_pool; }; +const struct svc_i3c_drvdata npcm845_drvdata = { + .quirks = SVC_I3C_QUIRK_FIFO_EMPTY | SVC_I3C_QUIRK_FALSE_SLVSTART, +}; + +static inline bool svc_has_quirk(struct svc_i3c_master *master, u32 quirk) +{ + return (master->drvdata && (master->drvdata->quirks & quirk)); +} + static inline bool is_events_enabled(struct svc_i3c_master *master, u32 mask) { return !!(master->enabled_events & mask); @@ -1868,6 +1898,7 @@ static int svc_i3c_master_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, master); + master->drvdata = of_device_get_match_data(dev); pm_runtime_set_autosuspend_delay(&pdev->dev, SVC_I3C_PM_TIMEOUT_MS); pm_runtime_use_autosuspend(&pdev->dev); @@ -1960,6 +1991,7 @@ static const struct dev_pm_ops svc_i3c_pm_ops = { static const struct of_device_id svc_i3c_master_of_match_tbl[] = { { .compatible = "silvaco,i3c-master-v1"}, + { .compatible = "nuvoton,npcm845-i3c", .data = &npcm845_drvdata }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, svc_i3c_master_of_match_tbl); From patchwork Fri Feb 21 06:35:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 13984872 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 4620DC021B4 for ; Fri, 21 Feb 2025 06:35:47 +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:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2uCd4Jv6gUf2lu24gS5RNlVu/sos1zSShJYOBFtSC/A=; b=GmOpWhmCgt4POZ dcBeZBTghkVA2RtyDA6TxPdQn8F9bE+bxPVeMGOZvWm5F9MB3tWrW06ddAvSCACUIqIUjd+i4bFxT OD3n2RIkAqn/H+TbWB5AYKgZp1xzLWPmLGKnLDkRsY1l/0Fhe+n/T3GPOWpi+1e0pOxQuSyrxgQxh 0nVdM2HmB1fjrXGg0LFFfrvTrotxv6KSCUY1VsdixZTdC1rOHI7URUQELQQmPATuR0Gj4NrvhVLeX xm1LgmYCVBiWDeyPqP5NldGav9M+IEntkWQObkkTxIkQcIe5kxOPuU2LcPhnBCYx1El5FhOxgDyAP 7q5EBR/nppQwldjVB0zQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlMdX-00000004OQm-0DyI; Fri, 21 Feb 2025 06:35:47 +0000 Received: from mail-pl1-x62a.google.com ([2607:f8b0:4864:20::62a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlMdU-00000004OP2-2vau for linux-i3c@lists.infradead.org; Fri, 21 Feb 2025 06:35:45 +0000 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-22114b800f7so33058395ad.2 for ; Thu, 20 Feb 2025 22:35:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740119744; x=1740724544; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DmC19JBPGsENQ1VkviAHTu5A3YwsTQcs9ernFXwa91g=; b=L0rWVmtzIdCWU6x797xgns1tii1XUnwingF/B/glUVwrcTK5T4hfnKhYxFAuGOks3o o9PoNqwimjRoZvT/ecvaUWdFP+TTNiC5xFnuePjASiA86x6dAUfuO31YitoFBvcamIYH dzH9rUvVYXVXl182x0nPFOKPgqIMOiHbGk73PnTKQXuF0AIeszjbaDG/RLiWH6xS8ecN xdiadhGnHAc3nSbE88cUBK1/O3MrQqXpyODtYCjePMmvCqCcyFBoNgN3nQ1pf1XnCoqK OFR2IFXtE+EsfzI97lVd7k1w5iOJqIvpPY9z+jSbX73EPGeKO/dhpiYekX+Oz0bAqxFe Q1Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740119744; x=1740724544; h=content-transfer-encoding:mime-version: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=DmC19JBPGsENQ1VkviAHTu5A3YwsTQcs9ernFXwa91g=; b=nlTSDTo7jlHNjCrZSfLYD8n9RGuCbjU1pXr0azcj7pgsM63MQIicOq9el+rRZQoTe0 ump/OgbT7uh9d/UX1kon78q5R8fgoCI+qwlHiakN1h5VniAWlruGPF1qiOg5q/FWDhwC yhaWaXf4D47KDzbP9Gel1Un/CkfK+D7u3tG89od4QomiLPMeVEzhML0taD7+fjV6Mirk hVgmTXfeAr/4Kjk9T2NKqkhAsmzZPD6FPLlz5lVmuwh0wMY7VZma2/RSQ+x7/tRxeKBE yGkOgwyWaz6GqewOUTLd+ITPGAthZO3LFrhkyqmRY1P7q3HvK+CXKKW0TAMzaCKv/W2t 97sQ== X-Forwarded-Encrypted: i=1; AJvYcCWCKq83KdwLTcAKYNvtltL3tAXB7WrnR+69t2Tyt/WkagNyUf1TSOLtXscQFq/pSJYGFJb2X2g1iaI=@lists.infradead.org X-Gm-Message-State: AOJu0YzlRfBJS45+bPHWwH9dIxt0UfcnbTPkcJ1M4LfDuW0yGD6Ti74w alz/WiwR8iaf/eSIO/i4ULs3Ignyq7kC6IbWQ3/hbHoM6H4x+Io4ibxfgg== X-Gm-Gg: ASbGncv8CwkqmyAfpx+ZiB6FmoZWa2uSXbjDSepQDJXryIZ98Dsx6ZvWtO97uD5su5j tbuvjVzhJtW1K6GQnQdd87/ZjFOpJ0dreO1gcp4Y2puIusDXta27yUKCn992/BjrljPlJz/Fq9S Hjce0KAP9rbcw8N52EQJjU4NP+KjwEqwHBdBGJO6eFzHHHWE0DqBBYYoFn/F7ByN0R+MK6CSk5Q BnkKVK0AEfgFcllTqNJdj+kYJqk6MncbpUnlbD+bOsmq3wJTvEscX8EIbXyjg1yfhuNGum3dERU ZxGUp8J+q450mTVhlnw7TDtDCawL0jaN5YNB X-Google-Smtp-Source: AGHT+IHcLopNzqkHAb76GoiyWMDUo2xcF/l6UUNHRIBoO6hb5KRaBtRoFFyBw9WH1MBRsIG3Mamdtg== X-Received: by 2002:a17:903:18b:b0:221:1cf:da1 with SMTP id d9443c01a7336-2219ff5f759mr40749795ad.24.1740119743680; Thu, 20 Feb 2025 22:35:43 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:dc0a:4fe5:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-adb57c5dc68sm13777275a12.9.2025.02.20.22.35.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 22:35:43 -0800 (PST) From: Stanley Chu X-Google-Original-From: Stanley Chu To: frank.li@nxp.com, miquel.raynal@bootlin.com, alexandre.belloni@bootlin.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, linux-i3c@lists.infradead.org Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, tomer.maimon@nuvoton.com, kwliu@nuvoton.com, yschu@nuvoton.com Subject: [PATCH v3 3/4] i3c: master: svc: Fix npcm845 FIFO empty issue Date: Fri, 21 Feb 2025 14:35:27 +0800 Message-Id: <20250221063528.1810007-4-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250221063528.1810007-1-yschu@nuvoton.com> References: <20250221063528.1810007-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250220_223544_740840_079690B9 X-CRM114-Status: GOOD ( 16.00 ) 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 From: Stanley Chu I3C HW stalls the write transfer if the transmit FIFO becomes empty, when new data is written to FIFO, I3C HW resumes the transfer but the first transmitted data bit may have the wrong value. Fill the FIFO in advance to prevent FIFO from becoming empty. Signed-off-by: Stanley Chu --- drivers/i3c/master/svc-i3c-master.c | 43 +++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index 1e7e3e1f3d22..7919a49e97c7 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -921,6 +921,7 @@ static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master, unsigned int dev_nb = 0, last_addr = 0; u32 reg; int ret, i; + u32 dyn_addr; while (true) { /* clean SVC_I3C_MINT_IBIWON w1c bits */ @@ -961,6 +962,17 @@ static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master, if (SVC_I3C_MSTATUS_RXPEND(reg)) { u8 data[6]; + /* + * Filling the dynamic address in advance can avoid SCL clock stalls + * and also fix the SVC_I3C_QUIRK_FIFO_EMPTY quirk. + */ + dyn_addr = i3c_master_get_free_addr(&master->base, last_addr + 1); + if (dyn_addr < 0) { + ret = -ENOSPC; + break; + } + writel(dyn_addr, master->regs + SVC_I3C_MWDATAB); + /* * We only care about the 48-bit provisioned ID yet to * be sure a device does not nack an address twice. @@ -1039,21 +1051,16 @@ static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master, if (ret) break; - /* Give the slave device a suitable dynamic address */ - ret = i3c_master_get_free_addr(&master->base, last_addr + 1); - if (ret < 0) - break; - - addrs[dev_nb] = ret; + addrs[dev_nb] = dyn_addr; dev_dbg(master->dev, "DAA: device %d assigned to 0x%02x\n", dev_nb, addrs[dev_nb]); - - writel(addrs[dev_nb], master->regs + SVC_I3C_MWDATAB); last_addr = addrs[dev_nb++]; } /* Need manual issue STOP except for Complete condition */ svc_i3c_master_emit_stop(master); + svc_i3c_master_flush_fifo(master); + return ret; } @@ -1201,8 +1208,8 @@ static int svc_i3c_master_read(struct svc_i3c_master *master, return offset; } -static int svc_i3c_master_write(struct svc_i3c_master *master, - const u8 *out, unsigned int len) +static int svc_i3c_master_write(struct svc_i3c_master *master, const u8 *out, + unsigned int len, bool last) { int offset = 0, ret; u32 mdctrl; @@ -1219,7 +1226,7 @@ static int svc_i3c_master_write(struct svc_i3c_master *master, * The last byte to be sent over the bus must either have the * "end" bit set or be written in MWDATABE. */ - if (likely(offset < (len - 1))) + if (likely(offset < (len - 1)) || !last) writel(out[offset++], master->regs + SVC_I3C_MWDATAB); else writel(out[offset++], master->regs + SVC_I3C_MWDATABE); @@ -1250,6 +1257,17 @@ static int svc_i3c_master_xfer(struct svc_i3c_master *master, SVC_I3C_MCTRL_RDTERM(*actual_len), master->regs + SVC_I3C_MCTRL); + if (svc_has_quirk(master, SVC_I3C_QUIRK_FIFO_EMPTY) && !rnw && xfer_len) { + u32 len = min_t(u32, xfer_len, SVC_I3C_FIFO_SIZE); + + ret = svc_i3c_master_write(master, out, len, + xfer_len <= SVC_I3C_FIFO_SIZE); + if (ret < 0) + goto emit_stop; + xfer_len -= len; + out += len; + } + ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg, SVC_I3C_MSTATUS_MCTRLDONE(reg), 0, 1000); if (ret) @@ -1311,7 +1329,7 @@ static int svc_i3c_master_xfer(struct svc_i3c_master *master, if (rnw) ret = svc_i3c_master_read(master, in, xfer_len); else - ret = svc_i3c_master_write(master, out, xfer_len); + ret = svc_i3c_master_write(master, out, xfer_len, true); if (ret < 0) goto emit_stop; @@ -1338,6 +1356,7 @@ static int svc_i3c_master_xfer(struct svc_i3c_master *master, emit_stop: svc_i3c_master_emit_stop(master); svc_i3c_master_clear_merrwarn(master); + svc_i3c_master_flush_fifo(master); return ret; } From patchwork Fri Feb 21 06:35:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 13984873 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 2F797C021B3 for ; Fri, 21 Feb 2025 06:35:50 +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:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=XIxtC+Y9CSr3V+3wLDuV273wih+3pYIDT9vfW2jTzcQ=; b=wuOoIhrxi1lMxh DSLCwz4uOxbJzNtHzyhum0AoIfbxv9MyhP8lA8ZCWkhrVsAOEszHU8rubuU37Z/gs4pN/HxytQgC8 5FEUcMesH/1nEBvBPUCCiKY3bWvd1/tQlZiJy0U12Egghq6FYlGzPqb3Rl6vw5K1siOqKd3UB9Ais gYkZcKGiamFKEfSszGuyEBLKHSx0QJn4lTHXDoE8p7fWJtl0YQaHnMJJo4dATV2AxrkKzfbFB5xGB wFzL6YdNyk2lQZ7Q8xXGnpnYjpcqIin1H2ARcFHdnkm+LU9J+offSwjNDpXmtnce1ALwapEREEs5Q a8CiNBJCnN4MZeTXZ5QA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tlMdZ-00000004OTG-3zUq; Fri, 21 Feb 2025 06:35:49 +0000 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tlMdX-00000004OR6-3Myk for linux-i3c@lists.infradead.org; Fri, 21 Feb 2025 06:35:48 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-220ec47991aso23328115ad.1 for ; Thu, 20 Feb 2025 22:35:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740119747; x=1740724547; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wJZZgP9u7QVUH6ZPvsc3Z9sNtX4BPyeqrHPYvkDLOq8=; b=TVuPCWgp16yZtXrfB0Q3TOGn0Vi0hkxj5E3pMJfC7ebnT//MDcCsiaCNKHLXrGrixD /nStaBkyWzmUY171+HM217bsJZqOx6LgJa8bXqxwJV1zl8vwtOFBfKDh0c957lFL68+t qoFhdimhoK6OKXlzm/PBffkBKuD3ygVnaN7E8woktAYpGeZxFGFF7HCSGTPmhRzM+E3I 2Gs8JcqEghoBTU7FTqOxGd/JFjaJbx0m5T5iWv9N8Oh8o56WA0xzRKYk0VNSAeJFwyYU I/tesuFh1lCyU3ZF+Hv5Q17eQ1/1ISZmnl9QES7o9/ZdZ2XQOCdqh0UmdiZ+sLEoYy2y SebA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740119747; x=1740724547; h=content-transfer-encoding:mime-version: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=wJZZgP9u7QVUH6ZPvsc3Z9sNtX4BPyeqrHPYvkDLOq8=; b=T91QDNWR0MDvkwBa3Jybu/u6Hs4nkhDZNbAJM6oCDFmVptq4cJy0AgZYO4SaOIydqP pG9x1QjhwFPdun3e0wOCZL0wW5VTbRWvWXcG5qebXO/VRmh5oPX2S/Z0eA0AGvAUWoS3 Q88ArHM+Cc5Q9prI9FFuEWDsQGWz7AKuw1E9K8dM//4yMxL5T4tazyhGEpSP4JiuPc6R UQX+ypncDcYWWwrirJhQk/K2/0bV8sv/nMew32xHb59LuAwEMS1iy3bAqOUHagWlHAjz cGnR3fprKzJ+7Cs9FUHZXXIm55QZgBcASCreAjRu8iyBn3ZFIQsEN3EHslo+pM7XolmG iBIA== X-Forwarded-Encrypted: i=1; AJvYcCWe8y3tqKnxy4FL7OMZVUpWrKhpZ4AiA6LIugFXrPN5iq4IXblwbDoe7ifRBrtPfGnzZPcur6FNXpw=@lists.infradead.org X-Gm-Message-State: AOJu0Yxv5SE4RfUvd233Cg497pbZds01Hp38Yh+ZLTjMWP9O3H9U5Rk+ /OMq34hXb3kNwCUswNhBVldt/eqzYawC28J0v9cex2uq9LyXUergcVvkgA== X-Gm-Gg: ASbGncs9jHAZJY2GT034wV/Ch2vgA0R0tyNg3fnIavl2hYQJEupkwbj7bl18evW5+gi V0Gqj0aOhsv/iYt8edY00cqOd/nvoXhx+uuBzE97fUloX4MWcYYcGcLsbKHN+yetl5oiogoRUyM 0koZFnKj4xs+NoCUVUn7TQ3cwTwlBkFeTImCiCHkWoKMgnLpJfhZ7kT5N51Ua8meJz+z9OD8yeO 7NoBO1aZGBQt2BA1m9UsDYvJs33KWgAMZxSFzvTtYQfFTcOhSWNeUnUa0Krl3fzYGDilxhXm2x4 Ejl/k4fCD9bHQsu12C9UpL5zb9a4qfB5hFve X-Google-Smtp-Source: AGHT+IEMTD799IywAKKBFI7G5hTdovwrBgU4HCYvF55pPKJBN3Js9sdTAyBxkVcKXr1qHK/d9ElnHA== X-Received: by 2002:a05:6a20:914a:b0:1ee:88f1:e840 with SMTP id adf61e73a8af0-1eef3ca3f4fmr3727034637.19.1740119746868; Thu, 20 Feb 2025 22:35:46 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:dc0a:4fe5:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-adb57c5dc68sm13777275a12.9.2025.02.20.22.35.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 22:35:46 -0800 (PST) From: Stanley Chu X-Google-Original-From: Stanley Chu To: frank.li@nxp.com, miquel.raynal@bootlin.com, alexandre.belloni@bootlin.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, linux-i3c@lists.infradead.org Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, tomer.maimon@nuvoton.com, kwliu@nuvoton.com, yschu@nuvoton.com, Frank Li Subject: [PATCH v3 4/4] i3c: master: svc: Fix npcm845 invalid slvstart event Date: Fri, 21 Feb 2025 14:35:28 +0800 Message-Id: <20250221063528.1810007-5-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250221063528.1810007-1-yschu@nuvoton.com> References: <20250221063528.1810007-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250220_223547_844769_B04C41A4 X-CRM114-Status: GOOD ( 10.45 ) 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 From: Stanley Chu I3C HW may generate an invalid SlvStart event when emitting a STOP. If it is a true SlvStart, the MSTATUS state is SLVREQ. Check the MSTATUS state to ignore the false event. Reviewed-by: Frank Li Signed-off-by: Stanley Chu --- drivers/i3c/master/svc-i3c-master.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index 7919a49e97c7..fca4848d02e5 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -58,6 +58,7 @@ #define SVC_I3C_MSTATUS 0x088 #define SVC_I3C_MSTATUS_STATE(x) FIELD_GET(GENMASK(2, 0), (x)) #define SVC_I3C_MSTATUS_STATE_DAA(x) (SVC_I3C_MSTATUS_STATE(x) == 5) +#define SVC_I3C_MSTATUS_STATE_SLVREQ(x) (SVC_I3C_MSTATUS_STATE(x) == 1) #define SVC_I3C_MSTATUS_STATE_IDLE(x) (SVC_I3C_MSTATUS_STATE(x) == 0) #define SVC_I3C_MSTATUS_BETWEEN(x) FIELD_GET(BIT(4), (x)) #define SVC_I3C_MSTATUS_NACKED(x) FIELD_GET(BIT(5), (x)) @@ -594,6 +595,11 @@ static irqreturn_t svc_i3c_master_irq_handler(int irq, void *dev_id) /* Clear the interrupt status */ writel(SVC_I3C_MINT_SLVSTART, master->regs + SVC_I3C_MSTATUS); + /* Ignore the false event */ + if (svc_has_quirk(master, SVC_I3C_QUIRK_FALSE_SLVSTART) && + !SVC_I3C_MSTATUS_STATE_SLVREQ(active)) + return IRQ_HANDLED; + svc_i3c_master_disable_interrupts(master); /* Handle the interrupt in a non atomic context */