Cortex-A9 GIC: Some fixes that I don't fully understand but do indeed give me serial interrupts

This commit is contained in:
Gregory Nutt
2016-05-16 12:50:35 -06:00
parent a0cdbcb58f
commit 4feeb0c2b4
2 changed files with 34 additions and 6 deletions
+31 -6
View File
@@ -211,7 +211,16 @@ void arm_gic_initialize(void)
#endif #endif
#if defined(CONFIG_ARCH_TRUSTZONE_SECURE) || defined(CONFIG_ARCH_TRUSTZONE_BOTH) #if defined(CONFIG_ARCH_TRUSTZONE_SECURE)
/* Set FIQn=1 if secure interrupts are to signal using nfiq_c.
*
* NOTE: Only for processors that operate in secure state.
* REVISIT: Do I need to do this?
*/
//iccicr |= GIC_ICCICRS_FIQEN;
#elif defined(CONFIG_ARCH_TRUSTZONE_BOTH)
/* Set FIQn=1 if secure interrupts are to signal using nfiq_c. /* Set FIQn=1 if secure interrupts are to signal using nfiq_c.
* *
* NOTE: Only for processors that operate in secure state. * NOTE: Only for processors that operate in secure state.
@@ -221,25 +230,35 @@ void arm_gic_initialize(void)
iccicr |= GIC_ICCICRS_FIQEN; iccicr |= GIC_ICCICRS_FIQEN;
#endif #endif
#if defined(ONFIG_ARCH_TRUSTZONE_BOTH) #if defined(CONFIG_ARCH_TRUSTZONE_SECURE)
/* Program the AckCtl bit to select the required interrupt acknowledge /* Program the AckCtl bit to select the required interrupt acknowledge
* behavior. * behavior.
* *
* NOTE: Only for processors that operate in both secure and non-secure * NOTE: Only for processors that operate in both secure and non-secure
* state. * state.
* REVISIT: I don't yet fully understand this setting. * REVISIT: This is here only for superstituous reasons. I don't think
* I need this setting in this configuration.
*/ */
// iccicr |= GIC_ICCICRS_ACKTCTL; iccicr |= GIC_ICCICRS_ACKTCTL;
#elif defined(CONFIG_ARCH_TRUSTZONE_BOTH)
/* Program the AckCtl bit to select the required interrupt acknowledge
* behavior.
*
* NOTE: Only for processors that operate in both secure and non-secure
* state.
*/
iccicr |= GIC_ICCICRS_ACKTCTL;
/* Program the SBPR bit to select the required binary pointer behavior. /* Program the SBPR bit to select the required binary pointer behavior.
* *
* NOTE: Only for processors that operate in both secure and non-secure * NOTE: Only for processors that operate in both secure and non-secure
* state. * state.
* REVISIT: I don't yet fully understand this setting.
*/ */
// iccicr |= GIC_ICCICRS_CBPR; iccicr |= GIC_ICCICRS_CBPR;
#endif #endif
#if defined(CONFIG_ARCH_TRUSTZONE_SECURE) || defined(CONFIG_ARCH_TRUSTZONE_BOTH) #if defined(CONFIG_ARCH_TRUSTZONE_SECURE) || defined(CONFIG_ARCH_TRUSTZONE_BOTH)
@@ -291,9 +310,15 @@ void arm_gic_initialize(void)
* bypass. * bypass.
*/ */
#if 0 /* REVISIT -- I don't know why this needs to be like this */
iccicr |= (GIC_ICCICRS_ENABLEGRP0 | GIC_ICCICRS_FIQBYPDISGRP0 | iccicr |= (GIC_ICCICRS_ENABLEGRP0 | GIC_ICCICRS_FIQBYPDISGRP0 |
GIC_ICCICRS_IRQBYPDISGRP0 | GIC_ICCICRS_FIQBYPDISGRP1 | GIC_ICCICRS_IRQBYPDISGRP0 | GIC_ICCICRS_FIQBYPDISGRP1 |
GIC_ICCICRS_IRQBYPDISGRP1); GIC_ICCICRS_IRQBYPDISGRP1);
#else
iccicr |= (GIC_ICCICRS_ENABLEGRP0 | GIC_ICCICRS_ENABLEGRP1 |
GIC_ICCICRS_FIQBYPDISGRP0 | GIC_ICCICRS_IRQBYPDISGRP0 |
GIC_ICCICRS_FIQBYPDISGRP1 | GIC_ICCICRS_IRQBYPDISGRP1);
#endif
icddcr = GIC_ICDDCR_ENABLEGRP0; icddcr = GIC_ICDDCR_ENABLEGRP0;
#elif defined(CONFIG_ARCH_TRUSTZONE_BOTH) #elif defined(CONFIG_ARCH_TRUSTZONE_BOTH)
+3
View File
@@ -44,6 +44,9 @@ driver serial output to the VCOM console is working (llsyslog). However,
there does not appear to be any interrupt activity: No timer interrupts, there does not appear to be any interrupt activity: No timer interrupts,
no interrupt driver serial console output (syslog, printf). no interrupt driver serial console output (syslog, printf).
2016-05-16: I know get serial interrupts (but not timer interrupts). This
involves a few changes to GIC bit settings that I do not fully understand.
Platform Features Platform Features
================= =================