* If any burst is in flight and DMA paused then this is the time to complete
  * on-flight burst and update DMA status register.
  */
-#define TEGRA_GPCDMA_BURST_COMPLETE_TIME       20
-#define TEGRA_GPCDMA_BURST_COMPLETION_TIMEOUT  100
+#define TEGRA_GPCDMA_BURST_COMPLETE_TIME       10
+#define TEGRA_GPCDMA_BURST_COMPLETION_TIMEOUT  5000 /* 5 msec */
 
 /* Channel base address offset from GPCDMA base address */
 #define TEGRA_GPCDMA_CHANNEL_BASE_ADD_OFFSET   0x20000
        return 0;
 }
 
+static inline int tegra_dma_pause_noerr(struct tegra_dma_channel *tdc)
+{
+       /* Return 0 irrespective of PAUSE status.
+        * This is useful to recover channels that can exit out of flush
+        * state when the channel is disabled.
+        */
+
+       tegra_dma_pause(tdc);
+       return 0;
+}
+
 static void tegra_dma_disable(struct tegra_dma_channel *tdc)
 {
        u32 csr, status;
        .terminate = tegra_dma_pause,
 };
 
+static const struct tegra_dma_chip_data tegra234_dma_chip_data = {
+       .nr_channels = 31,
+       .channel_reg_size = SZ_64K,
+       .max_dma_count = SZ_1G,
+       .hw_support_pause = true,
+       .terminate = tegra_dma_pause_noerr,
+};
+
 static const struct of_device_id tegra_dma_of_match[] = {
        {
                .compatible = "nvidia,tegra186-gpcdma",
        }, {
                .compatible = "nvidia,tegra194-gpcdma",
                .data = &tegra194_dma_chip_data,
+       }, {
+               .compatible = "nvidia,tegra234-gpcdma",
+               .data = &tegra234_dma_chip_data,
        }, {
        },
 };