Patch "cdc_ncm: Set NTB format again after altsetting switch for Huawei devices" has been added to the 4.4-stable tree
Subsystems (5)
This is a note to let you know that I've just added the patch titled
cdc_ncm: Set NTB format again after altsetting switch for Huawei devices
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cdc_ncm-set-ntb-format-again-after-altsetting-switch-for-huawei-devices.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
2b02c20ce0c28974b44e69a2e2f5ddc6a470ad6fMon Sep 17 00:00:00 2001
From: Enrico Mioso <[email protected]>
Date: Tue, 11 Jul 2017 17:21:52 +0200
Subject: cdc_ncm: Set NTB format again after altsetting switch for Huawei devices
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Enrico Mioso <[email protected]>
commit 2b02c20ce0c28974b44e69a2e2f5ddc6a470ad6f upstream.
Some firmwares in Huawei E3372H devices have been observed to switch back to NTB 32-bit format after altsetting switch.
This patch implements a driver flag to check for the device settings and set NTB format to 16-bit again if needed.
The flag has been activated for devices controlled by the huawei_cdc_ncm.c driver.
V1->V2:
- fixed broken error checks
- some corrections to the commit messageV2->V3:
- variable name changes, to clarify what's happening
- check (and possibly set) the NTB format later in the common bind code path
--- drivers/net/usb/cdc_ncm.c | 28 ++++++++++++++++++++++++++++ drivers/net/usb/huawei_cdc_ncm.c | 6 ++++++ include/linux/usb/cdc_ncm.h | 1 + 3 files changed, 35 insertions(+)
drivers/net/usb/cdc_ncm.c +28 -0
@@ -724,8 +724,10 @@ int cdc_ncm_bind_common(struct usbnet *du8 *buf;int len;int temp; +int err;u8 iface_no;struct usb_cdc_parsed_header hdr; +u16 curr_ntb_format; ctx =kzalloc (sizeof (*ctx),GFP_KERNEL );if (!ctx)
@@ -823,6 +825,32 @@ int cdc_ncm_bind_common(struct usbnet *d goto error2; } +/* +* Some Huawei devices have been observed to come out of reset in NDP32 mode. +* Let's check if this is the case, and set the device to NDP16 mode again if +* needed. +*/ +if (ctx->drvflags &CDC_NCM_FLAG_RESET_NTB16 ) { + err =usbnet_read_cmd (dev,USB_CDC_GET_NTB_FORMAT , +USB_TYPE_CLASS |USB_DIR_IN |USB_RECIP_INTERFACE , +0 , iface_no, &curr_ntb_format,2 ); +if (err <0 ) { + goto error2; + } + +if (curr_ntb_format ==USB_CDC_NCM_NTB32_FORMAT ) { +dev_info (&intf->dev,"resetting NTB format to 16-bit" ); + err =usbnet_write_cmd (dev,USB_CDC_SET_NTB_FORMAT , +USB_TYPE_CLASS |USB_DIR_OUT + |USB_RECIP_INTERFACE , +USB_CDC_NCM_NTB16_FORMAT , + iface_no,NULL ,0 ); + +if (err <0 ) + goto error2; + } + } +cdc_ncm_find_endpoints (dev, ctx->data);cdc_ncm_find_endpoints (dev, ctx->control);if (!dev->in || !dev->out || !dev->status) {
drivers/net/usb/huawei_cdc_ncm.c +6 -0
@@ -80,6 +80,12 @@ static int huawei_cdc_ncm_bind(struct us* be at the end of the frame. */ drvflags |=CDC_NCM_FLAG_NDP_TO_END ; + +/* Additionally, it has been reported that some Huawei E3372H devices, with +* firmware version 21.318.01.00.541, come out of reset in NTB32 format mode, hence +* needing to be set to the NTB16 one again. +*/ + drvflags |=CDC_NCM_FLAG_RESET_NTB16 ; ret =cdc_ncm_bind_common (usbnet_dev, intf,1 , drvflags);if (ret) goto err;
include/linux/usb/cdc_ncm.h +1 -0
@@ -82,6 +82,7 @@/* Driver flags */ #define CDC_NCM_FLAG_NDP_TO_END 0x02/* NDP is placed at end of frame */ +#define CDC_NCM_FLAG_RESET_NTB16 0x08/* set NDP16 one more time after altsetting switch */ #define cdc_ncm_comm_intf_is_mbim (x) ((x)->desc.bInterfaceSubClass == USB_CDC_SUBCLASS_MBIM && \ (x)->desc.bInterfaceProtocol == USB_CDC_PROTO_NONE)
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/cdc_ncm-set-ntb-format-again-after-altsetting-switch-for-huawei-devices.patch