[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZmCl7LXbdCwJm/wJ@lizhi-Precision-Tower-5810>
Date: Wed, 5 Jun 2024 13:52:44 -0400
From: Frank Li <Frank.li@....com>
To: Dave Stevenson <dave.stevenson@...pberrypi.com>
Cc: Rob Herring <robh@...nel.org>, Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Florian Fainelli <florian.fainelli@...adcom.com>,
Broadcom internal kernel review list <bcm-kernel-feedback-list@...adcom.com>,
Ray Jui <rjui@...adcom.com>, Scott Branden <sbranden@...adcom.com>,
Vinod Koul <vkoul@...nel.org>, Maxime Ripard <mripard@...nel.org>,
Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Thomas Zimmermann <tzimmermann@...e.de>,
David Airlie <airlied@...il.com>, Daniel Vetter <daniel@...ll.ch>,
Ulf Hansson <ulf.hansson@...aro.org>,
Mark Brown <broonie@...nel.org>, Christoph Hellwig <hch@....de>,
Marek Szyprowski <m.szyprowski@...sung.com>,
Robin Murphy <robin.murphy@....com>,
Liam Girdwood <lgirdwood@...il.com>,
Jaroslav Kysela <perex@...ex.cz>, Takashi Iwai <tiwai@...e.com>,
Vladimir Murzin <vladimir.murzin@....com>,
Phil Elwell <phil@...pberrypi.com>,
Stefan Wahren <wahrenst@....net>,
Serge Semin <Sergey.Semin@...kalelectronics.ru>,
devicetree@...r.kernel.org, linux-rpi-kernel@...ts.infradead.org,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
dmaengine@...r.kernel.org, dri-devel@...ts.freedesktop.org,
linux-mmc@...r.kernel.org, linux-spi@...r.kernel.org,
iommu@...ts.linux.dev, linux-sound@...r.kernel.org,
Stefan Wahren <stefan.wahren@...e.com>
Subject: Re: [PATCH 06/18] dmaengine: bcm2835: make address increment
platform independent
On Fri, May 24, 2024 at 07:26:50PM +0100, Dave Stevenson wrote:
> From: Stefan Wahren <stefan.wahren@...e.com>
>
> Actually the criteria to increment source & destination address doesn't
> based on platform specific bits. It's just the DMA transfer direction which
> is translated into the info bits. So introduce two new helper functions
> and get the rid of these platform specifics.
>
Fix increment source & destination address depend on the platform drvdata.
It should be depend on dma_transfer_direction.
look like it is bug fixes. Can you add fixes tag.
> Signed-off-by: Stefan Wahren <wahrenst@....net>
> Signed-off-by: Dave Stevenson <dave.stevenson@...pberrypi.com>
> ---
> drivers/dma/bcm2835-dma.c | 28 ++++++++++++++++++++++------
> 1 file changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c
> index ef452ebb3c15..d6c5a2762a46 100644
> --- a/drivers/dma/bcm2835-dma.c
> +++ b/drivers/dma/bcm2835-dma.c
> @@ -252,6 +252,24 @@ static u32 bcm2835_dma_prepare_cb_extra(struct bcm2835_chan *c,
> return result;
> }
>
> +static inline bool need_src_incr(enum dma_transfer_direction direction)
> +{
> + return direction != DMA_DEV_TO_MEM;
> +}
> +
> +static inline bool need_dst_incr(enum dma_transfer_direction direction)
> +{
> + switch (direction) {
> + case DMA_MEM_TO_MEM:
> + case DMA_DEV_TO_MEM:
> + return true;
> + default:
> + break;
> + }
> +
> + return false;
> +}
> +
> static void bcm2835_dma_free_cb_chain(struct bcm2835_desc *desc)
> {
> size_t i;
> @@ -336,10 +354,8 @@ static inline size_t bcm2835_dma_count_frames_for_sg(
> * @cyclic: it is a cyclic transfer
> * @info: the default info bits to apply per controlblock
> * @frames: number of controlblocks to allocate
> - * @src: the src address to assign (if the S_INC bit is set
> - * in @info, then it gets incremented)
> - * @dst: the dst address to assign (if the D_INC bit is set
> - * in @info, then it gets incremented)
> + * @src: the src address to assign
> + * @dst: the dst address to assign
> * @buf_len: the full buffer length (may also be 0)
> * @period_len: the period length when to apply @finalextrainfo
> * in addition to the last transfer
> @@ -408,9 +424,9 @@ static struct bcm2835_desc *bcm2835_dma_create_cb_chain(
> d->cb_list[frame - 1].cb->next = cb_entry->paddr;
>
> /* update src and dst and length */
> - if (src && (info & BCM2835_DMA_S_INC))
> + if (src && need_src_incr(direction))
> src += control_block->length;
> - if (dst && (info & BCM2835_DMA_D_INC))
> + if (dst && need_dst_incr(direction))
> dst += control_block->length;
>
> /* Length of total transfer */
> --
> 2.34.1
>
Powered by blists - more mailing lists