Thread (32 messages) 32 messages, 10 authors, 2021-11-16

Re: [PATCH 08/11] dmaengine: xilinx_dpdma: stop using slave_id field

From: Arnd Bergmann <arnd@kernel.org>
Date: 2021-11-15 12:38:35
Also in: alsa-devel, dmaengine, dri-devel, linux-arm-msm, linux-mmc, linux-serial, linux-spi, linux-staging, linux-tegra, lkml

On Mon, Nov 15, 2021 at 12:49 PM Laurent Pinchart
[off-list ref] wrote:
On Mon, Nov 15, 2021 at 11:21:30AM +0100, Arnd Bergmann wrote:
quoted
On Mon, Nov 15, 2021 at 10:14 AM Laurent Pinchart wrote:
quoted
On Mon, Nov 15, 2021 at 09:54:00AM +0100, Arnd Bergmann wrote:
quoted
@@ -1285,11 +1287,13 @@ static int xilinx_dpdma_config(struct dma_chan *dchan,
      spin_lock_irqsave(&chan->lock, flags);

      /*
-      * Abuse the slave_id to indicate that the channel is part of a video
-      * group.
+      * Abuse the peripheral_config to indicate that the channel is part
Is it still an abuse, or is this now the right way to pass custom data
to the DMA engine driver ?
It doesn't make the driver any more portable, but it's now being
more explicit about it. As far as I can tell, this is the best way
to pass data that cannot be expressed through the regular interfaces
in DT and the dmaengine API.

Ideally there would be a generic way to pass this flag, but I couldn't
figure out what this is actually doing, or whether there is a better
way. Maybe Vinod has an idea.
I don't think we need a generic API in this case. The DMA engine is
specific to the display device, I don't foresee a need to mix-n-match.

Right. I wonder if there is even a point in using the dmaengine API
in that case, I think for other single-purpose drivers we tend to just
integrate the functionality in the client driver. No point changing this
now of course, but it does feel odd.

From my earlier reading of the driver, my impression was that this
is just a memory-to-memory device, so it could be used that way
as well, but does need a flag when working on the video memory.
I couldn't quite make sense of that though.
quoted
        /*
         * Use the peripheral_config to indicate that the channel is part
         * of a video group. This requires matching use of the custom
         * structure in each driver.
         */
        pconfig = config->peripheral_config;
        if (WARN_ON(config->peripheral_size != 0 &&
                    config->peripheral_size != sizeof(*pconfig)))
                return -EINVAL;
How about

        if (WARN_ON(config->peripheral_config &&
                    config->peripheral_size != sizeof(*pconfig)))
quoted
        spin_lock_irqsave(&chan->lock, flags);
        if (chan->id <= ZYNQMP_DPDMA_VIDEO2 &&
            config->peripheral_size == sizeof(*pconfig))
And here you can test pconfig != NULL.
Good idea. Changed now, using 'if (pconfig)' without the '!= NULL'
in both expressions.

        Arnd

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help