Re: [RFC PATCH v2 00/16] DMA Engine support for AM33xx

2 messages, 2 authors, 2012-10-11 · open the first message on its own page

Re: [RFC PATCH v2 00/16] DMA Engine support for AM33xx

From: Grant Likely <hidden>
Date: 2012-10-11 21:31:58

Hey Matt,

Do you know now similar are the EDMA engines on the am33xx and am389x? I've
been working on am389x upstreaming and I'll try these patches out if it is
the same engine.

g.
On Oct 11, 2012 8:03 PM, "Matt Porter" [off-list ref] wrote:
Changes since v1:
        - Rebased on top of mainline from 12250d8
        - Dropped the feature removal schedule patch
        - Implemented dma_request_slave_channel_compat() and
          converted the mmc and spi drivers to use it
        - Dropped unneeded #address-cells and #size-cells from
          EDMA DT support
        - Moved private EDMA header to linux/platform_data/ and
          removed some unneeded definitions
        - Fixed parsing of optional properties

TODO:
        - Add AM33xx crossbar support to the private EDMA API
          (any EDMA events on the crossbar are not supported)
        - Add dmaengine support for per-channel caps so the
          hack to set the maximum segments can be replaced with
          a query to the dmaengine driver

This series adds DMA Engine support for AM33xx, which uses
an EDMA DMAC. The EDMA DMAC has been previously supported by only
a private API implementation (much like the situation with OMAP
DMA) found on the DaVinci family of SoCs.

The series applies on top of mainline from
12250d843e8489ee00b5b7726da855e51694e792 and the following patches:

        - Vaibhav's patch to fix AM33xx boot on mainline
          https://patchwork.kernel.org/patch/1569231/
        - dmaengine DT support from Vinod's dmaengine_dt branch in
          git://git.infradead.org/users/vkoul/slave-dma.git since
          027478851791df751176398be02a3b1c5f6aa824

The approach taken is similar to how OMAP DMA is being converted to
DMA Engine support. With the functional EDMA private API already
existing in mach-davinci/dma.c, we first move that to an ARM common
area so it can be shared. Adding DT and runtime PM support to the
private EDMA API implementation allows it to run on AM33xx. AM33xx
*only* boots using DT so we leverage Jon's generic DT DMA helpers to
register EDMA DMAC with the of_dma framework and then add support
for calling the dma_request_slave_channel() API to both the mmc
and spi drivers.

What works? Well, with this series we now have MMC and SPI support
on AM33xx. The only caveat for MMC is that the mmc3 controller has
its events on the crossbar and is not usable yet.

This is tested on BeagleBone with a SPI framebuffer driver and SD
card. It is regression tested on AM180x-EVM (which also makes use
of the EDMA dmaengine driver and the EDMA private API) using SD,
SPI flash, and the onboard audio supported by the ASoC Davinci
driver.

After this series, the plan is to convert the last in-tree user
of the private EDMA API (davinci-pcm/mcasp) and then eliminate
the private EDMA API by folding its functionality into
drivers/dma/edma.c.

Matt Porter (16):
  dmaengine: edma: fix slave config dependency on direction
  ARM: davinci: move private EDMA API to arm/common
  ARM: edma: remove unused transfer controller handlers
  ARM: edma: add DT and runtime PM support for AM335x
  dmaengine: edma: enable build for AM33XX
  dmaengine: edma: Add TI EDMA device tree binding
  ARM: dts: add AM33XX EDMA support
  ARM: omap: add hsmmc am33xx specific init
  dmaengine: add dma_request_slave_channel_compat()
  mmc: omap_hsmmc: convert to dma_request_slave_channel_compat()
  mmc: omap_hsmmc: limit max_segs with the EDMA DMAC
  mmc: omap_hsmmc: add generic DMA request support to the DT binding
  ARM: dts: add AM33XX MMC support
  spi: omap2-mcspi: convert to dma_request_slave_channel_compat()
  spi: omap2-mcspi: add generic DMA request support to the DT binding
  ARM: dts: add AM33XX SPI support

 Documentation/devicetree/bindings/dma/ti-edma.txt  |   49 +
 .../devicetree/bindings/mmc/ti-omap-hsmmc.txt      |   25 +-
 Documentation/devicetree/bindings/spi/omap-spi.txt |   27 +-
 arch/arm/Kconfig                                   |    1 +
 arch/arm/boot/dts/am335x-bone.dts                  |   23 +
 arch/arm/boot/dts/am33xx.dtsi                      |  100 ++
 arch/arm/common/Kconfig                            |    3 +
 arch/arm/common/Makefile                           |    1 +
 arch/arm/common/edma.c                             | 1781
