Merge tag 'dmaengine-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Aug 2020 19:41:36 +0000 (12:41 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Aug 2020 19:41:36 +0000 (12:41 -0700)
Pull dmaengine updates from Vinod Koul:
 "Core:
   - Support out of order dma completion
   - Support for repeating transaction

  New controllers:
   - Support for Actions S700 DMA engine
   - Renesas R8A774E1, r8a7742 controller binding
   - New driver for Xilinx DPDMA controller

  Other:
   - Support of out of order dma completion in idxd driver
   - W=1 warning cleanup of subsystem
   - Updates to ti-k3-dma, dw, idxd drivers"

* tag 'dmaengine-5.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine: (68 commits)
  dmaengine: dw: Don't include unneeded header to platform data header
  dmaengine: Actions: Add support for S700 DMA engine
  dmaengine: Actions: get rid of bit fields from dma descriptor
  dt-bindings: dmaengine: convert Actions Semi Owl SoCs bindings to yaml
  dmaengine: idxd: add missing invalid flags field to completion
  dmaengine: dw: Initialize max_sg_burst capability
  dmaengine: dw: Introduce max burst length hw config
  dmaengine: dw: Initialize min and max burst DMA device capability
  dmaengine: dw: Set DMA device max segment size parameter
  dmaengine: dw: Take HC_LLP flag into account for noLLP auto-config
  dmaengine: Introduce DMA-device device_caps callback
  dmaengine: Introduce max SG burst capability
  dmaengine: Introduce min burst length capability
  dt-bindings: dma: dw: Add max burst transaction length property
  dt-bindings: dma: dw: Convert DW DMAC to DT binding
  dmaengine: ti: k3-udma: Query throughput level information from hardware
  dmaengine: ti: k3-udma: Use defines for capabilities register parsing
  dmaengine: xilinx: dpdma: Fix kerneldoc warning
  dmaengine: xilinx: dpdma: add missing kernel doc
  dmaengine: xilinx: dpdma: remove comparison of unsigned expression
  ...

1  2 
Documentation/driver-api/dmaengine/provider.rst
MAINTAINERS
drivers/dma/ti/k3-udma-glue.c
drivers/dma/ti/k3-udma.c
include/linux/dmaengine.h

@@@ -95,7 -95,7 +95,7 @@@ accommodates that API in some cases, an
  ensure that it stayed compatible.
  
  For more information on the Async TX API, please look the relevant
 -documentation file in Documentation/crypto/async-tx-api.txt.
 +documentation file in Documentation/crypto/async-tx-api.rst.
  
  DMAEngine APIs
  ==============
@@@ -239,6 -239,22 +239,22 @@@ Currently, the types available are
      want to transfer a portion of uncompressed data directly to the
      display to print it
  
+ - DMA_COMPLETION_NO_ORDER
+   - The device does not support in order completion.
+   - The driver should return DMA_OUT_OF_ORDER for device_tx_status if
+     the device is setting this capability.
+   - All cookie tracking and checking API should be treated as invalid if
+     the device exports this capability.
+   - At this point, this is incompatible with polling option for dmatest.
+   - If this cap is set, the user is recommended to provide an unique
+     identifier for each descriptor sent to the DMA device in order to
+     properly track the completion.
  - DMA_REPEAT
  
    - The device supports repeated transfers. A repeated transfer, indicated by
@@@ -420,6 -436,9 +436,9 @@@ supported
    - In the case of a cyclic transfer, it should only take into
      account the current period.
  
+   - Should return DMA_OUT_OF_ORDER if the device does not support in order
+     completion and is completing the operation out of order.
    - This function can be called in an interrupt context.
  
  - device_config
@@@ -509,7 -528,7 +528,7 @@@ dma_cookie_
  DMA_CTRL_ACK
  
  - If clear, the descriptor cannot be reused by provider until the
-   client acknowledges receipt, i.e. has has a chance to establish any
+   client acknowledges receipt, i.e. has a chance to establish any
    dependency chains
  
  - This can be acked by invoking async_tx_ack()
diff --combined MAINTAINERS
@@@ -147,7 -147,7 +147,7 @@@ Maintainers Lis
  M:    Steffen Klassert <klassert@kernel.org>
  L:    netdev@vger.kernel.org
  S:    Odd Fixes
 -F:    Documentation/networking/device_drivers/3com/vortex.rst
 +F:    Documentation/networking/device_drivers/ethernet/3com/vortex.rst
  F:    drivers/net/ethernet/3com/3c59x.c
  
  3CR990 NETWORK DRIVER
@@@ -782,7 -782,7 +782,7 @@@ F: include/dt-bindings/reset/altr,rst-m
  F:    include/linux/mfd/altera-a10sr.h
  
  ALTERA TRIPLE SPEED ETHERNET DRIVER
 -M:    Thor Thayer <thor.thayer@linux.intel.com>
 +M:    Joyce Ooi <joyce.ooi@intel.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/ethernet/altera/
@@@ -816,7 -816,7 +816,7 @@@ R: Saeed Bishara <saeedb@amazon.com
  R:    Zorik Machulsky <zorik@amazon.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    Documentation/networking/device_drivers/amazon/ena.rst
 +F:    Documentation/networking/device_drivers/ethernet/amazon/ena.rst
  F:    drivers/net/ethernet/amazon/
  
  AMAZON RDMA EFA DRIVER
@@@ -830,20 -830,11 +830,20 @@@ F:      include/uapi/rdma/efa-abi.
  
  AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER
  M:    Tom Lendacky <thomas.lendacky@amd.com>
 +M:    John Allen <john.allen@amd.com>
  L:    linux-crypto@vger.kernel.org
  S:    Supported
  F:    drivers/crypto/ccp/
  F:    include/linux/ccp.h
  
 +AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER - SEV SUPPORT
 +M:    Brijesh Singh <brijesh.singh@amd.com>
 +M:    Tom Lendacky <thomas.lendacky@amd.com>
 +L:    linux-crypto@vger.kernel.org
 +S:    Supported
 +F:    drivers/crypto/ccp/sev*
 +F:    include/uapi/linux/psp-sev.h
 +
  AMD DISPLAY CORE
  M:    Harry Wentland <harry.wentland@amd.com>
  M:    Leo Li <sunpeng.li@amd.com>
@@@ -1082,7 -1073,6 +1082,7 @@@ L:      linux-media@vger.kernel.or
  S:    Supported
  W:    http://ez.analog.com/community/linux-device-drivers
  F:    drivers/media/i2c/adv7180.c
 +F:    Documentation/devicetree/bindings/media/i2c/adv7180.yaml
  
  ANALOG DEVICES INC ADV748X DRIVER
  M:    Kieran Bingham <kieran.bingham@ideasonboard.com>
@@@ -1180,8 -1170,6 +1180,8 @@@ M:      Todd Kjos <tkjos@android.com
  M:    Martijn Coenen <maco@android.com>
  M:    Joel Fernandes <joel@joelfernandes.org>
  M:    Christian Brauner <christian@brauner.io>
 +M:    Hridya Valsaraju <hridya@google.com>
 +M:    Suren Baghdasaryan <surenb@google.com>
  L:    devel@driverdev.osuosl.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
@@@ -1307,7 -1295,7 +1307,7 @@@ L:      netdev@vger.kernel.or
  S:    Supported
  W:    https://www.marvell.com/
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
 -F:    Documentation/networking/device_drivers/aquantia/atlantic.rst
 +F:    Documentation/networking/device_drivers/ethernet/aquantia/atlantic.rst
  F:    drivers/net/ethernet/aquantia/atlantic/
  
  AQUANTIA ETHERNET DRIVER PTP SUBSYSTEM
@@@ -1437,7 -1425,7 +1437,7 @@@ F:      arch/arm*/include/asm/perf_event.
  F:    arch/arm*/kernel/hw_breakpoint.c
  F:    arch/arm*/kernel/perf_*
  F:    arch/arm/oprofile/common.c
 -F:    drivers/perf/*
 +F:    drivers/perf/
  F:    include/linux/perf/arm_pmu.h
  
  ARM PORT
@@@ -1460,6 -1448,11 +1460,6 @@@ S:     Odd Fixe
  F:    drivers/amba/
  F:    include/linux/amba/bus.h
  
 -ARM PRIMECELL CLCD PL110 DRIVER
 -M:    Russell King <linux@armlinux.org.uk>
 -S:    Odd Fixes
 -F:    drivers/video/fbdev/amba-clcd.*
 -
  ARM PRIMECELL KMI PL050 DRIVER
  M:    Russell King <linux@armlinux.org.uk>
  S:    Odd Fixes
@@@ -1604,9 -1597,6 +1604,9 @@@ F:      sound/soc/meson
  
  ARM/Amlogic Meson SoC support
  M:    Kevin Hilman <khilman@baylibre.com>
 +R:    Neil Armstrong <narmstrong@baylibre.com>
 +R:    Jerome Brunet <jbrunet@baylibre.com>
 +R:    Martin Blumenstingl <martin.blumenstingl@googlemail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-amlogic@lists.infradead.org
  S:    Maintained
@@@ -1627,7 -1617,7 +1627,7 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    arch/arm/boot/dts/alpine*
  F:    arch/arm/mach-alpine/
 -F:    arch/arm64/boot/dts/al/
 +F:    arch/arm64/boot/dts/amazon/
  F:    drivers/*/*alpine*
  
  ARM/ARTPEC MACHINE SUPPORT
@@@ -1964,14 -1954,6 +1964,14 @@@ F:    drivers/irqchip/irq-ixp4xx.
  F:    include/linux/irqchip/irq-ixp4xx.h
  F:    include/linux/platform_data/timer-ixp4xx.h
  
 +ARM/INTEL KEEMBAY ARCHITECTURE
 +M:    Paul J. Murphy <paul.j.murphy@intel.com>
 +M:    Daniele Alessandrelli <daniele.alessandrelli@intel.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/arm/intel,keembay.yaml
 +F:    arch/arm64/boot/dts/intel/keembay-evm.dts
 +F:    arch/arm64/boot/dts/intel/keembay-soc.dtsi
 +
  ARM/INTEL RESEARCH IMOTE/STARGATE 2 MACHINE SUPPORT
  M:    Jonathan Cameron <jic23@cam.ac.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2129,32 -2111,12 +2129,32 @@@ X:   drivers/net/wireless/atmel
  N:    at91
  N:    atmel
  
 +ARM/Microchip Sparx5 SoC support
 +M:    Lars Povlsen <lars.povlsen@microchip.com>
 +M:    Steen Hegelund <Steen.Hegelund@microchip.com>
 +M:    Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Supported
 +F:    arch/arm64/boot/dts/microchip/
 +N:    sparx5
 +
  ARM/MIOA701 MACHINE SUPPORT
  M:    Robert Jarzmik <robert.jarzmik@free.fr>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-pxa/mioa701.c
  
 +ARM/MStar/Sigmastar Armv7 SoC support
 +M:    Daniel Palmer <daniel@thingy.jp>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +W:    http://linux-chenxing.org/
 +F:    Documentation/devicetree/bindings/arm/mstar/*
 +F:    arch/arm/boot/dts/infinity*.dtsi
 +F:    arch/arm/boot/dts/mercury*.dtsi
 +F:    arch/arm/boot/dts/mstar-v7.dtsi
 +F:    arch/arm/mach-mstar/
 +
  ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT
  M:    Michael Petchkovsky <mkpetch@internode.on.net>
  S:    Maintained
@@@ -2309,7 -2271,7 +2309,7 @@@ F:      drivers/pci/controller/dwc/pcie-qcom
  F:    drivers/phy/qualcomm/
  F:    drivers/power/*/msm*
  F:    drivers/reset/reset-qcom-*
 -F:    drivers/scsi/ufs/ufs-qcom.*
 +F:    drivers/scsi/ufs/ufs-qcom*
  F:    drivers/spi/spi-geni-qcom.c
  F:    drivers/spi/spi-qcom-qspi.c
  F:    drivers/spi/spi-qup.c
@@@ -2865,7 -2827,7 +2865,7 @@@ ASYMMETRIC KEY
  M:    David Howells <dhowells@redhat.com>
  L:    keyrings@vger.kernel.org
  S:    Maintained
 -F:    Documentation/crypto/asymmetric-keys.txt
 +F:    Documentation/crypto/asymmetric-keys.rst
  F:    crypto/asymmetric_keys/
  F:    include/crypto/pkcs7.h
  F:    include/crypto/public_key.h
