* [PATCH 1/1] rapidio/tsi721: move dma_device from rio_mport to tsi721_device
@ 2026-11-06 21:41 Frank.Li
2026-11-06 21:50 ` sashiko-bot
0 siblings, 1 reply; 2+ messages in thread
From: Frank.Li @ 2026-11-06 21:41 UTC (permalink / raw)
To: Matt Porter, Alexandre Bounine, Frank Li, Takashi Sakamoto,
Danilo Krummrich, Uwe Kleine-König (The Capable Hub),
open list
Cc: imx
From: Frank Li <Frank.Li@nxp.com>
The embedded struct dma_device in struct rio_mport is only used by the
tsi721 driver. Move it into struct tsi721_device where it belongs, and
replace it with a pointer in struct rio_mport so that the generic RapidIO
code (rio_chan_filter) can still compare channel ownership without a
driver-specific container_of.
Prepare move struct dma_device to private.
Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
build test only
combine with other on going reviewed rio patches. drivers/rapidio can
build with allyesconfig after move struct dma_device to
drivers/dmaengine.h
---
drivers/rapidio/devices/tsi721.h | 1 +
drivers/rapidio/devices/tsi721_dma.c | 44 ++++++++++++++--------------
drivers/rapidio/rio.c | 2 +-
include/linux/rio.h | 8 ++---
4 files changed, 26 insertions(+), 29 deletions(-)
diff --git a/drivers/rapidio/devices/tsi721.h b/drivers/rapidio/devices/tsi721.h
index 4f996ce627254..2df3955581af3 100644
--- a/drivers/rapidio/devices/tsi721.h
+++ b/drivers/rapidio/devices/tsi721.h
@@ -886,6 +886,7 @@ struct tsi721_device {
u32 pw_discard_count;
/* BDMA Engine */
+ struct dma_device dma;
struct tsi721_bdma_maint mdma; /* Maintenance rd/wr request channel */
#ifdef CONFIG_RAPIDIO_DMA_ENGINE
diff --git a/drivers/rapidio/devices/tsi721_dma.c b/drivers/rapidio/devices/tsi721_dma.c
index 52749f1d2a11a..09faaf2f334cc 100644
--- a/drivers/rapidio/devices/tsi721_dma.c
+++ b/drivers/rapidio/devices/tsi721_dma.c
@@ -51,7 +51,7 @@ static inline struct tsi721_bdma_chan *to_tsi721_chan(struct dma_chan *chan)
static inline struct tsi721_device *to_tsi721(struct dma_device *ddev)
{
- return container_of(ddev, struct rio_mport, dma)->priv;
+ return container_of(ddev, struct tsi721_device, dma);
}
static inline
@@ -437,7 +437,7 @@ static int tsi721_submit_sg(struct tsi721_tx_desc *desc)
rio_addr = desc->rio_addr;
next_addr = -1;
bcount = 0;
- sys_size = dma_to_mport(dchan->device)->sys_size;
+ sys_size = to_tsi721(dchan->device)->mport.sys_size;
rd_idx = ioread32(bdma_chan->regs + TSI721_DMAC_DRDCNT);
rd_idx %= (bdma_chan->bd_num + 1);
@@ -965,9 +965,7 @@ int tsi721_register_dma(struct tsi721_device *priv)
int i;
int nr_channels = 0;
int err;
- struct rio_mport *mport = &priv->mport;
-
- INIT_LIST_HEAD(&mport->dma.channels);
+ INIT_LIST_HEAD(&priv->dma.channels);
for (i = 0; i < TSI721_DMA_MAXCH; i++) {
struct tsi721_bdma_chan *bdma_chan = &priv->bdma[i];
@@ -977,7 +975,7 @@ int tsi721_register_dma(struct tsi721_device *priv)
bdma_chan->regs = priv->regs + TSI721_DMAC_BASE(i);
- bdma_chan->dchan.device = &mport->dma;
+ bdma_chan->dchan.device = &priv->dma;
bdma_chan->dchan.cookie = 1;
bdma_chan->dchan.chan_id = i;
bdma_chan->id = i;
@@ -992,40 +990,42 @@ int tsi721_register_dma(struct tsi721_device *priv)
tasklet_init(&bdma_chan->tasklet, tsi721_dma_tasklet,
(unsigned long)bdma_chan);
list_add_tail(&bdma_chan->dchan.device_node,
- &mport->dma.channels);
+ &priv->dma.channels);
nr_channels++;
}
- mport->dma.chancnt = nr_channels;
- dma_cap_zero(mport->dma.cap_mask);
- dma_cap_set(DMA_PRIVATE, mport->dma.cap_mask);
- dma_cap_set(DMA_SLAVE, mport->dma.cap_mask);
+ priv->dma.chancnt = nr_channels;
+ dma_cap_zero(priv->dma.cap_mask);
+ dma_cap_set(DMA_PRIVATE, priv->dma.cap_mask);
+ dma_cap_set(DMA_SLAVE, priv->dma.cap_mask);
- mport->dma.dev = &priv->pdev->dev;
- mport->dma.device_alloc_chan_resources = tsi721_alloc_chan_resources;
- mport->dma.device_free_chan_resources = tsi721_free_chan_resources;
- mport->dma.device_tx_status = tsi721_tx_status;
- mport->dma.device_issue_pending = tsi721_issue_pending;
- mport->dma.device_prep_slave_sg = tsi721_prep_rio_sg;
- mport->dma.device_terminate_all = tsi721_terminate_all;
+ priv->dma.dev = &priv->pdev->dev;
+ priv->dma.device_alloc_chan_resources = tsi721_alloc_chan_resources;
+ priv->dma.device_free_chan_resources = tsi721_free_chan_resources;
+ priv->dma.device_tx_status = tsi721_tx_status;
+ priv->dma.device_issue_pending = tsi721_issue_pending;
+ priv->dma.device_prep_slave_sg = tsi721_prep_rio_sg;
+ priv->dma.device_terminate_all = tsi721_terminate_all;
- err = dma_async_device_register(&mport->dma);
+ err = dma_async_device_register(&priv->dma);
if (err)
tsi_err(&priv->pdev->dev, "Failed to register DMA device");
+ else
+ priv->mport.dma = &priv->dma;
return err;
}
void tsi721_unregister_dma(struct tsi721_device *priv)
{
- struct rio_mport *mport = &priv->mport;
struct dma_chan *chan, *_c;
struct tsi721_bdma_chan *bdma_chan;
tsi721_dma_stop_all(priv);
- dma_async_device_unregister(&mport->dma);
+ priv->mport.dma = NULL;
+ dma_async_device_unregister(&priv->dma);
- list_for_each_entry_safe(chan, _c, &mport->dma.channels,
+ list_for_each_entry_safe(chan, _c, &priv->dma.channels,
device_node) {
bdma_chan = to_tsi721_chan(chan);
if (bdma_chan->active) {
diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c
index 3ac83721c0e94..d2dbc9d94cc51 100644
--- a/drivers/rapidio/rio.c
+++ b/drivers/rapidio/rio.c
@@ -1754,7 +1754,7 @@ static bool rio_chan_filter(struct dma_chan *chan, void *arg)
struct rio_mport *mport = arg;
/* Check that DMA device belongs to the right MPORT */
- return mport == container_of(chan->device, struct rio_mport, dma);
+ return mport->dma == chan->device;
}
/**
diff --git a/include/linux/rio.h b/include/linux/rio.h
index f42379775ce8f..98ded5db5a2a1 100644
--- a/include/linux/rio.h
+++ b/include/linux/rio.h
@@ -257,7 +257,7 @@ struct rio_dbell {
* @name: Port name string
* @dev: device structure associated with an mport
* @priv: Master port private data
- * @dma: DMA device associated with mport
+ * @dma: DMA device pointer associated with mport
* @nscan: RapidIO network enumeration/discovery operations
* @state: mport device state
* @pwe_refcnt: port-write enable ref counter to track enable/disable requests
@@ -288,7 +288,7 @@ struct rio_mport {
struct device dev;
void *priv; /* Master port private data */
#ifdef CONFIG_RAPIDIO_DMA_ENGINE
- struct dma_device dma;
+ struct dma_device *dma; /* associated DMA device, if any */
#endif
struct rio_scan *nscan;
atomic_t state;
@@ -513,10 +513,6 @@ struct rio_dma_data {
enum rio_write_type wr_type; /* preferred RIO write operation type */
};
-static inline struct rio_mport *dma_to_mport(struct dma_device *ddev)
-{
- return container_of(ddev, struct rio_mport, dma);
-}
#endif /* CONFIG_RAPIDIO_DMA_ENGINE */
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 1/1] rapidio/tsi721: move dma_device from rio_mport to tsi721_device
2026-11-06 21:41 [PATCH 1/1] rapidio/tsi721: move dma_device from rio_mport to tsi721_device Frank.Li
@ 2026-11-06 21:50 ` sashiko-bot
0 siblings, 0 replies; 2+ messages in thread
From: sashiko-bot @ 2026-11-06 21:50 UTC (permalink / raw)
To: Frank.Li; +Cc: imx, Frank.Li
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Medium] rapidio/tsi721: build failure in struct tsi721_device when
CONFIG_RAPIDIO_DMA_ENGINE=n
--
commit 39ba91a98facae7b37c8dcc0ceb0e150ad9bee9a
Author: Frank Li <Frank.Li@nxp.com>
rapidio/tsi721: move dma_device from rio_mport to tsi721_device
This commit moves the embedded struct dma_device from struct rio_mport into
struct tsi721_device and replaces the mport member with a pointer.
> diff --git a/drivers/rapidio/devices/tsi721.h b/drivers/rapidio/devices/tsi721.h
> index 4f996ce627254..2df3955581af3 100644
> --- a/drivers/rapidio/devices/tsi721.h
> +++ b/drivers/rapidio/devices/tsi721.h
> @@ -886,6 +886,7 @@ struct tsi721_device {
> u32 pw_discard_count;
>
> /* BDMA Engine */
> + struct dma_device dma;
> struct tsi721_bdma_maint mdma; /* Maintenance rd/wr request channel */
>
> #ifdef CONFIG_RAPIDIO_DMA_ENGINE
[Severity: Medium]
Does embedding struct dma_device dma outside the #ifdef
CONFIG_RAPIDIO_DMA_ENGINE block break the build when
CONFIG_RAPIDIO_DMA_ENGINE is disabled?
include/linux/rio.h only includes linux/dmaengine.h when
CONFIG_RAPIDIO_DMA_ENGINE is enabled, and neither tsi721.c nor tsi721.h
includes it directly, so compiling drivers/rapidio/devices/tsi721.c fails
with an incomplete type error for field dma.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261106214132.4172049-1-Frank.Li@oss.nxp.com?part=1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-11-06 21:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-06 21:41 [PATCH 1/1] rapidio/tsi721: move dma_device from rio_mport to tsi721_device Frank.Li
2026-11-06 21:50 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox