* [PATCH 0/2] DisplayLink USB-ethernet improvements. @ 2022-06-13 8:02 Łukasz Spintzyk 2022-06-13 8:02 ` [PATCH 1/2] net/cdc_ncm: Enable ZLP for DisplayLink ethernet devices Łukasz Spintzyk 2022-06-13 8:02 ` [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters Łukasz Spintzyk 0 siblings, 2 replies; 8+ messages in thread From: Łukasz Spintzyk @ 2022-06-13 8:02 UTC (permalink / raw) To: netdev; +Cc: oliver, ppd-posix Hi all, This are two patches to cdc_ncm driver used in our DisplayLink USB docking stations. They are independent, however both of them are improving performance and stability so it matches Windows experience. Please take a look. Also I want to ask for forgiveness if there is something wrong with the contribution flow. Regards, Łukasz Spintzyk Software Developer at Synaptics Inc. Dominik Czerwik (1): net/cdc_ncm: Enable ZLP for DisplayLink ethernet devices Łukasz Spintzyk (1): net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters drivers/net/usb/cdc_ncm.c | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) -- 2.36.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] net/cdc_ncm: Enable ZLP for DisplayLink ethernet devices 2022-06-13 8:02 [PATCH 0/2] DisplayLink USB-ethernet improvements Łukasz Spintzyk @ 2022-06-13 8:02 ` Łukasz Spintzyk 2022-06-13 8:02 ` [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters Łukasz Spintzyk 1 sibling, 0 replies; 8+ messages in thread From: Łukasz Spintzyk @ 2022-06-13 8:02 UTC (permalink / raw) To: netdev; +Cc: oliver, ppd-posix From: Dominik Czerwik <dominik.czerwik@synaptics.com> This improves performance and stability of DL-3xxx/DL-5xxx/DL-6xxx device series. Signed-off-by: Dominik Czerwik <dominik.czerwik@synaptics.com> Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com> --- drivers/net/usb/cdc_ncm.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index d55f59ce4a31..4594bf2982ee 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c @@ -2,6 +2,7 @@ * cdc_ncm.c * * Copyright (C) ST-Ericsson 2010-2012 + * Copyright (C) 2022 Synaptics Incorporated. All rights reserved. * Contact: Alexey Orishko <alexey.orishko@stericsson.com> * Original author: Hans Petter Selasky <hans.petter.selasky@stericsson.com> * @@ -1904,6 +1905,19 @@ static const struct driver_info cdc_ncm_info = { .set_rx_mode = usbnet_cdc_update_filter, }; +/* Same as cdc_ncm_info, but with FLAG_SEND_ZLP */ +static const struct driver_info cdc_ncm_zlp_info = { + .description = "CDC NCM (SEND ZLP)", + .flags = FLAG_POINTTOPOINT | FLAG_NO_SETINT | FLAG_MULTI_PACKET + | FLAG_LINK_INTR | FLAG_ETHER | FLAG_SEND_ZLP, + .bind = cdc_ncm_bind, + .unbind = cdc_ncm_unbind, + .manage_power = usbnet_manage_power, + .status = cdc_ncm_status, + .rx_fixup = cdc_ncm_rx_fixup, + .tx_fixup = cdc_ncm_tx_fixup, +}; + /* Same as cdc_ncm_info, but with FLAG_WWAN */ static const struct driver_info wwan_info = { .description = "Mobile Broadband Network Device", @@ -2010,6 +2024,16 @@ static const struct usb_device_id cdc_devs[] = { .driver_info = (unsigned long)&wwan_info, }, + /* DisplayLink docking stations */ + { .match_flags = USB_DEVICE_ID_MATCH_INT_INFO + | USB_DEVICE_ID_MATCH_VENDOR, + .idVendor = 0x17e9, + .bInterfaceClass = USB_CLASS_COMM, + .bInterfaceSubClass = USB_CDC_SUBCLASS_NCM, + .bInterfaceProtocol = USB_CDC_PROTO_NONE, + .driver_info = (unsigned long)&cdc_ncm_zlp_info, + }, + /* Generic CDC-NCM devices */ { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_NCM, USB_CDC_PROTO_NONE), -- 2.36.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters 2022-06-13 8:02 [PATCH 0/2] DisplayLink USB-ethernet improvements Łukasz Spintzyk 2022-06-13 8:02 ` [PATCH 1/2] net/cdc_ncm: Enable ZLP for DisplayLink ethernet devices Łukasz Spintzyk @ 2022-06-13 8:02 ` Łukasz Spintzyk 2022-06-13 14:54 ` Oliver Neukum 1 sibling, 1 reply; 8+ messages in thread From: Łukasz Spintzyk @ 2022-06-13 8:02 UTC (permalink / raw) To: netdev; +Cc: oliver, ppd-posix This change allows to optionally adjust maximum RX and TX NTB size to better match specific device capabilities, leading to higher achievable Ethernet bandwidth. Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com> --- drivers/net/usb/cdc_ncm.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index 4594bf2982ee..1ea1949c6014 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c @@ -61,6 +61,12 @@ static bool prefer_mbim; #endif module_param(prefer_mbim, bool, 0644); MODULE_PARM_DESC(prefer_mbim, "Prefer MBIM setting on dual NCM/MBIM functions"); +static unsigned int ntb_max_tx = CDC_NCM_NTB_MAX_SIZE_TX; +static unsigned int ntb_max_rx = CDC_NCM_NTB_MAX_SIZE_RX; +module_param(ntb_max_tx, uint, 0644); +MODULE_PARM_DESC(ntb_max_rx, "Maximum allowed NTB RX size"); +module_param(ntb_max_rx, uint, 0644); +MODULE_PARM_DESC(ntb_max_tx, "Maximum allowed NTB TX size"); static void cdc_ncm_txpath_bh(struct tasklet_struct *t); static void cdc_ncm_tx_timeout_start(struct cdc_ncm_ctx *ctx); @@ -154,7 +160,7 @@ static u32 cdc_ncm_check_rx_max(struct usbnet *dev, u32 new_rx) /* clamp new_rx to sane values */ min = USB_CDC_NCM_NTB_MIN_IN_SIZE; - max = min_t(u32, CDC_NCM_NTB_MAX_SIZE_RX, le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize)); + max = min_t(u32, ntb_max_rx, le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize)); /* dwNtbInMaxSize spec violation? Use MIN size for both limits */ if (max < min) { @@ -181,7 +187,7 @@ static u32 cdc_ncm_check_tx_max(struct usbnet *dev, u32 new_tx) else min = ctx->max_datagram_size + ctx->max_ndp_size + sizeof(struct usb_cdc_ncm_nth32); - max = min_t(u32, CDC_NCM_NTB_MAX_SIZE_TX, le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize)); + max = min_t(u32, ntb_max_tx, le32_to_cpu(ctx->ncm_parm.dwNtbOutMaxSize)); if (max == 0) max = CDC_NCM_NTB_MAX_SIZE_TX; /* dwNtbOutMaxSize not set */ -- 2.36.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters 2022-06-13 8:02 ` [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters Łukasz Spintzyk @ 2022-06-13 14:54 ` Oliver Neukum 2022-06-14 5:47 ` Lukasz Spintzyk 2022-06-14 10:24 ` Lukasz Spintzyk 0 siblings, 2 replies; 8+ messages in thread From: Oliver Neukum @ 2022-06-13 14:54 UTC (permalink / raw) To: Łukasz Spintzyk, netdev; +Cc: ppd-posix On 13.06.22 10:02, Łukasz Spintzyk wrote: > This change allows to optionally adjust maximum RX and TX NTB size > to better match specific device capabilities, leading to > higher achievable Ethernet bandwidth. > Hi, this is awkward a patch. If some devices need bigger buffers, the driver should grow its buffers for them without administrative intervention. Regards Oliver ^ permalink raw reply [flat|nested] 8+ messages in thread
* RE: [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters 2022-06-13 14:54 ` Oliver Neukum @ 2022-06-14 5:47 ` Lukasz Spintzyk 2022-06-14 10:24 ` Lukasz Spintzyk 1 sibling, 0 replies; 8+ messages in thread From: Lukasz Spintzyk @ 2022-06-14 5:47 UTC (permalink / raw) To: Oliver Neukum, netdev@vger.kernel.org; +Cc: PPD-POSIX This Is true, Some of Synaptics USB eth devices require values of TX and RX NTB size higher then 32kb and this is more then CDC_NCM_NTB_MAX_SIZE_TX/RX I wanted to be careful an not increase limit of NTB size for all devices. But it would also by ok to me if we could increase CDC_NCM_NTB_MAX_SIZE_TX/RX to 64kb. Regards Lukasz -----Original Message----- From: Oliver Neukum <oneukum@suse.com> Sent: Monday, June 13, 2022 4:54 PM To: Lukasz Spintzyk <Lukasz.Spintzyk@synaptics.com>; netdev@vger.kernel.org Cc: PPD-POSIX <PPD-POSIX@synaptics.com> Subject: Re: [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters CAUTION: Email originated externally, do not click links or open attachments unless you recognize the sender and know the content is safe. On 13.06.22 10:02, Łukasz Spintzyk wrote: > This change allows to optionally adjust maximum RX and TX NTB size to > better match specific device capabilities, leading to higher > achievable Ethernet bandwidth. > Hi, this is awkward a patch. If some devices need bigger buffers, the driver should grow its buffers for them without administrative intervention. Regards Oliver ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters 2022-06-13 14:54 ` Oliver Neukum 2022-06-14 5:47 ` Lukasz Spintzyk @ 2022-06-14 10:24 ` Lukasz Spintzyk 2022-06-20 7:03 ` Lukasz Spintzyk 2022-06-24 8:56 ` Lukasz Spintzyk 1 sibling, 2 replies; 8+ messages in thread From: Lukasz Spintzyk @ 2022-06-14 10:24 UTC (permalink / raw) To: Oliver Neukum, netdev; +Cc: ppd-posix On 13/06/2022 16:54, Oliver Neukum wrote: > CAUTION: Email originated externally, do not click links or open attachments unless you recognize the sender and know the content is safe. > > > On 13.06.22 10:02, Łukasz Spintzyk wrote: >> This change allows to optionally adjust maximum RX and TX NTB size >> to better match specific device capabilities, leading to >> higher achievable Ethernet bandwidth. >> > Hi, > > this is awkward a patch. If some devices need bigger buffers, the > driver should grow its buffers for them without administrative > intervention. > > Regards > Oliver > This is true, Some of DisplayLink USB ethernet devices require values of TX and RX NTB size higher then 32kb and this is more then defined CDC_NCM_NTB_MAX_SIZE_TX/RX I wanted to be careful and not increase limit of NTB size for all devices. But it would also by ok to me if we could increase CDC_NCM_NTB_MAX_SIZE_TX/RX to 64kb. Regards Lukasz Spintzyk ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters 2022-06-14 10:24 ` Lukasz Spintzyk @ 2022-06-20 7:03 ` Lukasz Spintzyk 2022-06-24 8:56 ` Lukasz Spintzyk 1 sibling, 0 replies; 8+ messages in thread From: Lukasz Spintzyk @ 2022-06-20 7:03 UTC (permalink / raw) To: Oliver Neukum, netdev; +Cc: ppd-posix On 14/06/2022 12:24, Lukasz Spintzyk wrote: > On 13/06/2022 16:54, Oliver Neukum wrote: >> CAUTION: Email originated externally, do not click links or open >> attachments unless you recognize the sender and know the content is safe. >> >> >> On 13.06.22 10:02, Łukasz Spintzyk wrote: >>> This change allows to optionally adjust maximum RX and TX NTB size >>> to better match specific device capabilities, leading to >>> higher achievable Ethernet bandwidth. >>> >> Hi, >> >> this is awkward a patch. If some devices need bigger buffers, the >> driver should grow its buffers for them without administrative >> intervention. >> >> Regards >> Oliver >> > > This is true, > Some of DisplayLink USB ethernet devices require values of TX and RX NTB > size higher then 32kb and this is more then defined > CDC_NCM_NTB_MAX_SIZE_TX/RX > I wanted to be careful and not increase limit of NTB size for all > devices. But it would also by ok to me if we could increase > CDC_NCM_NTB_MAX_SIZE_TX/RX to 64kb. > > Regards > Lukasz Spintzyk This whole patch could be changed to that two line fix: diff --git a/include/linux/usb/cdc_ncm.h b/include/linux/usb/cdc_ncm.h index f7cb3ddce7fb..2d207cb4837d 100644 --- a/include/linux/usb/cdc_ncm.h +++ b/include/linux/usb/cdc_ncm.h @@ -53,8 +53,8 @@ #define USB_CDC_NCM_NDP32_LENGTH_MIN 0x20 /* Maximum NTB length */ -#define CDC_NCM_NTB_MAX_SIZE_TX 32768 /* bytes */ -#define CDC_NCM_NTB_MAX_SIZE_RX 32768 /* bytes */ +#define CDC_NCM_NTB_MAX_SIZE_TX 65536 /* bytes */ +#define CDC_NCM_NTB_MAX_SIZE_RX 65536 /* bytes */ /* Initial NTB length */ #define CDC_NCM_NTB_DEF_SIZE_TX 16384 /* bytes */ Olivier, would it be acceptable to increase max NTB RX/TX size to 64kb? regards Lukasz Spintzyk ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters 2022-06-14 10:24 ` Lukasz Spintzyk 2022-06-20 7:03 ` Lukasz Spintzyk @ 2022-06-24 8:56 ` Lukasz Spintzyk 1 sibling, 0 replies; 8+ messages in thread From: Lukasz Spintzyk @ 2022-06-24 8:56 UTC (permalink / raw) To: Oliver Neukum, netdev, linux-usb; +Cc: ppd-posix On 14/06/2022 12:24, Lukasz Spintzyk wrote: > On 13/06/2022 16:54, Oliver Neukum wrote: >> CAUTION: Email originated externally, do not click links or open >> attachments unless you recognize the sender and know the content is safe. >> >> >> On 13.06.22 10:02, Łukasz Spintzyk wrote: >>> This change allows to optionally adjust maximum RX and TX NTB size >>> to better match specific device capabilities, leading to >>> higher achievable Ethernet bandwidth. >>> >> Hi, >> >> this is awkward a patch. If some devices need bigger buffers, the >> driver should grow its buffers for them without administrative >> intervention. >> >> Regards >> Oliver >> > > This is true, > Some of DisplayLink USB ethernet devices require values of TX and RX NTB > size higher then 32kb and this is more then defined > CDC_NCM_NTB_MAX_SIZE_TX/RX > I wanted to be careful and not increase limit of NTB size for all > devices. But it would also by ok to me if we could increase > CDC_NCM_NTB_MAX_SIZE_TX/RX to 64kb. > > Regards > Lukasz Spintzyk Hi guys, Is there anything I could do to proceed with that patchset? It is improving the experience for users of millions of DisplayLink-based docking stations that are in the wild. That tweaks of NTB TX/RX results in approximately 4-5x available bandwidth improvement in extreme cases. I think this is worth to have it upstream. regards Lukasz Spintzyk ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-06-24 8:56 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-06-13 8:02 [PATCH 0/2] DisplayLink USB-ethernet improvements Łukasz Spintzyk 2022-06-13 8:02 ` [PATCH 1/2] net/cdc_ncm: Enable ZLP for DisplayLink ethernet devices Łukasz Spintzyk 2022-06-13 8:02 ` [PATCH 2/2] net/cdc_ncm: Add ntb_max_rx,ntb_max_tx cdc_ncm module parameters Łukasz Spintzyk 2022-06-13 14:54 ` Oliver Neukum 2022-06-14 5:47 ` Lukasz Spintzyk 2022-06-14 10:24 ` Lukasz Spintzyk 2022-06-20 7:03 ` Lukasz Spintzyk 2022-06-24 8:56 ` Lukasz Spintzyk
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).