@@@ -2875,7 -2837,7 +2875,7 @@@ ASYNCHRONOUS TRANSFERS/TRANSFORMS (IOAT
  R:    Dan Williams <dan.j.williams@intel.com>
  S:    Odd fixes
  W:    http://sourceforge.net/projects/xscaleiop
 -F:    Documentation/crypto/async-tx-api.txt
 +F:    Documentation/crypto/async-tx-api.rst
  F:    crypto/async_tx/
  F:    drivers/dma/
  F:    include/linux/async_tx.h
@@@ -2919,7 -2881,7 +2919,7 @@@ S:      Supporte
  F:    drivers/net/wireless/ath/*
  
  ATHEROS ATH5K WIRELESS DRIVER
 -M:    Jiri Slaby <jirislaby@gmail.com>
 +M:    Jiri Slaby <jirislaby@kernel.org>
  M:    Nick Kossifidis <mickflemm@gmail.com>
  M:    Luis Chamberlain <mcgrof@kernel.org>
  L:    linux-wireless@vger.kernel.org
@@@ -2967,7 -2929,6 +2967,7 @@@ F:      include/uapi/linux/atm
  
  ATMEL MACB ETHERNET DRIVER
  M:    Nicolas Ferre <nicolas.ferre@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@microchip.com>
  S:    Supported
  F:    drivers/net/ethernet/cadence/
  
@@@ -3345,7 -3306,7 +3345,7 @@@ X:      arch/riscv/net/bpf_jit_comp32.
  
  BPF JIT for S390
  M:    Ilya Leoshkevich <iii@linux.ibm.com>
 -M:    Heiko Carstens <heiko.carstens@de.ibm.com>
 +M:    Heiko Carstens <hca@linux.ibm.com>
  M:    Vasily Gorbik <gor@linux.ibm.com>
  L:    netdev@vger.kernel.org
  L:    bpf@vger.kernel.org
@@@ -3621,7 -3582,6 +3621,7 @@@ M:      Selvin Xavier <selvin.xavier@broadco
  M:    Devesh Sharma <devesh.sharma@broadcom.com>
  M:    Somnath Kotur <somnath.kotur@broadcom.com>
  M:    Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
 +M:    Naresh Kumar PBS <nareshkumar.pbs@broadcom.com>
  L:    linux-rdma@vger.kernel.org
  S:    Supported
  W:    http://www.broadcom.com
@@@ -3986,7 -3946,7 +3986,7 @@@ L:      linux-crypto@vger.kernel.or
  S:    Supported
  F:    drivers/char/hw_random/cctrng.c
  F:    drivers/char/hw_random/cctrng.h
 -F:    Documentation/devicetree/bindings/rng/arm-cctrng.txt
 +F:    Documentation/devicetree/bindings/rng/arm-cctrng.yaml
  W:    https://developer.arm.com/products/system-ip/trustzone-cryptocell/cryptocell-700-family
  
  CEC FRAMEWORK
@@@ -4387,12 -4347,6 +4387,12 @@@ L:    netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/connector/
  
 +CONSOLE SUBSYSTEM
 +M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 +S:    Supported
 +F:    drivers/video/console/
 +F:    include/linux/console*
 +
  CONTROL GROUP (CGROUP)
  M:    Tejun Heo <tj@kernel.org>
  M:    Li Zefan <lizefan@huawei.com>
@@@ -4446,12 -4400,6 +4446,12 @@@ S:    Maintaine
  F:    Documentation/hwmon/coretemp.rst
  F:    drivers/hwmon/coretemp.c
  
 +CORSAIR-CPRO HARDWARE MONITOR DRIVER
 +M:    Marius Zachmann <mail@mariuszachmann.de>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hwmon/corsair-cpro.c
 +
  COSA/SRP SYNC SERIAL DRIVER
  M:    Jan "Yenya" Kasprzak <kas@fi.muni.cz>
  S:    Maintained
@@@ -4805,7 -4753,7 +4805,7 @@@ F:      net/ax25/sysctl_net_ax25.
  DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
  L:    netdev@vger.kernel.org
  S:    Orphan
 -F:    Documentation/networking/device_drivers/dec/dmfe.rst
 +F:    Documentation/networking/device_drivers/ethernet/dec/dmfe.rst
  F:    drivers/net/ethernet/dec/tulip/dmfe.c
  
  DC390/AM53C974 SCSI driver
@@@ -5073,6 -5021,7 +5073,6 @@@ F:      drivers/mfd/da91??-*.
  F:    drivers/pinctrl/pinctrl-da90??.c
  F:    drivers/power/supply/da9052-battery.c
  F:    drivers/power/supply/da91??-*.c
 -F:    drivers/regulator/da903x.c
  F:    drivers/regulator/da9???-regulator.[ch]
  F:    drivers/regulator/slg51000-regulator.[ch]
  F:    drivers/rtc/rtc-da90??.c
@@@ -5145,7 -5094,6 +5145,7 @@@ F:      fs/dlm
  
  DMA BUFFER SHARING FRAMEWORK
  M:    Sumit Semwal <sumit.semwal@linaro.org>
 +M:    Christian König <christian.koenig@amd.com>
  L:    linux-media@vger.kernel.org
  L:    dri-devel@lists.freedesktop.org
  L:    linaro-mm-sig@lists.linaro.org (moderated for non-subscribers)
@@@ -5293,8 -5241,8 +5293,8 @@@ M:      Ioana Ciornei <ioana.ciornei@nxp.com
  M:    Ioana Radulescu <ruxandra.radulescu@nxp.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    Documentation/networking/device_drivers/freescale/dpaa2/ethernet-driver.rst
 -F:    Documentation/networking/device_drivers/freescale/dpaa2/mac-phy-support.rst
 +F:    Documentation/networking/device_drivers/ethernet/freescale/dpaa2/ethernet-driver.rst
 +F:    Documentation/networking/device_drivers/ethernet/freescale/dpaa2/mac-phy-support.rst
  F:    drivers/net/ethernet/freescale/dpaa2/Kconfig
  F:    drivers/net/ethernet/freescale/dpaa2/Makefile
  F:    drivers/net/ethernet/freescale/dpaa2/dpaa2-eth*
@@@ -5542,7 -5490,7 +5542,7 @@@ F:      include/uapi/drm/r128_drm.
  DRM DRIVER FOR RAYDIUM RM67191 PANELS
  M:    Robert Chiras <robert.chiras@nxp.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/display/panel/raydium,rm67191.txt
 +F:    Documentation/devicetree/bindings/display/panel/raydium,rm67191.yaml
  F:    drivers/gpu/drm/panel/panel-raydium-rm67191.c
  
  DRM DRIVER FOR ROCKTECH JH057N00900 PANELS
@@@ -5871,7 -5819,7 +5871,7 @@@ M:      Eric Anholt <eric@anholt.net
  S:    Supported
  T:    git git://github.com/anholt/linux
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/display/brcm,bcm-vc4.txt
 +F:    Documentation/devicetree/bindings/display/brcm,bcm2835-*.yaml
  F:    drivers/gpu/drm/vc4/
  F:    include/uapi/drm/vc4_drm.h
  
@@@ -5895,15 -5843,6 +5895,15 @@@ T:    git git://anongit.freedesktop.org/dr
  F:    Documentation/gpu/xen-front.rst
  F:    drivers/gpu/drm/xen/
  
 +DRM DRIVERS FOR XILINX
 +M:    Hyun Kwon <hyun.kwon@xilinx.com>
 +M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 +L:    dri-devel@lists.freedesktop.org
 +S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    Documentation/devicetree/bindings/display/xlnx/
 +F:    drivers/gpu/drm/xlnx/
 +
  DRM DRIVERS FOR ZTE ZX
  M:    Shawn Guo <shawnguo@kernel.org>
  L:    dri-devel@lists.freedesktop.org
@@@ -7017,7 -6956,6 +7017,7 @@@ M:      Timur Tabi <timur@kernel.org
  M:    Nicolin Chen <nicoleotsuka@gmail.com>
  M:    Xiubo Li <Xiubo.Lee@gmail.com>
  R:    Fabio Estevam <festevam@gmail.com>
 +R:    Shengjiu Wang <shengjiu.wang@gmail.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
@@@ -7032,13 -6970,6 +7032,13 @@@ L:    linuxppc-dev@lists.ozlabs.or
  S:    Maintained
  F:    drivers/usb/gadget/udc/fsl*
  
 +FREESCALE USB PHY DRIVER
 +M:    Ran Wang <ran.wang_1@nxp.com>
 +L:    linux-usb@vger.kernel.org
 +L:    linuxppc-dev@lists.ozlabs.org
 +S:    Maintained
 +F:    drivers/usb/phy/phy-fsl-usb*
 +
  FREEVXFS FILESYSTEM
  M:    Christoph Hellwig <hch@infradead.org>
  S:    Maintained
@@@ -7175,7 -7106,7 +7175,7 @@@ F:      include/linux/futex.
  F:    include/uapi/linux/futex.h
  F:    kernel/futex.c
  F:    tools/perf/bench/futex*
 -F:    Documentation/locking/*futex*
 +F:    tools/testing/selftests/futex/
  
  GATEWORKS SYSTEM CONTROLLER (GSC) DRIVER
  M:    Tim Harvey <tharvey@gateworks.com>
@@@ -7371,7 -7302,7 +7371,7 @@@ R:      Sagi Shahar <sagis@google.com
  R:    Jon Olson <jonolson@google.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    Documentation/networking/device_drivers/google/gve.rst
 +F:    Documentation/networking/device_drivers/ethernet/google/gve.rst
  F:    drivers/net/ethernet/google
  
  GPD POCKET FAN DRIVER
@@@ -7982,7 -7913,7 +7982,7 @@@ HUAWEI ETHERNET DRIVE
  M:    Bin Luo <luobin9@huawei.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    Documentation/networking/hinic.rst
 +F:    Documentation/networking/device_drivers/ethernet/huawei/hinic.rst
  F:    drivers/net/ethernet/huawei/hinic/
  
  HUGETLB FILESYSTEM
@@@ -8034,7 -7965,7 +8034,7 @@@ S:      Supporte
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git
  F:    Documentation/ABI/stable/sysfs-bus-vmbus
  F:    Documentation/ABI/testing/debugfs-hyperv
 -F:    Documentation/networking/device_drivers/microsoft/netvsc.rst
 +F:    Documentation/networking/device_drivers/ethernet/microsoft/netvsc.rst
  F:    arch/x86/hyperv
  F:    arch/x86/include/asm/hyperv-tlfs.h
  F:    arch/x86/include/asm/mshyperv.h
@@@ -8402,7 -8333,7 +8402,7 @@@ M:      Alexander Aring <alex.aring@gmail.co
  M:    Stefan Schmidt <stefan@datenfreihafen.org>
  L:    linux-wpan@vger.kernel.org
  S:    Maintained
 -W:    http://wpan.cakelab.org/
 +W:    https://linux-wpan.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan-next.git
  F:    Documentation/networking/ieee802154.rst
@@@ -8669,12 -8600,6 +8669,12 @@@ L:    platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/intel_atomisp2_pm.c
  
 +INTEL ATOMISP2 LED DRIVER
 +M:    Hans de Goede <hdegoede@redhat.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/intel_atomisp2_led.c
 +
  INTEL BROXTON PMC DRIVER
  M:    Mika Westerberg <mika.westerberg@linux.intel.com>
  M:    Zha Qipeng <qipeng.zha@intel.com>
@@@ -8722,7 -8647,18 +8722,7 @@@ W:     http://e1000.sourceforge.net
  Q:    http://patchwork.ozlabs.org/project/intel-wired-lan/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-queue.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git
 -F:    Documentation/networking/device_drivers/intel/e100.rst
 -F:    Documentation/networking/device_drivers/intel/e1000.rst
 -F:    Documentation/networking/device_drivers/intel/e1000e.rst
 -F:    Documentation/networking/device_drivers/intel/fm10k.rst
 -F:    Documentation/networking/device_drivers/intel/i40e.rst
 -F:    Documentation/networking/device_drivers/intel/iavf.rst
 -F:    Documentation/networking/device_drivers/intel/ice.rst
 -F:    Documentation/networking/device_drivers/intel/igb.rst
 -F:    Documentation/networking/device_drivers/intel/igbvf.rst
 -F:    Documentation/networking/device_drivers/intel/ixgb.rst
 -F:    Documentation/networking/device_drivers/intel/ixgbe.rst
 -F:    Documentation/networking/device_drivers/intel/ixgbevf.rst
 +F:    Documentation/networking/device_drivers/ethernet/intel/
  F:    drivers/net/ethernet/intel/
  F:    drivers/net/ethernet/intel/*/
  F:    include/linux/avf/virtchnl.h
@@@ -8850,7 -8786,7 +8850,7 @@@ M:      Tomas Winkler <tomas.winkler@intel.c
  L:    linux-kernel@vger.kernel.org
  S:    Supported
  F:    Documentation/driver-api/mei/*
 -F:    drivers/misc/mei/*
 +F:    drivers/misc/mei/
  F:    drivers/watchdog/mei_wdt.c
  F:    include/linux/mei_cl_bus.h
  F:    include/uapi/linux/mei.h
@@@ -8912,8 -8848,8 +8912,8 @@@ INTEL PRO/WIRELESS 2100, 2200BG, 2915AB
  M:    Stanislav Yakovlev <stas.yakovlev@gmail.com>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
 -F:    Documentation/networking/device_drivers/intel/ipw2100.rst
 -F:    Documentation/networking/device_drivers/intel/ipw2200.rst
 +F:    Documentation/networking/device_drivers/wifi/intel/ipw2100.rst
 +F:    Documentation/networking/device_drivers/wifi/intel/ipw2200.rst
  F:    drivers/net/wireless/intel/ipw2x00/
  
  INTEL PSTATE DRIVER
@@@ -9043,14 -8979,6 +9043,14 @@@ F:    include/dt-bindings/interconnect
  F:    include/linux/interconnect-provider.h
  F:    include/linux/interconnect.h
  
 +INVENSENSE ICM-426xx IMU DRIVER
 +M:    Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +W     https://invensense.tdk.com/
 +F:    Documentation/devicetree/bindings/iio/imu/invensense,icm42600.yaml
 +F:    drivers/iio/imu/inv_icm42600/
 +
  INVENSENSE MPU-3050 GYROSCOPE DRIVER
  M:    Linus Walleij <linus.walleij@linaro.org>
  L:    linux-iio@vger.kernel.org
@@@ -9377,17 -9305,6 +9377,17 @@@ F:    Documentation/kbuild/kconfig
  F:    scripts/Kconfig.include
  F:    scripts/kconfig/
  
 +KCOV
 +R:    Dmitry Vyukov <dvyukov@google.com>
 +R:    Andrey Konovalov <andreyknvl@google.com>
 +L:    kasan-dev@googlegroups.com
 +S:    Maintained
 +F:    Documentation/dev-tools/kcov.rst
 +F:    include/linux/kcov.h
 +F:    include/uapi/linux/kcov.h
 +F:    kernel/kcov.c
 +F:    scripts/Makefile.kcov
 +
  KCSAN
  M:    Marco Elver <elver@google.com>
  R:    Dmitry Vyukov <dvyukov@google.com>
@@@ -9524,11 -9441,9 +9524,11 @@@ F:    arch/arm64/kvm
  F:    include/kvm/arm_*
  
  KERNEL VIRTUAL MACHINE FOR MIPS (KVM/mips)
 +M:    Huacai Chen <chenhc@lemote.com>
 +M:    Aleksandar Markovic <aleksandar.qemu.devel@gmail.com>
  L:    linux-mips@vger.kernel.org
  L:    kvm@vger.kernel.org
 -S:    Orphan
 +S:    Maintained
  F:    arch/mips/include/asm/kvm*
  F:    arch/mips/include/uapi/asm/kvm*
  F:    arch/mips/kvm/
@@@ -9682,7 -9597,7 +9682,7 @@@ M:      Anil S Keshavamurthy <anil.s.keshava
  M:    "David S. Miller" <davem@davemloft.net>
  M:    Masami Hiramatsu <mhiramat@kernel.org>
  S:    Maintained
 -F:    Documentation/kprobes.txt
 +F:    Documentation/trace/kprobes.rst
  F:    include/asm-generic/kprobes.h
  F:    include/linux/kprobes.h
  F:    kernel/kprobes.c
@@@ -9754,10 -9669,12 +9754,10 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    scripts/leaking_addresses.pl
  
  LED SUBSYSTEM
 -M:    Jacek Anaszewski <jacek.anaszewski@gmail.com>
  M:    Pavel Machek <pavel@ucw.cz>
  R:    Dan Murphy <dmurphy@ti.com>
  L:    linux-leds@vger.kernel.org
  S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds.git
  F:    Documentation/devicetree/bindings/leds/
  F:    drivers/leds/
@@@ -10043,7 -9960,6 +10043,7 @@@ M:    Luc Maranget <luc.maranget@inria.fr
  M:    "Paul E. McKenney" <paulmck@kernel.org>
  R:    Akira Yokosawa <akiyks@gmail.com>
  R:    Daniel Lustig <dlustig@nvidia.com>
 +R:    Joel Fernandes <joel@joelfernandes.org>
  L:    linux-kernel@vger.kernel.org
  L:    linux-arch@vger.kernel.org
  S:    Supported
@@@ -10052,7 -9968,6 +10052,7 @@@ F:    Documentation/atomic_bitops.tx
  F:    Documentation/atomic_t.txt
  F:    Documentation/core-api/atomic_ops.rst
  F:    Documentation/core-api/refcount-vs-atomic.rst
 +F:    Documentation/litmus-tests/
  F:    Documentation/memory-barriers.txt
  F:    tools/memory-model/
  
@@@ -10447,7 -10362,7 +10447,7 @@@ M:   Geetha sowjanya <gakula@marvell.com
  M:    Jerin Jacob <jerinj@marvell.com>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    Documentation/networking/device_drivers/marvell/octeontx2.rst
 +F:    Documentation/networking/device_drivers/ethernet/marvell/octeontx2.rst
  F:    drivers/net/ethernet/marvell/octeontx2/af/
  
  MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
@@@ -10893,7 -10808,7 +10893,7 @@@ F:   Documentation/devicetree/bindings/dm
  F:    drivers/dma/mediatek/
  
  MEDIATEK ETHERNET DRIVER
 -M:    Felix Fietkau <nbd@openwrt.org>
 +M:    Felix Fietkau <nbd@nbd.name>
  M:    John Crispin <john@phrozen.org>
  M:    Sean Wang <sean.wang@mediatek.com>
  M:    Mark Lee <Mark-MC.Lee@mediatek.com>
@@@ -11116,7 -11031,7 +11116,7 @@@ L:   linux-rdma@vger.kernel.or
  S:    Supported
  W:    http://www.mellanox.com
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
 -F:    Documentation/networking/device_drivers/mellanox/
 +F:    Documentation/networking/device_drivers/ethernet/mellanox/
  F:    drivers/net/ethernet/mellanox/mlx5/core/
  F:    include/linux/mlx5/
  
@@@ -11170,23 -11085,6 +11170,23 @@@ F: Documentation/core-api/boot-time-mm.
  F:    include/linux/memblock.h
  F:    mm/memblock.c
  
 +MEMORY CONTROLLER DRIVERS
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +L:    linux-kernel@vger.kernel.org
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git
 +F:    Documentation/devicetree/bindings/memory-controllers/
 +F:    drivers/memory/
 +
 +MEMORY FREQUENCY SCALING DRIVERS FOR NVIDIA TEGRA
 +M:    Dmitry Osipenko <digetx@gmail.com>
 +L:    linux-pm@vger.kernel.org
 +L:    linux-tegra@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git
 +S:    Maintained
 +F:    drivers/devfreq/tegra20-devfreq.c
 +F:    drivers/devfreq/tegra30-devfreq.c
 +
  MEMORY MANAGEMENT
  M:    Andrew Morton <akpm@linux-foundation.org>
  L:    linux-mm@kvack.org
@@@ -11296,6 -11194,19 +11296,19 @@@ W: http://www.monstr.eu/fdt
  T:    git git://git.monstr.eu/linux-2.6-microblaze.git
  F:    arch/microblaze/
  
+ MICROCHIP AT91 DMA DRIVERS
+ M:    Ludovic Desroches <ludovic.desroches@microchip.com>
+ M:    Tudor Ambarus <tudor.ambarus@microchip.com>
+ L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+ L:    dmaengine@vger.kernel.org
+ S:    Supported
+ F:    Documentation/devicetree/bindings/dma/atmel-dma.txt
+ F:    drivers/dma/at_hdmac.c
+ F:    drivers/dma/at_hdmac_regs.h
+ F:    drivers/dma/at_xdmac.c
+ F:    include/dt-bindings/dma/at91.h
+ F:    include/linux/platform_data/dma-atmel.h
  MICROCHIP AT91 SERIAL DRIVER
  M:    Richard Genoud <richard.genoud@gmail.com>
  S:    Maintained
@@@ -11324,17 -11235,6 +11337,6 @@@ L:  alsa-devel@alsa-project.org (moderat
  S:    Supported
  F:    sound/soc/atmel
  
- MICROCHIP DMA DRIVER
- M:    Ludovic Desroches <ludovic.desroches@microchip.com>
- L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- L:    dmaengine@vger.kernel.org
- S:    Supported
- F:    Documentation/devicetree/bindings/dma/atmel-dma.txt
- F:    drivers/dma/at_hdmac.c
- F:    drivers/dma/at_hdmac_regs.h
- F:    include/dt-bindings/dma/at91.h
- F:    include/linux/platform_data/dma-atmel.h
  MICROCHIP ECC DRIVER
  M:    Tudor Ambarus <tudor.ambarus@microchip.com>
  L:    linux-crypto@vger.kernel.org
@@@ -11342,7 -11242,7 +11344,7 @@@ S:   Maintaine
  F:    drivers/crypto/atmel-ecc.*
  
  MICROCHIP I2C DRIVER
 -M:    Ludovic Desroches <ludovic.desroches@microchip.com>
 +M:    Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
  L:    linux-i2c@vger.kernel.org
  S:    Supported
  F:    drivers/i2c/busses/i2c-at91-*.c
@@@ -11426,6 -11326,7 +11428,6 @@@ F:   Documentation/devicetree/bindings/pw
  F:    drivers/pwm/pwm-atmel.c
  
  MICROCHIP SAMA5D2-COMPATIBLE ADC DRIVER
 -M:    Ludovic Desroches <ludovic.desroches@microchip.com>
  M:    Eugen Hristev <eugen.hristev@microchip.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
@@@ -11434,17 -11335,17 +11436,17 @@@ F:        drivers/iio/adc/at91-sama5d2_adc.
  F:    include/dt-bindings/iio/adc/at91-sama5d2_adc.h
  
  MICROCHIP SAMA5D2-COMPATIBLE SHUTDOWN CONTROLLER
 -M:    Nicolas Ferre <nicolas.ferre@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@microchip.com>
  S:    Supported
  F:    drivers/power/reset/at91-sama5d2_shdwc.c
  
  MICROCHIP SPI DRIVER
 -M:    Nicolas Ferre <nicolas.ferre@microchip.com>
 +M:    Tudor Ambarus <tudor.ambarus@microchip.com>
  S:    Supported
  F:    drivers/spi/spi-atmel.*
  
  MICROCHIP SSC DRIVER
 -M:    Nicolas Ferre <nicolas.ferre@microchip.com>
 +M:    Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    drivers/misc/atmel-ssc.c
@@@ -11463,20 -11364,14 +11465,13 @@@ L:        linux-arm-kernel@lists.infradead.or
  S:    Supported
  F:    drivers/usb/gadget/udc/atmel_usba_udc.*
  
 -MICROSEMI ETHERNET SWITCH DRIVER
 -M:    Alexandre Belloni <alexandre.belloni@bootlin.com>
 -M:    Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
 -L:    netdev@vger.kernel.org
 +MICROCHIP WILC1000 WIFI DRIVER
 +M:    Ajay Singh <ajay.kathat@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +L:    linux-wireless@vger.kernel.org
  S:    Supported
 -F:    drivers/net/ethernet/mscc/
 -F:    include/soc/mscc/ocelot*
 +F:    drivers/net/wireless/microchip/wilc1000/
  
- MICROCHIP XDMA DRIVER
- M:    Ludovic Desroches <ludovic.desroches@microchip.com>
- L:    linux-arm-kernel@lists.infradead.org
- L:    dmaengine@vger.kernel.org
- S:    Supported
- F:    drivers/dma/at_xdmac.c
  MICROSEMI MIPS SOCS
  M:    Alexandre Belloni <alexandre.belloni@bootlin.com>
  M:    Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
@@@ -11532,17 -11427,6 +11527,17 @@@ F: arch/mips/configs/generic/board-bost
  F:    drivers/clk/imgtec/clk-boston.c
  F:    include/dt-bindings/clock/boston-clock.h
  
 +MIPS CORE DRIVERS
 +M:    Thomas Bogendoerfer <tsbogend@alpha.franken.de>
 +M:    Serge Semin <fancer.lancer@gmail.com>
 +L:    linux-mips@vger.kernel.org
 +S:    Supported
 +F:    drivers/bus/mips_cdmm.c
 +F:    drivers/clocksource/mips-gic-timer.c
 +F:    drivers/cpuidle/cpuidle-cps.c
 +F:    drivers/irqchip/irq-mips-cpu.c
 +F:    drivers/irqchip/irq-mips-gic.c
 +
  MIPS GENERIC PLATFORM
  M:    Paul Burton <paulburton@kernel.org>
  L:    linux-mips@vger.kernel.org
@@@ -11671,7 -11555,7 +11666,7 @@@ F:   drivers/media/pci/meye
  F:    include/uapi/linux/meye.h
  
  MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
 -M:    Jiri Slaby <jirislaby@gmail.com>
 +M:    Jiri Slaby <jirislaby@kernel.org>
  S:    Maintained
  F:    Documentation/driver-api/serial/moxa-smartio.rst
  F:    drivers/tty/mxser.*
@@@ -11925,8 -11809,8 +11920,8 @@@ NETERION 10GbE DRIVERS (s2io/vxge
  M:    Jon Mason <jdmason@kudzu.us>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    Documentation/networking/device_drivers/neterion/s2io.rst
 -F:    Documentation/networking/device_drivers/neterion/vxge.rst
 +F:    Documentation/networking/device_drivers/ethernet/neterion/s2io.rst
 +F:    Documentation/networking/device_drivers/ethernet/neterion/vxge.rst
  F:    drivers/net/ethernet/neterion/
  
  NETFILTER
@@@ -12371,7 -12255,6 +12366,7 @@@ F:   drivers/nvme/target
  NVMEM FRAMEWORK
  M:    Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
  S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/srini/nvmem.git
  F:    Documentation/ABI/stable/sysfs-bus-nvmem
  F:    Documentation/devicetree/bindings/nvmem/
  F:    drivers/nvmem/
@@@ -12447,18 -12330,6 +12442,18 @@@ M: Peter Zijlstra <peterz@infradead.org
  S:    Supported
  F:    tools/objtool/
  
 +OCELOT ETHERNET SWITCH DRIVER
 +M:    Microchip Linux Driver Support <UNGLinuxDriver@microchip.com>
 +M:    Vladimir Oltean <vladimir.oltean@nxp.com>
 +M:    Claudiu Manoil <claudiu.manoil@nxp.com>
 +M:    Alexandre Belloni <alexandre.belloni@bootlin.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/dsa/ocelot/*
 +F:    drivers/net/ethernet/mscc/
 +F:    include/soc/mscc/ocelot*
 +F:    net/dsa/tag_ocelot.c
 +
  OCXL (Open Coherent Accelerator Processor Interface OpenCAPI) DRIVER
  M:    Frederic Barrat <fbarrat@linux.ibm.com>
  M:    Andrew Donnellan <ajd@linux.ibm.com>
@@@ -12815,14 -12686,13 +12810,14 @@@ F:        arch/mips/boot/dts/ralink/omega2p.dt
  
  OP-TEE DRIVER
  M:    Jens Wiklander <jens.wiklander@linaro.org>
 -L:    tee-dev@lists.linaro.org
 +L:    op-tee@lists.trustedfirmware.org
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-bus-optee-devices
  F:    drivers/tee/optee/
  
  OP-TEE RANDOM NUMBER GENERATOR (RNG) DRIVER
  M:    Sumit Garg <sumit.garg@linaro.org>
 -L:    tee-dev@lists.linaro.org
 +L:    op-tee@lists.trustedfirmware.org
  S:    Maintained
  F:    drivers/char/hw_random/optee-rng.c
  
@@@ -13308,6 -13178,7 +13303,6 @@@ F:   tools/pci
  
  PCI ENHANCED ERROR HANDLING (EEH) FOR POWERPC
  M:    Russell Currey <ruscur@russell.cc>
 -M:    Sam Bobroff <sbobroff@linux.ibm.com>
  M:    Oliver O'Halloran <oohall@gmail.com>
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Supported
@@@ -13490,7 -13361,7 +13485,7 @@@ M:   Shannon Nelson <snelson@pensando.io
  M:    Pensando Drivers <drivers@pensando.io>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    Documentation/networking/device_drivers/pensando/ionic.rst
 +F:    Documentation/networking/device_drivers/ethernet/pensando/ionic.rst
  F:    drivers/net/ethernet/pensando/
  
  PER-CPU MEMORY ALLOCATOR
@@@ -13700,19 -13571,22 +13695,19 @@@ F:        drivers/block/pktcdvd.
  F:    include/linux/pktcdvd.h
  F:    include/uapi/linux/pktcdvd.h
  
 -PKUNITY SOC DRIVERS
 -M:    Guan Xuetao <gxt@pku.edu.cn>
 -S:    Maintained
 -W:    http://mprc.pku.edu.cn/~guanxuetao/linux
 -T:    git git://github.com/gxt/linux.git
 -F:    drivers/i2c/busses/i2c-puv3.c
 -F:    drivers/input/serio/i8042-unicore32io.h
 -F:    drivers/rtc/rtc-puv3.c
 -F:    drivers/video/fbdev/fb-puv3.c
 -
  PLANTOWER PMS7003 AIR POLLUTION SENSOR DRIVER
  M:    Tomasz Duszynski <tduszyns@gmail.com>
  S:    Maintained
  F:    Documentation/devicetree/bindings/iio/chemical/plantower,pms7003.yaml
  F:    drivers/iio/chemical/pms7003.c
  
 +PLDMFW LIBRARY
 +M:    Jacob Keller <jacob.e.keller@intel.com>
 +S:    Maintained
 +F:    Documentation/driver-api/pldmfw/
 +F:    include/linux/pldmfw.h
 +F:    lib/pldmfw/
 +
  PLX DMA DRIVER
  M:    Logan Gunthorpe <logang@deltatee.com>
  S:    Maintained
@@@ -14170,7 -14044,7 +14165,7 @@@ QLOGIC QLA3XXX NETWORK DRIVE
  M:    GR-Linux-NIC-Dev@marvell.com
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    Documentation/networking/device_drivers/qlogic/LICENSE.qla3xxx
 +F:    Documentation/networking/device_drivers/ethernet/qlogic/LICENSE.qla3xxx
  F:    drivers/net/ethernet/qlogic/qla3xxx.*
  
  QLOGIC QLA4XXX iSCSI DRIVER
@@@ -14221,7 -14095,7 +14216,7 @@@ M:   Laurentiu Tudor <laurentiu.tudor@nxp
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/misc/fsl,qoriq-mc.txt
 -F:    Documentation/networking/device_drivers/freescale/dpaa2/overview.rst
 +F:    Documentation/networking/device_drivers/ethernet/freescale/dpaa2/overview.rst
  F:    drivers/bus/fsl-mc/
  
  QT1010 MEDIA DRIVER
@@@ -14293,8 -14167,7 +14288,8 @@@ F:   Documentation/devicetree/bindings/ne
  F:    drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
  
  QUALCOMM GENERIC INTERFACE I2C DRIVER
 -M:    Alok Chauhan <alokc@codeaurora.org>
 +M:    Akash Asthana <akashast@codeaurora.org>
 +M:    Mukesh Savaliya <msavaliy@codeaurora.org>
  L:    linux-i2c@vger.kernel.org
  L:    linux-arm-msm@vger.kernel.org
  S:    Supported
@@@ -14314,15 -14187,6 +14309,15 @@@ L: dmaengine@vger.kernel.or
  S:    Supported
  F:    drivers/dma/qcom/hidma*
  
 +QUALCOMM I2C CCI DRIVER
 +M:    Loic Poulain <loic.poulain@linaro.org>
 +M:    Robert Foss <robert.foss@linaro.org>
 +L:    linux-i2c@vger.kernel.org
 +L:    linux-arm-msm@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-qcom-cci.txt
 +F:    drivers/i2c/busses/i2c-qcom-cci.c
 +
  QUALCOMM IOMMU
  M:    Rob Clark <robdclark@gmail.com>
  L:    iommu@lists.linux-foundation.org
@@@ -14343,12 -14207,12 +14338,12 @@@ M:        Subash Abhinov Kasiviswanathan <suba
  M:    Sean Tranchetti <stranche@codeaurora.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    Documentation/networking/device_drivers/qualcomm/rmnet.rst
 +F:    Documentation/networking/device_drivers/cellular/qualcomm/rmnet.rst
  F:    drivers/net/ethernet/qualcomm/rmnet/
  F:    include/linux/if_rmnet.h
  
  QUALCOMM TSENS THERMAL DRIVER
 -M:    Amit Kucheria <amit.kucheria@linaro.org>
 +M:    Amit Kucheria <amitk@kernel.org>
  L:    linux-pm@vger.kernel.org
  L:    linux-arm-msm@vger.kernel.org
  S:    Maintained
@@@ -14555,7 -14419,7 +14550,7 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    Documentation/RCU/
  F:    include/linux/rcu*
  F:    kernel/rcu/
 -X:    Documentation/RCU/torture.txt
 +X:    Documentation/RCU/torture.rst
  X:    include/linux/srcu*.h
  X:    kernel/rcu/srcu*.c
  
@@@ -14631,7 -14495,7 +14626,7 @@@ S:   Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git rproc-next
  F:    Documentation/ABI/testing/sysfs-class-remoteproc
  F:    Documentation/devicetree/bindings/remoteproc/
 -F:    Documentation/remoteproc.txt
 +F:    Documentation/staging/remoteproc.rst
  F:    drivers/remoteproc/
  F:    include/linux/remoteproc.h
  F:    include/linux/remoteproc/
@@@ -14643,7 -14507,7 +14638,7 @@@ L:   linux-remoteproc@vger.kernel.or
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/andersson/remoteproc.git rpmsg-next
  F:    Documentation/ABI/testing/sysfs-bus-rpmsg
 -F:    Documentation/rpmsg.txt
 +F:    Documentation/staging/rpmsg.rst
  F:    drivers/rpmsg/
  F:    include/linux/rpmsg.h
  F:    include/linux/rpmsg/
@@@ -14665,7 -14529,7 +14660,7 @@@ F:   Documentation/devicetree/bindings/i2
  F:    drivers/i2c/busses/i2c-emev2.c
  
  RENESAS ETHERNET DRIVERS
 -R:    Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
 +R:    Sergei Shtylyov <sergei.shtylyov@gmail.com>
  L:    netdev@vger.kernel.org
  L:    linux-renesas-soc@vger.kernel.org
  F:    Documentation/devicetree/bindings/net/renesas,*.txt
@@@ -14692,8 -14556,8 +14687,8 @@@ RENESAS R-CAR THERMAL DRIVER
  M:    Niklas Söderlund <niklas.soderlund@ragnatech.se>
  L:    linux-renesas-soc@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/thermal/rcar-gen3-thermal.txt
 -F:    Documentation/devicetree/bindings/thermal/rcar-thermal.txt
 +F:    Documentation/devicetree/bindings/thermal/rcar-gen3-thermal.yaml
 +F:    Documentation/devicetree/bindings/thermal/rcar-thermal.yaml
  F:    drivers/thermal/rcar_gen3_thermal.c
  F:    drivers/thermal/rcar_thermal.c
  
@@@ -14949,7 -14813,7 +14944,7 @@@ S:   Maintaine
  F:    drivers/video/fbdev/savage/
  
  S390
 -M:    Heiko Carstens <heiko.carstens@de.ibm.com>
 +M:    Heiko Carstens <hca@linux.ibm.com>
  M:    Vasily Gorbik <gor@linux.ibm.com>
  M:    Christian Borntraeger <borntraeger@de.ibm.com>
  L:    linux-s390@vger.kernel.org
@@@ -14980,8 -14844,7 +14975,8 @@@ F:   drivers/s390/block/dasd
  F:    include/linux/dasd_mod.h
  
  S390 IOMMU (PCI)
 -M:    Gerald Schaefer <gerald.schaefer@de.ibm.com>
 +M:    Matthew Rosato <mjrosato@linux.ibm.com>
 +M:    Gerald Schaefer <gerald.schaefer@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  S:    Supported
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -15009,7 -14872,7 +15004,7 @@@ F:   drivers/s390/net
  
  S390 PCI SUBSYSTEM
  M:    Niklas Schnelle <schnelle@linux.ibm.com>
 -M:    Gerald Schaefer <gerald.schaefer@de.ibm.com>
 +M:    Gerald Schaefer <gerald.schaefer@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  S:    Supported
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -15415,7 -15278,7 +15410,7 @@@ F:   drivers/mmc/host/sdhci
  F:    include/linux/mmc/sdhci*
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) MICROCHIP DRIVER
 -M:    Ludovic Desroches <ludovic.desroches@microchip.com>
 +M:    Eugen Hristev <eugen.hristev@microchip.com>
  L:    linux-mmc@vger.kernel.org
  S:    Supported
  F:    drivers/mmc/host/sdhci-of-at91.c
@@@ -15480,20 -15343,11 +15475,20 @@@ F:        scripts/selinux
  F:    security/selinux/
  
  SENSABLE PHANTOM
 -M:    Jiri Slaby <jirislaby@gmail.com>
 +M:    Jiri Slaby <jirislaby@kernel.org>
  S:    Maintained
  F:    drivers/misc/phantom.c
  F:    include/uapi/linux/phantom.h
  
 +SENSIRION SCD30 CARBON DIOXIDE SENSOR DRIVER
 +M:    Tomasz Duszynski <tomasz.duszynski@octakon.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/chemical/sensirion,scd30.yaml
 +F:    drivers/iio/chemical/scd30.h
 +F:    drivers/iio/chemical/scd30_core.c
 +F:    drivers/iio/chemical/scd30_i2c.c
 +F:    drivers/iio/chemical/scd30_serial.c
 +
  SENSIRION SPS30 AIR POLLUTION SENSOR DRIVER
  M:    Tomasz Duszynski <tduszyns@gmail.com>
  S:    Maintained
@@@ -15545,7 -15399,7 +15540,7 @@@ F:   drivers/net/phy/phylink.
  F:    drivers/net/phy/sfp*
  F:    include/linux/phylink.h
  F:    include/linux/sfp.h
 -K:    phylink
 +K:    phylink\.h|struct\s+phylink|\.phylink|>phylink_|phylink_(autoneg|clear|connect|create|destroy|disconnect|ethtool|helper|mac|mii|of|set|start|stop|test|validate)
  
  SGI GRU DRIVER
  M:    Dimitri Sivanich <sivanich@sgi.com>
@@@ -16140,9 -15994,8 +16135,9 @@@ F:   sound/soc/sof
  
  SOUNDWIRE SUBSYSTEM
  M:    Vinod Koul <vkoul@kernel.org>
 -M:    Sanyog Kale <sanyog.r.kale@intel.com>
 +M:    Bard Liao <yung-chuan.liao@linux.intel.com>
  R:    Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
 +R:    Sanyog Kale <sanyog.r.kale@intel.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/driver-api/soundwire/
@@@ -16187,22 -16040,10 +16182,22 @@@ SPARSE CHECKE
  M:    "Luc Van Oostenryck" <luc.vanoostenryck@gmail.com>
  L:    linux-sparse@vger.kernel.org
  S:    Maintained
 -W:    https://sparse.wiki.kernel.org/
 +W:    https://sparse.docs.kernel.org/
  T:    git git://git.kernel.org/pub/scm/devel/sparse/sparse.git
 +Q:    https://patchwork.kernel.org/project/linux-sparse/list/
 +B:    https://bugzilla.kernel.org/enter_bug.cgi?component=Sparse&product=Tools
  F:    include/linux/compiler.h
  
 +SPEAKUP CONSOLE SPEECH DRIVER
 +M:    William Hubbs <w.d.hubbs@gmail.com>
 +M:    Chris Brannon <chris@the-brannons.com>
 +M:    Kirk Reiser <kirk@reisers.ca>
 +M:    Samuel Thibault <samuel.thibault@ens-lyon.org>
 +L:    speakup@linux-speakup.org
 +S:    Odd Fixes
 +W:    http://www.linux-speakup.org/
 +F:    drivers/accessibility/speakup/
 +
  SPEAR CLOCK FRAMEWORK SUPPORT
  M:    Viresh Kumar <vireshk@kernel.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -16247,7 -16088,7 +16242,7 @@@ SPIDERNET NETWORK DRIVER for CEL
  M:    Ishizaki Kou <kou.ishizaki@toshiba.co.jp>
  L:    netdev@vger.kernel.org
  S:    Supported
 -F:    Documentation/networking/device_drivers/toshiba/spider_net.rst
 +F:    Documentation/networking/device_drivers/ethernet/toshiba/spider_net.rst
  F:    drivers/net/ethernet/toshiba/spider_net*
  
  SPMI SUBSYSTEM
@@@ -16390,11 -16231,28 +16385,11 @@@ L:        linux-fbdev@vger.kernel.or
  S:    Maintained
  F:    drivers/staging/sm750fb/
  
 -STAGING - SPEAKUP CONSOLE SPEECH DRIVER
 -M:    William Hubbs <w.d.hubbs@gmail.com>
 -M:    Chris Brannon <chris@the-brannons.com>
 -M:    Kirk Reiser <kirk@reisers.ca>
 -M:    Samuel Thibault <samuel.thibault@ens-lyon.org>
 -L:    speakup@linux-speakup.org
 -S:    Odd Fixes
 -W:    http://www.linux-speakup.org/
 -F:    drivers/staging/speakup/
 -
  STAGING - VIA VT665X DRIVERS
  M:    Forest Bond <forest@alittletooquiet.net>
  S:    Odd Fixes
  F:    drivers/staging/vt665?/
  
 -STAGING - WILC1000 WIFI DRIVER
 -M:    Adham Abozaeid <adham.abozaeid@microchip.com>
 -M:    Ajay Singh <ajay.kathat@microchip.com>
 -L:    linux-wireless@vger.kernel.org
 -S:    Supported
 -F:    drivers/staging/wilc1000/
 -
  STAGING SUBSYSTEM
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    devel@driverdev.osuosl.org
@@@ -16457,7 -16315,7 +16452,7 @@@ M:   Jose Abreu <joabreu@synopsys.com
  L:    netdev@vger.kernel.org
  S:    Supported
  W:    http://www.stlinux.com
 -F:    Documentation/networking/device_drivers/stmicro/
 +F:    Documentation/networking/device_drivers/ethernet/stmicro/
  F:    drivers/net/ethernet/stmicro/stmmac/
  
  SUN3/3X
@@@ -16896,9 -16754,9 +16891,9 @@@ F:   include/media/i2c/tw9910.
  
  TEE SUBSYSTEM
  M:    Jens Wiklander <jens.wiklander@linaro.org>
 -L:    tee-dev@lists.linaro.org
 +L:    op-tee@lists.trustedfirmware.org
  S:    Maintained
 -F:    Documentation/tee.txt
 +F:    Documentation/staging/tee.rst
  F:    drivers/tee/
  F:    include/linux/tee_drv.h
  F:    include/uapi/linux/tee.h
@@@ -17052,7 -16910,7 +17047,7 @@@ F:   drivers/media/radio/radio-raremono.
  THERMAL
  M:    Zhang Rui <rui.zhang@intel.com>
  M:    Daniel Lezcano <daniel.lezcano@linaro.org>
 -R:    Amit Kucheria <amit.kucheria@verdurent.com>
 +R:    Amit Kucheria <amitk@kernel.org>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  Q:    https://patchwork.kernel.org/project/linux-pm/list/
@@@ -17085,14 -16943,6 +17080,14 @@@ F: drivers/thermal/cpufreq_cooling.
  F:    drivers/thermal/cpuidle_cooling.c
  F:    include/linux/cpu_cooling.h
  
 +THERMAL/POWER_ALLOCATOR
 +M:    Lukasz Luba <lukasz.luba@arm.com>
 +L:    linux-pm@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/driver-api/thermal/power_allocator.rst
 +F:    drivers/thermal/gov_power_allocator.c
 +F:    include/trace/events/thermal_power_allocator.h
 +
  THINKPAD ACPI EXTRAS DRIVER
  M:    Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
  L:    ibm-acpi-devel@lists.sourceforge.net
@@@ -17353,7 -17203,7 +17348,7 @@@ M:   Samuel Chessman <chessman@tux.org
  L:    tlan-devel@lists.sourceforge.net (subscribers-only)
  S:    Maintained
  W:    http://sourceforge.net/projects/tlan/
 -F:    Documentation/networking/device_drivers/ti/tlan.rst
 +F:    Documentation/networking/device_drivers/ethernet/ti/tlan.rst
  F:    drivers/net/ethernet/ti/tlan.*
  
  TM6000 VIDEO4LINUX DRIVER
@@@ -17418,7 -17268,7 +17413,7 @@@ M:   Josh Triplett <josh@joshtriplett.org
  L:    linux-kernel@vger.kernel.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git dev
 -F:    Documentation/RCU/torture.txt
 +F:    Documentation/RCU/torture.rst
  F:    kernel/locking/locktorture.c
  F:    kernel/rcu/rcuperf.c
  F:    kernel/rcu/rcutorture.c
@@@ -17510,7 -17360,7 +17505,7 @@@ K:   ^Subject:.*(?i)trivia
  
  TTY LAYER
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 -M:    Jiri Slaby <jslaby@suse.com>
 +M:    Jiri Slaby <jirislaby@kernel.org>
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
  F:    Documentation/driver-api/serial/
@@@ -17643,7 -17493,7 +17638,7 @@@ F:   Documentation/admin-guide/ufs.rs
  F:    fs/ufs/
  
  UHID USERSPACE HID IO DRIVER
 -M:    David Herrmann <dh.herrmann@googlemail.com>
 +M:    David Rheinsberg <david.rheinsberg@gmail.com>
  L:    linux-input@vger.kernel.org
  S:    Maintained
  F:    drivers/hid/uhid.c
@@@ -17662,6 -17512,13 +17657,6 @@@ L:  linux-fsdevel@vger.kernel.or
  S:    Supported
  F:    fs/unicode/
  
 -UNICORE32 ARCHITECTURE
 -M:    Guan Xuetao <gxt@pku.edu.cn>
 -S:    Maintained
 -W:    http://mprc.pku.edu.cn/~guanxuetao/linux
 -T:    git git://github.com/gxt/linux.git
 -F:    arch/unicore32/
 -
  UNIFDEF
  M:    Tony Finch <dot@dotat.at>
  S:    Maintained
@@@ -18392,6 -18249,14 +18387,6 @@@ S:  Maintaine
  F:    drivers/input/serio/userio.c
  F:    include/uapi/linux/userio.h
  
 -VITESSE FELIX ETHERNET SWITCH DRIVER
 -M:    Vladimir Oltean <vladimir.oltean@nxp.com>
 -M:    Claudiu Manoil <claudiu.manoil@nxp.com>
 -L:    netdev@vger.kernel.org
 -S:    Maintained
 -F:    drivers/net/dsa/ocelot/*
 -F:    net/dsa/tag_ocelot.c
 -
  VIVID VIRTUAL VIDEO DRIVER
  M:    Hans Verkuil <hverkuil@xs4all.nl>
  L:    linux-media@vger.kernel.org
@@@ -18595,7 -18460,7 +18590,7 @@@ S:   Maintaine
  F:    drivers/rtc/rtc-sd3078.c
  
  WIIMOTE HID DRIVER
 -M:    David Herrmann <dh.herrmann@googlemail.com>
 +M:    David Rheinsberg <david.rheinsberg@gmail.com>
  L:    linux-input@vger.kernel.org
  S:    Maintained
  F:    drivers/hid/hid-wiimote*
@@@ -18991,15 -18856,6 +18986,15 @@@ F: Documentation/devicetree/bindings/dm
  F:    drivers/dma/xilinx/xilinx_dpdma.c
  F:    include/dt-bindings/dma/xlnx-zynqmp-dpdma.h
  
 +XILINX ZYNQMP PSGTR PHY DRIVER
 +M:    Anurag Kumar Vulisha <anurag.kumar.vulisha@xilinx.com>
 +M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 +L:    linux-kernel@vger.kernel.org
 +S:    Supported
 +T:    git https://github.com/Xilinx/linux-xlnx.git
 +F:    Documentation/devicetree/bindings/phy/xlnx,zynqmp-psgtr.yaml
 +F:    drivers/phy/xilinx/phy-zynqmp.c
 +
  XILLYBUS DRIVER
  M:    Eli Billauer <eli.billauer@gmail.com>
  L:    linux-kernel@vger.kernel.org
@@@ -19056,7 -18912,7 +19051,7 @@@ L:   linux-hams@vger.kernel.or
  S:    Maintained
  W:    http://yaina.de/jreuter/
  W:    http://www.qsl.net/dl1bke/
 -F:    Documentation/networking/z8530drv.rst
 +F:    Documentation/networking/device_drivers/hamradio/z8530drv.rst
  F:    drivers/net/hamradio/*scc.c
  F:    drivers/net/hamradio/z8530.h
  
@@@ -186,17 -186,17 +186,17 @@@ static void k3_udma_glue_dump_tx_rt_chn
        struct device *dev = chn->common.dev;
  
        dev_dbg(dev, "=== dump ===> %s\n", mark);
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_TCHAN_RT_CTL_REG,
-               xudma_tchanrt_read(chn->udma_tchanx, UDMA_TCHAN_RT_CTL_REG));
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_TCHAN_RT_PEER_RT_EN_REG,
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_CTL_REG,
+               xudma_tchanrt_read(chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG));
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_PEER_RT_EN_REG,
                xudma_tchanrt_read(chn->udma_tchanx,
-                                  UDMA_TCHAN_RT_PEER_RT_EN_REG));
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_TCHAN_RT_PCNT_REG,
-               xudma_tchanrt_read(chn->udma_tchanx, UDMA_TCHAN_RT_PCNT_REG));
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_TCHAN_RT_BCNT_REG,
-               xudma_tchanrt_read(chn->udma_tchanx, UDMA_TCHAN_RT_BCNT_REG));
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_TCHAN_RT_SBCNT_REG,
-               xudma_tchanrt_read(chn->udma_tchanx, UDMA_TCHAN_RT_SBCNT_REG));
+                                  UDMA_CHAN_RT_PEER_RT_EN_REG));
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_PCNT_REG,
+               xudma_tchanrt_read(chn->udma_tchanx, UDMA_CHAN_RT_PCNT_REG));
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_BCNT_REG,
+               xudma_tchanrt_read(chn->udma_tchanx, UDMA_CHAN_RT_BCNT_REG));
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_SBCNT_REG,
+               xudma_tchanrt_read(chn->udma_tchanx, UDMA_CHAN_RT_SBCNT_REG));
  }
  
  static int k3_udma_glue_cfg_tx_chn(struct k3_udma_glue_tx_channel *tx_chn)
@@@ -271,12 -271,20 +271,12 @@@ struct k3_udma_glue_tx_channel *k3_udma
        atomic_set(&tx_chn->free_pkts, cfg->txcq_cfg.size);
  
        /* request and cfg rings */
 -      tx_chn->ringtx = k3_ringacc_request_ring(tx_chn->common.ringacc,
 -                                               tx_chn->udma_tchan_id, 0);
 -      if (!tx_chn->ringtx) {
 -              ret = -ENODEV;
 -              dev_err(dev, "Failed to get TX ring %u\n",
 -                      tx_chn->udma_tchan_id);
 -              goto err;
 -      }
 -
 -      tx_chn->ringtxcq = k3_ringacc_request_ring(tx_chn->common.ringacc,
 -                                                 -1, 0);
 -      if (!tx_chn->ringtxcq) {
 -              ret = -ENODEV;
 -              dev_err(dev, "Failed to get TXCQ ring\n");
 +      ret =  k3_ringacc_request_rings_pair(tx_chn->common.ringacc,
 +                                           tx_chn->udma_tchan_id, -1,
 +                                           &tx_chn->ringtx,
 +                                           &tx_chn->ringtxcq);
 +      if (ret) {
 +              dev_err(dev, "Failed to get TX/TXCQ rings %d\n", ret);
                goto err;
        }
  
@@@ -381,14 -389,13 +381,13 @@@ int k3_udma_glue_enable_tx_chn(struct k
        u32 txrt_ctl;
  
        txrt_ctl = UDMA_PEER_RT_EN_ENABLE;
-       xudma_tchanrt_write(tx_chn->udma_tchanx,
-                           UDMA_TCHAN_RT_PEER_RT_EN_REG,
+       xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_PEER_RT_EN_REG,
                            txrt_ctl);
  
        txrt_ctl = xudma_tchanrt_read(tx_chn->udma_tchanx,
-                                     UDMA_TCHAN_RT_CTL_REG);
+                                     UDMA_CHAN_RT_CTL_REG);
        txrt_ctl |= UDMA_CHAN_RT_CTL_EN;
-       xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_TCHAN_RT_CTL_REG,
+       xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG,
                            txrt_ctl);
  
        k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn en");
@@@ -400,10 -407,10 +399,10 @@@ void k3_udma_glue_disable_tx_chn(struc
  {
        k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn dis1");
  
-       xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_TCHAN_RT_CTL_REG, 0);
+       xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG, 0);
  
        xudma_tchanrt_write(tx_chn->udma_tchanx,
-                           UDMA_TCHAN_RT_PEER_RT_EN_REG, 0);
+                           UDMA_CHAN_RT_PEER_RT_EN_REG, 0);
        k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn dis2");
  }
  EXPORT_SYMBOL_GPL(k3_udma_glue_disable_tx_chn);
