summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTzung-Bi Shih <tzungbi@chromium.org>2020-08-25 10:11:08 +0800
committerCommit Bot <commit-bot@chromium.org>2020-08-26 23:16:18 +0000
commita2e6bc30b7275e8746e4962dfaba8ca30e9650cf (patch)
treede0191781d37c141c2602b49a71f228eba86e782
parentb7790f6c6b084a3872a2b2106d2a3228c3d32d3c (diff)
downloadchrome-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.c8
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)