#define MAX_RX_FIFO_SIZE               (12 * 1024)
 #define MAX_TX_FIFO_SIZE               (12 * 1024)
+
+#define FLOW_THRESHOLD(n)              ((((n) + 511) / 512) & 0x7F)
+#define FLOW_CTRL_THRESHOLD(on, off)   ((FLOW_THRESHOLD(on)  << 0) | \
+                                        (FLOW_THRESHOLD(off) << 8))
+
+/* Flow control turned on when Rx FIFO level rises above this level (bytes) */
+#define FLOW_ON_SS                     9216
+#define FLOW_ON_HS                     8704
+
+/* Flow control turned off when Rx FIFO level falls below this level (bytes) */
+#define FLOW_OFF_SS                    4096
+#define FLOW_OFF_HS                    1024
+
 #define DEFAULT_BURST_CAP_SIZE         (MAX_TX_FIFO_SIZE)
 #define DEFAULT_BULK_IN_DELAY          (0x0800)
 #define MAX_SINGLE_PACKET_SIZE         (9000)
                flow |= FLOW_CR_RX_FCEN_;
 
        if (dev->udev->speed == USB_SPEED_SUPER)
-               fct_flow = 0x817;
+               fct_flow = FLOW_CTRL_THRESHOLD(FLOW_ON_SS, FLOW_OFF_SS);
        else if (dev->udev->speed == USB_SPEED_HIGH)
-               fct_flow = 0x211;
+               fct_flow = FLOW_CTRL_THRESHOLD(FLOW_ON_HS, FLOW_OFF_HS);
 
        netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s",
                  (cap & FLOW_CTRL_RX ? "enabled" : "disabled"),