@@@ -416,14 -423,14 +415,14 @@@ void k3_udma_glue_tdown_tx_chn(struct k
  
        k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn tdown1");
  
-       xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_TCHAN_RT_CTL_REG,
+       xudma_tchanrt_write(tx_chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG,
                            UDMA_CHAN_RT_CTL_EN | UDMA_CHAN_RT_CTL_TDOWN);
  
-       val = xudma_tchanrt_read(tx_chn->udma_tchanx, UDMA_TCHAN_RT_CTL_REG);
+       val = xudma_tchanrt_read(tx_chn->udma_tchanx, UDMA_CHAN_RT_CTL_REG);
  
        while (sync && (val & UDMA_CHAN_RT_CTL_EN)) {
                val = xudma_tchanrt_read(tx_chn->udma_tchanx,
-                                        UDMA_TCHAN_RT_CTL_REG);
+                                        UDMA_CHAN_RT_CTL_REG);
                udelay(1);
                if (i > K3_UDMAX_TDOWN_TIMEOUT_US) {
                        dev_err(tx_chn->common.dev, "TX tdown timeout\n");
        }
  
        val = xudma_tchanrt_read(tx_chn->udma_tchanx,
-                                UDMA_TCHAN_RT_PEER_RT_EN_REG);
+                                UDMA_CHAN_RT_PEER_RT_EN_REG);
        if (sync && (val & UDMA_PEER_RT_EN_ENABLE))
                dev_err(tx_chn->common.dev, "TX tdown peer not stopped\n");
        k3_udma_glue_dump_tx_rt_chn(tx_chn, "txchn tdown2");
