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

Cortex A9 FIQ and IRQ interrupts

Parents
  • Note: This was originally posted on 10th September 2012 at http://forums.arm.com

    Hi

    I find this relevant to my problem. I am also trying to configure GIC for my system. From the background, the system has legacy interrupt controller which is deployed in the new system with Cortex-A9 MPCore (x1).

    [ Legacy Interrupt Controller ] --> [ GIC { Distributor --> CPU Interface} ] --> Processor

    If I use GIC in the default configuration where both the distributor and cpu interface is kept as disabled (i.e  bypass mode), I am able to see the nIRQ and nFIQ as legacy interrupts are passed successfully to the CPU and the corresponding interrupt handlers get executed successfully.

    I tried configuring GIC distributor with the following sequence

    [1] Disable the whole controller by disabling the distributor
    [2] Clear all the pending interrupts with distributor by writing 0xffff_ffff
    [3] Enable all the interrupts
    [4] Reset the priority for all the interrupts by writing 0x0000_0000
    [5] Interrupt targets are silent for write as CortexA9 MPCore has only one processor (as per specs)
    [6] Enabling the distributor

    Then I follow the following sequence to configure GIC CPU interface

    [7] CPU configuration 0 & 1 for PPI, SPI and SGI level/edge sensitive
    [8] Disable the CPU interface
    [9] Set the higher priority as 0x1f with PRM register
    [10] Enable the CPU Interface

    I do this configuration in the firmware when I am sure that there is no possibility of an interrupt in the system and when the system reaches to the area where interrupt is expected, legacy interrupt controller generates an interrupt to the distributor. I can confirm from the pending interrupt register of the distributor and from the PPI status register as well. The pending status of the interrupt against ID31 is set to 1 (as per specification this is when CPU interface is not in bypass mode for legacy interrupts). The problem I am having is that the corresponding interrupt handler in the system for IRQ and FIQ never get control i.e. interrupt remains pending on the distributor, I believe.

    Is there anything I have missed from the initial setup? Is there any way we can say whether the interrupt has been forwarded from the distributor to the CPU interface i.e. whether it is within distributor or CPU interface boundary?

    Thanks in advance,

         Vaibhav
Reply
  • Note: This was originally posted on 10th September 2012 at http://forums.arm.com

    Hi

    I find this relevant to my problem. I am also trying to configure GIC for my system. From the background, the system has legacy interrupt controller which is deployed in the new system with Cortex-A9 MPCore (x1).

    [ Legacy Interrupt Controller ] --> [ GIC { Distributor --> CPU Interface} ] --> Processor

    If I use GIC in the default configuration where both the distributor and cpu interface is kept as disabled (i.e  bypass mode), I am able to see the nIRQ and nFIQ as legacy interrupts are passed successfully to the CPU and the corresponding interrupt handlers get executed successfully.

    I tried configuring GIC distributor with the following sequence

    [1] Disable the whole controller by disabling the distributor
    [2] Clear all the pending interrupts with distributor by writing 0xffff_ffff
    [3] Enable all the interrupts
    [4] Reset the priority for all the interrupts by writing 0x0000_0000
    [5] Interrupt targets are silent for write as CortexA9 MPCore has only one processor (as per specs)
    [6] Enabling the distributor

    Then I follow the following sequence to configure GIC CPU interface

    [7] CPU configuration 0 & 1 for PPI, SPI and SGI level/edge sensitive
    [8] Disable the CPU interface
    [9] Set the higher priority as 0x1f with PRM register
    [10] Enable the CPU Interface

    I do this configuration in the firmware when I am sure that there is no possibility of an interrupt in the system and when the system reaches to the area where interrupt is expected, legacy interrupt controller generates an interrupt to the distributor. I can confirm from the pending interrupt register of the distributor and from the PPI status register as well. The pending status of the interrupt against ID31 is set to 1 (as per specification this is when CPU interface is not in bypass mode for legacy interrupts). The problem I am having is that the corresponding interrupt handler in the system for IRQ and FIQ never get control i.e. interrupt remains pending on the distributor, I believe.

    Is there anything I have missed from the initial setup? Is there any way we can say whether the interrupt has been forwarded from the distributor to the CPU interface i.e. whether it is within distributor or CPU interface boundary?

    Thanks in advance,

         Vaibhav
Children
No data