From nobody Tue Apr 7 13:47:49 2026 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.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 B48B3392C5A for ; Wed, 25 Feb 2026 10:41:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772016076; cv=none; b=PpWRubAlYJBzc4ZBmwkGNwO5nexy1aV/h6xCJYwlX1psvpYqQHz/DySxuF1qVzxqrZ5HRwHdeFue2f7xBZJDzZLem32vb6aBeAVPQZZxwl1XOogFZhNido/efLIwGzfPphmbFI3twK7sDuIuKpKjg6NUfP+onVaolkT/NtnC8aI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772016076; c=relaxed/simple; bh=p0pJb4wR6PRU+wXa5zMbGWI2UmzpUtuLQnTO26ezUMw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BI2DpxykCus2VVZuMgzccvJKeNi1XheXf1FKCb1UBFGVd1D03Xebf7yCB8zW9i/hj2LVvIdZ686sjWFqg/7Z5XxdTqHVRg/ULgq+iTu2rm3g3c3omA/Tlif45LbKKQ4eccNegs4rUqXbZ6dWIqLR0Wf/PxTh1dBOJPSSH0XFOFg= 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=Znj+e3ib; arc=none smtp.client-ip=209.85.214.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="Znj+e3ib" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2aad1bb5058so64305365ad.0 for ; Wed, 25 Feb 2026 02:41:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772016074; x=1772620874; 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=b5peVG9Q2XYh9oaZWaeVmzNFFF3WeNUswB5+Or4VvBI=; b=Znj+e3ibmYiafoE46A1UNJTQj7VGce5NnLZU3P1BgKRFQ1FtoxzIq9m2DaNHBwAbVh DeOyfAm59JYoYf2XuQ0brXd8hcD+FPuwpG3773yF7I4KuG1Q/xnFwQZZrYOM0E4O6TSw Zcnrma/+0talgzXvef2Mnu9EbP9lkjs0F4JMpsPTjCrxFqTIA4QPHXJNaQwgt5pvLvvA clYTMffTm1WrOIr23R6UJwmBNcieyt6HYNnW2AduINIimMQIPIny/sbmHojDV/QHa6Lx G21izo1o15t4bnO+3OZ1+oK8CMm26THRd590+KbUQHyQIQU6hhMqmbQhsEvE19s053Yh b4aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772016074; x=1772620874; 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=b5peVG9Q2XYh9oaZWaeVmzNFFF3WeNUswB5+Or4VvBI=; b=Ybnr8NmdQ1w0jPXUJFFpNqr6bRi9thFCIlvJmT+5DlTx65ERrXS6DbcDtLiL1Hmbb9 E/nohRWVPHaJWz22B+fVXwq8egGZswFYEBElYeug4QD53+A03AFJM6i3Bfaaos4EtKal N/f0LAs+tsZtXad8rbdJFkNvhqG9GAwh/J0r0EavF1AbOTbTBzpdw8plLY1zDxtiG2++ BvWZn8IC/xOX7n7qSvxpP5qBs3CeVuypNgJDW/Gv0qofxEqZlypmviAOKS2i5DqReJsC a0zWGhy+biqJ5BONMOVQYgBJcRti6shLpJYsHfKd23Qb/41L/sQZ5NecyGAjaasXBv4t NeSA== X-Forwarded-Encrypted: i=1; AJvYcCXx5PnkFRaF1A6hSuwb9kUnW3gBAoa6RsrDyfO1wSqhHM7xvgyxHOcJPxjimM7Zh4u+dulodF8pCyH+YfA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7jCEIDbXXPpXm9A0Kg5Tes89/rg4ZCQsds+3bdSkurrbevYsk CngJ9KOtdlM3jMrdmFaSsgNwuSELNlg33NChexhjt/C89+scQot9edGO X-Gm-Gg: ATEYQzzFBp17WT7AOcw1o/v8scm1savGQnOXBDl1TzHhFmLuMoh4O43M7cB3iUNeVui p5WdceFqgCzY0LVuOXt8OZWA49caPSuNDDDokdg2wZzzRzUtI+Bg5AAAkPYPLJ7JmgjzMONIbn4 T2yGiPFmpqvCrm6457dzPVEnjkH1FKmPO4aX9Kbp+DWljQ2cAqc16ZclrKd812lVDfKU1L+1Cwl RJjhrXkvt1pCxf0smfSyolcUFr6+P1YDsxDc0Ya9aPBCui00iBJPpu9hcZrO1XyKjHEmShLbIgz xEvbd+h2Jlnr7izBMVKUUXcH68at5nqpWNIEn0+EPRojI910k8JmUFmbG4a5OyDgsBP2BVeid40 2hTtXU1Ihdwrloh9Jy6dnAw+n1C13hRlP1wa+4funaNC07/jy+o22fjj7SppUZ6I6Yip/nEVRDk 5iXP0s/R1BUH3IoAjozEdNzA== X-Received: by 2002:a17:903:1aa8:b0:2aa:d1e1:29d5 with SMTP id d9443c01a7336-2ad74556f97mr158162195ad.50.1772016073682; Wed, 25 Feb 2026 02:41:13 -0800 (PST) Received: from localhost ([2001:19f0:ac00:4eb8:5400:5ff:fe30:7df3]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ad74f5dba7sm133070865ad.26.2026.02.25.02.41.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Feb 2026 02:41:13 -0800 (PST) From: Inochi Amaoto To: Eugeniy Paltsev , Vinod Koul , Frank Li , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen Wang , Inochi Amaoto , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Alexander Sverdlin , Longbin Li , Yixun Lan , Ze Huang , "Anton D. Stavinskii" Cc: dmaengine@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, sophgo@lists.linux.dev, linux-riscv@lists.infradead.org, Yixun Lan , Frank Li Subject: [PATCH v4 2/3] dmaengine: dw-axi-dmac: Add support for CV1800B DMA Date: Wed, 25 Feb 2026 18:40:40 +0800 Message-ID: <20260225104042.1138901-3-inochiama@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260225104042.1138901-1-inochiama@gmail.com> References: <20260225104042.1138901-1-inochiama@gmail.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" As the DMA controller on Sophgo CV1800 series SoC only has 8 channels, the SoC provides a dma multiplexer to reuse the DMA channel. However, the dma multiplexer also controls the DMA interrupt multiplexer, which means that the dma multiplexer needs to know the channel number. Allow the driver to use DMA phandle args as the channel number, so the DMA multiplexer can route the DMA interrupt correctly. Signed-off-by: Inochi Amaoto Reviewed-by: Frank Li --- .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 25 ++++++++++++++++--- drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 1 + 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 5d74bc29cf89..ada6dfc9b673 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -50,6 +50,7 @@ #define AXI_DMA_FLAG_HAS_APB_REGS BIT(0) #define AXI_DMA_FLAG_HAS_RESETS BIT(1) #define AXI_DMA_FLAG_USE_CFG2 BIT(2) +#define AXI_DMA_FLAG_ARG0_AS_CHAN BIT(3) =20 static inline void axi_dma_iowrite32(struct axi_dma_chip *chip, u32 reg, u32 val) @@ -1358,16 +1359,27 @@ static int __maybe_unused axi_dma_runtime_resume(st= ruct device *dev) static struct dma_chan *dw_axi_dma_of_xlate(struct of_phandle_args *dma_sp= ec, struct of_dma *ofdma) { + unsigned int handshake =3D dma_spec->args[0]; struct dw_axi_dma *dw =3D ofdma->of_dma_data; - struct axi_dma_chan *chan; + struct axi_dma_chan *chan =3D NULL; struct dma_chan *dchan; =20 - dchan =3D dma_get_any_slave_channel(&dw->dma); + if (dw->hdata->use_handshake_as_channel_number) { + if (handshake >=3D dw->hdata->nr_channels) + return NULL; + + chan =3D &dw->chan[handshake]; + dchan =3D dma_get_slave_channel(&chan->vc.chan); + } else { + dchan =3D dma_get_any_slave_channel(&dw->dma); + } + if (!dchan) return NULL; =20 - chan =3D dchan_to_axi_dma_chan(dchan); - chan->hw_handshake_num =3D dma_spec->args[0]; + if (!chan) + chan =3D dchan_to_axi_dma_chan(dchan); + chan->hw_handshake_num =3D handshake; return dchan; } =20 @@ -1506,6 +1518,8 @@ static int dw_probe(struct platform_device *pdev) return ret; } =20 + chip->dw->hdata->use_handshake_as_channel_number =3D !!(flags & AXI_DMA_F= LAG_ARG0_AS_CHAN); + chip->dw->hdata->use_cfg2 =3D !!(flags & AXI_DMA_FLAG_USE_CFG2); =20 chip->core_clk =3D devm_clk_get(chip->dev, "core-clk"); @@ -1661,6 +1675,9 @@ static const struct of_device_id dw_dma_of_id_table[]= =3D { }, { .compatible =3D "intel,kmb-axi-dma", .data =3D (void *)AXI_DMA_FLAG_HAS_APB_REGS, + }, { + .compatible =3D "sophgo,cv1800b-axi-dma", + .data =3D (void *)AXI_DMA_FLAG_ARG0_AS_CHAN, }, { .compatible =3D "starfive,jh7110-axi-dma", .data =3D (void *)(AXI_DMA_FLAG_HAS_RESETS | AXI_DMA_FLAG_USE_CFG2), diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h b/drivers/dma/dw-axi-dma= c/dw-axi-dmac.h index b842e6a8d90d..67cc199e24d1 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -34,6 +34,7 @@ struct dw_axi_dma_hcfg { bool reg_map_8_channels; bool restrict_axi_burst_len; bool use_cfg2; + bool use_handshake_as_channel_number; }; =20 struct axi_dma_chan { --=20 2.53.0