@@@ -579,16 -586,22 +578,16 @@@ static int k3_udma_glue_cfg_rx_flow(str
        }
  
        /* request and cfg rings */
 -      flow->ringrx = k3_ringacc_request_ring(rx_chn->common.ringacc,
 -                                             flow_cfg->ring_rxq_id, 0);
 -      if (!flow->ringrx) {
 -              ret = -ENODEV;
 -              dev_err(dev, "Failed to get RX ring\n");
 +      ret =  k3_ringacc_request_rings_pair(rx_chn->common.ringacc,
 +                                           flow_cfg->ring_rxq_id,
 +                                           flow_cfg->ring_rxfdq0_id,
 +                                           &flow->ringrxfdq,
 +                                           &flow->ringrx);
 +      if (ret) {
 +              dev_err(dev, "Failed to get RX/RXFDQ rings %d\n", ret);
                goto err_rflow_put;
        }
  
 -      flow->ringrxfdq = k3_ringacc_request_ring(rx_chn->common.ringacc,
 -                                                flow_cfg->ring_rxfdq0_id, 0);
 -      if (!flow->ringrxfdq) {
 -              ret = -ENODEV;
 -              dev_err(dev, "Failed to get RXFDQ ring\n");
 -              goto err_ringrx_free;
 -      }
 -
        ret = k3_ringacc_ring_cfg(flow->ringrx, &flow_cfg->rx_cfg);
        if (ret) {
                dev_err(dev, "Failed to cfg ringrx %d\n", ret);
  
  err_ringrxfdq_free:
        k3_ringacc_ring_free(flow->ringrxfdq);
 -
 -err_ringrx_free:
        k3_ringacc_ring_free(flow->ringrx);
  
  err_rflow_put:
@@@ -700,17 -715,17 +699,17 @@@ static void k3_udma_glue_dump_rx_rt_chn
  
        dev_dbg(dev, "=== dump ===> %s\n", mark);
  
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_RCHAN_RT_CTL_REG,
-               xudma_rchanrt_read(chn->udma_rchanx, UDMA_RCHAN_RT_CTL_REG));
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_RCHAN_RT_PEER_RT_EN_REG,
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_CTL_REG,
+               xudma_rchanrt_read(chn->udma_rchanx, UDMA_CHAN_RT_CTL_REG));
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_PEER_RT_EN_REG,
                xudma_rchanrt_read(chn->udma_rchanx,
-                                  UDMA_RCHAN_RT_PEER_RT_EN_REG));
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_RCHAN_RT_PCNT_REG,
-               xudma_rchanrt_read(chn->udma_rchanx, UDMA_RCHAN_RT_PCNT_REG));
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_RCHAN_RT_BCNT_REG,
-               xudma_rchanrt_read(chn->udma_rchanx, UDMA_RCHAN_RT_BCNT_REG));
-       dev_dbg(dev, "0x%08X: %08X\n", UDMA_RCHAN_RT_SBCNT_REG,
-               xudma_rchanrt_read(chn->udma_rchanx, UDMA_RCHAN_RT_SBCNT_REG));
+                                  UDMA_CHAN_RT_PEER_RT_EN_REG));
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_PCNT_REG,
+               xudma_rchanrt_read(chn->udma_rchanx, UDMA_CHAN_RT_PCNT_REG));
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_BCNT_REG,
+               xudma_rchanrt_read(chn->udma_rchanx, UDMA_CHAN_RT_BCNT_REG));
+       dev_dbg(dev, "0x%08X: %08X\n", UDMA_CHAN_RT_SBCNT_REG,
+               xudma_rchanrt_read(chn->udma_rchanx, UDMA_CHAN_RT_SBCNT_REG));
  }
  
  static int
