From: Johan Hovold <johan@kernel.org>
To: macpaul.lin@mediatek.com
Cc: linux-usb@vger.kernel.org, Oliver Neukum <oneukum@suse.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Johan Hovold <johan@kernel.org>,
wsd_upstream@mediatek.com
Subject: cdc-acm: fix abnormal DATA RX issue for Mediatek Preloader.
Date: Thu, 13 Dec 2018 10:43:27 +0100 [thread overview]
Message-ID: <20181213094327.GJ3500@localhost> (raw)
On Thu, Dec 13, 2018 at 11:27:56AM +0800, macpaul.lin@mediatek.com wrote:
> From: Macpaul Lin <macpaul.lin@mediatek.com>
>
> Mediatek Preloader is a proprietary embedded boot loader for loading
> Little Kernel and Linux into device DRAM.
>
> This boot loader also handle firmware updating. Mediatek Preloader will be
> enumerated as a virtual COM port when the device is connected to Windows
> or Linux OS via CDC-ACM class driver. When the enumeration has been done,
> Mediatek Preloader will send out handshake command "READY" to PC actively
> instead of waiting command from the download tool.
> Since Linux 4.12, the commit "tty: reset termios state on device
> registration" (93857edd9829e144acb6c7e72d593f6e01aead66) causes Mediatek
> Preloader receiving some abnoraml command like "READYXX" as it sended.
> Which will be recognized as an incorrect response. This behavior change
> also causes the handshake fail.
>
> By disabling the ECHO termios flag could avoid this problem. However, it
> cannot be done by user space configuration when download tool open
> /dev/ttyACM0. This is because the device running Mediatek Preloader will
> send handshake command "READY" immediately once the CDC-ACM driver is
> ready.
>
> This patch wants to fix above problem by introducing "DISABLE_ECHO"
> property in driver_info. When Mediatek Preloader is connected, the
> CDC-ACM driver could disable ECHO flag in termios to avoid the problem.
>
> Signed-off-by: Macpaul Lin <macpaul.lin@mediatek.com>
> ---
> drivers/usb/class/cdc-acm.c | 9 ++++++++-
> drivers/usb/class/cdc-acm.h | 1 +
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
> index 1b68fed..2f744bb 100644
> --- a/drivers/usb/class/cdc-acm.c
> +++ b/drivers/usb/class/cdc-acm.c
> @@ -1156,6 +1156,10 @@ static int acm_probe(struct usb_interface *intf,
> goto skip_normal_probe;
> }
>
> + /* handle active handshake triggered by device */
> + if (quirks == DISABLE_ECHO)
> + acm_tty_driver->init_termios.c_lflag &= ~(ECHO);
You cannot change the driver init_termios like this as that will affect
all cdc-acm devices that are probed later. If this is at all needed,
this will have to be done at tty install time.
Note that 93857edd9829 ("tty: reset termios state on device
registration") only makes sure that you get the default terminal setting
whenever you plug in a device (rather than reuse settings from a
previously connected device which happened to be assigned the same minor
number). Specifically, it should not change any behaviour for the first
time a cdc-acm device is plugged in.
From just a quick look, it seems you need to prevent your download tool
from sending "XX" before disabling ECHO. Why wouldn't that work?
Thanks,
Johan
next reply other threads:[~2018-12-13 9:43 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-13 9:43 Johan Hovold [this message]
-- strict thread matches above, loose matches on Subject: below --
2018-12-18 8:55 cdc-acm: fix abnormal DATA RX issue for Mediatek Preloader Johan Hovold
2018-12-17 5:50 macpaul.lin
2018-12-14 11:07 Johan Hovold
2018-12-14 2:00 macpaul.lin
2018-12-13 10:18 Johan Hovold
2018-12-13 10:13 Oliver Neukum
2018-12-13 9:23 Oliver Neukum
2018-12-13 3:27 macpaul.lin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181213094327.GJ3500@localhost \
--to=johan@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
--cc=macpaul.lin@mediatek.com \
--cc=oneukum@suse.com \
--cc=wsd_upstream@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.