]> git.baikalelectronics.ru Git - arm-tf.git/commit
feat(imx8mq): add workaround code for ERR11171 on imx8mq
authorJacky Bai <ping.bai@nxp.com>
Wed, 8 Jan 2020 08:56:01 +0000 (16:56 +0800)
committerJacky Bai <ping.bai@nxp.com>
Wed, 1 Mar 2023 02:18:03 +0000 (10:18 +0800)
commit88a264657fad2f71369fec4b53478e8a595d10e9
treee0c9629581263a3dfead7132c61e0a98a565db4c
parentdd108c3c1fe3f958a38ae255e57b41e5453d077f
feat(imx8mq): add workaround code for ERR11171 on imx8mq

This new workaround takes advantage of the per core IMR
registers in GPC in order to unmask the IRQ0, still generated
by the 12bit in IOMUX_GPR register (which now remains always set),
so it can only wake up one core at the time.Also, this entire
workaround has now been moved here in TF-A, allowing the kernel
side to be minimal.

Another advantage this workaround brings is the removal of the
50us delay (which was necessary before in gic_raise_softirq in
kernel) by allowing the core that is waking up to mask his own
IRQ0 in the suspend finish callback.

One important change here is the way the cores are woken up in
dram_dvfs_handler. Since the wake up mechanism has changed from
asserting the 12th bit in IOMUX_GPR and leaving the IMR1 1st bit
on for each core to exactly the reverse, that is, leaving the
IOMUX_GPR 12th bit always set and then masking/unmasking the IMR1
1st bit for each independent core, we need to use the imx_gpc_core_wake
to wake up the cores.

Also, the 50us udelay is moved to TF-A (inside imx_pwr_domain_off)
from kernel(gic_raise_softirq), since the new cpuidle workaround
does not need it in order to clean the IOMUX_GPC 12bit. For now,
the udelay seems to be still needed in order to delay the affinity
info OFF for the dying core. This is something that needs further
investigation.

Signed-off-by: Abel Vesa <abel.vesa@nxp.com>
Signed-off-by: Jacky Bai <ping.bai@nxp.com>
Change-Id: I9f17ff6fc3452b8225a50b232964712aafeab78a
plat/imx/common/imx_sip_svc.c
plat/imx/common/include/imx_sip_svc.h
plat/imx/imx8m/gpc_common.c
plat/imx/imx8m/imx8m_psci_common.c
plat/imx/imx8m/imx8mq/gpc.c
plat/imx/imx8m/imx8mq/imx8mq_psci.c
plat/imx/imx8m/imx8mq/platform.mk
plat/imx/imx8m/include/gpc.h