]> git.baikalelectronics.ru Git - kernel.git/commit
net: ipa: disable GSI interrupts while suspended
authorAlex Elder <elder@linaro.org>
Tue, 3 Aug 2021 14:01:03 +0000 (09:01 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 4 Aug 2021 09:12:05 +0000 (10:12 +0100)
commit934bc933ef451bafb3a5c13fe5c43456dd55fe70
tree6a0c6fcb80e790b307b68ba583cd292b404da875
parent23b1996e631b1a19725a15f9fa1c3115e7f581b9
net: ipa: disable GSI interrupts while suspended

Introduce new functions gsi_suspend() and gsi_resume(), which will
disable the GSI interrupt handler after all endpoints are suspended
and re-enable it before endpoints are resumed.  This will ensure no
GSI interrupt handler will fire when the hardware is suspended.

Here's a little further explanation.  There are seven GSI interrupt
types, and most are disabled except when needed.
  - These two are not used (never enabled):
      GSI_INTER_EE_CH_CTRL
      GSI_INTER_EE_EV_CTRL
  - These two are only used to implement channel and event ring
    commands, and are only enabled while a command is underway:
      GSI_CH_CTRL
      GSI_EV_CTRL
  - The IEOB interrupt signals I/O completion.  It will not fire
    when a channel is stopped (or "suspended").
      GSI_IEOB
  - This interrupt is used to allocate or halt modem channels,
    and is only enabled while such a command is underway.
      GSI_GLOB_EE
    However it also is used to signal certain errors, and this could
    occur at any time.
  - The general interrupt signals general errors, and could occur at
    any time.
      GSI_GENERAL

The purpose for this change is to ensure no global or general
interrupts fire due to errors while the hardware is suspended.
We enable the clock on resume, and at that time we can "handle"
(at least report) these error conditions.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ipa/gsi.c
drivers/net/ipa/gsi.h
drivers/net/ipa/ipa_main.c