From nobody Sun Feb 8 12:13:47 2026 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (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 89FD736EAB4 for ; Wed, 28 Jan 2026 17:46:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769622372; cv=none; b=YB/ZcBrXL0Y1MOk67kZpUboM3zFqMcXN8rDIMJRPdfZG14GtrcRBPEoC7fui8wdxrAzc/Cl3tlltlJjLjuVDQq0iwwAkQOLy2/3N38E5+J5pNEC2B3OqgVds3ccAw4WDqc3xk/tdc4WkwwJoDs+Djx0xA+j2IgjrKY5YKeVYMBc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769622372; c=relaxed/simple; bh=GZQASIorF+d2e8n7uK82rQVsSClAj+OH+BfLkjJH3g4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=VLD6PY+mMeJPJX7L8lZoKRsOjm3/M93SHsI7zizCpgQcjAdz1P+Jpjyw3Qssg2obOh/HtmK3HkN6afepvD/N68iVXIjwCOoluFYeojuPHd14bFPdcJai3j4fYIcbehSU/xPXcB7HonoAB+Ii0KN2X9jYmRGZqE3m58TnGCqGBrY= 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=Pvj8gA61; arc=none smtp.client-ip=209.85.214.181 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="Pvj8gA61" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-2a0ac29fca1so220845ad.2 for ; Wed, 28 Jan 2026 09:46:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769622371; x=1770227171; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=iStp3p9u6vHuRquvuUjNe1DnkCcopXtlaiCjEmU2lPU=; b=Pvj8gA619dsJ/2VoF1M7GCxxSWwPUKIwCaG5mRO/k9F3H8LrJAK7ZEYyB2t/kCWby8 PEQlR3uRXlx95m12Zu1dg2nMKPuIukAgPV6dcU7cbidmj8vEW9+a9fO9+pLrp/42vemM afTL9JJeggONMwlr/p8ZkWwdyUf0eYrdh4vnRwqYN3+fOYsz1Pg3k46WnsDHB35tza3G YDhbSPoZMNxWH+yOLNzQuXIxT9tOJn7PMQLGaXSghG1uQrXz/j1LnxoTv9WjMqZyfJgq ON1ugJvKsXZ9zFZwDzuGAWIBMMFRpynY9AHDQ8WF/8z9ZmDQbrz/2Iu8KDcRNx9jECvx XnIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769622371; x=1770227171; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=iStp3p9u6vHuRquvuUjNe1DnkCcopXtlaiCjEmU2lPU=; b=ZNv0ubNBp/PE2/s74x606s/gPkjsq0vOzUkWD1uie8YZoC0yQ52ZBUxbghWfp7WNhl bNB8bWpbaFT2qsf9LZWDsROlZ24zl7PaJcIElbf7m5OAjVohOrgU01PTfdcbYgjGR8EM n4Y2QUL+DYD6cIs7glYfIEpTSEH9E2V8E1yO4Pd2X8nihbMLKFo3n6aN88WoLY+ZkaEP 1WtX5AP98ccaC/dUZP7xxW+O5qYxdqIXJzoQtqGkUUwR4CGo7LddiJ+qSP8uaYuBoPZp zvJLu91JuCYutsLACA0hdsHsT+UtoeXg5n1y0vCCyTkkhoHZ7lf01OaKFwu9q8mWbU3N Hceg== X-Forwarded-Encrypted: i=1; AJvYcCV91Ncfx31xx89vep29ysbfdEkx9ZShZdmrd+6/HdVIav0i4Fl94q83kd1wXmnjPkiNAaVJGZZ3GB8T4K8=@vger.kernel.org X-Gm-Message-State: AOJu0YzuiJo8+fq3HLUpgFWnmLRSPFYVUemVoi8w13XOECIifji2t1ft 7KzdhYk2wIMYywvsKA6IM9GgOgi18atItmu2cazjfNZOWqjO/B1WBXjl X-Gm-Gg: AZuq6aJvuQdzlw2Z1Tl2ra2EnBt//bvcH7jSI7Y/zPs8MN7goaPTFgmIgvf+57iSJzv 2UulUoUEI3/Pq68BpJVsiDHwiKWsi1zv9Kytp79kgPccEB26FPAIx9mxm+HSXVlqR9yRyh/qbUe M3lQcVoKTQ6XYRla5enST9tnMtSbFZtCjcRI4L4LcQ2RK+c9pt0XINgKU778dtIST6/E6G/nRwp iMOUnV372qDGmfnbkcjL+KEh1IntRiKUawtMMEUicHLdwgpOqA5MfN1v8JVdUxkEtPunKCcn9rY jSnjy2gjBhzuDmHjjsaWAtdpq6epvrtCy9KChZgv4fg5uQ43vnZpEtFqPKMjVAWguXTdj98u02j FbvRQm7js8Jll1mBKPZz4x4SJ4z0Qqyt9ExHvRj4nB6UehdDVVt2GPJadre4OlSOpD5/7wCERAg hWlLrR0H1WItF80lIGJZO3Bk7mdkm5y7J8wNQ= X-Received: by 2002:a17:903:90f:b0:29d:975a:2123 with SMTP id d9443c01a7336-2a870e24a22mr51461255ad.60.1769622370699; Wed, 28 Jan 2026 09:46:10 -0800 (PST) Received: from localhost.localdomain ([183.223.93.164]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a88b414f7csm28169275ad.35.2026.01.28.09.46.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Jan 2026 09:46:10 -0800 (PST) From: Shenghui Shi X-Google-Original-From: Shenghui Shi To: vkoul@kernel.org Cc: manivannan.sadhasivam@linaro.org, gustavo.pimentel@synopsys.com, lpieralisi@kernel.org, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Shenghui Shi Subject: [PATCH] dmaengine: dw-edma: fix MSI data programming for multi-IRQ case Date: Thu, 29 Jan 2026 01:45:52 +0800 Message-ID: <20260128174552.3710-1-brody.shi@m2semi.com> X-Mailer: git-send-email 2.49.0.windows.1 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" When using MSI (not MSI-X) with multiple IRQs, the MSI data value must be unique per vector to ensure correct interrupt delivery. Currently, the driver fails to increment the MSI data per vector, causing interrupts to be misrouted. Fix this by caching the base MSI data and adjusting each vector's data accordingly during IRQ setup. This issue was reproduced and tested on: - Device: [20e0:2502] (rev 01) - Kernel: 6.8.0-90-generic Signed-off-by: Shenghui Shi --- drivers/dma/dw-edma/dw-edma-core.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 8e5f7defa..516770388 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -844,11 +844,15 @@ static int dw_edma_irq_request(struct dw_edma *dw, { struct dw_edma_chip *chip =3D dw->chip; struct device *dev =3D dw->chip->dev; + struct msi_desc *msi_desc; u32 wr_mask =3D 1; u32 rd_mask =3D 1; int i, err =3D 0; u32 ch_cnt; int irq; + u16 msi_base_data =3D 0; + bool msi_base_valid =3D false; + bool is_msix =3D false; =20 ch_cnt =3D dw->wr_ch_cnt + dw->rd_ch_cnt; =20 @@ -869,8 +873,15 @@ static int dw_edma_irq_request(struct dw_edma *dw, return err; } =20 - if (irq_get_msi_desc(irq)) + if (irq_get_msi_desc(irq)) { get_cached_msi_msg(irq, &dw->irq[0].msi); + msi_desc =3D irq_get_msi_desc(irq); + is_msix =3D msi_desc && msi_desc->pci.msi_attrib.is_msix; + if (!is_msix) { + msi_base_data =3D dw->irq[0].msi.data; + msi_base_valid =3D true; + } + } =20 dw->nr_irqs =3D 1; } else { @@ -896,8 +907,18 @@ static int dw_edma_irq_request(struct dw_edma *dw, if (err) goto err_irq_free; =20 - if (irq_get_msi_desc(irq)) + if (irq_get_msi_desc(irq)) { get_cached_msi_msg(irq, &dw->irq[i].msi); + msi_desc =3D irq_get_msi_desc(irq); + is_msix =3D msi_desc && msi_desc->pci.msi_attrib.is_msix; + if (!is_msix) { + if (!msi_base_valid) { + msi_base_data =3D dw->irq[i].msi.data; + msi_base_valid =3D true; + } + dw->irq[i].msi.data =3D (u16)(msi_base_data + i); + } + } } =20 dw->nr_irqs =3D i; --=20 2.49.0.windows.1