• Bjørn Mork's avatar
    USB: cdc-wdm: ignore -EPIPE from GetEncapsulatedResponse · 8fec9355
    Bjørn Mork authored
    The driver will forward errors to userspace after turning most of them
    into -EIO. But all status codes are not equal. The -EPIPE (stall) in
    particular can be seen more as a result of normal USB signaling than
    an actual error. The state is automatically cleared by the USB core
    without intervention from either driver or userspace.
    
    And most devices and firmwares will never trigger a stall as a result
    of GetEncapsulatedResponse. This is in fact a requirement for CDC WDM
    devices. Quoting from section 7.1 of the CDC WMC spec revision 1.1:
    
      The function shall not return STALL in response to
      GetEncapsulatedResponse.
    
    But this driver is also handling GetEncapsulatedResponse on behalf of
    the qmi_wwan and cdc_mbim drivers. Unfortunately the relevant specs
    are not as clear wrt stall. So some QMI and MBIM devices *will*
    occasionally stall, causing the GetEncapsulatedResponse to return an
    -EPIPE status. Translating this into -EIO for userspace has proven to
    be harmful. Treating it as an empty read is safer, making the driver
    behave as if the device was conforming to the CDC WDM spec.
    
    There have been numerous reports of issues related to -EPIPE errors
    from some newer CDC MBIM devices in particular, like for example the
    Fibocom L831-EAU.  Testing on this device has shown that the issues
    go away if we simply ignore the -EPIPE status.  Similar handling of
    -EPIPE is already known from e.g. usb_get_string()
    
    The -EPIPE log message is still kept to let us track devices with this
    unexpected behaviour, hoping that it attracts attention from firmware
    developers.
    
    Cc: <stable@vger.kernel.org>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100938Reported-and-tested-by: default avatarChristian Ehrig <christian.ehrig@mediamarktsaturn-bt.com>
    Reported-and-tested-by: default avatarPatrick Chilton <chpatrick@gmail.com>
    Reported-and-tested-by: default avatarAndreas Böhler <news@aboehler.at>
    Signed-off-by: default avatarBjørn Mork <bjorn@mork.no>
    Acked-by: default avatarOliver Neukum <oneukum@suse.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8fec9355
cdc-wdm.c 26 KB