linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/18] ARM: s3c64xx: Let amba-pl08x driver handle DMA
@ 2013-08-11 17:59 Tomasz Figa
  2013-08-11 17:59 ` [PATCH 01/18] dmaengine: PL08x: Refactor pl08x_getbytes_chan() to lower indentation Tomasz Figa
                   ` (19 more replies)
  0 siblings, 20 replies; 45+ messages in thread
From: Tomasz Figa @ 2013-08-11 17:59 UTC (permalink / raw)
  To: linux-samsung-soc
  Cc: linux-arm-kernel, alsa-devel, linux-kernel, linux-spi,
	Dan Williams, Jaroslav Kysela, Kukjin Kim, Liam Girdwood,
	Linus Walleij, Mark Brown, Mike Turquette, Padmavathi Venna,
	Russell King, Sangbeom Kim, Takashi Iwai, Vinod Koul,
	Tomasz Figa

This is first non-RFC version of my patches extending support of
amba-pl08x DMA engine driver to PL080S DMA engine (PL080 modified by
Samsung) found in Samsung S3C64xx SoCs.

Due to changes scattered across different areas of kernel, patches are
based on merged 3 branches:
 - for-next of Kgene's Samsung tree,
 - clk-next of Mike's clock tree,
 - next of Vinod's slave DMA tree.

To ease testing I have prepared a branch in my private tree for anyone
willing to check the patches out:
	git://github.com/tom3q/linux.git v3.12-pl080

Dependencies (already applied in my branch):
 - for patches 14 and 16 - CCF-based clock driver for s3c64xx.
 
Some of the patches not related to the amba-pl08x driver itself
can be likely applied into appropriate trees separately, namely:
 - 09/18 - ASoC: Samsung: Do not queue cyclic buffers multiple times,
 - 14/18 - clk: samsung: s3c64xx: Add aliases for DMA clocks.
 
After patch 14/18, both old and new DMA drivers can be supported on
S3C64xx, depending on Kconfig options. Patches 15-18 remove the old driver
leaving support only for the generic pl08x driver. Feel free to drop those
patches for now if we want more testing, but I don't suspect any problems.

On S3C64xx-based Mini6410 and SMDK6410 boards, with I2S audio
playback and capture (including full duplex operation) and also SPI
using spidev:

Tested-by: Tomasz Figa <tomasz.figa@gmail.com>

Changes since RFC v2:
 - Added clkdev lookups to old clock driver.
 - Added patches removing the old DMA driver and any remaining code
   needed by it.
 - Fixed DMA support for SPI.
 - Added a word about PL080S to amba-pl08x.c file header.
 - Changed definition of LLI words from enums to macros.
 - Extended debugging messages to handle PL080S variant as well.
 - Little cleanup of LLI dumping code.
 - Added check for peripheral flow control, which is unsupported by
   PL080S to dma_set_runtime_config.
 - Corrected transfer size mask of PL080S.

Changes since RFC v1:
 - Returned to original way of storing quirks as booleans, as suggested
   by Russell, Linus and Arnd.
 - Added reg_config field to pl08x_phy_chan struct, which stores
   variant-specific address of channel config register, as suggested
   by Russell.
 - Simplified handling of extended maximum transfer size of PL080S
   (no more conditional passing of 0 as length to pl08x_cctl_bits()).
 - Reworked LLI handling in the driver to stop casting arbitrary memory
   to a struct and allow different word count of LLI entry, as suggested
   by Linus.
 - Removed AMBA ID override from S3C64xx PL080 initialization code.
 - Fixed brokenness of Samsung DMA wrapper API, which caused cyclic buffers
   to be queued multiple times when DMA engine is used.
 - Included patch adding clock aliases for DMA engines (depends on
   Common Clock Framework driver for S3C64xx).
 - Fixed several minor stylistic issues.
 
For reference, here is the original description of the series:

One of the biggest roadblocks on the way of S3C64xx to DeviceTree support
is its DMA driver, which is completely platform-specific and provides
private API (s3c-dma), not even saying that its design is completely
against multiplatform-awareness.