@@@ -1068,13 -1083,12 +1067,12 @@@ int k3_udma_glue_enable_rx_chn(struct k
                return -EINVAL;
  
        rxrt_ctl = xudma_rchanrt_read(rx_chn->udma_rchanx,
-                                     UDMA_RCHAN_RT_CTL_REG);
+                                     UDMA_CHAN_RT_CTL_REG);
        rxrt_ctl |= UDMA_CHAN_RT_CTL_EN;
-       xudma_rchanrt_write(rx_chn->udma_rchanx, UDMA_RCHAN_RT_CTL_REG,
+       xudma_rchanrt_write(rx_chn->udma_rchanx, UDMA_CHAN_RT_CTL_REG,
                            rxrt_ctl);
  
-       xudma_rchanrt_write(rx_chn->udma_rchanx,
-                           UDMA_RCHAN_RT_PEER_RT_EN_REG,
+       xudma_rchanrt_write(rx_chn->udma_rchanx, UDMA_CHAN_RT_PEER_RT_EN_REG,
                            UDMA_PEER_RT_EN_ENABLE);
  
        k3_udma_glue_dump_rx_rt_chn(rx_chn, "rxrt en");
@@@ -1087,9 -1101,8 +1085,8 @@@ void k3_udma_glue_disable_rx_chn(struc
        k3_udma_glue_dump_rx_rt_chn(rx_chn, "rxrt dis1");
  
        xudma_rchanrt_write(rx_chn->udma_rchanx,
-                           UDMA_RCHAN_RT_PEER_RT_EN_REG,
-                           0);
-       xudma_rchanrt_write(rx_chn->udma_rchanx, UDMA_RCHAN_RT_CTL_REG, 0);
+                           UDMA_CHAN_RT_PEER_RT_EN_REG, 0);
+       xudma_rchanrt_write(rx_chn->udma_rchanx, UDMA_CHAN_RT_CTL_REG, 0);
  
        k3_udma_glue_dump_rx_rt_chn(rx_chn, "rxrt dis2");
  }
@@@ -1106,14 -1119,14 +1103,14 @@@ void k3_udma_glue_tdown_rx_chn(struct k
  
        k3_udma_glue_dump_rx_rt_chn(rx_chn, "rxrt tdown1");
  
-       xudma_rchanrt_write(rx_chn->udma_rchanx, UDMA_RCHAN_RT_PEER_RT_EN_REG,
+       xudma_rchanrt_write(rx_chn->udma_rchanx, UDMA_CHAN_RT_PEER_RT_EN_REG,
                            UDMA_PEER_RT_EN_ENABLE | UDMA_PEER_RT_EN_TEARDOWN);
  
-       val = xudma_rchanrt_read(rx_chn->udma_rchanx, UDMA_RCHAN_RT_CTL_REG);
+       val = xudma_rchanrt_read(rx_chn->udma_rchanx, UDMA_CHAN_RT_CTL_REG);
  
        while (sync && (val & UDMA_CHAN_RT_CTL_EN)) {
                val = xudma_rchanrt_read(rx_chn->udma_rchanx,
-                                        UDMA_RCHAN_RT_CTL_REG);
+                                        UDMA_CHAN_RT_CTL_REG);
                udelay(1);
                if (i > K3_UDMAX_TDOWN_TIMEOUT_US) {
                        dev_err(rx_chn->common.dev, "RX tdown timeout\n");
        }
  
        val = xudma_rchanrt_read(rx_chn->udma_rchanx,
-                                UDMA_RCHAN_RT_PEER_RT_EN_REG);
+                                UDMA_CHAN_RT_PEER_RT_EN_REG);
        if (sync && (val & UDMA_PEER_RT_EN_ENABLE))
                dev_err(rx_chn->common.dev, "TX tdown peer not stopped\n");
        k3_udma_glue_dump_rx_rt_chn(rx_chn, "rxrt tdown2");
diff --combined drivers/dma/ti/k3-udma.c
@@@ -92,9 -92,6 +92,6 @@@ struct udma_match_data 
        u32 flags;
        u32 statictr_z_mask;
        u32 rchan_oes_offset;
-       u8 tpl_levels;
-       u32 level_start_idx[];
  };
  
  struct udma_hwdesc {
@@@ -121,6 -118,9 +118,9 @@@ struct udma_dev 
        void __iomem *mmrs[MMR_LAST];
        const struct udma_match_data *match_data;
  
+       u8 tpl_levels;
+       u32 tpl_start_idx[3];
        size_t desc_align; /* alignment to use for descriptors */
  
        struct udma_tisci_rm tisci_rm;
@@@ -170,7 -170,7 +170,7 @@@ struct udma_desc 
        void *metadata; /* pointer to provided metadata buffer (EPIP, PSdata) */
  
        unsigned int hwdesc_count;
 -      struct udma_hwdesc hwdesc[0];
 +      struct udma_hwdesc hwdesc[];
  };
  
  enum udma_chan_state {
@@@ -282,51 -282,49 +282,49 @@@ static inline void udma_update_bits(voi
  }
  
  /* TCHANRT */
- static inline u32 udma_tchanrt_read(struct udma_tchan *tchan, int reg)
+ static inline u32 udma_tchanrt_read(struct udma_chan *uc, int reg)
  {
-       if (!tchan)
+       if (!uc->tchan)
                return 0;
-       return udma_read(tchan->reg_rt, reg);
+       return udma_read(uc->tchan->reg_rt, reg);
  }
  
- static inline void udma_tchanrt_write(struct udma_tchan *tchan, int reg,
-                                     u32 val)
+ static inline void udma_tchanrt_write(struct udma_chan *uc, int reg, u32 val)
  {
-       if (!tchan)
+       if (!uc->tchan)
                return;
-       udma_write(tchan->reg_rt, reg, val);
+       udma_write(uc->tchan->reg_rt, reg, val);
  }
  
- static inline void udma_tchanrt_update_bits(struct udma_tchan *tchan, int reg,
+ static inline void udma_tchanrt_update_bits(struct udma_chan *uc, int reg,
                                            u32 mask, u32 val)
  {
-       if (!tchan)
+       if (!uc->tchan)
                return;
-       udma_update_bits(tchan->reg_rt, reg, mask, val);
+       udma_update_bits(uc->tchan->reg_rt, reg, mask, val);
  }
  
  /* RCHANRT */
- static inline u32 udma_rchanrt_read(struct udma_rchan *rchan, int reg)
+ static inline u32 udma_rchanrt_read(struct udma_chan *uc, int reg)
  {
-       if (!rchan)
+       if (!uc->rchan)
                return 0;
-       return udma_read(rchan->reg_rt, reg);
+       return udma_read(uc->rchan->reg_rt, reg);
  }
  
- static inline void udma_rchanrt_write(struct udma_rchan *rchan, int reg,
-                                     u32 val)
+ static inline void udma_rchanrt_write(struct udma_chan *uc, int reg, u32 val)
  {
-       if (!rchan)
+       if (!uc->rchan)
                return;
-       udma_write(rchan->reg_rt, reg, val);
+       udma_write(uc->rchan->reg_rt, reg, val);
  }
  
- static inline void udma_rchanrt_update_bits(struct udma_rchan *rchan, int reg,
+ static inline void udma_rchanrt_update_bits(struct udma_chan *uc, int reg,
                                            u32 mask, u32 val)
  {
-       if (!rchan)
+       if (!uc->rchan)
                return;
-       udma_update_bits(rchan->reg_rt, reg, mask, val);
+       udma_update_bits(uc->rchan->reg_rt, reg, mask, val);
  }
  
  static int navss_psil_pair(struct udma_dev *ud, u32 src_thread, u32 dst_thread)
@@@ -366,18 -364,18 +364,18 @@@ static void udma_dump_chan_stdata(struc
        if (uc->config.dir == DMA_MEM_TO_DEV || uc->config.dir == DMA_MEM_TO_MEM) {
                dev_dbg(dev, "TCHAN State data:\n");
                for (i = 0; i < 32; i++) {
-                       offset = UDMA_TCHAN_RT_STDATA_REG + i * 4;
+                       offset = UDMA_CHAN_RT_STDATA_REG + i * 4;
                        dev_dbg(dev, "TRT_STDATA[%02d]: 0x%08x\n", i,
-                               udma_tchanrt_read(uc->tchan, offset));
+                               udma_tchanrt_read(uc, offset));
                }
        }
  
        if (uc->config.dir == DMA_DEV_TO_MEM || uc->config.dir == DMA_MEM_TO_MEM) {
                dev_dbg(dev, "RCHAN State data:\n");
                for (i = 0; i < 32; i++) {
-                       offset = UDMA_RCHAN_RT_STDATA_REG + i * 4;
+                       offset = UDMA_CHAN_RT_STDATA_REG + i * 4;
                        dev_dbg(dev, "RRT_STDATA[%02d]: 0x%08x\n", i,
-                               udma_rchanrt_read(uc->rchan, offset));
+                               udma_rchanrt_read(uc, offset));
                }
        }
  }
@@@ -500,9 -498,9 +498,9 @@@ static bool udma_is_chan_running(struc
        u32 rrt_ctl = 0;
  
        if (uc->tchan)
-               trt_ctl = udma_tchanrt_read(uc->tchan, UDMA_TCHAN_RT_CTL_REG);
+               trt_ctl = udma_tchanrt_read(uc, UDMA_CHAN_RT_CTL_REG);
        if (uc->rchan)
-               rrt_ctl = udma_rchanrt_read(uc->rchan, UDMA_RCHAN_RT_CTL_REG);
+               rrt_ctl = udma_rchanrt_read(uc, UDMA_CHAN_RT_CTL_REG);
  
        if (trt_ctl & UDMA_CHAN_RT_CTL_EN || rrt_ctl & UDMA_CHAN_RT_CTL_EN)
                return true;
@@@ -516,17 -514,15 +514,15 @@@ static bool udma_is_chan_paused(struct 
  
        switch (uc->config.dir) {
        case DMA_DEV_TO_MEM:
-               val = udma_rchanrt_read(uc->rchan,
-                                       UDMA_RCHAN_RT_PEER_RT_EN_REG);
+               val = udma_rchanrt_read(uc, UDMA_CHAN_RT_PEER_RT_EN_REG);
                pause_mask = UDMA_PEER_RT_EN_PAUSE;
                break;
        case DMA_MEM_TO_DEV:
-               val = udma_tchanrt_read(uc->tchan,
-                                       UDMA_TCHAN_RT_PEER_RT_EN_REG);
+               val = udma_tchanrt_read(uc, UDMA_CHAN_RT_PEER_RT_EN_REG);
                pause_mask = UDMA_PEER_RT_EN_PAUSE;
                break;
        case DMA_MEM_TO_MEM:
-               val = udma_tchanrt_read(uc->tchan, UDMA_TCHAN_RT_CTL_REG);
+               val = udma_tchanrt_read(uc, UDMA_CHAN_RT_CTL_REG);
                pause_mask = UDMA_CHAN_RT_CTL_PAUSE;
                break;
        default:
        return false;
  }
  
- static void udma_sync_for_device(struct udma_chan *uc, int idx)
- {
-       struct udma_desc *d = uc->desc;
-       if (uc->cyclic && uc->config.pkt_mode) {
-               dma_sync_single_for_device(uc->ud->dev,
-                                          d->hwdesc[idx].cppi5_desc_paddr,
-                                          d->hwdesc[idx].cppi5_desc_size,
-                                          DMA_TO_DEVICE);
-       } else {
-               int i;
-               for (i = 0; i < d->hwdesc_count; i++) {
-                       if (!d->hwdesc[i].cppi5_desc_vaddr)
-                               continue;
-                       dma_sync_single_for_device(uc->ud->dev,
-                                               d->hwdesc[i].cppi5_desc_paddr,
-                                               d->hwdesc[i].cppi5_desc_size,
-                                               DMA_TO_DEVICE);
-               }
-       }
- }
  static inline dma_addr_t udma_get_rx_flush_hwdesc_paddr(struct udma_chan *uc)
  {
        return uc->ud->rx_flush.hwdescs[uc->config.pkt_mode].cppi5_desc_paddr;
@@@ -593,7 -565,6 +565,6 @@@ static int udma_push_to_ring(struct udm
                paddr = udma_curr_cppi5_desc_paddr(d, idx);
  
                wmb(); /* Ensure that writes are not moved over this point */
-               udma_sync_for_device(uc, idx);
        }
  
        return k3_ringacc_ring_push(ring, &paddr);
@@@ -613,7 -584,7 +584,7 @@@ static bool udma_desc_is_rx_flush(struc
  static int udma_pop_from_ring(struct udma_chan *uc, dma_addr_t *addr)
  {
        struct k3_ring *ring = NULL;
-       int ret = -ENOENT;
+       int ret;
  
        switch (uc->config.dir) {
        case DMA_DEV_TO_MEM:
                ring = uc->tchan->tc_ring;
                break;
        default:
-               break;
+               return -ENOENT;
        }
  
-       if (ring && k3_ringacc_ring_get_occ(ring)) {
-               struct udma_desc *d = NULL;
-               ret = k3_ringacc_ring_pop(ring, addr);
-               if (ret)
-                       return ret;
-               /* Teardown completion */
-               if (cppi5_desc_is_tdcm(*addr))
-                       return ret;
+       ret = k3_ringacc_ring_pop(ring, addr);
+       if (ret)
+               return ret;
  
-               /* Check for flush descriptor */
-               if (udma_desc_is_rx_flush(uc, *addr))
-                       return -ENOENT;
+       rmb(); /* Ensure that reads are not moved before this point */
  
-               d = udma_udma_desc_from_paddr(uc, *addr);
+       /* Teardown completion */
+       if (cppi5_desc_is_tdcm(*addr))
+               return 0;
  
-               if (d)
-                       dma_sync_single_for_cpu(uc->ud->dev, *addr,
-                                               d->hwdesc[0].cppi5_desc_size,
-                                               DMA_FROM_DEVICE);
-               rmb(); /* Ensure that reads are not moved before this point */
-       }
+       /* Check for flush descriptor */
+       if (udma_desc_is_rx_flush(uc, *addr))
+               return -ENOENT;
  
-       return ret;
+       return 0;
  }
  
  static void udma_reset_rings(struct udma_chan *uc)
@@@ -695,31 -656,31 +656,31 @@@ static void udma_reset_counters(struct 
        u32 val;
  
        if (uc->tchan) {
-               val = udma_tchanrt_read(uc->tchan, UDMA_TCHAN_RT_BCNT_REG);
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_BCNT_REG, val);
+               val = udma_tchanrt_read(uc, UDMA_CHAN_RT_BCNT_REG);
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_BCNT_REG, val);
  
-               val = udma_tchanrt_read(uc->tchan, UDMA_TCHAN_RT_SBCNT_REG);
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_SBCNT_REG, val);
+               val = udma_tchanrt_read(uc, UDMA_CHAN_RT_SBCNT_REG);
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_SBCNT_REG, val);
  
-               val = udma_tchanrt_read(uc->tchan, UDMA_TCHAN_RT_PCNT_REG);
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_PCNT_REG, val);
+               val = udma_tchanrt_read(uc, UDMA_CHAN_RT_PCNT_REG);
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_PCNT_REG, val);
  
-               val = udma_tchanrt_read(uc->tchan, UDMA_TCHAN_RT_PEER_BCNT_REG);
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_PEER_BCNT_REG, val);
+               val = udma_tchanrt_read(uc, UDMA_CHAN_RT_PEER_BCNT_REG);
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_PEER_BCNT_REG, val);
        }
  
        if (uc->rchan) {
-               val = udma_rchanrt_read(uc->rchan, UDMA_RCHAN_RT_BCNT_REG);
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_BCNT_REG, val);
+               val = udma_rchanrt_read(uc, UDMA_CHAN_RT_BCNT_REG);
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_BCNT_REG, val);
  
