Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753341AbdIDH7i (ORCPT ); Mon, 4 Sep 2017 03:59:38 -0400 Received: from mail.free-electrons.com ([62.4.15.54]:34745 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751949AbdIDH7g (ORCPT ); Mon, 4 Sep 2017 03:59:36 -0400 Date: Mon, 4 Sep 2017 09:59:24 +0200 From: Maxime Ripard To: Stefan =?iso-8859-1?Q?Br=FCns?= Cc: linux-sunxi@googlegroups.com, devicetree@vger.kernel.org, dmaengine@vger.kernel.org, Vinod Koul , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Chen-Yu Tsai , Rob Herring , Code Kipper , Andre Przywara Subject: Re: [PATCH 02/10] dmaengine: sun6i: Correct burst length field offsets for H3 Message-ID: <20170904075924.jufrqijrtxcqvztd@flea> References: <20170903224100.17893-1-stefan.bruens@rwth-aachen.de> <20170903224100.17893-3-stefan.bruens@rwth-aachen.de> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="xoyxyd4ub5zg7sc5" Content-Disposition: inline In-Reply-To: <20170903224100.17893-3-stefan.bruens@rwth-aachen.de> User-Agent: NeoMutt/20170714 (1.8.3) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3802 Lines: 96 --xoyxyd4ub5zg7sc5 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mon, Sep 04, 2017 at 12:40:53AM +0200, Stefan Br=FCns wrote: > For the H3, the burst lengths field offsets in the channel configuration > register differs from earlier SoC generations. >=20 > Using the A31 register macros actually configured the H3 controller > do to bursts of length 1 always, which although working leads to higher > bus utilisation. >=20 > Signed-off-by: Stefan Br=FCns > --- > drivers/dma/sun6i-dma.c | 28 +++++++++++++++++++++------- > 1 file changed, 21 insertions(+), 7 deletions(-) >=20 > diff --git a/drivers/dma/sun6i-dma.c b/drivers/dma/sun6i-dma.c > index 1d9b3be30d22..f1a139f0102f 100644 > --- a/drivers/dma/sun6i-dma.c > +++ b/drivers/dma/sun6i-dma.c > @@ -68,13 +68,15 @@ > #define DMA_CHAN_CFG_SRC_DRQ(x) ((x) & 0x1f) > #define DMA_CHAN_CFG_SRC_IO_MODE BIT(5) > #define DMA_CHAN_CFG_SRC_LINEAR_MODE (0 << 5) > -#define DMA_CHAN_CFG_SRC_BURST(x) (((x) & 0x3) << 7) > +#define DMA_CHAN_CFG_SRC_BURST_A31(x) (((x) & 0x3) << 7) > +#define DMA_CHAN_CFG_SRC_BURST_H3(x) (((x) & 0x3) << 6) > #define DMA_CHAN_CFG_SRC_WIDTH(x) (((x) & 0x3) << 9) > =20 > #define DMA_CHAN_CFG_DST_DRQ(x) (DMA_CHAN_CFG_SRC_DRQ(x) << 16) > #define DMA_CHAN_CFG_DST_IO_MODE (DMA_CHAN_CFG_SRC_IO_MODE << 16) > #define DMA_CHAN_CFG_DST_LINEAR_MODE (DMA_CHAN_CFG_SRC_LINEAR_MODE << 16) > -#define DMA_CHAN_CFG_DST_BURST(x) (DMA_CHAN_CFG_SRC_BURST(x) << 16) > +#define DMA_CHAN_CFG_DST_BURST_A31(x) (DMA_CHAN_CFG_SRC_BURST_A31(x) << = 16) > +#define DMA_CHAN_CFG_DST_BURST_H3(x) (DMA_CHAN_CFG_SRC_BURST_H3(x) << 16) > #define DMA_CHAN_CFG_DST_WIDTH(x) (DMA_CHAN_CFG_SRC_WIDTH(x) << 16) > =20 > #define DMA_CHAN_CUR_SRC 0x10 > @@ -554,11 +556,17 @@ static int set_config(struct sun6i_dma_dev *sdev, > if (dst_width < 0) > return dst_width; > =20 > - *p_cfg =3D DMA_CHAN_CFG_SRC_BURST(src_burst) | > - DMA_CHAN_CFG_SRC_WIDTH(src_width) | > - DMA_CHAN_CFG_DST_BURST(dst_burst) | > + *p_cfg =3D DMA_CHAN_CFG_SRC_WIDTH(src_width) | > DMA_CHAN_CFG_DST_WIDTH(dst_width); > =20 > + if (sdev->cfg->dmac_variant =3D=3D DMAC_VARIANT_H3) { > + *p_cfg |=3D DMA_CHAN_CFG_SRC_BURST_H3(src_burst) | > + DMA_CHAN_CFG_DST_BURST_H3(dst_burst); > + } else { > + *p_cfg |=3D DMA_CHAN_CFG_SRC_BURST_A31(src_burst) | > + DMA_CHAN_CFG_DST_BURST_A31(dst_burst); > + } > + I guess we have two options to support that properly. We could either have a different function that would generate that register value based on the parameters we have, or duplicate the set_config function entirely, with function pointer stored in the configuration. I think I prefer the former, as it reduces the code duplication. Maxime --=20 Maxime Ripard, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com --xoyxyd4ub5zg7sc5 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIcBAEBAgAGBQJZrQfcAAoJEBx+YmzsjxAgk9EQAKHQmYxeKLZMxPxDuasilkGS 2e4wSQvnMa85Ed84z/694OmZ36r6sxsOo0hhWRCi07KvLzlfZYy3ykWXbjSm77XQ XuTQkLpg06KSdiWdM12V1HjHEL5fkkcm9w4jBLlINPspQA0fOhhL7vnf3hvwmpdT OU8jWdHTfnMt4FIEhwjVb06jlzja42srsPBVNUXOWmxkfz0vgbCimw6l/u+xYiys EidlCFhW+KxygMhelgfd++7Jxgh0toj+9/yl3u5uENgtba2m8NjUGEcVaz4k+BvX h2swypj2R/vVwvEhlsY4M61ui6TLVu7CAd6BrmL4RQHnpYQHOAgfAUHaM7SBKlPv ngfvSOjP62tQWtI8zqW59LIgReLZZBGwhe0T8pIX+KJrGE1VuJ3hHEFjLqgRIkqy nV749IgFgv/oUVZK4ndwa+Yr25g6ac2/KAdQZQ61ZG6C1h5nlFMxGEJdVt3vIQDP k6gvMLCXYFASDH97aOGBY/1f4H/AL68JJ7KCZJ1r6wJ904zW47tl2rdJnxfvKt75 gwMEtkLtyLjju2yy8Sre+VRNy3kyMzkWyL7HaXHWPUjk4fdF3MDL+IjAK74a8b5l ZqnypABJjqn2oQLkcANmelEOfwpZNkefoO7/ZKa/E6jNc5kRhTJPpcyjqWfhXj2A LsGXOsi9Mf8XRs/n3xeP =7xO7 -----END PGP SIGNATURE----- --xoyxyd4ub5zg7sc5--