From patchwork Mon Feb 24 08:39:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 13987606 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 7FEE3C021B6 for ; Mon, 24 Feb 2025 08:59:38 +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=cSP+T0V+c+k9cib35kPvkp73d25k+nWrWDOekV13lQc=; b=X+4Ei1JnH3AnB7 G+Mgk7YKXTsjSVZnyc2tjoGSXiGWkprdn/H09EskspzquDWshO+J/XuA2HAhWfZM5pEI0tXp4zA/a tSI5YjgmP4uMtmuXbJEXQrGpU1eSHdHrysFdmB8SdaJDYM9J4XXVoVln+acD6IuwhQV7q1QIez4RX zRbiy4KoTPxXvKBIGVbdtxaXS3VdkP47hLUWP5b8M3fxeRPplQhk8KVBjswxHyOW5qkUymen/lf32 nO1g3u5vGpBUa+vGXHnxkv4A8ruJWT0iEd5eJFVyoJJzzb10QX9AcwP7pdG8MGxuAUl2y9p7tf2o5 biXyNhc7wlkDk2gMf6pg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tmUJO-0000000CnL9-19fw; Mon, 24 Feb 2025 08:59:38 +0000 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tmU0B-0000000CjOU-33pi for linux-i3c@lists.infradead.org; Mon, 24 Feb 2025 08:39:48 +0000 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-220f048c038so76270555ad.2 for ; Mon, 24 Feb 2025 00:39:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740386387; x=1740991187; 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=95SHW6HzB6iNhL/wzrH3WG7qpOIgT6dZkumEvj+k6IY=; b=e69NpbTixVMDc7hIxjxzG27RhhcpBpTA9a9jVFQvrmg0UkQesS+2j6+pzKdnQcHqy7 edbdlrY8ZYK/FCSFkN7BHzSiS67qtcDqajOmrZJ+tJhNhNpo/09NgHL9fdjIhHLpW9qm z96k/cmU+tiZGGuR92jJvAZJ4amEOvRHA+MDcXL2bXsgDx5GhDjecXVRMMf2onOCfFsg pP0C3NFH1TQwQSYPo7TqB5BOaQ4TOmlCEuNJ/EkuC7jTCpMLHZL0BQppsIWMCzVG5/21 yRnJ7/4DhChAemimV3cfF1PKA2cPv3yKEktONj81Qb0/1vFdIsz8vjTuILj5MLAcCNgj 3Y5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740386387; x=1740991187; 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=95SHW6HzB6iNhL/wzrH3WG7qpOIgT6dZkumEvj+k6IY=; b=dgWOqbiZS/64tSo9CPvaShmOXO9HHu6OFsg1gQVChFYxGQwvYGYDKMygkTNXY3YjOp woC3RzP7FUCvrJH6NxFX55ELDNn19DLy3zLToNEcEPz6Q34vQx8WlSAgijRvfweSeGo0 Vm5HhR2B+s3/S8toFSZYDbMhJ7+TBGCcbl51Ak/SlbXQzVMa5UnWMBmbUeBzsmgoJtCY 1me9o/Sk8Dqsrn+j/XSXDQtwtSv+KnLIDwlMJpSBcQQSBc/CErJ3QFY5tHdRIHayEKjZ npXY/OGCMheJ17qAyWd94lfTvOQPr/FRcQ1y8q0ZeRHyHgKOjvj3NeS+hyICb330juKc 9JGA== X-Forwarded-Encrypted: i=1; AJvYcCU+5HCuCiAARpMdVSUr9yCkqytBWyuJjpI+XW0U5ur4FJE5jTgzjuEkuse6uil91YwUPgjQq+A14kI=@lists.infradead.org X-Gm-Message-State: AOJu0YxASPfmJJVvYRNmxGqNPWNud+yYVZPOxcRB/WBuyTqOVre9t8Pp 2SPz6bZkHzobcxnPSwMmpDOqbug+xpG9OgOygpO1Zfu0sg6DDX8U X-Gm-Gg: ASbGncv4FAX3OIeSh7FUQRjjyxKZMbfac23thM0a5S2GiXXzrUGMON3ge7DBt+umH4M /TbfkI7Ym9BnXdkDBdgS5LOma1xT27G+UzRlvs++mZp4bN7NmsUJyLmEgheoD0EL4/ftJ+NTN3p jQKysuC5lBbAnjy4TiKqpsPinrQJUmOYZI+riPrrgOJ8zi42b+2zt+RntnGwk9T1/w54toXnn01 byaBMyYw9DWv9k5vcUr71T7TWHYZCsr+ylp/JDZIS7IVndPXScDteiwgLo7IXbF4dAQZ5W3cjb0 RUR2xJsF6ral521LM/DZlIrNPapHBitmGVtm X-Google-Smtp-Source: AGHT+IFre9XOybV0YxAiqbX3XhSPOqNf9uDTbDbMVVNdbMkg+GELuP1pFb1lBJN/C9iaOtzknuA7gA== X-Received: by 2002:a05:6a00:2ea9:b0:731:771:38f2 with SMTP id d2e1a72fcca58-73426cab14fmr26237456b3a.8.1740386386696; Mon, 24 Feb 2025 00:39:46 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:cd02:bc36:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7327590ff12sm14634793b3a.115.2025.02.24.00.39.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2025 00:39: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, Krzysztof Kozlowski Subject: [PATCH v4 1/5] dt-bindings: i3c: silvaco: Add npcm845 compatible string Date: Mon, 24 Feb 2025 16:39:04 +0800 Message-Id: <20250224083908.1880383-2-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250224083908.1880383-1-yschu@nuvoton.com> References: <20250224083908.1880383-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250224_003947_769120_7475C16C X-CRM114-Status: UNSURE ( 9.05 ) 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. Acked-by: Krzysztof Kozlowski Signed-off-by: Stanley Chu Reviewed-by: Frank Li --- 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 Mon Feb 24 08:39:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 13987609 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 CFF37C021B5 for ; Mon, 24 Feb 2025 08:59:38 +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=dGJkRFVwx13TInp56RReDicXXS/L+WeNVKTDuth0p0M=; b=Jm7iyukuvkGS2d H8o93yucIjU1ppfy6H35wkJHNlF9eaHYAsbaKbSaNPV8+Hgxmd+8id7NnpfRr7CqFn7DUFlhW57lj 9e6hpA16vN8Lm8FWpAJwiWrLhRPcUntkDU/x1NDrhzeYtbX6IaVaBlcbHPuJK38ggBdedL+Nrdx84 76s6augZayNFCvLD9D+ebRR9DVlBvFukvIchy8GLIQ4CEtXbKsKqpVNl+KLDCrsG3RGxv8AvZbS/k bo6vQ9iPP5BFvuau97/ULNTbF+kcH68qESbTnalLZ2sNZwG/LPOvvZTh2wipY0c7Bigto5jjNS4rL nuRCRJqsxaex/+sRqYfw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tmUJO-0000000CnLO-2UJp; Mon, 24 Feb 2025 08:59:38 +0000 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tmU0E-0000000CjPv-0vyh for linux-i3c@lists.infradead.org; Mon, 24 Feb 2025 08:39:51 +0000 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-2212a930001so111487185ad.0 for ; Mon, 24 Feb 2025 00:39:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740386390; x=1740991190; 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=q2THBoMljTsJt94BbNpCp/YTgHXkT5f9Tt/dpOHOy6U=; b=BGMCqAcd35SooxupDTGtqg/mgJt0KaEG/FyAcsBJQn7NRVRzSZ+sqHz48RS+vDUV48 HE9yDUxoz10cmrABTDwIXu9PqALMuMJC54joO9Ks0LVG10L+oqzP5HtaG/5i0TM2xWnk J5UQ7tooQGMnUAin2mC73EFP7e0fNYzuKzl9km7HWqOWq8GhzfrsqK52aeQmerhkUO9F 639ZbDgRAOBWMSV9//qlKZC+Gdx/k7A0eIClTGwL08z/yhk8xes0m39H5xMVtG4vsepp 9lfFKsWPIBNzzYvI7YsUv45TgV+HG3BtEnAsG9hp7qDYNjOLezDlc5KOqzEP/GgcQJYT Nipg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740386390; x=1740991190; 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=q2THBoMljTsJt94BbNpCp/YTgHXkT5f9Tt/dpOHOy6U=; b=DsfS4hU6/oCfuLBXx3BuhTSatQuFI/klKHNurBZE90Ic1TXmShTd2wtfd8RrRJv+aI jpjHpqWOFL3RqSGlwzZqseWAbtGi7kioPJN0zB5DENp7rYuIzkMNK0L4/SoFKzvb9+Su RDAQ4fxTaoPqfZnSH69XmpjHxWoQkPOmIhLpxY1Qe8MKh0gZ6rSRsZUnPYADNxUehBK2 mgJ57cnZHKbX6d51Ya0GbF8Br5RlXYtdNor177ytibWl+vkQujHv8Or3oMmVULvDNyyx DS41yPKfWd/X1sBSI2GHm1JJw9ZjewfD8y73LJJSkaY5OVDZvHB/bDZ7UAnARw0GxQBX 0low== X-Forwarded-Encrypted: i=1; AJvYcCVUF+Z4qgaWHmaRZHS/+78YuJXsxK5ziMZIZwZ+NWHgILz7jAD/twhLh0zB9Q/2ldmFGLIMSCyqpx8=@lists.infradead.org X-Gm-Message-State: AOJu0YxtCIZeoIrsNWsCsUwk0OJxPj/YYb8al3fxReRnATkrwAUkjozz oJGgfhzKCGn5pOfoUfehoQE2naHHCjlFvgELq+yVfyakm9TPTpat X-Gm-Gg: ASbGnctgmke7g/arBZM3oKWBM1p85rcoQvygXMukygr0I9eT56elaewrMSrGQ6MV+LX EFkehjDEu9Jwhb6IRTlSgvU/A6FPQRqlyoMw6ZiAE66zsVDEuELX0OADgbwYb2ddPSSJFwblHqx 9hnrSjXUpSYoMppV5jcEo7d+9KIdyAXul2IHAG72ZelGsnVY4/mFrMB4M2j+j/wRAJRjJrohzUw ScUdQsAR+gjp1z8rzfkPCG2o/+FJLQGjPFQW1tJ3mtSkK32jyvtbFQa2SkFh5Lnfg3OfVD3HrLq 68HQeMvmDa7CKWdpc9IBbmIzVZGZYav2q8FQ X-Google-Smtp-Source: AGHT+IHPyq8u2np9gCVs9VjWgMl09L8z2ydAhriEM3Mo//Ztd8gpkj+ZbDCs/Wj2n6eQzW+dpn8+6A== X-Received: by 2002:a05:6a00:3d0a:b0:730:888a:251d with SMTP id d2e1a72fcca58-73426d9ee22mr21997073b3a.20.1740386389638; Mon, 24 Feb 2025 00:39:49 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:cd02:bc36:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7327590ff12sm14634793b3a.115.2025.02.24.00.39.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2025 00:39:49 -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 v4 2/5] i3c: master: svc: Add support for Nuvoton npcm845 i3c Date: Mon, 24 Feb 2025 16:39:05 +0800 Message-Id: <20250224083908.1880383-3-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250224083908.1880383-1-yschu@nuvoton.com> References: <20250224083908.1880383-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250224_003950_285140_ECD6960A X-CRM114-Status: GOOD ( 17.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 Nuvoton npcm845 SoC uses the same Silvico IP but an older version. Add quirks to address the npcm845 specific issues. Signed-off-by: Stanley Chu --- drivers/i3c/master/svc-i3c-master.c | 56 +++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index d6057d8c7dec..8834f87a4767 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 @@ -133,6 +134,32 @@ #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) +/* + * 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; bool rnw; @@ -158,6 +185,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 +214,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 +246,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 +263,27 @@ 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 + | SVC_I3C_QUIRK_DAA_CORRUPT, +}; + +static bool svc_has_quirk(struct svc_i3c_master *master, u32 quirk) +{ + if (!master->drvdata) + return false; + + if ((master->drvdata->quirks & quirk) == SVC_I3C_QUIRK_DAA_CORRUPT) { + if (master->mctrl_config & + (SVC_I3C_MCONFIG_SKEW_MASK | SVC_I3C_MCONFIG_ODHPP(1))) + return false; + else + return true; + } + + return (master->drvdata->quirks & quirk); +} + static inline bool is_events_enabled(struct svc_i3c_master *master, u32 mask) { return !!(master->enabled_events & mask); @@ -1868,6 +1922,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 +2015,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 Mon Feb 24 08:39:06 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 13987608 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 2DDA4C021B8 for ; Mon, 24 Feb 2025 08:59: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=fT/8vd8xGFQ31LMZrcu2Qyk7jvoeER+mp9pFo45mQNc=; b=mh0nOKot7iQwWj XXMq2Cetlw6TAeH81vWHIl2EoTAf/QNjsKs6LnItfTHNwMwyl7J5JQkESgVjuTrcye2wF2ua1VJLU xRmeO/gCcF1TC3fpUVLq+DZtuttDR8WvDuKMB+M7qGb0YeXaFSnGpTNEuq/EojYA95UA8Qd9gsc4u aDuZFX9JIsGtH8ircYAY94oowzdMo0MZO6NXqrAi/N6pNRmOhJ20poI3g77t4OVkfY10jSple2m1V YQTMPozsnGBxl6apSWu0SjTRkBR74hDYba+xZpKhaKQrj8ktEoNwCz3cAeh7JMt4oUw56x16Wc7CT qvfUssjYRhRN+3IGCDKQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tmUJO-0000000CnLa-3uft; Mon, 24 Feb 2025 08:59:38 +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 1tmU0H-0000000CjRF-12HM for linux-i3c@lists.infradead.org; Mon, 24 Feb 2025 08:39:54 +0000 Received: by mail-pl1-x62a.google.com with SMTP id d9443c01a7336-22185cddbffso82808535ad.1 for ; Mon, 24 Feb 2025 00:39:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740386392; x=1740991192; 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=8/zcMpskijGYRuDfk1c7h2QKxlF14yge6iyoocOzfaI=; b=mIGT5Vlh4IL8LZBs/J5mtknMyrtcjkfmB3XTMvMiv+HlQDls5QxBGJPAx7R+zPCNJ+ IHO3GBrx8DNiIQA43bEtzFRNT+Io8i2xhKXi7NJqMGXJadRv6QP7mKIRO2xqr7aOHWEd Bl4l4mU24py4vVMeNXib+1/uALGOOZT5EiK9iVCvpmuQGW2GxZaaoRz+kZY4kdTWS0Tb A1aun3O6boQSZp8SCEnWGKb5Wort0b+V7ASqC+FQdQAioV8zNAyeIRZL8FkX/0mVWT46 atwjMFWINIn4TkxM/Cr+cvYLsZ0lnUvHbsrnW2JEoQlMNcmljeMo7Rw0Yu1Zzx6AuUoB 4/cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740386392; x=1740991192; 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=8/zcMpskijGYRuDfk1c7h2QKxlF14yge6iyoocOzfaI=; b=KWwFdxb1q0W4cHh7kjbelsIR3imMeWRrnz+R34qrZwXLjkyNy+LQ0S4ofuFpi3zyZS 6W4EzOQohimdMK9xmn/iOuQ+dJF11XhQkIqcgYGZ1hQNbLA8KjNCzpsXtVczW+91WWX7 jBhRvgd3dStZKl7XNnJvRNJ282DRkl1wmzX+mxv7FUtjktmUcR71+vRXPwwy3zgOkv+n Cn8Xluo95RT2cgM7yE3CjU8OBWSchsLha2pHGJZNPagBk++kJeFOH3TyRzvaEduSm+bs g+EKDs15+oOnxWzrkAZXeBWAljXYUkJiv0Yt8Qt6eNhsonkOA54I5l5IEcVY4UHaxZnV wzWQ== X-Forwarded-Encrypted: i=1; AJvYcCUZxP1K9e5JUvSbqobSz632Xga4kAEWDwYJiiUxgOJDq7JVF+g1VQdDFaIHyDVwnnIbrxKGb3cmbas=@lists.infradead.org X-Gm-Message-State: AOJu0YzU2211kz0ASFCLL6T0L5WnbiNhYSQh3gMw/dmtEE/sTbb9Vddj MYiNtWMrSX2CWNZABD9TMzq9216Vq0NoU4sYNtW0NUQFQeMLSvUUeJD8mA== X-Gm-Gg: ASbGnctd2GnW0R6d6ABktliT0oiLSrJvVhdVW92wHY0EQIahdqShOH8Sz4JsYxBG/uV JDtAJyHcka/EoMTv4ZFhf/0Sq0s9PBJVV70rXvPBZn0P9UbASU+IJw1f8VjWt89HEPQcxv+jxQm ucAVAIa9fqsKWqpAXwq4j0xizlRxiv3nsCtPfoABLpw8+YvpEcKlNGxzna933muR5JidWm3Bj7p I6BFa47FKOdxVOJYECPiSY4Kg2HplUcjIhDYiu21srhiF1YCzNKsWcM7yBhYexA1jzn++eiKOut OW0sfAFAkAlwdAsvP5mxcjI8Te3lX4W5mZje X-Google-Smtp-Source: AGHT+IH0vF5JtrmGfyOiw3Uz/WiGXZ6m0VJD5EWTauPDEIQovZ+YQzc9KpIobnt648BkAXZ8UT2PeQ== X-Received: by 2002:a05:6a21:3991:b0:1e0:cc01:43da with SMTP id adf61e73a8af0-1eef3b2586amr18631154637.0.1740386392571; Mon, 24 Feb 2025 00:39:52 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:cd02:bc36:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7327590ff12sm14634793b3a.115.2025.02.24.00.39.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2025 00:39:52 -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 v4 3/5] i3c: master: svc: Fix npcm845 FIFO empty issue Date: Mon, 24 Feb 2025 16:39:06 +0800 Message-Id: <20250224083908.1880383-4-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250224083908.1880383-1-yschu@nuvoton.com> References: <20250224083908.1880383-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250224_003953_316254_23BCC5CB X-CRM114-Status: GOOD ( 15.87 ) 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 | 44 ++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index 8834f87a4767..07506ae0f914 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -942,7 +942,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; @@ -985,6 +985,17 @@ 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, + * pre-filling the dynamic address can reduce 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) + 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. @@ -1063,21 +1074,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; } @@ -1225,8 +1231,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; @@ -1243,7 +1249,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); @@ -1274,6 +1280,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) @@ -1335,7 +1352,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; @@ -1362,6 +1379,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 Mon Feb 24 08:39:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 13987607 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 818B6C021B9 for ; Mon, 24 Feb 2025 08:59: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=uuYB+lxR/B9O8urJXKOYXc+jHWfzV8ZA0g2o81QpbCY=; b=qgiIHj0RTsvenC rvfcPXjGLk1MaLiucVDyLkx/96LywV1pn7oLzw4N02yu2KiH71qHVlONW/9uKdxEthq/WIVJNHDCw JrWCgP/Col2EhuB+BhhoSF7z99lVdUxfSxc1FL5gMZJ5IaBrNT5rnl/s2BcbjgxZh3tnKveOChayy +zDci9z1L5UTNtf40BK6bXi5NI3SyrvC5/YyQyLgZD2h7Labr1kA6w1Ivp1vTynaDcXdnC8T6XcU8 ZBclPdLPF6ZFW3wZEjgGIPurXtk/MYbiiTpTkglzPGtpJdB+OuPfuun057xxXi026mGY5EtgQuSmW iQIHynwhn1BqNr1klerw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tmUJP-0000000CnLk-17FD; Mon, 24 Feb 2025 08:59:39 +0000 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tmU0K-0000000CjT5-2pe0 for linux-i3c@lists.infradead.org; Mon, 24 Feb 2025 08:39:57 +0000 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-220f048c038so76272425ad.2 for ; Mon, 24 Feb 2025 00:39:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740386396; x=1740991196; 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=KLJZ0UdIyJvoaYBSKuZ/YiS+j0w/Er7zxoHnMzji8nw=; b=iRz6TavEzSby5/UKodUjxDleOvDdEJ8WNVRPiY8f0DFYWi7TRea3yImjZBBTiAGBA3 AwVBNH0AJedTsFiq9a39JE0HQd1OQha9SDfdOuh8wivPui1woFUy220ROkrz0tD6sYcr bPqJW+yBjLkNvwi0c+RAxhzVv2SgpdwmBur7AqFZBGwOOTxG49CCYaefUwussNBhANB3 nZbJLWIL3b2Zbb4dZz8lKgFFY7167vnVP5pR8jYoerYDier7bpacUdiss20u7kNeG3Rr riaRP809Pw9kVLU/rLDZIW3oCiaf+0n0JbbDc2oXTIU59Ht1Dz13+lniItRK8hIq1sPd RKIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740386396; x=1740991196; 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=KLJZ0UdIyJvoaYBSKuZ/YiS+j0w/Er7zxoHnMzji8nw=; b=awxBezOAwhLQS1EiaFYA0KNl9Yr8vMPT7YFBGjgRXdEnwBQ9MwV0dXKMp/t8CcfCg2 /MwcaRkQGADEuqX0X0b3+GPAAjOmYnhlOVXLiYhBmVlmeej1k/ia+5HUP8uEikpWAkVx Uuq6ZBSz2+hY8QaRJGvkaUOlkYFQTQo3jJX3tSfGQJDVtFhbw4te4Lhs/UnYGZ4Bv0Bu aM88o4AwPhk7OEUUGWQWgFUUHGpU/O+o+nCXDgGFU8/lkt7gaOfqtW5rLh/OeFP3e3rw p9SGJdtBrOUbAvKJzZjA6+SPXc9gG08wKKn2/GtuFXlWFnKWFPNIprKv96igU2fyQrx/ N/Kg== X-Forwarded-Encrypted: i=1; AJvYcCU9HIcR/lnTvDcCmUyd8oj9cArxcL4yzDBXEMlU5lgSpyHidP4Gf37G0YBQvt7pKcgI8RO9DOv92nE=@lists.infradead.org X-Gm-Message-State: AOJu0YyH9dGSbo5ObO8+H4SWYfHI4RoGHyl/g1iHmIZCkJR4Kv6E30Ow FixEiTfyM/LtYR8vfEaa6U4w9UgnWBT2LR7jqbmL7oTdc/SOpAKr X-Gm-Gg: ASbGnct8/ugLIuBLagPAa/aidbsJOryHO7uzARdKdriGzW1xqSkbagdGDURyhJrzrnx Xf+JOOI9JD8Lccsx6ZRm+FWbOj46azizTV72bgVIGplIIPu6RRz3Wy1wu1gO6HtgCcLH8/DqWVd QQgWz10UOal15G+tnaoTf1ACsiHI9sYNeOVCN/1HjENavyOMRxfQ8078PM6s6io3s4RNvNf7rv7 N7wflfqiVsKCA/3UnPJTRndiYIEqsznp1HDc+obsE71HoayCB3ewJSGhFzPUIqQhTyzuNNlc0Ug TYfV/rS9dHTfPMQtb6MGulIiwDARiSSpryUq X-Google-Smtp-Source: AGHT+IHmzcYOYpmi88RS8NVpMCYxjPv8F2R9zaGHSVBGMM+f8o94gQg8TxLc4zMuEg1JgPNRviBc3w== X-Received: by 2002:a05:6a20:a107:b0:1ee:e641:ca8 with SMTP id adf61e73a8af0-1eef3cd44cdmr22835172637.20.1740386395705; Mon, 24 Feb 2025 00:39:55 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:cd02:bc36:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7327590ff12sm14634793b3a.115.2025.02.24.00.39.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2025 00:39:55 -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 v4 4/5] i3c: master: svc: Fix npcm845 invalid slvstart event Date: Mon, 24 Feb 2025 16:39:07 +0800 Message-Id: <20250224083908.1880383-5-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250224083908.1880383-1-yschu@nuvoton.com> References: <20250224083908.1880383-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250224_003956_720373_DA23534F X-CRM114-Status: GOOD ( 10.12 ) 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 07506ae0f914..4eb4b8888725 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -59,6 +59,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)) @@ -618,6 +619,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 */ From patchwork Mon Feb 24 08:39:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanley Chu X-Patchwork-Id: 13987610 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 CCDF8C021BB for ; Mon, 24 Feb 2025 08:59: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=KNq0m9EVpG5+odzDhXA9KRCpPRFF4nZP1XKRhu3c/gw=; b=g9tyCxnOy1ZH6C UrZSzPaHhsC+aXRdKvQaLBUicJYkffB+vhT2QCKhCKRb4TXpzlUS4gTxeP91q4k1dBmyjmyPLjpmm siTNkhXBeTt1nqTx1NLZeOE3lBZYoAZs6SR1ABTJo/ntZ4DRpbob4nHD7PyOczccD3Yfj7JqZskB0 V3/TO5n69gY6oi/QwCRpHBzd4atvf81jp4QStuo+hJKX+kVTeaQAJIw7P2qyHzsSgLzJgpAZnMtLw rXWbwFR9UyPyiVrRjaDST33qpXGS9xGp1KJmjjWLMcmuimd0vlR12DggnWQvp9Baeya78d5Drj0Ux tCD9tYCLykSZ8NZTJfoA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tmUJP-0000000CnMG-2Qyg; Mon, 24 Feb 2025 08:59:39 +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 1tmU0N-0000000CjUU-2s80 for linux-i3c@lists.infradead.org; Mon, 24 Feb 2025 08:40:00 +0000 Received: by mail-pl1-x631.google.com with SMTP id d9443c01a7336-220c4159f87so54987465ad.0 for ; Mon, 24 Feb 2025 00:39:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1740386399; x=1740991199; 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=p6cKbHN4qfM72wdTSv8VPMRBomnhPqBZxZM0i+T4Gyg=; b=Kh/RBwjTG4ZVkOJ0cEap9gPNXr/BFazZnfroERaeiiPDUlDWkhTuDFVptMgwT9I/AE GQWiiv609ffG7T/PkcRlx8G/pM1iZnrMPkAl/DXBXe8XHouWTwZqcHX/KMa6M7Q74KXP EvWWBJTKSg1rHrceb+gbIN9SapscE4GhYp4j6BtkU//GFJDPn0n9iMtvuOG44TEGceMb c29JBiz+gPj84fAUfEfIbYc48cGkXtYHGqMPPatZEYbSKn7Z5DQLOPqOk+Vgn6/EbIo9 VVmViXQZ4vVVklsyti5FHp03EKRKzexbjnryr2pqHo88/6lEiG0rdpIQPT5nFAUG5voe 4/Lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740386399; x=1740991199; 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=p6cKbHN4qfM72wdTSv8VPMRBomnhPqBZxZM0i+T4Gyg=; b=w1vPYeXsY1zu62X5rJubajtJUfQjk7gFA5yMYhaTGbY0mYs2CfZorOnTRzP6kzKsWj aOd2o/IJfcF137ilH+fI5iPxD9QXAwlFT56W+pyh+in9Hu+I+PfPvDSWCe1UPojVcwRR sSPZpoqGNY6mwrfsgTxro5gChEFPXcdVGPPGAGiGoVH0BzzvCjdLPdL47lXwvvGPhcD3 wDPubBl/fL/58V7CaHs5JGsLQo1leLhPm7p4s9m/udlOqDBakfDG9X2ubjppO3KoHX1P vttozbMkM324W3vvbpz+5uPZRoQEwn4WOUgJ5Xx6z3U70MSn+3d+Zd1XcwMdHBA8IVxt RbmQ== X-Forwarded-Encrypted: i=1; AJvYcCWwgwEGUDyFzAszTLB0erpWixM6Bs1/SCbZ+cKR+xDKg2DPPnm3hgckL/O171FjXJa7QVDQwnQHqQ8=@lists.infradead.org X-Gm-Message-State: AOJu0Yz9dAtKK8/MSpwxIf5x7Lra/PNQzZt4IbF/fKt7puyY1wxk6wve Ou3HUDwhFbITAmjDjb/BC/IYT5xLbZTaB9fmr/0bIPQ3GwL49txX X-Gm-Gg: ASbGncsGPuMNDh9Pixlo+KOq4UV2KlwokBGKcYL6sd7NhEToqJYZRnEgVqPNZAehQgs Mwn0CpLDEeAVtFIy5CrHasYRtaP8IXbWlaw/LCcQl78xp5zOgYKWEWRQPFnCN9WPN3KvnQSaQUZ Mz7rIGnoZaAsMyeyZLjAA+c9BEmpLhxhbUHemcUw2XbnLnhqFf7GLvGKgWHWs2XxHZy+3413rGt UnoEw0CBtX5R5XBX4lW89jGKtZpZWaw50ms7lGj8qD+h5DW49Xm3n6C8rW0vLcehTdB8PHqdkZN pQtKFciC4p6zJ4Bb9RL9Bj+oBKDKqTsicLui X-Google-Smtp-Source: AGHT+IGdjRXZheSkV3s1DvGyCdmz3tYxghaKg5ParvRKOuHPh2Zz2Irrj+s+VtVp1uXaNHZqFpFNNA== X-Received: by 2002:a05:6a21:7011:b0:1ee:dd60:194f with SMTP id adf61e73a8af0-1eef3d66471mr21615752637.26.1740386398761; Mon, 24 Feb 2025 00:39:58 -0800 (PST) Received: from cs20-buildserver.lan ([2403:c300:cd02:bc36:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7327590ff12sm14634793b3a.115.2025.02.24.00.39.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2025 00:39:58 -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 v4 5/5] i3c: master: svc: Fix npcm845 DAA process corruption Date: Mon, 24 Feb 2025 16:39:08 +0800 Message-Id: <20250224083908.1880383-6-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250224083908.1880383-1-yschu@nuvoton.com> References: <20250224083908.1880383-1-yschu@nuvoton.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250224_003959_726158_32BF6EA9 X-CRM114-Status: UNSURE ( 7.67 ) 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 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. Signed-off-by: Stanley Chu Reviewed-by: Frank Li --- drivers/i3c/master/svc-i3c-master.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index 4eb4b8888725..403d625e999e 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -1162,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_quirk(master, SVC_I3C_QUIRK_DAA_CORRUPT)) + 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_quirk(master, SVC_I3C_QUIRK_DAA_CORRUPT)) + writel(master->mctrl_config, master->regs + SVC_I3C_MCONFIG); + spin_unlock_irqrestore(&master->xferqueue.lock, flags); svc_i3c_master_clear_merrwarn(master);