diff --git a/include/lib/cpus/aarch32/cpu_macros.S b/include/lib/cpus/aarch32/cpu_macros.S index 7703be3..525e18c 100644 --- a/include/lib/cpus/aarch32/cpu_macros.S +++ b/include/lib/cpus/aarch32/cpu_macros.S @@ -214,5 +214,18 @@ bl errata_print_msg .endm #endif + /* + * Helper macro that reads the part number of the current CPU and jumps + * to the given label if it matches the CPU MIDR provided. + * + * Clobbers: r0-r1 + */ + .macro jump_if_cpu_midr _cpu_midr, _label + ldcopr r0, MIDR + ubfx r0, r0, #MIDR_PN_SHIFT, #12 + ldr r1, =((\_cpu_midr >> MIDR_PN_SHIFT) & MIDR_PN_MASK) + cmp r0, r1 + beq \_label + .endm #endif /* __CPU_MACROS_S__ */ diff --git a/include/lib/cpus/aarch64/cpu_macros.S b/include/lib/cpus/aarch64/cpu_macros.S index 026a48e..4672cbc 100644 --- a/include/lib/cpus/aarch64/cpu_macros.S +++ b/include/lib/cpus/aarch64/cpu_macros.S @@ -272,3 +272,17 @@ cmp \_reg, #1 beq \_label .endm + + /* + * Helper macro that reads the part number of the current + * CPU and jumps to the given label if it matches the CPU + * MIDR provided. + * + * Clobbers x0. + */ + .macro jump_if_cpu_midr _cpu_midr, _label + mrs x0, midr_el1 + ubfx x0, x0, MIDR_PN_SHIFT, #12 + cmp w0, #((\_cpu_midr >> MIDR_PN_SHIFT) & MIDR_PN_MASK) + b.eq \_label + .endm diff --git a/plat/arm/board/juno/aarch32/juno_helpers.S b/plat/arm/board/juno/aarch32/juno_helpers.S index 824002a..1bc4e30 100644 --- a/plat/arm/board/juno/aarch32/juno_helpers.S +++ b/plat/arm/board/juno/aarch32/juno_helpers.S @@ -10,6 +10,7 @@ #include #include #include +#include #include #include "../juno_def.h" @@ -34,21 +35,6 @@ .endm /* -------------------------------------------------------------------- - * Helper macro that reads the part number of the current CPU and jumps - * to the given label if it matches the CPU MIDR provided. - * - * Clobbers r0. - * -------------------------------------------------------------------- - */ - .macro jump_if_cpu_midr _cpu_midr, _label - ldcopr r0, MIDR - ubfx r0, r0, #MIDR_PN_SHIFT, #12 - ldr r1, =((\_cpu_midr >> MIDR_PN_SHIFT) & MIDR_PN_MASK) - cmp r0, r1 - beq \_label - .endm - - /* -------------------------------------------------------------------- * Platform reset handler for Juno R0. * * Juno R0 has the following topology: diff --git a/plat/arm/board/juno/aarch64/juno_helpers.S b/plat/arm/board/juno/aarch64/juno_helpers.S index 29c2c0a..edcfc74 100644 --- a/plat/arm/board/juno/aarch64/juno_helpers.S +++ b/plat/arm/board/juno/aarch64/juno_helpers.S @@ -40,20 +40,6 @@ .endm /* -------------------------------------------------------------------- - * Helper macro that reads the part number of the current CPU and jumps - * to the given label if it matches the CPU MIDR provided. - * - * Clobbers x0. - * -------------------------------------------------------------------- - */ - .macro jump_if_cpu_midr _cpu_midr, _label - mrs x0, midr_el1 - ubfx x0, x0, MIDR_PN_SHIFT, #12 - cmp w0, #((\_cpu_midr >> MIDR_PN_SHIFT) & MIDR_PN_MASK) - b.eq \_label - .endm - - /* -------------------------------------------------------------------- * Platform reset handler for Juno R0. * * Juno R0 has the following topology: diff --git a/plat/arm/css/sgi/aarch64/sgi_helper.S b/plat/arm/css/sgi/aarch64/sgi_helper.S index dd0fc5b..27bae43 100644 --- a/plat/arm/css/sgi/aarch64/sgi_helper.S +++ b/plat/arm/css/sgi/aarch64/sgi_helper.S @@ -8,6 +8,7 @@ #include #include #include +#include .globl plat_arm_calc_core_pos .globl plat_reset_handler @@ -48,21 +49,6 @@ ret endfunc plat_arm_calc_core_pos - /* ------------------------------------------------------ - * Helper macro that reads the part number of the current - * CPU and jumps to the given label if it matches the CPU - * MIDR provided. - * - * Clobbers x0. - * ----------------------------------------------------- - */ - .macro jump_if_cpu_midr _cpu_midr, _label - mrs x0, midr_el1 - ubfx x0, x0, MIDR_PN_SHIFT, #12 - cmp w0, #((\_cpu_midr >> MIDR_PN_SHIFT) & MIDR_PN_MASK) - b.eq \_label - .endm - /* ----------------------------------------------------- * void plat_reset_handler(void); * diff --git a/plat/arm/css/sgm/aarch64/css_sgm_helpers.S b/plat/arm/css/sgm/aarch64/css_sgm_helpers.S index d9b3df6..32ca1bb 100644 --- a/plat/arm/css/sgm/aarch64/css_sgm_helpers.S +++ b/plat/arm/css/sgm/aarch64/css_sgm_helpers.S @@ -9,6 +9,7 @@ #include #include #include +#include .globl plat_arm_calc_core_pos .globl plat_reset_handler @@ -50,21 +51,6 @@ ret endfunc plat_arm_calc_core_pos - /* ------------------------------------------------------ - * Helper macro that reads the part number of the current - * CPU and jumps to the given label if it matches the CPU - * MIDR provided. - * - * Clobbers x0. - * ----------------------------------------------------- - */ - .macro jump_if_cpu_midr _cpu_midr, _label - mrs x0, midr_el1 - ubfx x0, x0, MIDR_PN_SHIFT, #12 - cmp w0, #((\_cpu_midr >> MIDR_PN_SHIFT) & MIDR_PN_MASK) - b.eq \_label - .endm - /* ----------------------------------------------------- * void plat_reset_handler(void); *