#define JZ_SOC_DATA_ALLOW_LEGACY_DT    BIT(0)
 #define JZ_SOC_DATA_PROGRAMMABLE_DMA   BIT(1)
 #define JZ_SOC_DATA_PER_CHAN_PM                BIT(2)
+#define JZ_SOC_DATA_NO_DCKES_DCKEC     BIT(3)
 
 /**
  * struct jz4780_dma_hwdesc - descriptor structure read by the DMA controller.
 static inline void jz4780_dma_chan_enable(struct jz4780_dma_dev *jzdma,
        unsigned int chn)
 {
-       if (jzdma->soc_data->flags & JZ_SOC_DATA_PER_CHAN_PM)
-               jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DCKES, BIT(chn));
+       if (jzdma->soc_data->flags & JZ_SOC_DATA_PER_CHAN_PM) {
+               unsigned int reg;
+
+               if (jzdma->soc_data->flags & JZ_SOC_DATA_NO_DCKES_DCKEC)
+                       reg = JZ_DMA_REG_DCKE;
+               else
+                       reg = JZ_DMA_REG_DCKES;
+
+               jz4780_dma_ctrl_writel(jzdma, reg, BIT(chn));
+       }
 }
 
 static inline void jz4780_dma_chan_disable(struct jz4780_dma_dev *jzdma,
        unsigned int chn)
 {
-       if (jzdma->soc_data->flags & JZ_SOC_DATA_PER_CHAN_PM)
+       if ((jzdma->soc_data->flags & JZ_SOC_DATA_PER_CHAN_PM) &&
+                       !(jzdma->soc_data->flags & JZ_SOC_DATA_NO_DCKES_DCKEC))
                jz4780_dma_ctrl_writel(jzdma, JZ_DMA_REG_DCKEC, BIT(chn));
 }
 
        .transfer_ord_max = 5,
 };
 
+static const struct jz4780_dma_soc_data jz4725b_dma_soc_data = {
+       .nb_channels = 6,
+       .transfer_ord_max = 5,
+       .flags = JZ_SOC_DATA_PER_CHAN_PM | JZ_SOC_DATA_NO_DCKES_DCKEC,
+};
+
 static const struct jz4780_dma_soc_data jz4770_dma_soc_data = {
        .nb_channels = 6,
        .transfer_ord_max = 6,
 
 static const struct of_device_id jz4780_dma_dt_match[] = {
        { .compatible = "ingenic,jz4740-dma", .data = &jz4740_dma_soc_data },
+       { .compatible = "ingenic,jz4725b-dma", .data = &jz4725b_dma_soc_data },
        { .compatible = "ingenic,jz4770-dma", .data = &jz4770_dma_soc_data },
        { .compatible = "ingenic,jz4780-dma", .data = &jz4780_dma_soc_data },
        {},