From nobody Wed Dec 17 00:16:31 2025 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 640421FDA9E; Fri, 21 Feb 2025 06:35:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119739; cv=none; b=rLMf1spqpImSVg6+vJFPC3FDJVz7GfGrYzYAVmT3Wvz0bxrDnaXTDfQQgRHz+QYffjWCF2JId82V0iU6OQEe7Wv02KvCm2O+VRD0DdlfqO7pMofY2KxeJgWWjNekUusHKZPch8ufctMu0t1HOu1rTPYri83+R9NfzF1nP7Jrv8A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119739; c=relaxed/simple; bh=nEBR/ZhMQZciESdwCVA5pOAm06SUbrX6YQTiEaxmjWE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jwJR+rncIWrjk1B0xFXa1gm39FYrBcIZIjZhdiEMR9oQ3LyGp+XQnIBDKhljkr9yYEyqTV45QdsjKgIid7Je8U54XzlKq5cBAjcsy9SuVPBil6czsTQDiEl1rwNmeWfURRnkUqYp3UEplMmOa/4lr3WvPWn0K0Fpu5XNMnboBh0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CNH8PU4T; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CNH8PU4T" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-220c2a87378so29075335ad.1; 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=vger.kernel.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=CNH8PU4TEkqPFYrgIuek19C19Sl5KsFznqq4IDGtvNVdoOqUlLLbnbTRALQiO4OvZm v/vzMFd5vuoWz83u4uCpfSQ3aldA38xUC+0llvUvBohpnfM35LUvPqL1MS8MpgQVLYT1 rtQrF91JSAMalobxNDj3XpkJ3bF+6NES1Tjz0vHdFDV1VILGNDpQftoyvm3tBKaZWPFb O8sISrYqawvtI+aEDFWs7ROz3zSCk2mHCNhHwYCWsoprSyrZmucoEn4Ysd5YUoI0s4+3 oJcbdUkhtAFMAWMc8+G+OcbkOJapnW8/34IeQsCZa//0NRiS17GpaYX4+jtOXx+dnVrN C+XA== 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=dJb39wvw6iHqxe416GwUU5rSBSRrdA2PXBO4pnVrztSbYHQtIiB/lH8i1E7VV9I094 gGDmX/wskz7LZEvu0yLRckGhFhhml9j42d3/vky3BLqTYxGw5nJGnHmJUs+ORBFgYlub BKPN+N/OB66PQ5LjQt35SzUTYUJU1343OLqZx6ZcmK4Bw99QRol//ARGLPg7UX9pR+0u AW8VS30iqBxjtjgmtSOrwtddylDyoCmMr9p2IB+hZuU0ZrVmH74E/EDDEwv0+ud5QwRL tDoSWael7yvGlgPWL258is0bgQlwRkw743qlnTdA17ma74dbggSCgAdnMIFW1b6vK9Jx g6PA== X-Forwarded-Encrypted: i=1; AJvYcCXgyezG6inmkybU13oaOA9r9nwgV80xc36+W9cb5zango9WVTxtPBFTyzlUK4adkwcYBgyY/bDGF7GM@vger.kernel.org X-Gm-Message-State: AOJu0Yz9Mc5U878SrL7OlN2VoXlI2V5pwVrRdzlpY/ra15OpDDRHt1Tu YF3ANy/2XEK7Duwr3mg9QCytCo0s23Nhyuup1+Z2//MK5Pq0RBHV X-Gm-Gg: ASbGncsgJE3Z2IlfSd39WdHroSgbgNeMHbfRiwZ/JwED4hq5NYsS9bXgJZYhGo5z2Za X3r2Ec0KO4kkFQTkzTpdynnPysdr4FX2g1SHUq1QNpGMhiVJRFjR34DgJDJ9RYhpZ9CXB0wBpeV KxmxplZHr4JyZBCaomU9FP9PSX0c2kHzIUS0oIMKyVq7vHrHDFWch2v9vM6tm59Kq5QAjH6H2Jl ONtFOn5fHw+/+PKy6tnde4bhgjZaujmcxhahmXo39uboSQQbnxFaZ7bjpgiyZgIYMPpGbsMDS4j VkJsqWu9WAVJGjjPaAppCTq7KuUC7SZyC0Il 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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: =20 properties: compatible: - const: silvaco,i3c-master-v1 + enum: + - nuvoton,npcm845-i3c + - silvaco,i3c-master-v1 =20 reg: maxItems: 1 --=20 2.34.1 From nobody Wed Dec 17 00:16:31 2025 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7D1AB1FECDF; Fri, 21 Feb 2025 06:35:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119743; cv=none; b=s/GpAD1IKpedE9MMjEb7aQhT6K0vbZP7StbYKgPiSs4N2dKdf1+0f4gMAe/ZY5ooiuCRPYL0H4j0Z8/OabKpfmp8mxxEwC+cT2CvfyplIEF8Zbu/fnpGwSTEjZ4DpwT7qKjN5QnZrKUod2H97Cm4R2GL5hGucxZVGeP/BjuqrBQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119743; c=relaxed/simple; bh=kW18YEUKCbD8b382clFr4aV99j9PvmbD6WrEXApyOew=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GNuS1kCM1yS7lX1YdIRI0kTSZf1TzB1tOsOsBc/zjS96EJDtEgd2/2tYiMyUb7crXfhMdZXLSX6QNiNLWHpXKpCIeTQ4jbpZKmKBteCWqSjYHwsYnu3Hm4oMeidDEs8o8f3wBcHQWJOquqY+sSXOZZqx3fdrtfQYHK5alsedK2o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=laXPO21f; arc=none smtp.client-ip=209.85.214.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="laXPO21f" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-220f4dd756eso34722765ad.3; 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=vger.kernel.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=laXPO21fkzfzredmElU2X6+twj6B2iGSc/9e6HXhFwrI+iICg4IY/nQiOAtXu8IoHn A42WO1VQzJtwuuOwUTOkDs5NFoShGbtPMDeoJBXXuda12WXn7JnuyiBTVldr6OVHo921 pZ3RgfMdql2i9/Wrv5f6FfU0+tEF6hPBXwlTrz4PaTOZhQTIctS90bo/+CA/nWG1grDy nw8Y/uWnevnZGGZwziaRqwLPQzg5FFIj+RUaePOIgL4lsTgOOsfQnxHTKwSACUCRd/Eu 3a0S1QAw8TnunLgXkQUVY4AHpKLVDVvk2gfw0XybauKjW9m3/9/D7A0wr1ADmKke+OL5 DCBg== 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=BV1rZoKVanGfUarkpbcHvgDViGrHY95TmtvgP/WoWcfNU7+ChuT4S6C3T4/8fP7gqW 7+tQmGuI90LAEtil81nJxlMZEFajpDh5E0NPQRQg0IhuwZyfzdGD7AGUA06Leqr+sCw4 EjmAsdLbiHlMLNUekKZbND6+VsyCO09JNs0fhAs5aH/Blb40QUfo51a/8UENxXKsINt1 C28Sf6eTbZaz1+P6d6hUam2K9wpo9QQ27nXd2AwhQe9oOJQwDbLhQyHEsAduNidf8MtP gzoNN4HHDnvf8Ztgd+8nwzDUqRSquEqf5gl9OXfTqeCW2T0VY30cyRiRKaN6dPRCUd4Q 5uPQ== X-Forwarded-Encrypted: i=1; AJvYcCV/qOkxCB4eZlGVjBCFIztYP/RGHi6QECatBPGTHH2kVjXYFw8vsX56EqNU7yPq5zA2uJdafydEpGra@vger.kernel.org X-Gm-Message-State: AOJu0YyrXYQcPN7TCLBiFXVWslOcrILyS4PrZBTKIhy9fF8VQI6Q+aYl 1e6lA39rDmTuw5+nUftDa8nhG/yMB3eFzr7kcmp8bDmjj8/e8qxN X-Gm-Gg: ASbGncswQuAWYwjdBFsAaV4Q7d4GKsuHoqeGMpJQiULz+QK5YvJJmW8sm1MFXrqqUXt ocsA2RPU8lho6NInooAu4qQM1p4gb04gsGtl+PRszzFR/eumaWe4EF5d3fefqcX4tDjBhdnREI9 aiFYOpgmIoGWjTagPbYILACmpak+bDlfV+wF+YXhB0XrfpzjY2ew3KS3pjaIkfTyp0drOiZlBze 1bvXussyzjATCU4BDVVkW4esXKmNxITtgxEUnclhzHRlEeXXyqGOkRVjW3v9LRX9LMlelpb/JIh MnT4AGWVFzK7XjXnoHlBsNbXIulbEgsgFpqz 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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-i= 3c-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) =20 +/* + * 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; }; =20 +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; }; =20 +const struct svc_i3c_drvdata npcm845_drvdata =3D { + .quirks =3D 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 ma= sk) { return !!(master->enabled_events & mask); @@ -1868,6 +1898,7 @@ static int svc_i3c_master_probe(struct platform_devic= e *pdev) } =20 platform_set_drvdata(pdev, master); + master->drvdata =3D of_device_get_match_data(dev); =20 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 =3D { =20 static const struct of_device_id svc_i3c_master_of_match_tbl[] =3D { { .compatible =3D "silvaco,i3c-master-v1"}, + { .compatible =3D "nuvoton,npcm845-i3c", .data =3D &npcm845_drvdata }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, svc_i3c_master_of_match_tbl); --=20 2.34.1 From nobody Wed Dec 17 00:16:31 2025 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73D3F1FF1CB; Fri, 21 Feb 2025 06:35:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119746; cv=none; b=KMmbnPyLRjcQJqSmdkkESHWPnBBoIt48CJL6G0gYdtEReoF4zt2Yicishj+zitaDSWTSwpcTalfoIxxr4UY3/ZURw/hhIDwptHcAdo9Q0ht/71xQX+kB0kyvrqJhhW+LXcqkWkZRaJ99TJGsjAaAsJcUq14FuwbzrflSFgC4YNA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119746; c=relaxed/simple; bh=BHRDJzpyVKhe/ZczGxC5ck8OVO3Qn8BX7p3xQspg/x0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gwJsBfRvWwbKtiTe18kOVD82ydR46R+WzjMZSMR/vfu8K3KOz83PfUoeM5LahzO3d4nfg1+5rx10cKOx24ahiYJYxwjUdsx6xBlKuvzhhyA0eoPK3acQn4y0GqlPfBsh+3moBZRjF7h0hv20whQOhpfPnuP1/gDJ5fcf6i1GqBk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=G/9aD3sn; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G/9aD3sn" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-22128b7d587so33230535ad.3; 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=vger.kernel.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=G/9aD3snsiwk0hcKfG/8kFgsYkvKRsIUQg0r7RT3wgZ/hNxIlL4vKuM9bkTvi6Jmch iNGgAvaHAQfanVp+xY1EPbusT0tbGaQjCB8T7OilJrkdzFplGqnvqFWC6uMGrZ1T4kjT WXAiIuz326/JzqMngxh8Oh7ITuDjCqTPN6DR8ibhkurh7FA95FPcQRu+WzeLEQsgG4Hj 3yvA8SsQDEFN63ddp7MGHOp11ubyOyOfBVZmTwKm8l9c3/dPZ54zcqFOhBz0eliAlA4N YMYJ1fX8HSeRdFL3Xayynpo5LaJSGXQBguEuIjcfAZBtpsJGbLcNNqvrWu5+zphDxS4a U2UQ== 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=s4Tj5KHwpS8aHMnKHAvJeJU6173Efp6ifAZQgcuquBq+Td3WmhTIS13IdgwBA71Z1I I50BWwA7ONgQfesRRQHAI9LQI2UdjfqUrf21q6FYmK7ZKkJx8DlQ/NkhDrUQeTOeM8TX kOyU1Jy9VQ2Vcc4wAqzxbiSCPTHtVjYmNZ+r3rr9QK7cT+FmDZBG0I1CH7J+IfuMoIwh Rdan2gDXt4N7TSG94nQaymkGprIN5RnO3L3DUPhijB9ubyLcOY3xv9wm+FR2gRC4Q6NT lmUgTZCvHcRuVvQaGJk/e5y8SKV0PMXbDGzZxmGMcZS9isOsT9KUUMsUoDgQgpI9nURN 0XeA== X-Forwarded-Encrypted: i=1; AJvYcCUl4PX5yolu3eTjuBqIVi7oUvqND1qRciLYB2RmnvE7iPA75fiQ1AvA0TmmTcuzEz/RgOU6W+0pw8N6@vger.kernel.org X-Gm-Message-State: AOJu0Yzpx/p7JxYxDBYVwb7vxaS/huabjHLIuUZY0l8c3TqASI3gKonx 1cufa6GCBKpe+PQaYcz6KZY3BnHy/+NxlBMK5ivD1iUIdGtLWWaD X-Gm-Gg: ASbGncvOikrp14G93KB16c2CN89jeobYpGBi1GSTftNxtYKNql5EGQkhRdmrtZhrbYm b7mpr35wmIiW63FMx/b/wFEmwScGiYa6WHUMhzxHgt2KT1s1MWQ9bXC7cN0DItMdfhMDoUuD1Zi 5bLlSrs7cg3+vDTWprn4ioKbIr8J+rAe5ADB60iXaTApsP1TsxU/3HbABBPmDPpIRVBU+I5LW/I Hm6haA0gpLT0P5him2bI7AAuv/tiusV4K8teJ60jNnpsNedvOxJZNy2pYXSyZ6c1PqWik6CNCKl LElfsembMoWMOWxWKSthSlI7v1tApP9VbzLL 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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-i= 3c-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 =3D 0, last_addr =3D 0; u32 reg; int ret, i; + u32 dyn_addr; =20 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]; =20 + /* + * Filling the dynamic address in advance can avoid SCL clock stalls + * and also fix the SVC_I3C_QUIRK_FIFO_EMPTY quirk. + */ + dyn_addr =3D i3c_master_get_free_addr(&master->base, last_addr + 1); + if (dyn_addr < 0) { + ret =3D -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; =20 - /* Give the slave device a suitable dynamic address */ - ret =3D i3c_master_get_free_addr(&master->base, last_addr + 1); - if (ret < 0) - break; - - addrs[dev_nb] =3D ret; + addrs[dev_nb] =3D 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 =3D addrs[dev_nb++]; } =20 /* Need manual issue STOP except for Complete condition */ svc_i3c_master_emit_stop(master); + svc_i3c_master_flush_fifo(master); + return ret; } =20 @@ -1201,8 +1208,8 @@ static int svc_i3c_master_read(struct svc_i3c_master = *master, return offset; } =20 -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 *o= ut, + unsigned int len, bool last) { int offset =3D 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); =20 + if (svc_has_quirk(master, SVC_I3C_QUIRK_FIFO_EMPTY) && !rnw && xfer_len)= { + u32 len =3D min_t(u32, xfer_len, SVC_I3C_FIFO_SIZE); + + ret =3D svc_i3c_master_write(master, out, len, + xfer_len <=3D SVC_I3C_FIFO_SIZE); + if (ret < 0) + goto emit_stop; + xfer_len -=3D len; + out +=3D len; + } + ret =3D 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 =3D svc_i3c_master_read(master, in, xfer_len); else - ret =3D svc_i3c_master_write(master, out, xfer_len); + ret =3D svc_i3c_master_write(master, out, xfer_len, true); if (ret < 0) goto emit_stop; =20 @@ -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); =20 return ret; } --=20 2.34.1 From nobody Wed Dec 17 00:16:31 2025 Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8396B1FDE04; Fri, 21 Feb 2025 06:35:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119748; cv=none; b=Ye8cgQ4e1XAHotDqYJw+MJOZMvC12E+BJa4X12uhG9EetDJ6T2d4/2OaiFJCzMOSCtEqVhhtOiXrzWr0VywW1sADGmvoF5da1VlDPMpRzDNYNnXGfC/+IAin+gi0GdbJtcO97e617RRYgobGkXqXMjoD3u9rvuL9OGBr81u2eDs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740119748; c=relaxed/simple; bh=fCnsMmvBfXbLmKzAaz03hxr2mpj9BZlX2vlKfj7SNQA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=H678K/nCoLNQsJHw87LWgri4B/ynhEKQ7OU4t70GrjJ5obGH3EBWr/UHCjADVBfM/jxzRchTRolKVRAEgrrH6AMmUKgdaFnyaS7y/HvywUAsPShI3SFWR3JLqTrn7utaXd2cHSQytMYOsKKBYB5eoBd2oeEy9vES7VcecLDENN0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Ct1FvoNB; arc=none smtp.client-ip=209.85.214.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ct1FvoNB" Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-221206dbd7eso34327755ad.2; 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=vger.kernel.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=Ct1FvoNBXoIC8JJWMFuwEh+nx0ufjWU7ENdt0/1WNSfe9EmWNybaVG+h0wjxE94Wrj ZTNW6+MrU/TTqzfkRe9IFfsHh+kkOTp/Z7vp91e0v1Yl872WD/wliigOjFOdVZFGVu0R pWKV7+04oNo7m4AyAeexfeuSu8187S/m6Emr6voQuj8IHhe7hKeEnm8RZIW80/Ruz1fb l0wrRuVYk5d90U1eKgHLE3X2r5oyprfxVxdc/YNWx6n0lyC6xd3f0VF0OAFskd/RUPKJ zF9GNA71Vs5YPEoe9+mtT1b9UFwUoo1dsfVX3cFgk45mt/mB2P2oC4BdkDjRatMU4OiB dgRA== 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=M4XXis+A7Zi181Fs6zmQ5ztnuZGqAaGTBnTjzlCBW0FJUsTr/axr0/M0iZBbovpdQv 8Xcn1LvZWsVQ53DeNomPMUOH3/Lhr4oA81liws2T0+erDQs8em6TfLlnGWNLHvBOA8qS wVvQ1xKVpl5JOZfEYGMx7zTK2bJ3z95qSq+uuHQisa+EagJ5nVWG/h+wTgWShFEj+lzU EbQV0srCBsYhneStBa0yifi6sSLWECaijEJsu2ZblCFvcJOI2mTy9PAtf3bl2yuhe1BG 77cN07FiqiSYjZiSBpB/hebANivnXZNJw2egnZAuQb2XSg3bHeFxjRS4yfwwh7JRjPEJ SXRg== X-Forwarded-Encrypted: i=1; AJvYcCUjwrPGDsaot6A4lWeOP2h7jLuLGjsuzbOLXOYzAjJLZv6maSmiwEGdbnSpNL0kLlpx2bznCuXfQ2gB@vger.kernel.org X-Gm-Message-State: AOJu0YyUXDXpMim6lON87oHVoOdtZqDXgrnNOcmbqyCNX9+krtM7Lw2j NWwY79PR9YeEG6GUZrNl4vGzgyi0k9u46XqZVgJFkQh7u+efvWJm X-Gm-Gg: ASbGnctb/TTG721AgKorIOQCd6CYOKvQc1sgJh2FzGaKoZhFh0ppT91oKbl5ZyfB3ce Qk3XQpXqfD8y4eGbllqF2kOo2YzfDt78Ej5cuSPCYkWpnsfL8eL710srLqoVELlX3DXm4lIpBKX LIdhGfNjtw8p5QVoZlC/Xsh1nN27uaQfPdOmq61QGzB2kCZvLtYr6R1xbkv+sKz24xlRjv1AKlT C2wQ6c80ZcVEy7WOShD810vFUrQPYGg9W11A9yJOz6st6R9/LGAb7f5KAq5Pj8+AnHf1U0bFaeb CUtgHh94GcZ43ypNEH9LeKKVKdzL5TZhc3IX 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> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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-i= 3c-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) =3D=3D 5) +#define SVC_I3C_MSTATUS_STATE_SLVREQ(x) (SVC_I3C_MSTATUS_STATE(x) =3D=3D= 1) #define SVC_I3C_MSTATUS_STATE_IDLE(x) (SVC_I3C_MSTATUS_STATE(x) =3D=3D 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); =20 + /* 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); =20 /* Handle the interrupt in a non atomic context */ --=20 2.34.1