-               val = udma_rchanrt_read(uc->rchan, UDMA_RCHAN_RT_SBCNT_REG);
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_SBCNT_REG, val);
+               val = udma_rchanrt_read(uc, UDMA_CHAN_RT_SBCNT_REG);
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_SBCNT_REG, val);
  
-               val = udma_rchanrt_read(uc->rchan, UDMA_RCHAN_RT_PCNT_REG);
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_PCNT_REG, val);
+               val = udma_rchanrt_read(uc, UDMA_CHAN_RT_PCNT_REG);
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_PCNT_REG, val);
  
-               val = udma_rchanrt_read(uc->rchan, UDMA_RCHAN_RT_PEER_BCNT_REG);
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_PEER_BCNT_REG, val);
+               val = udma_rchanrt_read(uc, UDMA_CHAN_RT_PEER_BCNT_REG);
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_PEER_BCNT_REG, val);
        }
  
        uc->bcnt = 0;
@@@ -729,16 -690,16 +690,16 @@@ static int udma_reset_chan(struct udma_
  {
        switch (uc->config.dir) {
        case DMA_DEV_TO_MEM:
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_PEER_RT_EN_REG, 0);
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_CTL_REG, 0);
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_PEER_RT_EN_REG, 0);
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_CTL_REG, 0);
                break;
        case DMA_MEM_TO_DEV:
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_CTL_REG, 0);
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_PEER_RT_EN_REG, 0);
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_CTL_REG, 0);
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_PEER_RT_EN_REG, 0);
                break;
        case DMA_MEM_TO_MEM:
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_CTL_REG, 0);
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_CTL_REG, 0);
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_CTL_REG, 0);
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_CTL_REG, 0);
                break;
        default:
                return -EINVAL;
                 * the rchan.
                 */
                if (uc->config.dir == DMA_DEV_TO_MEM)