The DMA controller present on this SoC series is a custom variant
of ARM PrimeCell PL080 modified by Samsung to add some extra features.
It is mostly compatible with original PL080, except:
 - CH_CONTROL2 register is added between CH_CONTROL and CH_CONFIG,
 - offset of CH_CONFIG register is different,
 - transfer size field is moved from CH_CONTROL to CH_CONTROL2,
 - transfer size field is extended to 24 bits, allowing much bigger
     single transfer,
 - LLI consists of one more word, to account for CH_CONTROL2 register.

Since all the rest is fully compatible with standard PL080 there is no
point in having separate driver just for this single variant, so I decided
to look into adding support for it to the amba-pl08x driver.

There was already some attempt to achieve this before, but this was before
Russel's big rework of the driver to use virtual channels, making the old
patches being not much of use.

This RFC series is a proof of concept that I managed to make during last
days of hacking. Except one patch adding clkdev lookup to clock driver
(which is being replaced with a CCF-compliant driver ATM), this is enough
to get memcpy and slave transfers to work on S3C64xx.

I have tested this on Mini6410 and SMDK6410 boards using dmatest for
memcpy and Samsung I2S with madplay/aplay for slave transfers.
Unfortunately I do not have access to other platforms with PL08x so
I could not test for any regressions introduced on them.

Credits for two patches go to Alban Bedel, who made a series fixing this
driver to make it usable with audio drivers. I rebased his patches on top
of mine and corrected coding style a bit.

OK, that's all. Any comments are welcome. Feel free to start throwing eggs
and tomatoes if you find this awful, but I won't be upset if I get some
Tested-by or Acked-by as well. ;)

Alban Bedel (2):
  dmaengine: PL08x: Fix reading the byte count in cctl
  dmaengine: PL08x: Add cyclic transfer support

Tomasz Figa (16):
  dmaengine: PL08x: Refactor pl08x_getbytes_chan() to lower indentation
  dmaengine: PL08x: Add support for different offset of CONFIG register
  dmaengine: PL08x: Rework LLI handling to be less fragile
  dmaengine: PL08x: Move LLI dumping code into separate function
  dmaengine: PL08x: Add support for PL080S variant
  dmaengine: PL08x: Add support for different maximum transfer size
  ASoC: Samsung: Do not queue cyclic buffers multiple times
  spi: s3c64xx: Do not require legacy DMA API in case of S3C64XX
  ASoC: Samsung: Do not require legacy DMA API in case of S3C64XX
  ARM: s3c64xx: Add support for DMA using generic amba-pl08x driver
  ARM: s3c64xx: clock: Add clkdev lookup for DMA clocks
  clk: samsung: s3c64xx: Add aliases for DMA clocks
  ARM: s3c64xx: Remove legacy DMA driver
  clk: samsung: s3c64xx: Remove clock aliases of old DMA driver
  spi: s3c64xx: Always select S3C64XX_PL080 when ARCH_S3C64XX is enabled
  ASoC: Samsung: Always select S3C64XX_PL080 when ARCH_S3C64XX is
    enabled

 arch/arm/Kconfig                         |   1 +
 arch/arm/mach-s3c64xx/Kconfig            |   7 +-
 arch/arm/mach-s3c64xx/Makefile           |   2 +-
 arch/arm/mach-s3c64xx/clock.c            |  28 +-
 arch/arm/mach-s3c64xx/common.h           |   5 +
 arch/arm/mach-s3c64xx/dma.c              | 753 -------------------------------
 arch/arm/mach-s3c64xx/include/mach/dma.h | 144 ++----
 arch/arm/mach-s3c64xx/pl080.c            | 244 ++++++++++
 arch/arm/plat-samsung/devs.c             |   6 +-
 arch/arm/plat-samsung/s3c-dma-ops.c      |  13 +-
 drivers/clk/samsung/clk-s3c64xx.c        |   4 +-
 drivers/dma/amba-pl08x.c                 | 501 ++++++++++++++------
 drivers/spi/Kconfig                      |   2 +-
 include/linux/amba/pl080.h               |   1 +
 sound/soc/samsung/Kconfig                |   2 +-
 sound/soc/samsung/dma.c                  |   7 +
 16 files changed, 705 insertions(+), 1015 deletions(-)
 delete mode 100644 arch/arm/mach-s3c64xx/dma.c
 create mode 100644 arch/arm/mach-s3c64xx/pl080.c

-- 
1.8.3.2


^ permalink raw reply	[flat|nested] 45+ messages in thread

