From nobody Fri Oct 3 14:29:31 2025 Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (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 F04A7219E8D for ; Fri, 29 Aug 2025 01:23:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756430599; cv=none; b=RAKSkHevTzEI8aTPxMTY99yWCvaPmxv0IVxcTcxmYae9Ysy5YwPHlbitGnF38weoAV1Ca6HN+PS04qiJt+v5+EFG8AFdYf97CU5vl7O2r+NvGN8WbzbtCSJLeGH89UOhiFJ7P8wrBlDeECaVbN/JsGLpM3r4QHJgoq3e7GN7OJU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756430599; c=relaxed/simple; bh=Qbqep2hzcqNwSJ0FdtBOdWhD7FOE+5zl9NAF74yt6Bw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=W9djV2fT21lxc/k2S8H1E5o76DuCnEraViBVop4eMJNzoqBv3coeTYOlxKklBgZy7wd+YvSVCb38QFnjFSPEjFP4NeUkJNwDd46wWZX2QcpQPRF+YaurI35lUUEyurPZ60xy8fm1aCTh3Ob8kkBiLSAKAjDzSUcZlnXe30wlX1E= 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=DHueCD94; arc=none smtp.client-ip=209.85.214.169 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="DHueCD94" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-248a638dbbeso14299365ad.2 for ; Thu, 28 Aug 2025 18:23:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756430597; x=1757035397; 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=JCc+9KPYWnXlW7uF+KcOgI9YRTfMpRpG2O6mgKyAsFA=; b=DHueCD94GY4UGuiPBjO90UfRLjMCPF0hz2AZ2wv1tH5tAspVDS/ph6Xx7S4EcpgH4z zL+ybx9ZirI/9N9kjev7WX8s3Psa6LnZo+edvvwTcRtAMvMLUDBiECGJ4Z7hIb8mOXdk Ov/xg0as3pm443QsM8txK8GuiFooVi9zc7WFbKi7EqKpuz01Nzr/kQxyWNPqR+8Fy3B5 Ik9Ew4kwO3/rh/kB4wEhYo7DZ2lEZiAffcreIHxUbWCNft5T80v6OJoamtq3KRbgSsBR SRQSmwVkZhJjxA+LfNC9gQliR2cmyxx+Nxp+WkqKpB/O0Svnuwoeyt8Vy0ZoDkoMYNBQ +vdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756430597; x=1757035397; 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=JCc+9KPYWnXlW7uF+KcOgI9YRTfMpRpG2O6mgKyAsFA=; b=ZtQMIOFcHfWX9M/SbJUMFpM20vkPQS/REcGUIuOa9Z8auQ0ztUaylsHAXRjyzTRK6z jgCwVHNZBi59iTHtGqT5PRcxz73TJ1qiSqoWNGGyqj1bzJSYxLscGi8zIEBUb+OhizfB jLqPE1oFBascQTgOY0AZNVXq09JK2n13gKMD+V8yM7g8yvUvgasMBlKlGQKJhccLKCCO TNAsh0tE9USIUPCDRUPC34vU0f45jn2GHTxlgaYuNzsPsDY6PtwF9k7LeEK20vJcxsrD IO3PECWM07GeUOe/xB2LfXTH5J6okWbg/ZyOEDX0M+xSZDoE5isHJTccIzr8VOnPhMHt iVwA== X-Gm-Message-State: AOJu0Yw9mkRq6VUzKA7wmM6toKlTB+je304P/IoKMiQCKr1zg72AjatM saeo1TlHuihludZX3mLFcKYnQgaG+VT1T/OCn/f4ofMDsO9xrDYqeMlY X-Gm-Gg: ASbGncsiVZbHJvVQ7PlEf7BbCoObmPgx+2stWBpK5Ryf1j9TE2r2FsYbVvwHSQlJG3G HePa7lCYlZ/3tLSjnN22PRZGpGa55vColT/GkHgc/qEdDV5pFtleD4HlXA0BlmX4JL+TVCQaSmb 4GDFFZP9qF1t3PDFwB76TQtfiTWp/mRakhf64Fm2YDirvaOOPq0G4By2Rvc1pAgj+raF19ym1Jj hEOWsDldiF4LL3jUuuwnYcXjkz/BYUJEALI/1ZBk7x8dVG68I8D4l6lVOorN9HAQMmnLqfACXo4 deYiPppTEIZglDREGKmq6wXtCPw1ycgqHBwRMOwGVUMcwwIOAaSIsMj+M2+KI5UNxykhqx31HVn HDHpZrfPv/4bH0yjF9lWIReUMieNEKrYaYI/M2MhK3lA= X-Google-Smtp-Source: AGHT+IHmO6ojEFw+n3wHVhsw/EFAK1mSMF5sDMQeXbOj8huc/adhHS7E4f1wH0RYuA2hnfjxzOdWeA== X-Received: by 2002:a17:903:943:b0:240:5549:7094 with SMTP id d9443c01a7336-2462ee53d7dmr335075475ad.18.1756430597328; Thu, 28 Aug 2025 18:23:17 -0700 (PDT) Received: from cs20-buildserver.lan ([2402:7500:500:7a9f:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-24905da183asm7686885ad.74.2025.08.28.18.23.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Aug 2025 18:23:17 -0700 (PDT) From: Stanley Chu X-Google-Original-From: Stanley Chu To: frank.li@nxp.com, miquel.raynal@bootlin.com, alexandre.belloni@bootlin.com, linux-i3c@lists.infradead.org Cc: linux-kernel@vger.kernel.org, tomer.maimon@nuvoton.com, kwliu@nuvoton.com, yschu@nuvoton.com Subject: [PATCH v2 1/2] i3c: master: svc: Use manual response for IBI events Date: Fri, 29 Aug 2025 09:23:08 +0800 Message-Id: <20250829012309.3562585-2-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250829012309.3562585-1-yschu@nuvoton.com> References: <20250829012309.3562585-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 Driver wants to nack the IBI request when the target is not in the known address list. In below code, svc_i3c_master_nack_ibi() will cause undefined behavior when using AUTOIBI with auto response rule, because hw always auto ack the IBI request. switch (ibitype) { case SVC_I3C_MSTATUS_IBITYPE_IBI: dev =3D svc_i3c_master_dev_from_addr(master, ibiaddr); if (!dev || !is_events_enabled(master, SVC_I3C_EVENT_IBI)) svc_i3c_master_nack_ibi(master); ... break; AutoIBI has another issue that the controller doesn't quit AutoIBI state after IBIWON polling timeout when there is a SDA glitch(high->low->high). 1. SDA high->low: raising an interrupt to execute IBI ISR 2. SDA low->high 3. Driver writes an AutoIBI request 4. AutoIBI process does not start because SDA is not low 5. IBIWON polling times out 6. Controller reamins in AutoIBI state and doesn't accept EmitStop request Emitting broadcast address with IBIRESP_MANUAL avoids both issues. Fixes: dd3c52846d59 ("i3c: master: svc: Add Silvaco I3C master driver") Signed-off-by: Stanley Chu Reviewed-by: Frank Li --- Changes since v1: * Specify full fileds in the MCTRL register * Add Fixes tag --- drivers/i3c/master/svc-i3c-master.c | 30 ++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i= 3c-master.c index 701ae165b25b..8e7b4ab919e3 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -517,9 +517,24 @@ static void svc_i3c_master_ibi_isr(struct svc_i3c_mast= er *master) */ writel(SVC_I3C_MINT_IBIWON, master->regs + SVC_I3C_MSTATUS); =20 - /* Acknowledge the incoming interrupt with the AUTOIBI mechanism */ - writel(SVC_I3C_MCTRL_REQUEST_AUTO_IBI | - SVC_I3C_MCTRL_IBIRESP_AUTO, + /* + * Write REQUEST_START_ADDR request to emit broadcast address for arbitra= tion, + * instend of using AUTO_IBI. + * + * Using AutoIBI request may cause controller to remain in AutoIBI state = when + * there is a glitch on SDA line (high->low->high). + * 1. SDA high->low, raising an interrupt to execute IBI isr. + * 2. SDA low->high. + * 3. IBI isr writes an AutoIBI request. + * 4. The controller will not start AutoIBI process because SDA is not lo= w. + * 5. IBIWON polling times out. + * 6. Controller reamins in AutoIBI state and doesn't accept EmitStop req= uest. + */ + writel(SVC_I3C_MCTRL_REQUEST_START_ADDR | + SVC_I3C_MCTRL_TYPE_I3C | + SVC_I3C_MCTRL_IBIRESP_MANUAL | + SVC_I3C_MCTRL_DIR(SVC_I3C_MCTRL_DIR_WRITE) | + SVC_I3C_MCTRL_ADDR(I3C_BROADCAST_ADDR), master->regs + SVC_I3C_MCTRL); =20 /* Wait for IBIWON, should take approximately 100us */ @@ -539,10 +554,15 @@ static void svc_i3c_master_ibi_isr(struct svc_i3c_mas= ter *master) switch (ibitype) { case SVC_I3C_MSTATUS_IBITYPE_IBI: dev =3D svc_i3c_master_dev_from_addr(master, ibiaddr); - if (!dev || !is_events_enabled(master, SVC_I3C_EVENT_IBI)) + if (!dev || !is_events_enabled(master, SVC_I3C_EVENT_IBI)) { svc_i3c_master_nack_ibi(master); - else + } else { + if (dev->info.bcr & I3C_BCR_IBI_PAYLOAD) + svc_i3c_master_ack_ibi(master, true); + else + svc_i3c_master_ack_ibi(master, false); svc_i3c_master_handle_ibi(master, dev); + } break; case SVC_I3C_MSTATUS_IBITYPE_HOT_JOIN: if (is_events_enabled(master, SVC_I3C_EVENT_HOTJOIN)) --=20 2.34.1 From nobody Fri Oct 3 14:29:31 2025 Received: from mail-pg1-f170.google.com (mail-pg1-f170.google.com [209.85.215.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 4878B22422D for ; Fri, 29 Aug 2025 01:23:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756430601; cv=none; b=MpKOaXzx+cdZu8RaavU933Ngo+9AspdZVHl0DCPqmSjtkt32xRwcjvzxghcJUS52x2A5JVeY7NnNNPnHVFC5b+iU8gaGjEuMO3Bimo6+4epqwF9lBV6GcJD7wNnEZ+iosjQIBnBRQmkTsS5JkXb6rLygbOOYELrj6fNcvaRz19o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756430601; c=relaxed/simple; bh=D2eJe/VSyu1EW5EEtFbS0UmU05W1NDCSCYs1WRNX8Ks=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=qqAEwwxmqyHDMTmkRWO33I3OZsZOU29gqg4fo0iGW0FpvMWE7b10X8chZinHKaprT7oK5sf8CHC4dDrXQgZP1NrKLfz6YzZVHytyDSkoNGBBtCTrjuW8BzeGJsvFlUj9Q8QtU2QSP5Rmimk65m8A+cCJtHTVU+UQU9wYBVYjx9E= 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=k4EZzwWu; arc=none smtp.client-ip=209.85.215.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="k4EZzwWu" Received: by mail-pg1-f170.google.com with SMTP id 41be03b00d2f7-b4717543ed9so1094191a12.3 for ; Thu, 28 Aug 2025 18:23:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756430599; x=1757035399; 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=+oHGtvYtsesmIt3+EM6g35UIqNVWRbi1ozOFONogT1I=; b=k4EZzwWuXJBoDrUasGjH+oK0ej1LUUBD0uNsv9hYXujpLkjSY5jqRzH+DNmksZujdJ Bw0mmB/LEQ+oSImNXSoQgSSGbSkkCcuANy+NG9ERJSyObgXdGvi28PGyd8K6jL6SjUUr tkWwcXcaUHKGnXYeZdynMrUB257MagjSVdBDCSBA4M1MDytmXrz4JDMTKo346r0gfqPG jNMbntpbMJQXo0FYr2tSCi7mlqqFhEcjA00q+hcby6K/TIRhi1H1+LZodm3LBaoR12YM RcG/foK4eMfzp1oC848ihakQLktIeh1MUaiFqhigs482SdFJecSBPwxbstm1+IEIAs9v o/aA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756430599; x=1757035399; 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=+oHGtvYtsesmIt3+EM6g35UIqNVWRbi1ozOFONogT1I=; b=hgrgl1KqaQA6k5f15YErJeuEtE+8A0yAEIM0B6Hwqxe5v6WtUAzyKO8b9vlarU1wJP 9cLbYqm1qkHPwQ1OvlsZuoMhFzMp3efwJgOaq0tTF53tRhtuwU7k4fkiJRRZVX1lhUdz 3mBOzLb1dgG4mbgtKEsQYIqK1KRAo4vrUsxckwdP9tthyGVqNATV1MzMgs4DUBLgUY/Y M+B/MpOAPCnObXMQGz9OxUELm6HuTgEeN14v9H+hs4yp4Ad+RSDyVOkPlLTbxtPHTfof Ke2Hjap9yKVEOfw1chAozscI6PsScOACvNNoxmKWo+Jk5TaZdVYVewZ+T13m0XuG/dBh xtDA== X-Gm-Message-State: AOJu0YyC68md+mA+fOKf14jwjT8H0FqPFRCGIJ9FAMzAqbcsrft4PT8C wRAQnxkKLtEQGIUd/aLDIdTDwEEomyx7Mf1YA1ZPb6YtpAZ4l7o8WdGc X-Gm-Gg: ASbGncvb8Q5kdZ/aA5vkWw0T7+3RAj6xoUhDnESA7iHhlL9C0lhJpZzry3HkJa1pdi8 VzObLf7tJDDTylV22NH3YsojBvjEFI614jEHczOuyRiWrMlFGg8q3zJtussLI3ti7Fs9cgnVzfT 1QC3pqV22wzkROvJBeI7Pu3w3vv6Qnnfy/eXVx0+YJkXRo6lcAdolVB9fYDeu83LDdauZ3UiJBf SVeIUPxk70scNMfz7x8bfl1578Ouy8Vd0+0w+e8/cz/G/r+tKDz6LiwixwXGsxN51zzXYcOh4wO uUJUfrn2J07chhnOJMvxS/vq/LUl0aHnJg0vz9DZgxld8X+RysoMODr03Xk3e0blnfUjXTIOuL6 Xj/00I5Wd8UFHaTpRcBTGeWWQRJiwvcc5 X-Google-Smtp-Source: AGHT+IG+t3nrXLoxxR1n0FoxZdNMEKufEOVKLubzBN2CKS3LXLlRkY/AYqSJD7YLsftqx+TsO0/egA== X-Received: by 2002:a17:903:2406:b0:248:8872:5889 with SMTP id d9443c01a7336-24888725c49mr148909745ad.38.1756430599488; Thu, 28 Aug 2025 18:23:19 -0700 (PDT) Received: from cs20-buildserver.lan ([2402:7500:500:7a9f:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-24905da183asm7686885ad.74.2025.08.28.18.23.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Aug 2025 18:23:19 -0700 (PDT) From: Stanley Chu X-Google-Original-From: Stanley Chu To: frank.li@nxp.com, miquel.raynal@bootlin.com, alexandre.belloni@bootlin.com, linux-i3c@lists.infradead.org Cc: linux-kernel@vger.kernel.org, tomer.maimon@nuvoton.com, kwliu@nuvoton.com, yschu@nuvoton.com Subject: [PATCH v2 2/2] i3c: master: svc: Recycle unused IBI slot Date: Fri, 29 Aug 2025 09:23:09 +0800 Message-Id: <20250829012309.3562585-3-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250829012309.3562585-1-yschu@nuvoton.com> References: <20250829012309.3562585-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" In svc_i3c_master_handle_ibi(), an IBI slot is fetched from the pool to store the IBI payload. However, when an error condition is encountered, the function returns without recycling the IBI slot, resulting in an IBI slot leak. Fixes: c85e209b799f ("i3c: master: svc: fix ibi may not return mandatory da= ta byte") Signed-off-by: Stanley Chu Reviewed-by: Frank Li --- Changes since v1: * Add Fixes tag --- drivers/i3c/master/svc-i3c-master.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i= 3c-master.c index 8e7b4ab919e3..9641e66a4e5f 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -417,6 +417,7 @@ static int svc_i3c_master_handle_ibi(struct svc_i3c_mas= ter *master, SVC_I3C_MSTATUS_COMPLETE(val), 0, 1000); if (ret) { dev_err(master->dev, "Timeout when polling for COMPLETE\n"); + i3c_generic_ibi_recycle_slot(data->ibi_pool, slot); return ret; } =20 --=20 2.34.1