-                       udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_CTL_REG,
+                       udma_rchanrt_write(uc, UDMA_CHAN_RT_CTL_REG,
                                           UDMA_CHAN_RT_CTL_EN |
                                           UDMA_CHAN_RT_CTL_TDOWN |
                                           UDMA_CHAN_RT_CTL_FTDOWN);
@@@ -843,11 -804,12 +804,12 @@@ static int udma_start(struct udma_chan 
                        if (uc->config.enable_burst)
                                val |= PDMA_STATIC_TR_XY_BURST;
  
-                       udma_rchanrt_write(uc->rchan,
-                               UDMA_RCHAN_RT_PEER_STATIC_TR_XY_REG, val);
+                       udma_rchanrt_write(uc,
+                                          UDMA_CHAN_RT_PEER_STATIC_TR_XY_REG,
+                                          val);
  
-                       udma_rchanrt_write(uc->rchan,
-                               UDMA_RCHAN_RT_PEER_STATIC_TR_Z_REG,
+                       udma_rchanrt_write(uc,
+                               UDMA_CHAN_RT_PEER_STATIC_TR_Z_REG,
                                PDMA_STATIC_TR_Z(uc->desc->static_tr.bstcnt,
                                                 match_data->statictr_z_mask));
  
                               sizeof(uc->static_tr));
                }
  
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_CTL_REG,
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_CTL_REG,
                                   UDMA_CHAN_RT_CTL_EN);
  
                /* Enable remote */
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_PEER_RT_EN_REG,
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_PEER_RT_EN_REG,
                                   UDMA_PEER_RT_EN_ENABLE);
  
                break;
                        if (uc->config.enable_burst)
                                val |= PDMA_STATIC_TR_XY_BURST;
  
-                       udma_tchanrt_write(uc->tchan,
-                               UDMA_TCHAN_RT_PEER_STATIC_TR_XY_REG, val);
+                       udma_tchanrt_write(uc,
+                                          UDMA_CHAN_RT_PEER_STATIC_TR_XY_REG,
+                                          val);
  
                        /* save the current staticTR configuration */
                        memcpy(&uc->static_tr, &uc->desc->static_tr,
                }
  
                /* Enable remote */
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_PEER_RT_EN_REG,
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_PEER_RT_EN_REG,
                                   UDMA_PEER_RT_EN_ENABLE);
  
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_CTL_REG,
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_CTL_REG,
                                   UDMA_CHAN_RT_CTL_EN);
  
                break;
        case DMA_MEM_TO_MEM:
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_CTL_REG,
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_CTL_REG,
                                   UDMA_CHAN_RT_CTL_EN);
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_CTL_REG,
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_CTL_REG,
                                   UDMA_CHAN_RT_CTL_EN);
  
                break;
@@@ -920,20 -883,20 +883,20 @@@ static int udma_stop(struct udma_chan *
                if (!uc->cyclic && !uc->desc)
                        udma_push_to_ring(uc, -1);
  
-               udma_rchanrt_write(uc->rchan, UDMA_RCHAN_RT_PEER_RT_EN_REG,
+               udma_rchanrt_write(uc, UDMA_CHAN_RT_PEER_RT_EN_REG,
                                   UDMA_PEER_RT_EN_ENABLE |
                                   UDMA_PEER_RT_EN_TEARDOWN);
                break;
        case DMA_MEM_TO_DEV:
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_PEER_RT_EN_REG,
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_PEER_RT_EN_REG,
                                   UDMA_PEER_RT_EN_ENABLE |
                                   UDMA_PEER_RT_EN_FLUSH);
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_CTL_REG,
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_CTL_REG,
                                   UDMA_CHAN_RT_CTL_EN |
                                   UDMA_CHAN_RT_CTL_TDOWN);
                break;
        case DMA_MEM_TO_MEM:
