USB core marks a device wakeup capable if it supports remote wakeup.
Check this wakeup capable flag before enabling autosuspend.
CRs-Fixed: 449100
Change-Id: I055bf5801859e4d83782916c71e0245c455becbf
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
All the submitted URBs are unlinked during suspend. Abort suspend
if data is received during unlink. This avoids unnecessary suspend
and resume of remaining interfaces.
CRs-Fixed: 449097
Change-Id: Ia4009775ec29df0222b475581649c3a9f4f1899f
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
The completed read buffers are added to to_ks_list in Rx URB
completion handler. The buffer is deleted from this list by
reader process after copying to user space buffer. If disconnect
happens during this copy, the buffer is freed from disconnect
context. Hence detach the buffer from to_ks_list before copying
to user space buffer.
CRs-Fixed: 448142
Change-Id: Ia4484b2709065162b0d32782a30e2b2fd36f5fda
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
Driver can add data buffer to the link list of rx/tx
buffers after emptying the list during disconnect.
These stale buffers can confuse efs sync server when
mdm device connects back. Hence free up the rx/tx
buffers again during probe. Avoid further addition of
tx buffers after disconnect by checking device
connection status in write API. Also, move
misc_deregister() after cancelling the work in order
to remove device node early during disconnect to avoid
any write call further.
(cherry picked from commit 2f20bda7837d6f9a172b433af72a02f907b2ed2f)
Conflicts:
drivers/usb/misc/ks_bridge.c
CRs-Fixed: 448142
Change-Id: Ifff58d2adc113257809eb80b7f91c1a0f4a0adeb
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
Following scenarios possible for interface disconnect racing
with ongoing IO:-
1) Interface disconnect setting interface pointer to NULL and
rx work is executing on other core dereferencing interface
pointer, causing kernel panic. Cancel a work and wait for it
to finish during disconnect.
2) Interface disconnect setting interface pointer to NULL and
tx completion running on other core dereferencing interface
pointer while calling usb_autopm_put_interface_async() API.
Check for USB_DEV_CONNECTED flag(cleared at the time of
disconnect) before dereferencing the interface pointer.
3) Interface unbound and driver is accessing already freed
interface pointer in tx completion or usb device pointer to
re-submit rx urb in rx completion. Add rx and tx urb pending
counters and wait for them to become zero (or timeout) during
disconnect.
(cherry picked from commit b3779d1e3ed31d10c97094256c6d398af8484faa)
Conflicts:
drivers/usb/misc/ks_bridge.c
CRs-Fixed: 448142
Change-Id: I50341173b94200bcfa60715b4b26b2117fc37c2c
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
ks bridver needs to get loaded for two mdm9x15 device enumeration
to support flashless boot and efs sync.
Change-Id: I4316fe74a311a26042e60787cb0b27fcd2df3cb9
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
The runtime PM is disabled for a device during suspend. It is
enabled again just before resuming the device. The resume method
of USB interface drivers are called while resuming a USB device. As
USB device is the parent of an interface, the interface resume is
blocked till USB device resume is completed. If interface driver
call any runtime PM API before interface runtime PM is enabled, it
fails with -EACCESS error.
The USB runtime wrapper usb_autopm_get_interface() decrements PM usage
counter when get_sync() is failed. The current code is decrementing
the PM usage counter even when an error code is returned from
usb_autopm_get_interface(). Due to this double decrementing, the KS
bridge interface PM usage counter is becoming negative after several
suspend and resume cycles. Once the PM usage counter becomes negative,
the interface runtime PM state will never become active. That means,
USB device suspend can happen even when a Tx URB is pending from ks
bridge driver.
The fix is trivial. Don't decrement PM usage counter when error code
is returned from usb_autopm_get_interface().
(cherry picked from commit 361d9af92470ebeeb0a42f73e6eb457ab279b282)
Conflicts:
drivers/usb/misc/ks_bridge.c
CRs-Fixed: 437214
Change-Id: I96c9e1797c137cd158c424ebf6342f607cee6d78
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
The user space application writes in 1MB chunks while loading MDM
images. The current code allocate as many bytes as user space
passed to write system call. These allocations are failing under
memory fragmentation scenario. Hence limit write size to 16KB.
CRs-Fixed: 434638
(cherry picked from commit 7fcc7799af7ace4c4eda229b0eac6448f98d6637)
Conflicts:
drivers/usb/misc/ks_bridge.c
Change-Id: I224cf201d724642f99e29874c4c5366ad773131e
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
This change addresses two memory leaks:-
1) misc device is not getting deregistered during device
disconnect. Hence call misc_deregister() in disconnect.
2) Driver returns without freeing previous instances of
the driver data structure if memory allocation fails. Hence
free up memory allocated for ks_bridge structure.
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
(cherry picked from commit da86bd2faa9cfbf065c7a1f0adba124d7e8335e0)
Conflicts:
drivers/usb/misc/ks_bridge.c
Change-Id: I5e1c357fa29b455bae5f3dc71b4d65d5cc216bb3
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
The current code allocates a new Rx buffer in Rx completion handler.
Rx buffers are freed after user space consumes them. This results in
allocating larger buffers in atomic context which may fail some times.
Don't queue the Rx buffer immediately. Defer it till user space consumes
it and reuse the same buffer. The test results indicate no throughput
degradation. The Rx buffers will be freed when interface is suspended
or disconnected.
CRs-Fixed: 430595
Change-Id: I8e69e27df2e11b38497e0384a8edd87ecedcb24b
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
(cherry picked from commit 5c915c1949b79bc59d2b222bfcce02cd429619b2)
ks bridge is allocating urb to transmit data to mdm.
This urb is not getting freed after transmit completes.
Hence call usb_free_urb() after urb gets submitted
successfully. Urb will eventually be freed after tx
completion.
CRs-Fixed: 401536
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
(cherry picked from commit 1432f6f448bb2231499ef989f9e1ec314e9817d9)
Change-Id: I0ec244b6bff35aa1e59b39735ec867be39c4d221
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
If driver copies only partial data buffer to user space
it does not update the buffer pointer. In this case
buffer pointer is still pointing to the already read
buffer and will be copied again in next read request
from user space. This corrupts the contents of the
efs file or ram dump files. Hence update data buffer
pointer with length of memory read completed by user
space.
(cherry picked from commit b48f4737ac62a5c26b59eea59322186179c06ab0)
Change-Id: Ibc2a248394b1fd3ece7cef6a94e99e27dc4f9575
CRs-Fixed: 403250
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
Signed-off-by: Neha Pandey <nehap@codeaurora.org>
There is a possibility of runtime suspend in the middle of
data transfer on the rx data path of driver. This results in
the completion of data transfer on bulk IN endpoint with short
packet or integral multiple of 512 bytes. Hence for -ENOENT
transfer status check for non-zero data length and pass it to
the consumer in the userspace. Also, replace printk with
DBG-level message in driver suspend function and in rx
callback function for -EPROTO urb status.
Change-Id: Id7f9602e61e98f5bbd38c2f2f8121616b5661591
CRs-Fixed: 394954
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
Signed-off-by: Neha Pandey <nehap@codeaurora.org>
ks bridge driver needs to add support for autosuspend
for 9008 PID. This change allows for the device to be
suspended when there is no active traffic, and USB
remote wakeup is used to signal a resume to the host.
Change-Id: I32d58e441be24fdc2081840de39bd569a2284e20
CRs-Fixed: 397969
Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
Signed-off-by: Neha Pandey <nehap@codeaurora.org>
kickstart bridge driver will be used to download boot images
to mdm, ram-dumps and efs sync.
Change-Id: Id35e2da664ebf4a16c84d6fb67fbf38a2855356a
Signed-off-by: Vamsi Krishna <vskrishn@codeaurora.org>