.src_maxburst = uap->fifosize >> 2,
                        .device_fc = false,
                };
+               struct dma_slave_caps caps;
 
+               /*
+                * Some DMA controllers provide information on their capabilities.
+                * If the controller does, check for suitable residue processing
+                * otherwise assime all is well.
+                */
+               if (0 == dma_get_slave_caps(chan, &caps)) {
+                       if (caps.residue_granularity ==
+                                       DMA_RESIDUE_GRANULARITY_DESCRIPTOR) {
+                               dma_release_channel(chan);
+                               dev_info(uap->port.dev,
+                                       "RX DMA disabled - no residue processing\n");
+                               return;
+                       }
+               }
                dmaengine_slave_config(chan, &rx_conf);
                uap->dmarx.chan = chan;