Hi,
I am running arm-trusted-firmware on Juno and when I breakthrough DS-5 on EL3 level I see FIQ pending status in ISR_EL1.
I am trying to bring-up linux guest OS and when I try to run linux image I am entering virtual FIQ handler at EL2 level.
Please let me know if there is any way I can ignore this FIQ pending ?
I tried using GICC_CTLR and GICV_CTLR registers bit 0 to disable Group0 (FIQs) interrupts but it is not helping.
Thanks,
Hi armdev,
What exactly did you set in the GICC_CTLR? The FIQ disable is a little more complicated than just disabling the Group 0 interrupts. Actually, what disabling Group 0 interrupts probably does for you with a pre-configured GIC is end up in bypass mode, so something is asserting the FIQ line directly to the core (or it's floating somehow). There is a way to disable it, though, which is documented in the GICv2 Architecture Specification section 2.3.x. There are some nice tables
We'll need a bit more information to figure out what exactly you're seeing here to figure out what's actually happening.
Ta,
Matt
Hi Matt,
After finding out the FIQBypDisGrp0 [5] bit now I am setting GICC_CTLR 0x220 but still I end up going to vFIQ handler in EL2 mode.
So bit Group0[0] and FIQEn[3] are disabled and also Bypass is disabled. Not sure what might be missing.
Thanks
I am still facing this FIQ issue. Is there any way using debugger I can clear this floating/pending FIQ before I jump and begin to run my own code ?
Do you have any idea which interrupt number this is?
For simplicity I just run below as specified in the tutorial to gain control at EL3 level and dump the GICC registers
GICC_CTLR (0x2c02f000) = 0x6B = (bit 2 AckCtl = 0)
GICC_IAR (0x2c02f00C) = 0x1D = (Interrupt ID = 29)
GICC_HPPIR (0x2c02f018) = 0x3FE = (Interrupt ID = 254)
ISR_EL1 = 0x40 (One FIQ pending)
Commands running on Juno
--------------------------------------------
core apply all set var $AARCH64::$System::$Other::$SCTLR_EL3 = 0x0
core apply all set var $AARCH64::$System::$Secure::$SCR_EL3 = 0x00000000
set var $AARCH64::$System::$PSTATE::$DAIF.D = 1
set var $AARCH64::$System::$PSTATE::$DAIF.A = 1
set var $AARCH64::$System::$PSTATE::$DAIF.I = 1
set var $AARCH64::$System::$PSTATE::$DAIF.F = 1
set var $AARCH64::$System::$PSTATE::$Mode.M = 13
memory set_typed AXI<PROT=1>:0x000000002A4A0140 (unsigned int) 0x80000000