We enable PM runtime auto suspend on rockchip platforms
(e.g. RK3399), it allows the DWC3 controller to enter
runtime suspend if usb cable detached. So if the dwc3
is already in PM runtime suspend, we don't need to do
anything in dwc3_suspend() and dwc3_resume() which
duplicated the same operations as dwc3_runtime_suspend()
and dwc3_runtime_resume().
This patch can help to avoid kernel panic if accessing
the DWC3 registers in dwc3_resume() when the DWC3 is in
PM runtime suspend and it's power domain is power off.
Kernel panic - not syncing: Asynchronous SError Interrupt
CPU: 1 PID: 707 Comm: Binder:236_2 Not tainted 5.10.43 #270
Hardware name: Rockchip RK3566 RK817 TABLET LP4X Board (DT)
Call trace:
dump_backtrace+0x0/0x1c0
show_stack+0x18/0x24
dump_stack_lvl+0xc8/0x104
dump_stack+0x18/0x5c
panic+0x14c/0x390
test_taint+0x0/0x30
arm64_serror_panic+0x74/0x80
do_serror+0xd8/0xf8
el1_error+0x94/0x118
el1_abort+0x3c/0x60
el1_sync_handler+0x48/0x84
el1_sync+0x8c/0x140
dwc3_phy_setup+0x24/0x50c
dwc3_core_init+0x50/0xf40
dwc3_core_init_for_resume+0x64/0x274
dwc3_resume_common+0x3c/0x274
dwc3_resume+0x28/0x64
dpm_resume+0x134/0x568
Change-Id: I63e734f51b05274251d8a88a664eee768568eb7b
Signed-off-by: Wu Liang feng <wulf@rock-chips.com>
There is no validation of the index from dwc3_wIndex_to_dep() and we might
be referring a non-existing ep and trigger a NULL pointer exception. In
certain configurations we might use fewer eps and the index might wrongly
indicate a larger ep index than existing.
By adding this validation from the patch we can actually report a wrong
index back to the caller.
In our usecase we are using a composite device on an older kernel, but
upstream might use this fix also. Unfortunately, I cannot describe the
hardware for others to reproduce the issue as it is a proprietary
implementation.
[ 82.958261] Unable to handle kernel NULL pointer dereference at virtual address 00000000000000a4
[ 82.966891] Mem abort info:
[ 82.969663] ESR = 0x96000006
[ 82.972703] Exception class = DABT (current EL), IL = 32 bits
[ 82.978603] SET = 0, FnV = 0
[ 82.981642] EA = 0, S1PTW = 0
[ 82.984765] Data abort info:
[ 82.987631] ISV = 0, ISS = 0x00000006
[ 82.991449] CM = 0, WnR = 0
[ 82.994409] user pgtable: 4k pages, 39-bit VAs, pgdp = 00000000c6210ccc
[ 83.000999] [00000000000000a4] pgd=0000000053aa5003, pud=0000000053aa5003, pmd=0000000000000000
[ 83.009685] Internal error: Oops: 96000006 [#1] PREEMPT SMP
[ 83.026433] Process irq/62-dwc3 (pid: 303, stack limit = 0x000000003985154c)
[ 83.033470] CPU: 0 PID: 303 Comm: irq/62-dwc3 Not tainted 4.19.124 #1
[ 83.044836] pstate: 60000085 (nZCv daIf -PAN -UAO)
[ 83.049628] pc : dwc3_ep0_handle_feature+0x414/0x43c
[ 83.054558] lr : dwc3_ep0_interrupt+0x3b4/0xc94
...
[ 83.141788] Call trace:
[ 83.144227] dwc3_ep0_handle_feature+0x414/0x43c
[ 83.148823] dwc3_ep0_interrupt+0x3b4/0xc94
[ 83.181546] ---[ end trace aac6b5267d84c32f ]---
Change-Id: Iad43f5d46dfd81cabac976f7a65410ecc8a4fcd4
Signed-off-by: Marian-Cristian Rotariu <marian.c.rotariu@gmail.com>
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20210608162650.58426-1-marian.c.rotariu@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: William Wu <william.wu@rock-chips.com>
(cherry picked from commit d00889080a)
at a high frame rate (120fps), the fast switch test has a higher probability of the following errors:
Failed to get runtime pm, -22
Signed-off-by: Yiqing Zeng <zack.zeng@rock-chips.com>
Change-Id: I6d9fdd86cc69368ba340ab7e43d2b6030a72ce8c
[ Upstream commit a9ab9cce93 ]
Invoking trc_del_holdout() from within trc_wait_for_one_reader() is
only a performance optimization because the RCU Tasks Trace grace-period
kthread will eventually do this within check_all_holdout_tasks_trace().
But it is not a particularly important performance optimization because
it only applies to the grace-period kthread, of which there is but one.
This commit therefore removes this invocation of trc_del_holdout() in
favor of the one in check_all_holdout_tasks_trace() in the grace-period
kthread.
Bug: 202954022
Change-Id: I339f39776a96bcced4c7622d321e66f83299bcf7
Reported-by: "Xu, Yanfei" <yanfei.xu@windriver.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
[ Upstream commit 1d10bf55d8 ]
As Yanfei pointed out, although invoking trc_del_holdout() is safe
from the viewpoint of the integrity of the holdout list itself,
the put_task_struct() invoked by trc_del_holdout() can result in
use-after-free errors due to later accesses to this task_struct structure
by the RCU Tasks Trace grace-period kthread.
This commit therefore removes this call to trc_del_holdout() from
trc_inspect_reader() in favor of the grace-period thread's existing call
to trc_del_holdout(), thus eliminating that particular class of
use-after-free errors.
Bug: 202954022
Change-Id: Ib1e8eb51f74db89407462cadff1bc8c17565abb4
Reported-by: "Xu, Yanfei" <yanfei.xu@windriver.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Move mpp_session_deinit out of the lock range.
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I46c3aaeb96c67ed04630b0da0a71385546dd5e7c
commit b5fdf5c6e6 upstream.
The MAX-3421 USB driver remembers the state of the USB toggles for a
device/endpoint. To save SPI writes, this was only done when a new
device/endpoint was being used. Unfortunately, if the old device was
removed, this would cause writes to freed memory.
To fix this, a simpler scheme is used. The toggles are read from
hardware when a URB is completed, and the toggles are always written to
hardware when any URB transaction is started. This will cause a few more
SPI transactions, but no causes kernel panics.
Fixes: 2d53139f31 ("Add support for using a MAX3421E chip as a host driver.")
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Mark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
Link: https://lore.kernel.org/r/20210625031456.8632-1-mark.tomlinson@alliedtelesis.co.nz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Bug: 202859772
Change-Id: I55e4fd4609e7e0c68986bcf10718f486d2e55cad
The RK806 are a Power Management IC (PMIC) for multimedia
and handheld devices. They contains the following components:
- Regulators
- Pinctrl
- PowerKey
Signed-off-by: shengfei Xu <xsf@rock-chips.com>
Change-Id: Iee9c521d52c53752286238c93b39afb5eb32e9b2
According the commit 729dcffd1e ("usb: dwc3: gadget: Add
support for disabling U1 and U2 entries"), it's necessary
to disable the U1 and U2 low power state to improve USB 3.0
performance for mass storage gadget and uvc gadget.
In addition, it can help to avoid the dwc3 wakeup failed
from U1 or U2 state when connect to the Host USB 3.0 interface.
android_work: sent uevent USB_STATE=CONNECTED
dwc3 fcc00000.dwc3: failed to send remote wakeup
dwc3 fcc00000.dwc3: wakeup failed --> -22
WARNING: CPU: 0 PID: 427 at drivers/usb/dwc3/gadget.c:319 dwc3_send_gadget_ep_cmd+0x198/0x93c
...
Call trace:
dwc3_send_gadget_ep_cmd+0x198/0x93c
dwc3_ep0_complete_status+0xe8/0x294
dwc3_ep0_interrupt+0x2ac/0x3d4
dwc3_process_event_entry+0x7c/0x610
dwc3_process_event_buf+0x6c/0x374
dwc3_thread_interrupt+0x38/0x64
irq_thread_fn+0x34/0x88
irq_thread+0x1a4/0x248
kthread+0x13c/0x344
ret_from_fork+0x10/0x30
dwc3 fcc00000.dwc3: failed to send remote wakeup
android_work: sent uevent USB_STATE=CONFIGURED
Signed-off-by: William Wu <william.wu@rock-chips.com>
Change-Id: I5993a3fceb79d59d276f6b909b17592fb36b6760
According the commit 729dcffd1e ("usb: dwc3: gadget: Add
support for disabling U1 and U2 entries"), it's necessary
to disable the U1 and U2 low power state to improve USB 3.0
performance for mass storage gadget and uvc gadget.
In addition, it can help to avoid the dwc3 wakeup failed
from U1 or U2 state when connect to the Host USB 3.0 interface.
android_work: sent uevent USB_STATE=CONNECTED
dwc3 fcc00000.dwc3: failed to send remote wakeup
dwc3 fcc00000.dwc3: wakeup failed --> -22
WARNING: CPU: 0 PID: 427 at drivers/usb/dwc3/gadget.c:319 dwc3_send_gadget_ep_cmd+0x198/0x93c
...
Call trace:
dwc3_send_gadget_ep_cmd+0x198/0x93c
dwc3_ep0_complete_status+0xe8/0x294
dwc3_ep0_interrupt+0x2ac/0x3d4
dwc3_process_event_entry+0x7c/0x610
dwc3_process_event_buf+0x6c/0x374
dwc3_thread_interrupt+0x38/0x64
irq_thread_fn+0x34/0x88
irq_thread+0x1a4/0x248
kthread+0x13c/0x344
ret_from_fork+0x10/0x30
dwc3 fcc00000.dwc3: failed to send remote wakeup
android_work: sent uevent USB_STATE=CONFIGURED
Signed-off-by: William Wu <william.wu@rock-chips.com>
Change-Id: I7887c782a0320abe768079b098eab17ee846dcf6
According the commit 729dcffd1e ("usb: dwc3: gadget: Add
support for disabling U1 and U2 entries"), it's necessary
to disable the U1 and U2 low power state to improve USB 3.0
performance for mass storage gadget and uvc gadget.
In addition, it can help to avoid the dwc3 wakeup failed
from U1 or U2 state when connect to the Host USB 3.0 interface.
android_work: sent uevent USB_STATE=CONNECTED
dwc3 fcc00000.dwc3: failed to send remote wakeup
dwc3 fcc00000.dwc3: wakeup failed --> -22
WARNING: CPU: 0 PID: 427 at drivers/usb/dwc3/gadget.c:319 dwc3_send_gadget_ep_cmd+0x198/0x93c
...
Call trace:
dwc3_send_gadget_ep_cmd+0x198/0x93c
dwc3_ep0_complete_status+0xe8/0x294
dwc3_ep0_interrupt+0x2ac/0x3d4
dwc3_process_event_entry+0x7c/0x610
dwc3_process_event_buf+0x6c/0x374
dwc3_thread_interrupt+0x38/0x64
irq_thread_fn+0x34/0x88
irq_thread+0x1a4/0x248
kthread+0x13c/0x344
ret_from_fork+0x10/0x30
dwc3 fcc00000.dwc3: failed to send remote wakeup
android_work: sent uevent USB_STATE=CONFIGURED
Signed-off-by: William Wu <william.wu@rock-chips.com>
Change-Id: Ic63ee7852fbe1bcb3563b6dec455c0aee53522f1
Add struct (iova_domain *) in iova alloc & free vendor hook by create a new vendor hook.
Thus we can know the iova we are operating belongs to which iova domain.
Bug: 201255968
Change-Id: I7df419650af2e85a3b2b8c3d6995247694bdc953
Signed-off-by: Chao Hao <chao.hao@mediatek.com>
Signed-off-by: Guangming Cao <Guangming.Cao@mediatek.com>
Commit aa53f580e6 ("scsi: ufs: Minor adjustments to error handling")
introduced a ufshcd_clear_ua_wluns() call in
ufshcd_err_handling_unprepare(). As explained in detail by Adrian Hunter,
this can trigger a deadlock. Avoid that deadlock by removing the code that
clears the unit attention. This is safe because the only software that
relies on clearing unit attentions is the Android Trusty software and
because support for handling unit attentions has been added in the Trusty software.
See also https://lore.kernel.org/linux-scsi/20210930124224.114031-2-adrian.hunter@intel.com/
Note that, should apply "scsi: ufs: retry START_STOP on UNIT_ATTENTION" before
this patch, since this patch gives UNIT ATTENTION to scsi_execute(START_STOP).
Bug: 194712579
(cherry picked from commit edc0596cc0
git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next)
Link: https://lore.kernel.org/r/20211001182015.1347587-3-jaegeuk@kernel.org
Fixes: aa53f580e6 ("scsi: ufs: Minor adjustments to error handling")
Cc: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Bart Van Assche <bvanassche@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Change-Id: I73656b8b6773558dc7a552700d283c1ae6dc25f7
Commit 57d104c153 ("ufs: add UFS power management support") made the UFS
driver submit a REQUEST SENSE command before submitting a power management
command to a WLUN to clear the POWER ON unit attention. Instead of
submitting a REQUEST SENSE command before submitting a power management
command, retry the power management command until it succeeds.
This is the preparation to get rid of all UNIT ATTENTION code which should
be handled by users.
Bug: 194712579
Link: https://lore.kernel.org/r/20211001182015.1347587-2-jaegeuk@kernel.org
(cherry picked from commit af21c3fd5b
git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next)
Cc: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Change-Id: I7e639d89ae9fbd5ff0f1b3a6e5cbe77682ebefc0