From nobody Sun Feb 8 12:31:16 2026 Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) (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 432C254739 for ; Thu, 29 Jan 2026 02:20:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769653245; cv=none; b=lWw57Zj2gKRmvFczJqS87ZpQ2K27BzB6odbAQnk032MCG6rdfj0XACwsMqCHlzKRGqugrlbeNklIGMtLAOYTr0zUHLqV3GgyQ1v5hzN8B2SDfIe46pCvM9X2wSY0xFLvt9/UA/HSOCz71sDn+jXkLiD4FOFU9dLjBq8gIJfyZQg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769653245; c=relaxed/simple; bh=akAGpYF6DuML8vHXHbpzbebgSAUmle/Ix9jc+NKGTWQ=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=OcorRXva5aCejCSMDP0c5ktNM6kieBkzIWDE8togYdKayO5g9P2pDQF2vvqFmBGNMIVSO+2+L27urU6r1lMn2KQaE2/oK1YT/hOPzfNgWjq95F/PRAfxlW9ij+WBF8HLcCkT/4B1bS2wLnJO8k6mFXVIk6mGA1TDp8P9TopS+H4= 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=ER3+iZvw; arc=none smtp.client-ip=209.85.215.177 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="ER3+iZvw" Received: by mail-pg1-f177.google.com with SMTP id 41be03b00d2f7-c5513f598c0so173646a12.0 for ; Wed, 28 Jan 2026 18:20:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769653243; x=1770258043; 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=fwOZDjfjI031eii7fM+m/4XsJAh9ZPIgylxLjcb6rlw=; b=ER3+iZvw8r0cmXYBRITnpOanF/jr0xPQm8+bmMGE5Nx9jycIUqIay6o0f7D01DsDNF Arw6dLuYg23WsWjFeIGl1iIKzc6YQhcd3ziTnOCC12/l5hlMlj2ePIpUQRCAKPBSmLo8 sgMOb8dbEWotk97XCDy2TnSXnh8n7ITzEqkU73opHIU7Q1VEjwIBPTDk5CEg97i29NQb mt86o0TwPaau92ysw02M9OHTATp/uMcyBDVlbqn/KSmkWvK3NWuSIwTILrUfUxINfjHq RjiupUlxGODodk5vN/rkvN5IyLZytd2dCkaZh0r6Ij5QHn01b1UPqlqu8A3kxIgOcy4b uutQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769653243; x=1770258043; 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=fwOZDjfjI031eii7fM+m/4XsJAh9ZPIgylxLjcb6rlw=; b=aUD0W2mNd2Ftow09mWjV1Br1qfJ9M/r8q2C6cg0Y7CO8UkJFWZCPL3nPw/wo/gOpx7 TQMXf3IzU3tCk4m+wMy8llsCKUogp7/DV3K/lIaG3oUemjL1FJ9HgbFDJlDq7rNzCTLE zSYDXCRnVq362EXBPX5HgUpYOM5iyiETt48WAq9VeLa3xt4uWEtKIiLAWmJ0ySXUEo47 hit0zpQrbRYhsdkatFXDbUBuWkH66NIWlCyS1We6Yb2UixJsjM7AUuKgSfEV3Hm2qEyn MPkBPomLuff2Itcg+F2ZBFD+R8MZrgCe2TUjn9auVBxFqMS+89MH1doPpmhxpFufyrWs FbLA== X-Forwarded-Encrypted: i=1; AJvYcCVSIOwaoH/kNSz39SIncHLF4to46Dv87172HjBvdJvh6gnxU4hpJt2SuEmTOxp/fh/zeJ1Wino2APbSzF4=@vger.kernel.org X-Gm-Message-State: AOJu0YyZMvm5m4N5wW9ja4LD+l/KtEV/zDw6BByQCxWCTCZ/+wMe4oTl gkdRid2mf7NjojFe+SMwOCO2o4miH4BQOYU1uzkFVwWZeUUVqMEYwQ7potIEodjc X-Gm-Gg: AZuq6aIdAmGdau8jM8o8IBQM0yCW1OHifwDoZRJ8u8jpSI9cITcN2VYwHSXs1eCeEiZ /xvom+oWjdgXMC1FhBaBePhnJmW2fMu/COipjE57AO/b1L+nuV6HKi4YS8AMuYiCljYl3ikSr+A LLk2P0BRtt4PvGxaSZ/v0QiR8vf4GGrSLj3RdZpHiL6oQNEc15pJfWMpMtxVMzD92Jtlk1Xj5gN 6FgCTMy5Yq2hqD4ykaXFwNh/rMyAKzw3hu5d3O/YA8S9DhdqZkYltmCpFnuZJ8sw8jKQXUkuens MNpzDKpgoNCZyGTSOydXyEPKeWZbJLMHQ4LeOFp/dKrFq9kA/aDkAj1gylRIQf/tFIbayvhMYfe lCPydhA/mHdvewlGQA9eKvql0wSHiCyfevBZdh6SxFEfLtrqUcgNijAuCXR8tyyYhVazqHm1Hu9 oIJeGVukdT+FLcX61LGWY5xH4uLe3XnMpAYnI= X-Received: by 2002:a05:6a21:6b0d:b0:364:14f3:22a7 with SMTP id adf61e73a8af0-38ec640647amr5947445637.42.1769653243506; Wed, 28 Jan 2026 18:20:43 -0800 (PST) Received: from localhost.localdomain ([183.223.93.164]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c642aaecd19sm3346809a12.29.2026.01.28.18.20.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Jan 2026 18:20:42 -0800 (PST) From: Shenghui Shi X-Google-Original-From: Shenghui Shi To: Frank.Li@nxp.com, vkoul@kernel.org Cc: manivannan.sadhasivam@linaro.org, dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, Shenghui Shi Subject: [PATCH v2] dmaengine: dw-edma: fix MSI data programming for multi-IRQ case Date: Thu, 29 Jan 2026 10:20:24 +0800 Message-ID: <20260129022024.3995-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 Fixes: e63d79d1ff04 ("dmaengine: dw-edma: Add Synopsys DesignWare eDMA IP c= ore driver") 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