imx: make sure GIC redistributor is awake before initialization
authorAnson Huang <Anson.Huang@nxp.com>
Fri, 1 Mar 2019 02:51:38 +0000 (10:51 +0800)
committerAnson Huang <Anson.Huang@nxp.com>
Fri, 1 Mar 2019 06:22:23 +0000 (14:22 +0800)
commite655fefcea5e77323b19549ba39f914442e7bf5f
tree4161b7609a06585df10b4fae2ab87f0cf6156812
parent64503b2f81bbd12051d8e0fd065a5a0b0c38bd2a
imx: make sure GIC redistributor is awake before initialization

GICR_WAKER.ProcessorSleep can only be set to zero when:
— GICR_WAKER.Sleep bit[0] == 0.
— GICR_WAKER.Quiescent bit[31] == 0.

On some platforms, when system reboot with GIC in sleep
mode but with power ON, such as on NXP's i.MX8QM, Linux
kernel enters suspend but could be requested to reboot,
and GIC is in sleep mode and it is inside a power domain
which is ON in this scenario, when CPU reset, the GIC
driver trys to set CORE's redistributor interface to awake,
with GICR_WAKER.Sleep bit[0] and GICR_WAKER.Quiescent bit[31]
both set, the ProcessorSleep bit[1] will never be clear
and cause system hang.

This patch makes sure GICR_WAKER.Sleep bit[0] and
GICR_WAKER.Quiescent bit[31] are both zeor before clearing
ProcessorSleep bit[1].

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
plat/imx/common/plat_imx8_gic.c