diff options
author | Tzung-Bi Shih <tzungbi@chromium.org> | 2020-08-25 10:11:08 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-08-26 23:16:18 +0000 |
commit | a2e6bc30b7275e8746e4962dfaba8ca30e9650cf (patch) | |
tree | de0191781d37c141c2602b49a71f228eba86e782 | |
parent | b7790f6c6b084a3872a2b2106d2a3228c3d32d3c (diff) | |
download | chrome-ec-a2e6bc30b7275e8746e4962dfaba8ca30e9650cf.tar.gz |
chip/mt8192_scp: do not handle pending IPI interrupts
No need to handle pending IPI interrupts.
Reasons:
- Interrupts are level trigger in MT8192 SCP. As long as the source
interrupts persist, RV33 handles them eventually.
- task_trigger_irq() fires an additional GIPC_IN0 IRQ. The former one
will clear the interrupt source by writing GIPC_IN_CLR. When the
latter one is handling, RV33 crashed due to it cannot find the
corresponding interrupt source.
BRANCH=none
BUG=b:163682416
TEST=1. cat - <<EOF >test.sh
echo stop >/sys/class/remoteproc/remoteproc0/state
while :; do
dmesg -C
echo start >/sys/class/remoteproc/remoteproc0/state
sleep 1
if dmesg | grep -q 'rpmsg send timeout'; then
break
fi
echo stop >/sys/class/remoteproc/remoteproc0/state
done
echo stop >/sys/class/remoteproc/remoteproc0/state
EOF
2. sh test.sh
Signed-off-by: Tzung-Bi Shih <tzungbi@chromium.org>
Change-Id: I2cc89a258a4ce218389799bbe1101ffc1375af8a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2373846
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2378954
Reviewed-by: Edward Hill <ecgh@chromium.org>
Commit-Queue: Edward Hill <ecgh@chromium.org>
Tested-by: Edward Hill <ecgh@chromium.org>
-rw-r--r-- | chip/mt8192_scp/ipi.c | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/chip/mt8192_scp/ipi.c b/chip/mt8192_scp/ipi.c index 2f67f7fa14..83d9fa8ebb 100644 --- a/chip/mt8192_scp/ipi.c +++ b/chip/mt8192_scp/ipi.c @@ -38,14 +38,8 @@ void ipi_disable_irq(void) void ipi_enable_irq(void) { - if (atomic_dec(&disable_irq_count, 1) == 1) { - int pending = SCP_GIPC_IN_SET; - + if (atomic_dec(&disable_irq_count, 1) == 1) set_int_mask(saved_int_mask); - - if (init_done && pending) - task_trigger_irq(SCP_IRQ_GIPC_IN0); - } } static int ipi_is_busy(void) |