-               udma_tchanrt_write(uc->tchan, UDMA_TCHAN_RT_CTL_REG,
+               udma_tchanrt_write(uc, UDMA_CHAN_RT_CTL_REG,
                                   UDMA_CHAN_RT_CTL_EN |
                                   UDMA_CHAN_RT_CTL_TDOWN);
                break;
@@@ -973,8 -936,8 +936,8 @@@ static bool udma_is_desc_really_done(st
            uc->config.dir != DMA_MEM_TO_DEV)
                return true;
  
-       peer_bcnt = udma_tchanrt_read(uc->tchan, UDMA_TCHAN_RT_PEER_BCNT_REG);
-       bcnt = udma_tchanrt_read(uc->tchan, UDMA_TCHAN_RT_BCNT_REG);
+       peer_bcnt = udma_tchanrt_read(uc, UDMA_CHAN_RT_PEER_BCNT_REG);
+       bcnt = udma_tchanrt_read(uc, UDMA_CHAN_RT_BCNT_REG);
  
        /* Transfer is incomplete, store current residue and time stamp */
        if (peer_bcnt < bcnt) {
@@@ -1247,10 -1210,10 +1210,10 @@@ static struct udma_##res *__udma_reserv
        } else {                                                        \
                int start;                                              \
                                                                        \
-               if (tpl >= ud->match_data->tpl_levels)                  \
-                       tpl = ud->match_data->tpl_levels - 1;           \
+               if (tpl >= ud->tpl_levels)                              \
+                       tpl = ud->tpl_levels - 1;                       \
                                                                        \
-               start = ud->match_data->level_start_idx[tpl];           \
+               start = ud->tpl_start_idx[tpl];                         \
                                                                        \
                id = find_next_zero_bit(ud->res##_map, ud->res##_cnt,   \
                                        start);                         \
@@@ -1299,7 -1262,6 +1262,6 @@@ static int udma_get_rchan(struct udma_c
  static int udma_get_chan_pair(struct udma_chan *uc)
  {
        struct udma_dev *ud = uc->ud;
-       const struct udma_match_data *match_data = ud->match_data;
        int chan_id, end;
  
        if ((uc->tchan && uc->rchan) && uc->tchan->id == uc->rchan->id) {
        /* Can be optimized, but let's have it like this for now */
        end = min(ud->tchan_cnt, ud->rchan_cnt);
        /* Try to use the highest TPL channel pair for MEM_TO_MEM channels */
-       chan_id = match_data->level_start_idx[match_data->tpl_levels - 1];
+       chan_id = ud->tpl_start_idx[ud->tpl_levels - 1];
        for (; chan_id < end; chan_id++) {
                if (!test_bit(chan_id, ud->tchan_map) &&
                    !test_bit(chan_id, ud->rchan_map))
@@@ -1418,12 -1380,17 +1380,12 @@@ static int udma_alloc_tx_resources(stru
        if (ret)
                return ret;
  
 -      uc->tchan->t_ring = k3_ringacc_request_ring(ud->ringacc,
 -                                                  uc->tchan->id, 0);
 -      if (!uc->tchan->t_ring) {
 -              ret = -EBUSY;
 -              goto err_tx_ring;
 -      }
 -
 -      uc->tchan->tc_ring = k3_ringacc_request_ring(ud->ringacc, -1, 0);
 -      if (!uc->tchan->tc_ring) {
 +      ret = k3_ringacc_request_rings_pair(ud->ringacc, uc->tchan->id, -1,
 +                                          &uc->tchan->t_ring,
 +                                          &uc->tchan->tc_ring);
 +      if (ret) {
                ret = -EBUSY;
 -              goto err_txc_ring;
 +              goto err_ring;
        }
  
        memset(&ring_cfg, 0, sizeof(ring_cfg));
  err_ringcfg:
        k3_ringacc_ring_free(uc->tchan->tc_ring);
        uc->tchan->tc_ring = NULL;
 -err_txc_ring:
        k3_ringacc_ring_free(uc->tchan->t_ring);
        uc->tchan->t_ring = NULL;
 -err_tx_ring:
 +err_ring:
        udma_put_tchan(uc);
  
        return ret;
@@@ -1493,11 -1461,16 +1455,11 @@@ static int udma_alloc_rx_resources(stru
  
        rflow = uc->rflow;
        fd_ring_id = ud->tchan_cnt + ud->echan_cnt + uc->rchan->id;
 -      rflow->fd_ring = k3_ringacc_request_ring(ud->ringacc, fd_ring_id, 0);
 -      if (!rflow->fd_ring) {
 -              ret = -EBUSY;
 -              goto err_rx_ring;
 -      }
 -
 -      rflow->r_ring = k3_ringacc_request_ring(ud->ringacc, -1, 0);
 -      if (!rflow->r_ring) {
 +      ret = k3_ringacc_request_rings_pair(ud->ringacc, fd_ring_id, -1,
 +                                          &rflow->fd_ring, &rflow->r_ring);
 +      if (ret) {
                ret = -EBUSY;
 -              goto err_rxc_ring;
 +              goto err_ring;
        }
  
        memset(&ring_cfg, 0, sizeof(ring_cfg));
  err_ringcfg:
        k3_ringacc_ring_free(rflow->r_ring);
        rflow->r_ring = NULL;
 -err_rxc_ring:
        k3_ringacc_ring_free(rflow->fd_ring);
        rflow->fd_ring = NULL;
 -err_rx_ring:
 +err_ring:
        udma_put_rflow(uc);
  err_rflow:
        udma_put_rchan(uc);
@@@ -2195,7 -2169,7 +2157,7 @@@ udma_prep_slave_sg_pkt(struct udma_cha
        u32 ring_id;
        unsigned int i;
  
-       d = kzalloc(sizeof(*d) + sglen * sizeof(d->hwdesc[0]), GFP_NOWAIT);
+       d = kzalloc(struct_size(d, hwdesc, sglen), GFP_NOWAIT);
        if (!d)
                return NULL;
  
@@@ -2511,7 -2485,7 +2473,7 @@@ udma_prep_dma_cyclic_pkt(struct udma_ch
        if (period_len >= SZ_4M)
                return NULL;
  
-       d = kzalloc(sizeof(*d) + periods * sizeof(d->hwdesc[0]), GFP_NOWAIT);
+       d = kzalloc(struct_size(d, hwdesc, periods), GFP_NOWAIT);
        if (!d)
                return NULL;
  
@@@ -2761,30 -2735,27 +2723,27 @@@ static enum dma_status udma_tx_status(s
                u32 delay = 0;
  
                if (uc->desc->dir == DMA_MEM_TO_DEV) {
-                       bcnt = udma_tchanrt_read(uc->tchan,
-                                                UDMA_TCHAN_RT_SBCNT_REG);
+                       bcnt = udma_tchanrt_read(uc, UDMA_CHAN_RT_SBCNT_REG);
  
                        if (uc->config.ep_type != PSIL_EP_NATIVE) {
-                               peer_bcnt = udma_tchanrt_read(uc->tchan,
-                                               UDMA_TCHAN_RT_PEER_BCNT_REG);
+                               peer_bcnt = udma_tchanrt_read(uc,
+                                               UDMA_CHAN_RT_PEER_BCNT_REG);
  
                                if (bcnt > peer_bcnt)
                                        delay = bcnt - peer_bcnt;
                        }
                } else if (uc->desc->dir == DMA_DEV_TO_MEM) {
-                       bcnt = udma_rchanrt_read(uc->rchan,
-                                                UDMA_RCHAN_RT_BCNT_REG);
+                       bcnt = udma_rchanrt_read(uc, UDMA_CHAN_RT_BCNT_REG);
  
                        if (uc->config.ep_type != PSIL_EP_NATIVE) {
-                               peer_bcnt = udma_rchanrt_read(uc->rchan,
-                                               UDMA_RCHAN_RT_PEER_BCNT_REG);
+                               peer_bcnt = udma_rchanrt_read(uc,
+                                               UDMA_CHAN_RT_PEER_BCNT_REG);
  
                                if (peer_bcnt > bcnt)
                                        delay = peer_bcnt - bcnt;
                        }
                } else {
-                       bcnt = udma_tchanrt_read(uc->tchan,
-                                                UDMA_TCHAN_RT_BCNT_REG);
+                       bcnt = udma_tchanrt_read(uc, UDMA_CHAN_RT_BCNT_REG);
                }
  
                bcnt -= uc->bcnt;
@@@ -2817,19 -2788,17 +2776,17 @@@ static int udma_pause(struct dma_chan *
        /* pause the channel */
        switch (uc->config.dir) {
        case DMA_DEV_TO_MEM:
-               udma_rchanrt_update_bits(uc->rchan,
-                                        UDMA_RCHAN_RT_PEER_RT_EN_REG,
+               udma_rchanrt_update_bits(uc, UDMA_CHAN_RT_PEER_RT_EN_REG,
                                         UDMA_PEER_RT_EN_PAUSE,
                                         UDMA_PEER_RT_EN_PAUSE);
                break;
        case DMA_MEM_TO_DEV:
-               udma_tchanrt_update_bits(uc->tchan,
-                                        UDMA_TCHAN_RT_PEER_RT_EN_REG,
+               udma_tchanrt_update_bits(uc, UDMA_CHAN_RT_PEER_RT_EN_REG,
                                         UDMA_PEER_RT_EN_PAUSE,
                                         UDMA_PEER_RT_EN_PAUSE);
                break;
        case DMA_MEM_TO_MEM:
-               udma_tchanrt_update_bits(uc->tchan, UDMA_TCHAN_RT_CTL_REG,
+               udma_tchanrt_update_bits(uc, UDMA_CHAN_RT_CTL_REG,
                                         UDMA_CHAN_RT_CTL_PAUSE,
                                         UDMA_CHAN_RT_CTL_PAUSE);
                break;
@@@ -2847,18 -2816,16 +2804,16 @@@ static int udma_resume(struct dma_chan 
        /* resume the channel */
        switch (uc->config.dir) {
        case DMA_DEV_TO_MEM:
-               udma_rchanrt_update_bits(uc->rchan,
-                                        UDMA_RCHAN_RT_PEER_RT_EN_REG,
+               udma_rchanrt_update_bits(uc, UDMA_CHAN_RT_PEER_RT_EN_REG,
                                         UDMA_PEER_RT_EN_PAUSE, 0);
  
                break;
        case DMA_MEM_TO_DEV:
-               udma_tchanrt_update_bits(uc->tchan,
-                                        UDMA_TCHAN_RT_PEER_RT_EN_REG,
+               udma_tchanrt_update_bits(uc, UDMA_CHAN_RT_PEER_RT_EN_REG,
                                         UDMA_PEER_RT_EN_PAUSE, 0);
                break;
        case DMA_MEM_TO_MEM:
-               udma_tchanrt_update_bits(uc->tchan, UDMA_TCHAN_RT_CTL_REG,
+               udma_tchanrt_update_bits(uc, UDMA_CHAN_RT_CTL_REG,
                                         UDMA_CHAN_RT_CTL_PAUSE, 0);
                break;
        default:
@@@ -3147,11 -3114,6 +3102,6 @@@ static struct udma_match_data am654_mai
        .enable_memcpy_support = true,
        .statictr_z_mask = GENMASK(11, 0),
        .rchan_oes_offset = 0x2000,
-       .tpl_levels = 2,
-       .level_start_idx = {
-               [0] = 8, /* Normal channels */
-               [1] = 0, /* High Throughput channels */
-       },
  };
  
  static struct udma_match_data am654_mcu_data = {
        .enable_memcpy_support = false,
        .statictr_z_mask = GENMASK(11, 0),
        .rchan_oes_offset = 0x2000,
-       .tpl_levels = 2,
-       .level_start_idx = {
-               [0] = 2, /* Normal channels */
-               [1] = 0, /* High Throughput channels */
-       },
  };
  
  static struct udma_match_data j721e_main_data = {
        .flags = UDMA_FLAG_PDMA_ACC32 | UDMA_FLAG_PDMA_BURST,
        .statictr_z_mask = GENMASK(23, 0),
        .rchan_oes_offset = 0x400,
-       .tpl_levels = 3,
-       .level_start_idx = {
-               [0] = 16, /* Normal channels */
-               [1] = 4, /* High Throughput channels */
-               [2] = 0, /* Ultra High Throughput channels */
-       },
  };
  
  static struct udma_match_data j721e_mcu_data = {
        .flags = UDMA_FLAG_PDMA_ACC32 | UDMA_FLAG_PDMA_BURST,
        .statictr_z_mask = GENMASK(23, 0),
        .rchan_oes_offset = 0x400,
-       .tpl_levels = 2,
-       .level_start_idx = {
-               [0] = 2, /* Normal channels */
-               [1] = 0, /* High Throughput channels */
-       },
  };
  
  static const struct of_device_id udma_of_match[] = {
@@@ -3239,15 -3185,36 +3173,36 @@@ static int udma_setup_resources(struct 
                                                    "ti,sci-rm-range-rchan",
                                                    "ti,sci-rm-range-rflow" };
  
-       cap2 = udma_read(ud->mmrs[MMR_GCFG], 0x28);
-       cap3 = udma_read(ud->mmrs[MMR_GCFG], 0x2c);
+       cap2 = udma_read(ud->mmrs[MMR_GCFG], UDMA_CAP_REG(2));
+       cap3 = udma_read(ud->mmrs[MMR_GCFG], UDMA_CAP_REG(3));
  
-       ud->rflow_cnt = cap3 & 0x3fff;
-       ud->tchan_cnt = cap2 & 0x1ff;
-       ud->echan_cnt = (cap2 >> 9) & 0x1ff;
-       ud->rchan_cnt = (cap2 >> 18) & 0x1ff;
+       ud->rflow_cnt = UDMA_CAP3_RFLOW_CNT(cap3);
+       ud->tchan_cnt = UDMA_CAP2_TCHAN_CNT(cap2);
+       ud->echan_cnt = UDMA_CAP2_ECHAN_CNT(cap2);
+       ud->rchan_cnt = UDMA_CAP2_RCHAN_CNT(cap2);
        ch_count  = ud->tchan_cnt + ud->rchan_cnt;
  
+       /* Set up the throughput level start indexes */
+       if (of_device_is_compatible(dev->of_node,
+                                   "ti,am654-navss-main-udmap")) {
+               ud->tpl_levels = 2;
+               ud->tpl_start_idx[0] = 8;
+       } else if (of_device_is_compatible(dev->of_node,
+                                          "ti,am654-navss-mcu-udmap")) {
+               ud->tpl_levels = 2;
+               ud->tpl_start_idx[0] = 2;
+       } else if (UDMA_CAP3_UCHAN_CNT(cap3)) {
+               ud->tpl_levels = 3;
+               ud->tpl_start_idx[1] = UDMA_CAP3_UCHAN_CNT(cap3);
+               ud->tpl_start_idx[0] = ud->tpl_start_idx[1] +
+                                      UDMA_CAP3_HCHAN_CNT(cap3);
+       } else if (UDMA_CAP3_HCHAN_CNT(cap3)) {
+               ud->tpl_levels = 2;
+               ud->tpl_start_idx[0] = UDMA_CAP3_HCHAN_CNT(cap3);
+       } else {
+               ud->tpl_levels = 1;
+       }
        ud->tchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->tchan_cnt),
                                           sizeof(unsigned long), GFP_KERNEL);
        ud->tchans = devm_kcalloc(dev, ud->tchan_cnt, sizeof(*ud->tchans),
@@@ -39,6 -39,7 +39,7 @@@ enum dma_status 
        DMA_IN_PROGRESS,
        DMA_PAUSED,
        DMA_ERROR,
+       DMA_OUT_OF_ORDER,
  };
  
  /**
@@@ -61,6 -62,7 +62,7 @@@ enum dma_transaction_type 
        DMA_SLAVE,
        DMA_CYCLIC,
        DMA_INTERLEAVE,
+       DMA_COMPLETION_NO_ORDER,
        DMA_REPEAT,
        DMA_LOAD_EOT,
  /* last transaction type for creation of the capabilities mask */
@@@ -155,7 -157,7 +157,7 @@@ struct dma_interleaved_template 
        bool dst_sgl;
        size_t numf;
        size_t frame_size;
 -      struct data_chunk sgl[0];
 +      struct data_chunk sgl[];
  };
  
  /**
   * @DMA_PREP_INTERRUPT - trigger an interrupt (callback) upon completion of
   *  this transaction
   * @DMA_CTRL_ACK - if clear, the descriptor cannot be reused until the client
-  *  acknowledges receipt, i.e. has has a chance to establish any dependency
+  *  acknowledges receipt, i.e. has a chance to establish any dependency
   *  chains
   * @DMA_PREP_PQ_DISABLE_P - prevent generation of P while generating Q
   * @DMA_PREP_PQ_DISABLE_Q - prevent generation of Q while generating P
@@@ -479,7 -481,11 +481,11 @@@ enum dma_residue_granularity 
   *    Since the enum dma_transfer_direction is not defined as bit flag for
   *    each type, the dma controller should set BIT(<TYPE>) and same
   *    should be checked by controller as well
+  * @min_burst: min burst capability per-transfer
   * @max_burst: max burst capability per-transfer
+  * @max_sg_burst: max number of SG list entries executed in a single burst
+  *    DMA tansaction with no software intervention for reinitialization.
+  *    Zero value means unlimited number of entries.
   * @cmd_pause: true, if pause is supported (i.e. for reading residue or
   *           for resume later)
   * @cmd_resume: true, if resume is supported
@@@ -492,7 -498,9 +498,9 @@@ struct dma_slave_caps 
        u32 src_addr_widths;
        u32 dst_addr_widths;
        u32 directions;
+       u32 min_burst;
        u32 max_burst;
+       u32 max_sg_burst;
        bool cmd_pause;
        bool cmd_resume;
        bool cmd_terminate;
@@@ -549,7 -557,7 +557,7 @@@ struct dmaengine_unmap_data 
        struct device *dev;
        struct kref kref;
        size_t len;
 -      dma_addr_t addr[0];
 +      dma_addr_t addr[];
  };
  
  struct dma_async_tx_descriptor;
@@@ -783,7 -791,11 +791,11 @@@ struct dma_filter 
   *    Since the enum dma_transfer_direction is not defined as bit flag for
   *    each type, the dma controller should set BIT(<TYPE>) and same
   *    should be checked by controller as well
+  * @min_burst: min burst capability per-transfer
   * @max_burst: max burst capability per-transfer
+  * @max_sg_burst: max number of SG list entries executed in a single burst
+  *    DMA tansaction with no software intervention for reinitialization.
+  *    Zero value means unlimited number of entries.
   * @residue_granularity: granularity of the transfer residue reported
   *    by tx_status
   * @device_alloc_chan_resources: allocate resources and return the
   *    be called after period_len bytes have been transferred.
   * @device_prep_interleaved_dma: Transfer expression in a generic way.
   * @device_prep_dma_imm_data: DMA's 8 byte immediate data to the dst address
+  * @device_caps: May be used to override the generic DMA slave capabilities
+  *    with per-channel specific ones
   * @device_config: Pushes a new configuration to a channel, return 0 or an error
   *    code
   * @device_pause: Pauses any transfer happening on a channel. Returns
@@@ -853,7 -867,9 +867,9 @@@ struct dma_device 
        u32 src_addr_widths;
        u32 dst_addr_widths;
        u32 directions;
+       u32 min_burst;
        u32 max_burst;
+       u32 max_sg_burst;
        bool descriptor_reuse;
        enum dma_residue_granularity residue_granularity;
  
                struct dma_chan *chan, dma_addr_t dst, u64 data,
                unsigned long flags);
  
+       void (*device_caps)(struct dma_chan *chan,
+                           struct dma_slave_caps *caps);
        int (*device_config)(struct dma_chan *chan,
                             struct dma_slave_config *config);
        int (*device_pause)(struct dma_chan *chan);