From patchwork Thu Mar 6 07:54: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: 14003943 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 73442C28B23 for ; Thu, 6 Mar 2025 07:55:39 +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=rVX38OzyB8buiIktVdALjdZvLPNO7X5PMsyOM4l0Ik4=; b=kycnaNDPvZ/J+f 9dqmDMdgXC4goc7NEAbY/uIDiZ4Y2xpXfytCfp0LGpJB4qEjFOj6H4DlWonJi8ySxnmAu3pKejMc/ DrNPsPaURhqIE10K6bwKw3q0Q/I+UnZofwRGQ+ixGfgR14wS5d4JnwqxqOpe5/fyyuaMYy91litYG ShG2S8JBdZbO8Wkm4xc3v4Ydjzgnf+/kv0EshVhq3d9VO/Kr9mAas4U7qjXWSp7pwB3pZVgUvNALl z+FOkG0IJ6O9mzhY5UehX8dlFWyGfpIBg7JD+6lXDmmxjgQ2XWmerqRteWKfsuSvlK5IN+fp7YReR Q124XT7f/dtBVHImatRA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tq64x-0000000AGNA-0gZQ; Thu, 06 Mar 2025 07:55:39 +0000 Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tq640-0000000AGA6-1Q4L for linux-i3c@lists.infradead.org; Thu, 06 Mar 2025 07:54:41 +0000 Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-223fb0f619dso5594885ad.1 for ; Wed, 05 Mar 2025 23:54:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741247679; x=1741852479; 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=TbBWp8Gpp+tRkxfYN3BsRLi83MVsRiY+awmccSWrlIQ=; b=kWayCxKtJVIMUFpkfL23vBXhik8r4DkWTRz4EVd35RPqIZtFJKgmuMoLu1t+qQsaRo //pQQpqyjWDwuNjX3dixOQsLPjW1K4zQEi6ShI78tR3FxVzYHTUFQesxlCd/KBLSO5/q n0hop/z5/c3EvPyAtkv6p6emyPfOSsFfX+bVoM97oadD6jRODgVsiovrS9+x0F72dV5x yzBlJHf+z0EwKjtabMo1H3psi/qUPpBBF5ur0iqWeP0xXu4CEzIkk/73y6JngRnFd3YP 9Bdiy3jta6mm8pAUGFozBX3fycsunbvKkmqbPaNTa8j26Cf+NHpB85AfvoSHmbSt/g0u NcRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741247679; x=1741852479; 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=TbBWp8Gpp+tRkxfYN3BsRLi83MVsRiY+awmccSWrlIQ=; b=fRL0b7jJp++ei67SCgNn2jkdan9ExsaphXxez2zF6WibQjfTTmTg1IegR1wKSm2oea VmWd9oWLAexCiucc93CcIGHbI7xCQRM7ejXyM6K+zyshQgtSRrQrLPg/XuwDiLe5QfTk DEoQTYuMDH29xfSmzrNnApkiQ42rbawY+3MPNVSugM0oUlUG1ozaMjAhGlkvKNJXrVy2 eyk6thZh9Y3dRFVF85oAEssCTQmJMdzgQhmUJ6ARUd4MndVOMct4IazIx3KTIQhY2EKu 4pGjLhLeig6qkVCwrY5NdKqBTPoza77c4I/np59LBFG0u465LNgrFheE1wKHU9S+62ho Sn5Q== X-Forwarded-Encrypted: i=1; AJvYcCVKZ5dENO4xwY/9lOuBdNu6cJLwtm4S9HpNZbtlk7uPQv2F8dHxCMts00YLCNzQNAJd75fck4F7jwA=@lists.infradead.org X-Gm-Message-State: AOJu0Yyr/QnlWBe0evtU8aCYH3beBHyJvEPweOE9tYl7ZMy69KCrOzq7 OFe4P1LICGQ5KMmp20WH3z618YmNuwOmUduZJWssjT7lnlcZLTIEkS+JiA== X-Gm-Gg: ASbGncs0HYg1oTBekphA6dzJmrMWPQe7xEJ315OdWveThNN4SHdBEligGNrtlUd29s9 lAhrX7/E9o/DJ5FDObTPfrG1agfH9K39dCORgMPlVgpH7pp3mZb8UsHBbYLF3jcqodDsjFUpbg9 jdeU7McWPN/WjiQA8epiUMPUc+eLwKnsV/+PkTdWuOmqsyYGN1Ec4IQJkRI+DvWWWSbkrQHjJzr N5/2suIf8S4Gymc+47wafX6MfvMHr3ipRpyqj+TCKjzFWJwL0zq1HsrM3P124uMI6vS2t2shVod tBbB9eXA3ekoPgUNDFMRegrN5WIDIlvIYbHBLsMJMv4XVItILbfc7ik= X-Google-Smtp-Source: AGHT+IFlRA1ASdPJHVciwnsTAixFnm9+f7L02Rxbp3y0Ul030LzW40hSSZUseZYzvsv3j9+MbuLuQA== X-Received: by 2002:a17:903:230a:b0:220:ca39:d453 with SMTP id d9443c01a7336-223f1c81e80mr96320715ad.17.1741247679382; Wed, 05 Mar 2025 23:54:39 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:d305:9d26:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22410aa448dsm6085485ad.210.2025.03.05.23.54.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:54:38 -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 v7 1/5] dt-bindings: i3c: silvaco: Add npcm845 compatible string Date: Thu, 6 Mar 2025 15:54:25 +0800 Message-Id: <20250306075429.2265183-2-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306075429.2265183-1-yschu@nuvoton.com> References: <20250306075429.2265183-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250305_235440_368987_F4963FDD X-CRM114-Status: UNSURE ( 8.96 ) 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. Reviewed-by: Frank Li Acked-by: Krzysztof Kozlowski Signed-off-by: Stanley Chu --- 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 Thu Mar 6 07:54: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: 14003946 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 E6B3AC282DE for ; Thu, 6 Mar 2025 07:55:39 +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=vn+nav1VYQ4DY4dK6OROQOetMCJuviPLJQ8bBSTTxjE=; b=KnYYi1sATl3tzL M4/bIdEBVRGBOFXkzxE/Ajqq0L8TBAN2MYAncvj+HD6dpCVJqzYuNovcKvs0TYii96V1itBZ74p/+ dEggsdpmFPRlkQ+i+gg4dUO1ROiMIAExjXeWp1PmgbBhDKaGtzYAwI2MG0z8JF3UsxSe4A+qmhKGY JyObmd3elef2DWHZbFaOKMHsYtOgHXKgoBrVhHVsIN+4mtHTAWLBINnaNMnsNq4MZj1Tfl6WuV8mK I+37nZLmmZCTg21SG58h3KjA16lQc4IyBvYCV/SQPKEVEs8o3QMPuOrihlg9tGgy/3FKY14duUewI tBThE5ExWAbMok9htl7w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tq64x-0000000AGNc-2eFJ; Thu, 06 Mar 2025 07:55:39 +0000 Received: from mail-pl1-x62f.google.com ([2607:f8b0:4864:20::62f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tq643-0000000AGAR-1Nza for linux-i3c@lists.infradead.org; Thu, 06 Mar 2025 07:54:44 +0000 Received: by mail-pl1-x62f.google.com with SMTP id d9443c01a7336-22349dc31bcso5006905ad.3 for ; Wed, 05 Mar 2025 23:54:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741247682; x=1741852482; 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=8z+sL0RW4cJTOyML1J6fde/KORBWPqtZnRc7ageiDm8=; b=Lzw+Yx2XZer7Ze6/XaTa6HEIgXXrvMwPrDrBnxvM6tZGhq9SP5mSFl/LS/DldxaYvI jjdhvb+EhC52WLvXaM8vw7XDOYSUdRIYYSq+c88gkOrfHsmcCNMoR7JK6lsOzHsYpXdd 6wjav7kZwYKb7+eWwfoxSZr65xe42rMLDLQ626qrGkBX6vm/pXggrnK5816I1VB/kxU6 /JhUMd4ZkFlRcz9FFyOQt1gew2uhv7ODCsgojXQ+p4+r/r1jSPH0t5RI112WZXq5AYnk rIvZWfxsdRkgIIjVtpm6BnTkwG9iT+28Oxy15hLQP4ehw1y2Lv4BSqQPnSUXAwli/PCq ZMRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741247682; x=1741852482; 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=8z+sL0RW4cJTOyML1J6fde/KORBWPqtZnRc7ageiDm8=; b=rXB2MbGAcCG87Br0MdhKxsOD2epFY7apiOAk9XmGyoHb+ar8eFjEBEX6fvBs1tzQF2 wjDWJqg5x8LSUJtOhbwTuTYJAPOZ3wPmnLIWpAy9f4tLAbr0GnkTG1QEl9QtOuJaGusU wxZ5+y3p4z6Sm5mzoeA93C5H0gCTot3e3myV5Hx/CUtvG4Mcl1L4gMd2rq8pLXumhV5z IGdp4PM7rWHArl8JAsXi+sIWBdDN4rqJllCsf9s7HDSjt0wxociYoDK636KFr50+ApEM PIcruH4SL4kgrrAYx+0laSAVC6JxU1Ilf5FdJIfV4rVyTwerg7oRvwP4cxmNiu4ZdOo3 R1jA== X-Forwarded-Encrypted: i=1; AJvYcCVISKgnxmfWVpo9zHugLDTEp49Ehp9g+J4ozj7MDiVBXRLNJUokoHv1uyXIrifLU3gqRaKXSxCy5x4=@lists.infradead.org X-Gm-Message-State: AOJu0Yz0jYOPiZpbbxcBpHUEfqj2CEcKhiVWgacT7OqcTi3RYzzx4dHq mZHWsW9BZmCnXb0gHhvpkVptHlx4f+PCi5QkDGicSpoqmQaxtaE9 X-Gm-Gg: ASbGncu+IUAA9UxvqQ6HuKbqmoCCaBKOi22dNY6Hko0jKxp7gBGMWxBcVS+ITyt3wBT leDdPSGCVBzBmU9dtgMgptJkTa8wbSz8RFaJ/W6O2gTZ2BmdLaqHdDTjLZaK0dbYRu9zZv3Wi1q sa7WFCnW2ks39T2R4WraYGb8yil+JjOc3SCg/J1kP8da5pfjqNb/PxRbZXICjnITdKvjtW+RaRk Jj9sIGO8DnfedCWd4oBYiqspE1InuCSJDHUEivBuN+NZ7llrrXbZPK3VbTw+V1E5aBiYztyKpUp 9y4I18jijTE8W0bW9/y6VtDAOrwcIJrW3xXy0isnMWniSmrNs0g0EB8= X-Google-Smtp-Source: AGHT+IGXAIOce42vV0eof1Rl6r+EywEWrktnOVXaG5lMZQPu7G/rBfveA9yLXalq4mL2qutxXfLdqg== X-Received: by 2002:a17:903:230e:b0:223:3396:15e8 with SMTP id d9443c01a7336-223f1c81638mr107329295ad.22.1741247682439; Wed, 05 Mar 2025 23:54:42 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:d305:9d26:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22410aa448dsm6085485ad.210.2025.03.05.23.54.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:54:42 -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 v7 2/5] i3c: master: svc: Add support for Nuvoton npcm845 i3c Date: Thu, 6 Mar 2025 15:54:26 +0800 Message-Id: <20250306075429.2265183-3-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306075429.2265183-1-yschu@nuvoton.com> References: <20250306075429.2265183-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250305_235443_409915_ED275150 X-CRM114-Status: GOOD ( 12.93 ) 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 an older IP version, which has specific hardware issues that need to be addressed with a different compatible string. Add driver data for different compatible strings to define platform specific quirks. Add compatible string for npcm845 to define its own driver data. Reported-by: kernel test robot Closes: https://lore.kernel.org/oe-kbuild-all/202503061400.GGr64rkR-lkp@intel.com/ Signed-off-by: Stanley Chu Reviewed-by: Frank Li --- drivers/i3c/master/svc-i3c-master.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index d6057d8c7dec..40269b692aa8 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -158,6 +158,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 @@ -183,6 +187,7 @@ struct svc_i3c_regs_save { * @ibi.tbq_slot: To be queued IBI slot * @ibi.lock: IBI lock * @lock: Transfer lock, protect between IBI work thread and callbacks from master + * @drvdata: Driver data * @enabled_events: Bit masks for enable events (IBI, HotJoin). * @mctrl_config: Configuration value in SVC_I3C_MCTRL for setting speed back. */ @@ -214,6 +219,7 @@ struct svc_i3c_master { spinlock_t lock; } ibi; struct mutex lock; + const struct svc_i3c_drvdata *drvdata; u32 enabled_events; u32 mctrl_config; }; @@ -1817,6 +1823,10 @@ static int svc_i3c_master_probe(struct platform_device *pdev) if (!master) return -ENOMEM; + master->drvdata = of_device_get_match_data(dev); + if (!master->drvdata) + return -EINVAL; + master->regs = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(master->regs)) return PTR_ERR(master->regs); @@ -1958,8 +1968,13 @@ static const struct dev_pm_ops svc_i3c_pm_ops = { svc_i3c_runtime_resume, NULL) }; +static const struct svc_i3c_drvdata npcm845_drvdata = {}; + +static const struct svc_i3c_drvdata svc_default_drvdata = {}; + static const struct of_device_id svc_i3c_master_of_match_tbl[] = { - { .compatible = "silvaco,i3c-master-v1"}, + { .compatible = "nuvoton,npcm845-i3c", .data = &npcm845_drvdata }, + { .compatible = "silvaco,i3c-master-v1", .data = &svc_default_drvdata }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, svc_i3c_master_of_match_tbl); From patchwork Thu Mar 6 07:54: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: 14003945 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 6C0D0C28B24 for ; Thu, 6 Mar 2025 07:55:40 +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=jtEgPrqncdBGKgjCwHmEd0E/jVN9yz+GfQw32FHbLcY=; b=SXbdxf7UI7V+Sa Fgzif5bXjY4iR6I63Xq71mnoJ1u++JDbTPUl8bV0tRJhbqb7YGCOryTvsxlkAcnZaW1FDlMt193kf ZNtw9fSGhTUBEhLIfVNriLr1swAhRwsSHBqd52ztKHIdvq00uYqCD1gsZGQwiQVmjl57kitVO3hnk Cu1nvX4o4ep0aTGLprWcSR0JnI3wKuBGkHaZgE2wE+fn/3gA/4Hcmnvqx5N+0lqQJmt9ksSuVRkgv SpGWAQblMj0Pg9jEofxJQC0a+FAcom1j7GsRGcMasyWAr5KqeE07KFKyqLA8tVFJ6UVslxB4P/3Lt J14Pe2GmBLGnIX1og1QA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tq64y-0000000AGNn-0CN0; Thu, 06 Mar 2025 07:55:40 +0000 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tq646-0000000AGBA-0l3G for linux-i3c@lists.infradead.org; Thu, 06 Mar 2025 07:54:47 +0000 Received: by mail-pl1-x634.google.com with SMTP id d9443c01a7336-223959039f4so5451535ad.3 for ; Wed, 05 Mar 2025 23:54:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741247685; x=1741852485; 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=YEZQpIQJFkHZeLv9/Dqh07QChyI7uFyuz8YE5XUUtDc=; b=CdniW3jAb6XE1TeyRN438OwVPtuxlJSRQkeuWe03ipNmxi3YoyN7nNq3ycfx/qC4fd l2DjegMG8RreddEN2qdh8n3N/ml0WzsSBY2DoxGPp0lkGsZy2NTSNKdKgc5JxFBkmwKo n3mVWXI0MDeQVS26ZcuwXPO8lY3qGY3bhgdmqnVcQ4sW1ZW9NT2rEa6U1nv4KHbmthea nRxX+OzOb/R67JPjUEF85oPp+om303t6wykok9jhGD9loyWyByxPqdXlqEYv8zO1MxPC BROgAI9ipeFvB71goyDlsUmQ/XxKYAbSXjmYtJKb9xNimqb/64TshFmFZv0xaf+Zj5yB fXBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741247685; x=1741852485; 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=YEZQpIQJFkHZeLv9/Dqh07QChyI7uFyuz8YE5XUUtDc=; b=T0QVdPnO2yShB2G7KLKsvjH1+F7LhXgQQoXFy5plUcPE9/tYPRyl809nr+kNaZLMMb nZlcQhBhvPBBWHmqaAIYEdr+TdK/0wKEoqW+hC/GSIf3wo6va/9VNkL8oP5KEoTXqgOJ Otny/AOdrWy55EnCNFpd8uK9ca3K+Xf+b+bxdJjJrxfCtq9/xEwBqzpVnTpxZqB7Tf9v iQoIno+1WJdRtGDrPBNVBbCW4gT0iW57W+YnCgKC0U5vXen/taxhmvSu+931K4DToqg8 8zmPL3aq7a0lPf4m/PTQw0r+xpk7EkaB66PH41GjAvm0NL3Md5Tiq2Ee5RG7E+C9VnKv NNXA== X-Forwarded-Encrypted: i=1; AJvYcCUFn3J4nhJM+NZIoMUoeirGsTkVmSyZ+dMEnWag5G2wB20QPFT+ChAnpBb+PzYf2GRN7LAcSJfB6+Y=@lists.infradead.org X-Gm-Message-State: AOJu0YwHNSTvxndcwH1xCFvuaXBMZ4lRHDWqhKNSQI8+T4a6CRZvJLNG NWFrewJYL7A6FyNNtK3RkAh30QW3sE0WX2uj1S8EQdl6TD44vgX6KiEMIg== X-Gm-Gg: ASbGncvfoQZUoCy6BJbDrevK9AV1fsW6sZzuAVNp9SDI89fROYZvg+rxA6jscMIZRoR X9nP022OBXCDBwf4XW+++JwsCHvWTg9C/WcSmoEzYJrPNHGHPlDEedtQE1TD72tmToLlRX3ifeD POPQ8jZ8jvS8FeQvZGtWdPNEYnMCEEP7GszwT/TBymN/2FPu0YTn9/CnBsAEHKUm0x7CMLQ6bzD q8lJF7kCG1wZFM0294yyMHGUl6fadk+qbBYMTc//wB9MQMSBnf6Wsk6BzCyJBYuXn0bXqo7I2z4 3fac4MqzrcckgTmDI2xPpuNtdyAx+2ACfgofjf4AfE7I5o0Zb9/tdJA= X-Google-Smtp-Source: AGHT+IFcL0+B3Hx4sm17S7HaaAzS7pgvJFy07ZpdfXIMFxdeHGAgASq3H6x7BYZUzd2tuu/iirTDGQ== X-Received: by 2002:a17:902:e950:b0:224:11fc:40c0 with SMTP id d9443c01a7336-22411fc412fmr15782245ad.11.1741247685528; Wed, 05 Mar 2025 23:54:45 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:d305:9d26:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22410aa448dsm6085485ad.210.2025.03.05.23.54.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:54:45 -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 v7 3/5] i3c: master: svc: Fix npcm845 FIFO empty issue Date: Thu, 6 Mar 2025 15:54:27 +0800 Message-Id: <20250306075429.2265183-4-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306075429.2265183-1-yschu@nuvoton.com> References: <20250306075429.2265183-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250305_235446_220228_73B24935 X-CRM114-Status: GOOD ( 20.58 ) 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. Reviewed-by: Frank Li Signed-off-by: Stanley Chu --- drivers/i3c/master/svc-i3c-master.c | 71 +++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 10 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index 40269b692aa8..cba89a685e13 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -113,6 +113,7 @@ #define SVC_I3C_MWDATAHE 0x0BC #define SVC_I3C_MRDATAB 0x0C0 #define SVC_I3C_MRDATAH 0x0C8 +#define SVC_I3C_MWDATAB1 0x0CC #define SVC_I3C_MWMSG_SDR 0x0D0 #define SVC_I3C_MRMSG_SDR 0x0D4 #define SVC_I3C_MWMSG_DDR 0x0D8 @@ -133,6 +134,16 @@ #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) + struct svc_i3c_cmd { u8 addr; bool rnw; @@ -236,6 +247,11 @@ struct svc_i3c_i2c_dev_data { struct i3c_generic_ibi_pool *ibi_pool; }; +static inline bool svc_has_quirk(struct svc_i3c_master *master, u32 quirk) +{ + return (master->drvdata->quirks & quirk); +} + static inline bool is_events_enabled(struct svc_i3c_master *master, u32 mask) { return !!(master->enabled_events & mask); @@ -894,7 +910,7 @@ static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master, u8 *addrs, unsigned int *count) { u64 prov_id[SVC_I3C_MAX_DEVS] = {}, nacking_prov_id = 0; - unsigned int dev_nb = 0, last_addr = 0; + unsigned int dev_nb = 0, last_addr = 0, dyn_addr; u32 reg; int ret, i; @@ -937,6 +953,25 @@ static int svc_i3c_master_do_daa_locked(struct svc_i3c_master *master, if (SVC_I3C_MSTATUS_RXPEND(reg)) { u8 data[6]; + /* + * One slave sends its ID to request for address assignment, + * prefilling the dynamic address can reduce SCL clock stalls + * and also fix the SVC_I3C_QUIRK_FIFO_EMPTY quirk. + * + * Ideally, prefilling before the processDAA command is better. + * However, it requires an additional check to write the dyn_addr + * at the right time because the driver needs to write the processDAA + * command twice for one assignment. + * Prefilling here is safe and efficient because the FIFO starts + * filling within a few hundred nanoseconds, which is significantly + * faster compared to the 64 SCL clock cycles. + */ + dyn_addr = i3c_master_get_free_addr(&master->base, last_addr + 1); + if (dyn_addr < 0) + return -ENOSPC; + + 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. @@ -1015,21 +1050,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; } @@ -1226,6 +1256,24 @@ static int svc_i3c_master_xfer(struct svc_i3c_master *master, SVC_I3C_MCTRL_RDTERM(*actual_len), master->regs + SVC_I3C_MCTRL); + /* + * The entire transaction can consist of multiple write transfers. + * Prefilling before EmitStartAddr causes the data to be emitted + * immediately, becoming part of the previous transfer. + * The only way to work around this hardware issue is to let the + * FIFO start filling as soon as possible after EmitStartAddr. + */ + if (svc_has_quirk(master, SVC_I3C_QUIRK_FIFO_EMPTY) && !rnw && xfer_len) { + u32 end = xfer_len > SVC_I3C_FIFO_SIZE ? 0 : SVC_I3C_MWDATAB_END; + u32 len = min_t(u32, xfer_len, SVC_I3C_FIFO_SIZE); + + writesb(master->regs + SVC_I3C_MWDATAB1, out, len - 1); + /* Mark END bit if this is the last byte */ + writel(out[len - 1] | end, master->regs + SVC_I3C_MWDATAB); + xfer_len -= len; + out += len; + } + ret = readl_poll_timeout(master->regs + SVC_I3C_MSTATUS, reg, SVC_I3C_MSTATUS_MCTRLDONE(reg), 0, 1000); if (ret) @@ -1314,6 +1362,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; } @@ -1968,7 +2017,9 @@ static const struct dev_pm_ops svc_i3c_pm_ops = { svc_i3c_runtime_resume, NULL) }; -static const struct svc_i3c_drvdata npcm845_drvdata = {}; +static const struct svc_i3c_drvdata npcm845_drvdata = { + .quirks = SVC_I3C_QUIRK_FIFO_EMPTY, +}; static const struct svc_i3c_drvdata svc_default_drvdata = {}; From patchwork Thu Mar 6 07:54: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: 14003944 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 22B58C28B25 for ; Thu, 6 Mar 2025 07:55: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=DhetcVJrjupx+vB/08q8Cf9sh25Xo2HaAJgqKQovfFM=; b=D+ij2J2YRf+qU8 sJCNFx+EpR9fQLTn350cYgIjX1yU6H/GPGpJwSGkhD36HZx+9D1vuf+Kuuj95teNxWRVV0rxpXbWu yYZxCKJWEQhgkoq+MBKTaIQzCU/nEwxzI1BTOMfke5gAbKOZ9iM4+Hdfaz99Bg4BbA1ZkZkxkLQKs CyYzP4A5OJaVZiTunFDr/2TTC/kiJJNS2+nOLOZUinsvdn/JHlXlG9baAcdjL5Mmpnh5aflguaXyk VyL4JU0wBqjypEAL+kpI4IJqtRqBfmYeIumG+hhsqyLUFjwcHY+TGcFNECZs0qNhp9fe0yWzHOfQP 84fpmDmGZqS2Vv2BectQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tq64y-0000000AGOR-2zip; Thu, 06 Mar 2025 07:55:40 +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 1tq649-0000000AGCR-1TOl for linux-i3c@lists.infradead.org; Thu, 06 Mar 2025 07:54:50 +0000 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-22337bc9ac3so5812355ad.1 for ; Wed, 05 Mar 2025 23:54:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741247689; x=1741852489; 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=w2+tfajWqV/BpF+HlwJ7tnoTx43eUOwV3JjZ5iyWcbQ=; b=UK01opd7ruz6iW/8Y2V0jORMc2i2HC6DsLUOq3HYG3szbibZBK1R8dnuQ4Trrg1xMN IJ/wE2gLpeOmiV9JhBDLHPt2e28hxeBNB0ylAkSJLgkBj2OOzjGYrH2aG0EhWPtGk7Yw lk3PkAog6Q0ZFRj+zKktNg9cyrgyrSPXdSz7AlE6TXFlRaYohOmUW9Pgu3Ylc4dRmt91 B9PhDO22fGVtov9m+l7dCcYRAxL2buldQm6mlpmRcpHns+HXH+U1c2Zk1B9z25DaaZ6l QuulitEyl+OYKDgEzYqO3Wm2AYNFaLsLG4+giO/Iie2KdKqUd6RRJ9wYfWPUP5ABz5Xy aMIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741247689; x=1741852489; 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=w2+tfajWqV/BpF+HlwJ7tnoTx43eUOwV3JjZ5iyWcbQ=; b=JsF3kNYF54GsZM8A57qlfbXiOVgT/5qP+i8t26e9R72zyVfsqT5ya59EpuV8/0AF/w 8WIAy9js7QWvjjkHQPe1ROgWavI2DQQSKKworJRmCzMZJFthtMwKP69wIevS1lZ6pYQ5 Iydz5mcYcxqCZ4tWQJW4M9wUQaIlQLSw457D4P0SvOrLPNV/lNFUUV4gpQ4rHF56f7AV XaaPNhJtIRmerN2J4BnA8x9qDIO28abAhdnmZ914gEkdDRP013b2fs75p5Quq1QFelkz pcNimmx2AE2xXpFBaCC8qcc3l5hi3vz9ESnhamIipjUz5FF6cE7Fm7pA0oMnJJHAPm+j fLng== X-Forwarded-Encrypted: i=1; AJvYcCWLlA/VWIJ5/u6UrLdjdh3WXDeYJbdAROrPOX33LmEpcTgPYJ2aycUUPDYzN0Oe7OCCZ3AaBWTHApo=@lists.infradead.org X-Gm-Message-State: AOJu0Yw2PB1vwY8NtXjG6OnUkCbKHGou+9tivo9KeLK+B63XCsK7iGIz aZQ7nkfxp6IOcRsQHCDGH9gKNJtYnAYiXrIh+/dsjrORM5g9MrcP X-Gm-Gg: ASbGncuFInTH1zVaUQGZZdKevNX19mXrms0Xmo+aJ6CjC0TXtlF65jPY5auY1yXMOOa wya7deIinZInp59BJdc1PY5kT9SdRMvkwJIR4o4IJZWNgVSo6jC4xkOsPMNb35tpA9N7Ug3Xt8h wOw8s9ut5kieeRXWTjd7COYUeifl2S3L7UzhDoBgE3i5nVINPi6UTizROFz3lmQWNq8JWq+IAq8 ao8dB0KQDpJkH2lzgsvQYJnw3/rCPt821T7waLREHFunKBsReD8/V2plEwwpMluQfvgtZ5KDl8Q bk4v0YLg2LQfDxYZkn9Y/+7UUpyLCAK1+Ikve/GAhT7PX+0s8IDs89o= X-Google-Smtp-Source: AGHT+IF5txJTRwnyckdazVXegR2kdBARmrqG1Lso7rQth72ORrfeInWjkigbGtMEweDgwRomphqtbQ== X-Received: by 2002:a17:903:8cb:b0:220:d7f9:9ea8 with SMTP id d9443c01a7336-223f1c979bamr117875855ad.26.1741247688596; Wed, 05 Mar 2025 23:54:48 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:d305:9d26:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22410aa448dsm6085485ad.210.2025.03.05.23.54.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:54:48 -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 v7 4/5] i3c: master: svc: Fix npcm845 invalid slvstart event Date: Thu, 6 Mar 2025 15:54:28 +0800 Message-Id: <20250306075429.2265183-5-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306075429.2265183-1-yschu@nuvoton.com> References: <20250306075429.2265183-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250305_235449_391761_204DB2F2 X-CRM114-Status: GOOD ( 12.67 ) 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 | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index cba89a685e13..1cab5b8594de 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)) @@ -143,6 +144,12 @@ * 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; @@ -586,6 +593,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 */ @@ -2018,7 +2030,8 @@ static const struct dev_pm_ops svc_i3c_pm_ops = { }; static const struct svc_i3c_drvdata npcm845_drvdata = { - .quirks = SVC_I3C_QUIRK_FIFO_EMPTY, + .quirks = SVC_I3C_QUIRK_FIFO_EMPTY | + SVC_I3C_QUIRK_FALSE_SLVSTART, }; static const struct svc_i3c_drvdata svc_default_drvdata = {}; From patchwork Thu Mar 6 07:54:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 14003947 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 8A28DC282D1 for ; Thu, 6 Mar 2025 07:55: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=8vQWPPhdJqHRqxHgNJKKUVlsdf0dr7nMT5io1U+1gxw=; b=aYnwx1YXPc4fZH b92qGy+2X0S8mmvYAvOZ+M58zRc+UF53zoorEcYJS+VBAhkdGEFSQcOr79YfJaBLofOZKdaWez2xG eBTEc/ly5l4XIx16MEP0sXrFjXRJa27/8FKsdg76r/tHMwzt+Jtsdqf4l8wSc2V5Pt0XFEqVFxhFu J+4PPHN2+3ZoB1o+5shYSY+bDE4jRd/7WPiq7e4C9IIgM4724e2F9O6cW+ruHG9nVRUBHGx4jHAVF w89QAB/TdO16yTnewwEIXuCwKRWPZb2aojtD7Ab+MXtw/E5GHOK1QEdR1HPU91AgeKKu3JXwPDg/G qtVC9RzFRfLetm/M23ew==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tq64z-0000000AGOx-1Cwe; Thu, 06 Mar 2025 07:55:41 +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 1tq64C-0000000AGD0-2hr9 for linux-i3c@lists.infradead.org; Thu, 06 Mar 2025 07:54:53 +0000 Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-223785beedfso4760285ad.1 for ; Wed, 05 Mar 2025 23:54:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741247692; x=1741852492; 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=YeHU0+uQ+ewEIetG9U1VzF4scs/x4AYkl7k9gMV2eYc=; b=YowC+KBlQZdJtvnkJpOOjgxHJY+gW+c6cRGXkqSCIH08j7E0EYLBDbCQSitfwwHTdU +jVWB/xrrw/oxC13sWGuc1dvXn4QX94zzvnCAQz2aAs+ldrPdO5UcSfee4hec/6QpuLX lYBiYLhE+aCB+s7mlm5O0GT0fU69GTqohr9mb905GqjTziu/5XEnd+QsFiwHQNlc5Zxg lNa01YIvzaOZkPlWckgPOMv1CuqILQ/yhfFQt4IQrAw+IjVFBnPEJgiJfyUX0BAZjqa/ T9DY4GduukupslDEaJGrXmliWH9HS80lBmgEZhfxAYUXFswyy+UsX5z7u3q4I7j1RlpR WOZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741247692; x=1741852492; 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=YeHU0+uQ+ewEIetG9U1VzF4scs/x4AYkl7k9gMV2eYc=; b=AXQqFoKJ7DX93mUMSmcolWcuqQIgHR3YnbjLpFgeYE1+0B6yc4+vVa0g06bE8tVxr5 zCYxwCUwECtRsWPOkJv7IWQ2lm4/+aNz3S7FSKUSYZnS6x5FSsbSXDSk5JhtsmtyuSZ2 dQsuf0dm/pSuNTfRYkcRwBug/6ogO5UfiGG4wckNwrF+NCVZWd9B3hVLQgY+aENN0ULl Zvo4zHQHHfdjDMBxfxmwYyhWqaMOgFC+PXUln0uENBmc4/zAG+ItE2LW0Ef8EjvGbOoZ Ets67jzYZwfZjtmmw+JES/nRviTQNG5H3UmDa/WqbCBzPD+jIKrQi7S+/ksN8WPYH2oi zzMQ== X-Forwarded-Encrypted: i=1; AJvYcCX2CMUr8Wb9GQnWU00J53LSO1NXGuf/GcWkJzL1JQhk0Cni1qSr5KXw5Ckg+HZbja+pTkGuDAkj5gs=@lists.infradead.org X-Gm-Message-State: AOJu0YxRbjPLkg4tKjneoSb85+DmYG5yEtZ1e9OnNNgTRAivm3pneNTb JFVYrjB4ze2kz8LjQMynlzLu3lx627COks4Zo621VZP7SaOTwWC0 X-Gm-Gg: ASbGncv3xddOjV9V8ciQ6A7LY7fbmwi5FjitZwp9+phYVH4vBJ1j2INgCtgd6u+nJZG VePCPgOOXAH/6/CEwZeiDX+Abh4JUDS8pd5EzydSlE39jhDPqUuDhWcLnx1YCnz1rEV2euyR3G/ reVFIa13paPne/+rzl0qtTMLsiT/N+wFEAPpQhIPOV7ySFJR0g/KIJw0uhd07rSvrC97nKowm/U ec4R90aj1LwXO/hM9TpOjpbVZe58cuD+AEvsxsAGeHUvt9AUgrswmcXaCXJCDel1VrMLlN8fX6G PmdmG8CjJzPOTlHzDbe8tHaGtp/JSXLfE8YfaVO+7PLiYc5R1gWCriU= X-Google-Smtp-Source: AGHT+IGNTTEhiHJu3DzwlvrowX7noAbEyvQn1CqmoH1Ut3T89pAMQ/uSrN2Xy6F5yWg7r2FyzlOwew== X-Received: by 2002:a17:903:fa7:b0:223:5525:6239 with SMTP id d9443c01a7336-223f1d0fe68mr106221875ad.38.1741247691779; Wed, 05 Mar 2025 23:54:51 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:d305:9d26:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-22410aa448dsm6085485ad.210.2025.03.05.23.54.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:54:51 -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 v7 5/5] i3c: master: svc: Fix npcm845 DAA process corruption Date: Thu, 6 Mar 2025 15:54:29 +0800 Message-Id: <20250306075429.2265183-6-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306075429.2265183-1-yschu@nuvoton.com> References: <20250306075429.2265183-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250305_235452_708195_5B04F9B3 X-CRM114-Status: GOOD ( 12.18 ) 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 When MCONFIG.SKEW=0 and MCONFIG.ODHPP=0, the ENTDAA transaction gets corrupted and results in a no repeated-start condition at the end of address assignment. Workaround: Set MCONFIG.SKEW to 1 before initiating the DAA process. After the DAA process is completed, return MCONFIG.SKEW to its previous value. Reviewed-by: Frank Li Signed-off-by: Stanley Chu --- drivers/i3c/master/svc-i3c-master.c | 30 ++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index 1cab5b8594de..c086e0e38279 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -32,6 +32,7 @@ #define SVC_I3C_MCONFIG_ODBAUD(x) FIELD_PREP(GENMASK(23, 16), (x)) #define SVC_I3C_MCONFIG_ODHPP(x) FIELD_PREP(BIT(24), (x)) #define SVC_I3C_MCONFIG_SKEW(x) FIELD_PREP(GENMASK(27, 25), (x)) +#define SVC_I3C_MCONFIG_SKEW_MASK GENMASK(27, 25) #define SVC_I3C_MCONFIG_I2CBAUD(x) FIELD_PREP(GENMASK(31, 28), (x)) #define SVC_I3C_MCTRL 0x084 @@ -150,6 +151,16 @@ * If it is a true SlvStart, the MSTATUS state is SLVREQ. */ #define SVC_I3C_QUIRK_FALSE_SLVSTART BIT(1) +/* + * SVC_I3C_QUIRK_DAA_CORRUPT: + * When MCONFIG.SKEW=0 and MCONFIG.ODHPP=0, the ENTDAA transaction gets + * corrupted and results in a no repeated-start condition at the end of + * address assignment. + * Workaround: + * Set MCONFIG.SKEW to 1 before initiating the DAA process. After the DAA + * process is completed, return MCONFIG.SKEW to its previous value. + */ +#define SVC_I3C_QUIRK_DAA_CORRUPT BIT(2) struct svc_i3c_cmd { u8 addr; @@ -259,6 +270,13 @@ static inline bool svc_has_quirk(struct svc_i3c_master *master, u32 quirk) return (master->drvdata->quirks & quirk); } +static inline bool svc_has_daa_corrupt(struct svc_i3c_master *master) +{ + return ((master->drvdata->quirks & SVC_I3C_QUIRK_DAA_CORRUPT) && + !(master->mctrl_config & + (SVC_I3C_MCONFIG_SKEW_MASK | SVC_I3C_MCONFIG_ODHPP(1)))); +} + static inline bool is_events_enabled(struct svc_i3c_master *master, u32 mask) { return !!(master->enabled_events & mask); @@ -1144,7 +1162,16 @@ static int svc_i3c_master_do_daa(struct i3c_master_controller *m) } spin_lock_irqsave(&master->xferqueue.lock, flags); + + if (svc_has_daa_corrupt(master)) + writel(master->mctrl_config | SVC_I3C_MCONFIG_SKEW(1), + master->regs + SVC_I3C_MCONFIG); + ret = svc_i3c_master_do_daa_locked(master, addrs, &dev_nb); + + if (svc_has_daa_corrupt(master)) + writel(master->mctrl_config, master->regs + SVC_I3C_MCONFIG); + spin_unlock_irqrestore(&master->xferqueue.lock, flags); svc_i3c_master_clear_merrwarn(master); @@ -2031,7 +2058,8 @@ static const struct dev_pm_ops svc_i3c_pm_ops = { static const struct svc_i3c_drvdata npcm845_drvdata = { .quirks = SVC_I3C_QUIRK_FIFO_EMPTY | - SVC_I3C_QUIRK_FALSE_SLVSTART, + SVC_I3C_QUIRK_FALSE_SLVSTART | + SVC_I3C_QUIRK_DAA_CORRUPT, }; static const struct svc_i3c_drvdata svc_default_drvdata = {};