From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 2846C3A9615 for ; Tue, 23 Jun 2026 05:47:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782193658; cv=none; b=tjDSagQOwORAssafGtqEMOuOeVMw68tTaEJQPKGq5m0vr3MeVu0oWweRs4K4CV+JnUHs9wwcL1jMCQbT+rfgsgeGGew+o1b9OYpKybK1g2QU94yA7TP3u9LTfQe8Dd8RHaBlCD9rMR+3RyiG8KbycYcpkwsi/hx6PTILxk4mW9g= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782193658; c=relaxed/simple; bh=mYtIyNfT5VfpHe3MUf+iAsvxxfqV6WV/ViuGdha/rnk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=RaJCa/KSnx6VCmwrE0tpdkgtQxS6RvfG3KT1hiRBKiaTbqwckD9DPNlklla+FeYNUZ65R0QW7t6TkyNV9eYtn3YkEuK7zX8xCnpgsBe/aJGiVTQlGX5Hx2sKhlAqlNnvwbhRHFUW2uDYyMO0yJgfyCbrj7uKZpQrnj9vFiDr+EQ= 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=iJcbnvLI; arc=none smtp.client-ip=209.85.216.46 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="iJcbnvLI" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-36ba706ab46so2849252a91.1 for ; Mon, 22 Jun 2026 22:47:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782193656; x=1782798456; 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=1sRMU+kgRpHS0jEZ+Rz/PmPVUD26Z4UtlWktthJUcyQ=; b=iJcbnvLIZMkeBi2+4uebNrz21N4y4G1OH1iUWIEm7v4CM6JdHLAdyCEfb7JCS08r3X Qg+viEiqGpKY++vxjQF52J4XQunatomD20Gp2f2PNnhSzFc40P6nIRDkGF+VnWFknFNh /MWjIHeuzRgtWFpulvPN3W/IjkANaydTjMfqOOTZiGV8zkM8ru5R8HFEOn7Sp8hUh5Sh LhT8/isDM80gRlaFimtJh8ILg+4DTSiLY2SJopn2R2G1LnkBgmuA/HEFPcH4IJW5mheA OKh3MKLv84jz7aI4s/JvqpGOp/6aE86iVPOXEXHSEVnUM+jSP9DUpXUELqgmpqdZyShU aPww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782193656; x=1782798456; 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=1sRMU+kgRpHS0jEZ+Rz/PmPVUD26Z4UtlWktthJUcyQ=; b=RTM5hvHV2Ir6OIcMNO2MH6+U0ldK/wheT9z8kVChmOH7EyOgKq1IAQaUCuNYL/+Gnn yQ4Xix6CU21ESwVQp4UpdS5qP0kRhPgh9ZIdXHVArMiaMhpBqHg2eE6KXPZ+ynfFKBBa N+xOdZedhV0NwEsFJchHOjqS3b4ZC7KpLAfFRKhvK3ipW4jTQ5ouDqLF2RKQFwBrztBC dph0sIiTsjPLflFoHf5RC4J/dfbxS5hJo7hLxw+QWCjCVjceW6w4+R/g+N4PRVRONmG+ IqPRIEJMcuwLk1RAzUxHy8cWgH5EZAmbPBvNHsfuaUPo5gmTmKAacpEHf5MdfADXYd6z AzVg== X-Forwarded-Encrypted: i=1; AHgh+RqdwWUgQRYKMj8lo83bsBwadmxk1KxWHDMF3K0blOV6unyTgLd3Ce3bICa6ZXIWa5WuyYLg+ulZYozi0gQ=@vger.kernel.org X-Gm-Message-State: AOJu0Ywqbukqu8vp+THxJYge8uyh1tWfrzL84pBV1qx4mXmU2I6aZF3f kYfaQ/LJ9BtJp1F6hNokseCTnCAcz2ctdC8AEXdFXIF9tFKcf3iiMZqu X-Gm-Gg: AfdE7clsG1eEfAKQbv6gd196re24V3u4baX/qTfIhvutdLc9SnVDmoGPttGvMFxp1hD Kh7iKa7fzcC2/POA/dBvV7lE2gltMpz43CKEoHy+ULHzOnrkkej88xAsfo9VSyWpPI8M7OH5YSQ XSCZMwaKTvyccgEFuZYi9C03t3yiDIum0lX0iCy/sHgPc1gArNClExkuqxDgL6l+ZonCGd3dpJa XJvXw7EMgfdsGzM0p4X6rAurj1lMIihl8CrIBw2w68dxxnkMB9yAZYNjWWT6zPcc+5+zboZGdSQ aSo6rvTLuI1/OdtRW7I8f6dzED7wVudOSrM0T3GxZXCkL3ez4mLuBZhGC1SPatkXnUhrafLUekE SBBHtvq9vNSqWL/+tvY1HA9VdlWKQHqXH4sFBYHAZGLyGhlF5Royfl8Gp2CsJDkcVnq+Q1I6pAH Tv+UdyforqS3P75pkkXDk6y9YO4AN3s1gYmDpgmgAb2m2e6aM/Vx3F X-Received: by 2002:a17:90b:5444:b0:36d:81b3:61a1 with SMTP id 98e67ed59e1d1-37d160479a6mr18032176a91.7.1782193656231; Mon, 22 Jun 2026 22:47:36 -0700 (PDT) Received: from hcdev-d520mt2.. (60-250-196-139.hinet-ip.hinet.net. [60.250.196.139]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-37d15df8b8esm11506913a91.16.2026.06.22.22.47.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Jun 2026 22:47:35 -0700 (PDT) From: baneric926@gmail.com X-Google-Original-From: kcfeng0@nuvoton.com To: avifishman70@gmail.com, tmaimon77@gmail.com, tali.perry1@gmail.com, venture@google.com, yuenn@google.com, benjaminfair@google.com, andi.shyti@kernel.org Cc: openbmc@lists.ozlabs.org, linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, kwliu@nuvoton.com, kfting@nuvoton.com, kcfeng0@nuvoton.com Subject: [PATCH v1 1/1] i2c: npcm: unexpected SLVRSTR IRQ in master mode Date: Tue, 23 Jun 2026 13:46:35 +0800 Message-Id: <20260623054635.1214525-2-kcfeng0@nuvoton.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260623054635.1214525-1-kcfeng0@nuvoton.com> References: <20260623054635.1214525-1-kcfeng0@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: Ban Feng SLVRSTR IRQ occurs even when BMC acts as master role only. This case was not handled in the master IRQ handler, resulting in IRQ storming. Handle this condition to prevent the spurious interrupt. Signed-off-by: Ban Feng --- drivers/i2c/busses/i2c-npcm7xx.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index f667a873b81e..02dd8c3ba44b 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c @@ -593,6 +593,7 @@ struct npcm_i2c { u64 nack_cnt; u64 timeout_cnt; u64 tx_complete_cnt; + u64 ab_slvrstr_cnt; bool ber_state; /* Indicate the bus error state */ }; @@ -1709,6 +1710,24 @@ static void npcm_i2c_irq_master_handler_read(struct npcm_i2c *bus) } } +static void npcm_i2c_irq_handle_ab_slvrstr(struct npcm_i2c *bus) +{ + u8 val; + + if (bus->ab_slvrstr_cnt < ULLONG_MAX) + bus->ab_slvrstr_cnt++; + npcm_i2c_clear_tx_fifo(bus); + npcm_i2c_clear_rx_fifo(bus); + iowrite8(0, bus->reg + NPCM_I2CRXF_CTL); + iowrite8(0, bus->reg + NPCM_I2CTXF_CTL); + val = NPCM_I2CFIF_CTS_CLR_FIFO | NPCM_I2CFIF_CTS_SLVRSTR | + NPCM_I2CFIF_CTS_RXF_TXE; + iowrite8(val, bus->reg + NPCM_I2CFIF_CTS); + bus->stop_ind = I2C_BUS_ERR_IND; + npcm_i2c_callback(bus, bus->stop_ind, npcm_i2c_get_index(bus)); + bus->state = I2C_IDLE; +} + static void npcm_i2c_irq_handle_nmatch(struct npcm_i2c *bus) { iowrite8(NPCM_I2CST_NMATCH, bus->reg + NPCM_I2CST); @@ -1777,6 +1796,8 @@ static void npcm_i2c_irq_handle_ber(struct npcm_i2c *bus) if (npcm_i2c_is_master(bus)) { npcm_i2c_master_abort(bus); } else { + /* Clear the FIFO */ + iowrite8(NPCM_I2CFIF_CTS_CLR_FIFO, bus->reg + NPCM_I2CFIF_CTS); bus->ber_state = true; npcm_i2c_clear_master_status(bus); @@ -2237,6 +2258,10 @@ static irqreturn_t npcm_i2c_bus_irq(int irq, void *dev_id) } #endif /* Clear status bits for spurious interrupts */ + if (bus->fifo_use && FIELD_GET(NPCM_I2CFIF_CTS_SLVRSTR, + ioread8(bus->reg + NPCM_I2CFIF_CTS))) { + npcm_i2c_irq_handle_ab_slvrstr(bus); + } npcm_i2c_clear_master_status(bus); return IRQ_HANDLED; @@ -2487,6 +2512,7 @@ static void npcm_i2c_init_debugfs(struct platform_device *pdev, debugfs_create_u64("rec_fail_cnt", 0444, bus->adap.debugfs, &bus->rec_fail_cnt); debugfs_create_u64("timeout_cnt", 0444, bus->adap.debugfs, &bus->timeout_cnt); debugfs_create_u64("tx_complete_cnt", 0444, bus->adap.debugfs, &bus->tx_complete_cnt); + debugfs_create_u64("ab_slvrstr_cnt", 0444, bus->adap.debugfs, &bus->ab_slvrstr_cnt); } static int npcm_i2c_probe_bus(struct platform_device *pdev) -- 2.34.1