diff options
-rw-r--r-- | drivers/arm/gic/arm_gic.c | 8 | ||||
-rw-r--r-- | include/common/asm_macros.S | 24 | ||||
-rw-r--r-- | include/lib/cpus/aarch64/cortex_a53.h | 10 | ||||
-rw-r--r-- | include/lib/cpus/aarch64/cortex_a57.h | 10 | ||||
-rw-r--r-- | include/lib/cpus/aarch64/cortex_a72.h | 10 | ||||
-rw-r--r-- | include/lib/cpus/aarch64/cortex_a73.h | 5 | ||||
-rw-r--r-- | lib/cpus/aarch64/cortex_a53.S | 4 | ||||
-rw-r--r-- | lib/cpus/aarch64/cortex_a57.S | 4 | ||||
-rw-r--r-- | lib/cpus/aarch64/cortex_a72.S | 4 | ||||
-rw-r--r-- | lib/cpus/aarch64/cortex_a73.S | 3 | ||||
-rw-r--r-- | plat/common/aarch64/platform_mp_stack.S | 3 | ||||
-rw-r--r-- | plat/common/aarch64/platform_up_stack.S | 2 | ||||
-rw-r--r-- | tools/cert_create/src/main.c | 6 |
13 files changed, 79 insertions, 14 deletions
diff --git a/drivers/arm/gic/arm_gic.c b/drivers/arm/gic/arm_gic.c index ecd5a938..82c54480 100644 --- a/drivers/arm/gic/arm_gic.c +++ b/drivers/arm/gic/arm_gic.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -205,10 +205,14 @@ void arm_gic_pcpu_distif_setup(void) assert(g_irq_sec_ptr); sec_ppi_sgi_mask = 0; + + /* Ensure all SGIs and PPIs are Group0 to begin with */ + gicd_write_igroupr(g_gicd_base, 0, 0); + for (index = 0; index < g_num_irqs; index++) { irq_num = g_irq_sec_ptr[index]; if (irq_num < MIN_SPI_ID) { - /* We have an SGI or a PPI. They are Group0 at reset */ + /* We have an SGI or a PPI */ sec_ppi_sgi_mask |= 1U << irq_num; gicd_set_ipriorityr(g_gicd_base, irq_num, GIC_HIGHEST_SEC_PRIORITY); diff --git a/include/common/asm_macros.S b/include/common/asm_macros.S index d4bd11ee..bd8bb709 100644 --- a/include/common/asm_macros.S +++ b/include/common/asm_macros.S @@ -148,17 +148,33 @@ #endif /* + * Helper assembler macro to count trailing zeros. The output is + * populated in the `TZ_COUNT` symbol. + */ + .macro count_tz _value, _tz_count + .if \_value + count_tz "(\_value >> 1)", "(\_tz_count + 1)" + .else + .equ TZ_COUNT, (\_tz_count - 1) + .endif + .endm + + /* * This macro declares an array of 1 or more stacks, properly * aligned and in the requested section */ -#define STACK_ALIGN 6 +#define DEFAULT_STACK_ALIGN (1 << 6) /* In case the caller doesnt provide alignment */ - .macro declare_stack _name, _section, _size, _count - .if ((\_size & ((1 << STACK_ALIGN) - 1)) <> 0) + .macro declare_stack _name, _section, _size, _count, _align=DEFAULT_STACK_ALIGN + count_tz \_align, 0 + .if (\_align - (1 << TZ_COUNT)) + .error "Incorrect stack alignment specified (Must be a power of 2)." + .endif + .if ((\_size & ((1 << TZ_COUNT) - 1)) <> 0) .error "Stack size not correctly aligned" .endif .section \_section, "aw", %nobits - .align STACK_ALIGN + .align TZ_COUNT \_name: .space ((\_count) * (\_size)), 0 .endm diff --git a/include/lib/cpus/aarch64/cortex_a53.h b/include/lib/cpus/aarch64/cortex_a53.h index 169d8f4b..6976b809 100644 --- a/include/lib/cpus/aarch64/cortex_a53.h +++ b/include/lib/cpus/aarch64/cortex_a53.h @@ -57,6 +57,11 @@ #define CPUECTLR_FPU_RET_CTRL_MASK (0x7 << CPUECTLR_FPU_RET_CTRL_SHIFT) /******************************************************************************* + * CPU Memory Error Syndrome register specific definitions. + ******************************************************************************/ +#define CPUMERRSR_EL1 S3_1_C15_C2_2 /* Instruction def. */ + +/******************************************************************************* * CPU Auxiliary Control register specific definitions. ******************************************************************************/ #define CPUACTLR_EL1 S3_1_C15_C2_0 /* Instruction def. */ @@ -79,4 +84,9 @@ #define L2ECTLR_RET_CTRL_SHIFT 0 #define L2ECTLR_RET_CTRL_MASK (0x7 << L2ECTLR_RET_CTRL_SHIFT) +/******************************************************************************* + * L2 Memory Error Syndrome register specific definitions. + ******************************************************************************/ +#define L2MERRSR_EL1 S3_1_C15_C2_3 /* Instruction def. */ + #endif /* __CORTEX_A53_H__ */ diff --git a/include/lib/cpus/aarch64/cortex_a57.h b/include/lib/cpus/aarch64/cortex_a57.h index ac4ae570..c5a218b7 100644 --- a/include/lib/cpus/aarch64/cortex_a57.h +++ b/include/lib/cpus/aarch64/cortex_a57.h @@ -57,6 +57,11 @@ #define CPUECTLR_CPU_RET_CTRL_MASK (0x7 << CPUECTLR_CPU_RET_CTRL_SHIFT) /******************************************************************************* + * CPU Memory Error Syndrome register specific definitions. + ******************************************************************************/ +#define CPUMERRSR_EL1 S3_1_C15_C2_2 /* Instruction def. */ + +/******************************************************************************* * CPU Auxiliary Control register specific definitions. ******************************************************************************/ #define CPUACTLR_EL1 S3_1_C15_C2_0 /* Instruction def. */ @@ -90,4 +95,9 @@ #define L2ECTLR_RET_CTRL_SHIFT 0 #define L2ECTLR_RET_CTRL_MASK (0x7 << L2ECTLR_RET_CTRL_SHIFT) +/******************************************************************************* + * L2 Memory Error Syndrome register specific definitions. + ******************************************************************************/ +#define L2MERRSR_EL1 S3_1_C15_C2_3 /* Instruction def. */ + #endif /* __CORTEX_A57_H__ */ diff --git a/include/lib/cpus/aarch64/cortex_a72.h b/include/lib/cpus/aarch64/cortex_a72.h index fa10ca90..01edf43b 100644 --- a/include/lib/cpus/aarch64/cortex_a72.h +++ b/include/lib/cpus/aarch64/cortex_a72.h @@ -45,6 +45,11 @@ #define CPUECTLR_L2_DPFTCH_DIST_MASK (0x3 << 32) /******************************************************************************* + * CPU Memory Error Syndrome register specific definitions. + ******************************************************************************/ +#define CPUMERRSR_EL1 S3_1_C15_C2_2 /* Instruction def. */ + +/******************************************************************************* * CPU Auxiliary Control register specific definitions. ******************************************************************************/ #define CPUACTLR_EL1 S3_1_C15_C2_0 /* Instruction def. */ @@ -65,4 +70,9 @@ #define L2_TAG_RAM_LATENCY_2_CYCLES 0x1 #define L2_TAG_RAM_LATENCY_3_CYCLES 0x2 +/******************************************************************************* + * L2 Memory Error Syndrome register specific definitions. + ******************************************************************************/ +#define L2MERRSR_EL1 S3_1_C15_C2_3 /* Instruction def. */ + #endif /* __CORTEX_A72_H__ */ diff --git a/include/lib/cpus/aarch64/cortex_a73.h b/include/lib/cpus/aarch64/cortex_a73.h index 2ad04677..13e114a3 100644 --- a/include/lib/cpus/aarch64/cortex_a73.h +++ b/include/lib/cpus/aarch64/cortex_a73.h @@ -41,4 +41,9 @@ #define CORTEX_A73_CPUECTLR_SMP_BIT (1 << 6) +/******************************************************************************* + * L2 Memory Error Syndrome register specific definitions. + ******************************************************************************/ +#define CORTEX_A73_L2MERRSR_EL1 S3_1_C15_C2_3 /* Instruction def. */ + #endif /* __CORTEX_A73_H__ */ diff --git a/lib/cpus/aarch64/cortex_a53.S b/lib/cpus/aarch64/cortex_a53.S index bb565162..ed546e7e 100644 --- a/lib/cpus/aarch64/cortex_a53.S +++ b/lib/cpus/aarch64/cortex_a53.S @@ -234,11 +234,13 @@ endfunc cortex_a53_cluster_pwr_dwn */ .section .rodata.cortex_a53_regs, "aS" cortex_a53_regs: /* The ascii list of register names to be reported */ - .asciz "cpuectlr_el1", "" + .asciz "cpuectlr_el1", "cpumerrsr_el1", "l2merrsr_el1", "" func cortex_a53_cpu_reg_dump adr x6, cortex_a53_regs mrs x8, CPUECTLR_EL1 + mrs x9, CPUMERRSR_EL1 + mrs x10, L2MERRSR_EL1 ret endfunc cortex_a53_cpu_reg_dump diff --git a/lib/cpus/aarch64/cortex_a57.S b/lib/cpus/aarch64/cortex_a57.S index 60929a05..d6b181d0 100644 --- a/lib/cpus/aarch64/cortex_a57.S +++ b/lib/cpus/aarch64/cortex_a57.S @@ -477,11 +477,13 @@ endfunc cortex_a57_cluster_pwr_dwn */ .section .rodata.cortex_a57_regs, "aS" cortex_a57_regs: /* The ascii list of register names to be reported */ - .asciz "cpuectlr_el1", "" + .asciz "cpuectlr_el1", "cpumerrsr_el1", "l2merrsr_el1", "" func cortex_a57_cpu_reg_dump adr x6, cortex_a57_regs mrs x8, CPUECTLR_EL1 + mrs x9, CPUMERRSR_EL1 + mrs x10, L2MERRSR_EL1 ret endfunc cortex_a57_cpu_reg_dump diff --git a/lib/cpus/aarch64/cortex_a72.S b/lib/cpus/aarch64/cortex_a72.S index eb37f2ca..9f04fb72 100644 --- a/lib/cpus/aarch64/cortex_a72.S +++ b/lib/cpus/aarch64/cortex_a72.S @@ -231,11 +231,13 @@ endfunc cortex_a72_cluster_pwr_dwn */ .section .rodata.cortex_a72_regs, "aS" cortex_a72_regs: /* The ascii list of register names to be reported */ - .asciz "cpuectlr_el1", "" + .asciz "cpuectlr_el1", "cpumerrsr_el1", "l2merrsr_el1", "" func cortex_a72_cpu_reg_dump adr x6, cortex_a72_regs mrs x8, CPUECTLR_EL1 + mrs x9, CPUMERRSR_EL1 + mrs x10, L2MERRSR_EL1 ret endfunc cortex_a72_cpu_reg_dump diff --git a/lib/cpus/aarch64/cortex_a73.S b/lib/cpus/aarch64/cortex_a73.S index 70b4c6a5..e1615dbd 100644 --- a/lib/cpus/aarch64/cortex_a73.S +++ b/lib/cpus/aarch64/cortex_a73.S @@ -144,11 +144,12 @@ endfunc cortex_a73_cluster_pwr_dwn */ .section .rodata.cortex_a73_regs, "aS" cortex_a73_regs: /* The ascii list of register names to be reported */ - .asciz "cpuectlr_el1", "" + .asciz "cpuectlr_el1", "l2merrsr_el1", "" func cortex_a73_cpu_reg_dump adr x6, cortex_a73_regs mrs x8, CORTEX_A73_CPUECTLR_EL1 + mrs x9, CORTEX_A73_L2MERRSR_EL1 ret endfunc cortex_a73_cpu_reg_dump diff --git a/plat/common/aarch64/platform_mp_stack.S b/plat/common/aarch64/platform_mp_stack.S index c719019a..a077f658 100644 --- a/plat/common/aarch64/platform_mp_stack.S +++ b/plat/common/aarch64/platform_mp_stack.S @@ -193,4 +193,5 @@ endfunc plat_set_my_stack * ----------------------------------------------------- */ declare_stack platform_normal_stacks, tzfw_normal_stacks, \ - PLATFORM_STACK_SIZE, PLATFORM_CORE_COUNT + PLATFORM_STACK_SIZE, PLATFORM_CORE_COUNT, \ + CACHE_WRITEBACK_GRANULE diff --git a/plat/common/aarch64/platform_up_stack.S b/plat/common/aarch64/platform_up_stack.S index c01534af..24b3a71f 100644 --- a/plat/common/aarch64/platform_up_stack.S +++ b/plat/common/aarch64/platform_up_stack.S @@ -99,4 +99,4 @@ endfunc_deprecated platform_set_stack * ----------------------------------------------------- */ declare_stack platform_normal_stacks, tzfw_normal_stacks, \ - PLATFORM_STACK_SIZE, 1 + PLATFORM_STACK_SIZE, 1, CACHE_WRITEBACK_GRANULE diff --git a/tools/cert_create/src/main.c b/tools/cert_create/src/main.c index c87d9888..c58f41de 100644 --- a/tools/cert_create/src/main.c +++ b/tools/cert_create/src/main.c @@ -428,9 +428,11 @@ int main(int argc, char *argv[]) */ switch (ext->type) { case EXT_TYPE_NVCOUNTER: - nvctr = atoi(ext->arg); - CHECK_NULL(cert_ext, ext_new_nvcounter(ext_nid, + if (ext->arg) { + nvctr = atoi(ext->arg); + CHECK_NULL(cert_ext, ext_new_nvcounter(ext_nid, EXT_CRIT, nvctr)); + } break; case EXT_TYPE_HASH: if (ext->arg == NULL) { |