From mboxrd@z Thu Jan 1 00:00:00 1970 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 719CF1D7995 for ; Mon, 13 Apr 2026 00:51:10 +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=1776041471; cv=none; b=Q1lXsWmI9ogN6VpvWAF2Tpdwx5vaIZqOyoutcP7t9CmE2uJY9/u20UfDg2CEZlZksw7A9TXwnAcHB1EXxzU5uEP1KEz+XJ2PfH3jamBlemWXWHPnfeZyW+cpWLanluJ9OLJo5RDffeAmnRbaFRXY947zRa3N3dcRr3aqCwANp+s= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776041471; c=relaxed/simple; bh=3WMKkqhtm73/3/w7nKaoXHDJO8yQChlnaxa5Rgwct/w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Fs42u98LaIOZNSWt6Sna6c7hm+kEr/0siXHmIXzTsA4Vf6Zav7wroIXdVY0lOmidpLrC9akwhM1zm5h9jnb+LOHFWAG8c9lMN862I8XeKxknKYzGjlKArPEiF9dKOgniZsM+rTo8xSXy98pZ5pKNZy3xofOt1zSIRs+eUmGg7tY= 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=EIXhkZ9P; 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="EIXhkZ9P" Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-2aae146b604so27657705ad.3 for ; Sun, 12 Apr 2026 17:51:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776041470; x=1776646270; 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=OQri9tcgj2545WBZEOXNrZ6QcioiAT3tQ5zzH70Y67Q=; b=EIXhkZ9PMFRjF6ly30ZnRWZoFIfGJP61NV0DjVAEaF9S17kEebHy97Dt3zumVVTO4y oYClJ/M010i28NO46TH6dGNKp1oCUQW1NvRq5LJZL2s10ZJ88mzPkbDk56cvejaDZBQZ L0Xpr+tLl2p9/IGhEp35Zh8L7gEwX4DL7XOB5KAsW0UvsRCl9fdKCdt7TKr5yaco7Pjk VmHWKSb6PxsFUOW3C50M9HaRyi9IXScPWNlBSMHzxxmJxxAWVmihX6Ci078xuK4dlxDj VQ/DkQ8dNQ3JJgstiiLp9SX+XXjNtsokpHEhU0J0CKIPUcxyKnMotnuW7HintCWy8wzc QtgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776041470; x=1776646270; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=OQri9tcgj2545WBZEOXNrZ6QcioiAT3tQ5zzH70Y67Q=; b=W6vndKcyj/HOIJwNjjD8U6ZM/kc5dcUJqaTiiPoSF+YqNmKxRhPBKG+QayM6wrt4GR ndhms4mRMLVXIHwviDcEotzw73XG0P8qHAMxEyOC7pmBSBu2F1WOt5HzfyCPnSdpO9tl TnztKs+1YjUI6uKjGSPDixuObLTpGvxqSjMwAmMxMdxwyPU4es4UBdQBZotLp6LAuh8A Wdoz5LJtwGKnP3gzgOJ1Ol5wX761Yhv08nYqYiaHZg5SHpAIZHIZMus+Lj/abBdgv+xg 5wrysl4scOHflyc0qPwy/mM73FPXbaNH4yIg73ECUeAEMJWNejvx1iNJWFZ4XSCoi7kb 2s1w== X-Gm-Message-State: AOJu0YxGKT1uudqKm9mrFvF6xpHgNb3LYi0HAjAjYCv+WIYOuJCvQFMX 8JLYHAHUAo7r+GlPEfX7ewZZtvkqgVqUpGsePZvA3FeBdUjn5sDBsbAc X-Gm-Gg: AeBDietNthTejcUj00C0oI2/e5FqThbZgCBXeliWmMd4TvkwLwbYee4s1SWxvB1h2hU U6e217dwJ/+Bzhv2T/n+1M63xv3vE5GVm4EoxQvSJMRPOrkjsaZLUOhRymhRcMhP0rZL/8IZPDF vzWBl4tcGVdrbZzu88SzBE1xyGHGsJ+0f19nlrgs/nDF35Jj2qNCWmBR5nJ635GZ/1QGBf8a3Cv HJSNcfpToWpxZJo7ITXYX4A9iSLDQKkD8X9IZnntT7EwssnXg93Hkaj1U5bZSYBo1dn7T7s+dYZ WEDr6Lux2HKacTU/a3tuvmIdPMzzV8T4alTX/EZsORq16p7ywQq3jsr3Ci6CYW5MP1kqZWtcUHO mSfhqNrNIKM+e5hC4ramUON9eo6WS7b5uPurby0YmIy5QHlcpVfkF1cr8yks7WsFXAUyRAFTDsA UYOKIw9sm9TxtxlpkPxRUKl3fT+nF8eCzv X-Received: by 2002:a17:902:ab85:b0:2b2:58a2:c8a with SMTP id d9443c01a7336-2b2d57e6223mr86789665ad.0.1776041469814; Sun, 12 Apr 2026 17:51:09 -0700 (PDT) Received: from cs20-buildserver.lan ([2402:7500:400:8d94:2e0:4cff:fe68:863]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2b45f6c0219sm10828465ad.10.2026.04.12.17.51.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Apr 2026 17:51:09 -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 v1 1/2] i3c: master: svc: Fix missed IBI after false SLVSTART on NPCM845 Date: Mon, 13 Apr 2026 08:50:39 +0800 Message-Id: <20260413005040.1211107-2-yschu@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260413005040.1211107-1-yschu@nuvoton.com> References: <20260413005040.1211107-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: 8bit From: Stanley Chu The NPCM845 I3C controller may raise a false SLVSTART interrupt. The handler first latches MSTATUS and then clears SLVSTART. If a real IBI request arrives after the handler latches MSTATUS but before it clears the SLVSTART interrupt status, HW sets the SLVREQ state. However, the handler still relies on the stale MSTATUS snapshot, returns early, and misses the real IBI. No further interrupt is generated for this pending IBI. Re-read MSTATUS to obtain the latest state and avoid missing a real IBI due to this race condition. Fixes: 4dd12e944f07 ("i3c: master: svc: Fix npcm845 invalid slvstart event") Signed-off-by: Stanley Chu --- drivers/i3c/master/svc-i3c-master.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/i3c/master/svc-i3c-master.c b/drivers/i3c/master/svc-i3c-master.c index b84b324e4111..7d88e8fe3742 100644 --- a/drivers/i3c/master/svc-i3c-master.c +++ b/drivers/i3c/master/svc-i3c-master.c @@ -672,10 +672,18 @@ 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; + if (svc_has_quirk(master, SVC_I3C_QUIRK_FALSE_SLVSTART)) { + /* + * Re-read MSTATUS to obtain the latest state and avoid + * missing an IBI that arrives after MSTATUS is latched + * but before SLVSTART is cleared. + */ + active = readl(master->regs + SVC_I3C_MSTATUS); + + /* Ignore the false event */ + if (!SVC_I3C_MSTATUS_STATE_SLVREQ(active)) + return IRQ_HANDLED; + } /* * The SDA line remains low until the request is processed. -- 2.34.1