++++++++++++++++++++
 arch/arm/mach-davinci/Makefile                     |    2 +-
 arch/arm/mach-davinci/board-da830-evm.c            |    4 +-
 arch/arm/mach-davinci/board-da850-evm.c            |    8 +-
 arch/arm/mach-davinci/board-dm646x-evm.c           |    4 +-
 arch/arm/mach-davinci/board-omapl138-hawk.c        |    8 +-
 arch/arm/mach-davinci/board-tnetv107x-evm.c        |    2 +-
 arch/arm/mach-davinci/davinci.h                    |    2 +-
 arch/arm/mach-davinci/devices-da8xx.c              |    8 +-
 arch/arm/mach-davinci/devices-tnetv107x.c          |    6 +-
 arch/arm/mach-davinci/devices.c                    |    7 +-
 arch/arm/mach-davinci/dm355.c                      |    6 +-
 arch/arm/mach-davinci/dm365.c                      |    6 +-
 arch/arm/mach-davinci/dm644x.c                     |    6 +-
 arch/arm/mach-davinci/dm646x.c                     |    6 +-
 arch/arm/mach-davinci/dma.c                        | 1588
-----------------
 arch/arm/mach-davinci/include/mach/da8xx.h         |    2 +-
 arch/arm/mach-davinci/include/mach/edma.h          |  267 ---
 arch/arm/mach-omap2/hsmmc.c                        |    7 +-
 arch/arm/plat-omap/Kconfig                         |    1 +
 drivers/dma/Kconfig                                |    2 +-
 drivers/dma/edma.c                                 |   57 +-
 drivers/mmc/host/davinci_mmc.c                     |    1 +
 drivers/mmc/host/omap_hsmmc.c                      |   20 +-
 drivers/spi/spi-omap2-mcspi.c                      |   65 +-
 include/linux/dmaengine.h                          |   10 +
 include/linux/mfd/davinci_voicecodec.h             |    3 +-
 include/linux/platform_data/edma.h                 |  198 +++
 include/linux/platform_data/spi-davinci.h          |    2 +-
 sound/soc/davinci/davinci-evm.c                    |    1 +
 sound/soc/davinci/davinci-pcm.c                    |    1 +
 sound/soc/davinci/davinci-pcm.h                    |    2 +-
 sound/soc/davinci/davinci-sffsdr.c                 |    6 +-
 41 files changed, 2361 insertions(+), 1957 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/dma/ti-edma.txt
 create mode 100644 arch/arm/common/edma.c
 delete mode 100644 arch/arm/mach-davinci/dma.c
 delete mode 100644 arch/arm/mach-davinci/include/mach/edma.h
 create mode 100644 include/linux/platform_data/edma.h

--
1.7.9.5
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121011/6f884852/attachment-0001.html>

Re: [RFC PATCH v2 00/16] DMA Engine support for AM33xx

From: Matt Porter <hidden>
Date: 2012-10-11 21:48:38

On Thu, Oct 11, 2012 at 10:31:58PM +0100, Grant Likely wrote:
Hey Matt,

Do you know now similar are the EDMA engines on the am33xx and am389x? I've
been working on am389x upstreaming and I'll try these patches out if it is
the same engine.
Hi Grant,

It's the same one. am389x/ti816x and am387x/ti814x are part of the same
architectural family as am33xx. They've just never had a lot of upstream
support from TI. I heard rumors that you might be working with am389x
and I'm glad you're confirming that for me! ;)

The only differences between am33xx's implementation and the others is
going to be the number PaRAM slots, number of TCs, the channel mapping,
and then the crossbar mapping. As you can see from the TODO list, I
don't yet support the crossbar, but it'll be in the next version of this
series. The other items are already covered in the DT binding so it
should be straightforward to hook this up for am389x assuming your hwmod
and clock data is good for that part.

-Matt
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help