This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Issue FIQ pending arm trusted firmware

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

  • Hi,

    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 ?

    Thanks

  • 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