#define usbhsf_get_cfifo(p)    (&((p)->fifo_info.cfifo))
 #define usbhsf_get_d0fifo(p)   (&((p)->fifo_info.d0fifo))
 #define usbhsf_get_d1fifo(p)   (&((p)->fifo_info.d1fifo))
+#define usbhsf_is_cfifo(p, f)  (usbhsf_get_cfifo(p) == f)
 
 #define usbhsf_fifo_is_busy(f) ((f)->pipe) /* see usbhs_pipe_select_fifo */
 
        }
 
        /* "base" will be used below  */
-       usbhs_write(priv, fifo->sel, base | MBW_32);
+       if (usbhs_get_dparam(priv, has_sudmac) && !usbhsf_is_cfifo(priv, fifo))
+               usbhs_write(priv, fifo->sel, base);
+       else
+               usbhs_write(priv, fifo->sel, base | MBW_32);
 
        /* check ISEL and CURPIPE value */
        while (timeout--) {