end of thread, other threads:[~2013-09-02  7:03 UTC | newest]

Thread overview: 45+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-08-11 17:59 [PATCH 00/18] ARM: s3c64xx: Let amba-pl08x driver handle DMA Tomasz Figa
2013-08-11 17:59 ` [PATCH 01/18] dmaengine: PL08x: Refactor pl08x_getbytes_chan() to lower indentation Tomasz Figa
2013-08-11 17:59 ` [PATCH 02/18] dmaengine: PL08x: Add support for different offset of CONFIG register Tomasz Figa
2013-08-11 17:59 ` [PATCH 03/18] dmaengine: PL08x: Rework LLI handling to be less fragile Tomasz Figa
2013-08-28  6:49   ` Linus Walleij
2013-08-11 17:59 ` [PATCH 04/18] dmaengine: PL08x: Move LLI dumping code into separate function Tomasz Figa
2013-08-28  6:50   ` Linus Walleij
2013-08-11 17:59 ` [PATCH 05/18] dmaengine: PL08x: Add support for PL080S variant Tomasz Figa
2013-08-11 17:59 ` [PATCH 06/18] dmaengine: PL08x: Add support for different maximum transfer size Tomasz Figa
2013-08-11 17:59 ` [PATCH 07/18] dmaengine: PL08x: Fix reading the byte count in cctl Tomasz Figa
2013-08-11 17:59 ` [PATCH 08/18] dmaengine: PL08x: Add cyclic transfer support Tomasz Figa
2013-08-11 17:59 ` [PATCH 09/18] ASoC: Samsung: Do not queue cyclic buffers multiple times Tomasz Figa
2013-08-28  7:06   ` Linus Walleij
2013-08-28  8:23     ` Tomasz Figa
2013-08-28  9:53     ` Mark Brown
2013-08-29 16:36   ` [alsa-devel] " Mark Brown
2013-08-29 17:36     ` Linus Walleij
2013-08-11 17:59 ` [PATCH 10/18] spi: s3c64xx: Do not require legacy DMA API in case of S3C64XX Tomasz Figa
2013-08-12 23:36   ` Mark Brown
2013-08-12 23:49     ` Tomasz Figa
2013-08-13 12:02       ` Mark Brown
2013-08-13 18:55       ` Mark Brown
2013-08-13 20:18         ` Mark Brown
2013-08-13 20:20           ` Tomasz Figa
2013-08-13 20:29             ` Mark Brown
2013-08-11 17:59 ` [PATCH 11/18] ASoC: Samsung: " Tomasz Figa
2013-08-11 17:59 ` [PATCH 12/18] ARM: s3c64xx: Add support for DMA using generic amba-pl08x driver Tomasz Figa
2013-08-13 17:52   ` Mark Brown
2013-08-13 20:10     ` Tomasz Figa
2013-08-13 20:35       ` Mark Brown
2013-08-13 21:11         ` Tomasz Figa
2013-08-24  0:17   ` [PATCH v2 " Tomasz Figa
2013-08-11 17:59 ` [PATCH 13/18] ARM: s3c64xx: clock: Add clkdev lookup for DMA clocks Tomasz Figa
2013-08-11 17:59 ` [PATCH 14/18] clk: samsung: s3c64xx: Add aliases " Tomasz Figa
2013-08-12 19:45   ` Mike Turquette
2013-08-11 17:59 ` [PATCH 15/18] ARM: s3c64xx: Remove legacy DMA driver Tomasz Figa
2013-08-11 17:59 ` [PATCH 16/18] clk: samsung: s3c64xx: Remove clock aliases of old " Tomasz Figa
2013-08-12 19:45   ` Mike Turquette
2013-08-11 17:59 ` [PATCH 17/18] spi: s3c64xx: Always select S3C64XX_PL080 when ARCH_S3C64XX is enabled Tomasz Figa
2013-08-11 19:11   ` Mark Brown
2013-08-11 23:03     ` Tomasz Figa
2013-08-12 10:07       ` Mark Brown
2013-08-11 17:59 ` [PATCH 18/18] ASoC: Samsung: " Tomasz Figa
2013-08-15 11:50 ` [PATCH 00/18] ARM: s3c64xx: Let amba-pl08x driver handle DMA Tomasz Figa
2013-09-02  6:16 ` Vinod Koul

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).