if (val != ctx->tx_max)
                dev_info(&dev->intf->dev, "setting tx_max = %u\n", val);
        ctx->tx_max = val;
+
+       /* Adding a pad byte here if necessary simplifies the handling
+        * in cdc_ncm_fill_tx_frame, making tx_max always represent
+        * the real skb max size.
+        *
+        * We cannot use dev->maxpacket here because this is called from
+        * .bind which is called before usbnet sets up dev->maxpacket
+        */
+       if (ctx->tx_max != le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize) &&
+           ctx->tx_max % usb_maxpacket(dev->udev, dev->out, 1) == 0)
+               ctx->tx_max++;
+
+       /* usbnet use these values for sizing tx/rx queues */
+       dev->hard_mtu = ctx->tx_max;
+       dev->rx_urb_size = ctx->rx_max;
 }
 
 /* helpers for NCM and MBIM differences */
 {
        struct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];
 
-       /* initialize basic device settings */
-       cdc_ncm_init(dev);
-
        /* clamp rx_max and tx_max and inform device */
        cdc_ncm_update_rxtx_max(dev, le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize),
                                le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize));
                goto error2;
        }
 
-       /* initialize data interface */
-       if (cdc_ncm_setup(dev))
+       /* initialize basic device settings */
+       if (cdc_ncm_init(dev))
                goto error2;
 
        /* configure data interface */
                dev_info(&intf->dev, "MAC-Address: %pM\n", dev->net->dev_addr);
        }
 
-       /* usbnet use these values for sizing tx/rx queues */
-       dev->hard_mtu = ctx->tx_max;
-       dev->rx_urb_size = ctx->rx_max;
-
-       /* cdc_ncm_setup will override dwNtbOutMaxSize if it is
-        * outside the sane range. Adding a pad byte here if necessary
-        * simplifies the handling in cdc_ncm_fill_tx_frame, making
-        * tx_max always represent the real skb max size.
-        */
-       if (ctx->tx_max != le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize) &&
-           ctx->tx_max % usb_maxpacket(dev->udev, dev->out, 1) == 0)
-               ctx->tx_max++;
+       /* finish setting up the device specific data */
+       cdc_ncm_setup(dev);
 
        return 0;