From: Greg Kroah-Hartman Date: Fri, 4 May 2018 22:15:31 +0000 (-0700) Subject: 4.16-stable patches X-Git-Tag: v4.9.99~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=aa68fc2c690e46f27d4fd1554dd2cef613aa1e0c;p=thirdparty%2Fkernel%2Fstable-queue.git 4.16-stable patches added patches: arm64-add-work-around-for-arm-cortex-a55-erratum-1024718.patch --- diff --git a/queue-4.16/arm64-add-work-around-for-arm-cortex-a55-erratum-1024718.patch b/queue-4.16/arm64-add-work-around-for-arm-cortex-a55-erratum-1024718.patch new file mode 100644 index 00000000000..00f3752298a --- /dev/null +++ b/queue-4.16/arm64-add-work-around-for-arm-cortex-a55-erratum-1024718.patch @@ -0,0 +1,152 @@ +From ece1397cbc89c51914fae1aec729539cfd8bd62b Mon Sep 17 00:00:00 2001 +From: Suzuki K Poulose +Date: Mon, 26 Mar 2018 15:12:49 +0100 +Subject: arm64: Add work around for Arm Cortex-A55 Erratum 1024718 + +From: Suzuki K Poulose + +commit ece1397cbc89c51914fae1aec729539cfd8bd62b upstream. + +Some variants of the Arm Cortex-55 cores (r0p0, r0p1, r1p0) suffer +from an erratum 1024718, which causes incorrect updates when DBM/AP +bits in a page table entry is modified without a break-before-make +sequence. The work around is to skip enabling the hardware DBM feature +on the affected cores. The hardware Access Flag management features +is not affected. There are some other cores suffering from this +errata, which could be added to the midr_list to trigger the work +around. + +Cc: Catalin Marinas +Cc: ckadabi@codeaurora.org +Reviewed-by: Dave Martin +Signed-off-by: Suzuki K Poulose +Signed-off-by: Will Deacon +Signed-off-by: Greg Kroah-Hartman + +--- + Documentation/arm64/silicon-errata.txt | 1 + arch/arm64/Kconfig | 14 +++++++++++ + arch/arm64/include/asm/assembler.h | 40 +++++++++++++++++++++++++++++++++ + arch/arm64/include/asm/cputype.h | 2 + + arch/arm64/mm/proc.S | 5 ++++ + 5 files changed, 62 insertions(+) + +--- a/Documentation/arm64/silicon-errata.txt ++++ b/Documentation/arm64/silicon-errata.txt +@@ -55,6 +55,7 @@ stable kernels. + | ARM | Cortex-A57 | #834220 | ARM64_ERRATUM_834220 | + | ARM | Cortex-A72 | #853709 | N/A | + | ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 | ++| ARM | Cortex-A55 | #1024718 | ARM64_ERRATUM_1024718 | + | ARM | MMU-500 | #841119,#826419 | N/A | + | | | | | + | Cavium | ThunderX ITS | #22375, #24313 | CAVIUM_ERRATUM_22375 | +--- a/arch/arm64/Kconfig ++++ b/arch/arm64/Kconfig +@@ -464,6 +464,20 @@ config ARM64_ERRATUM_843419 + + If unsure, say Y. + ++config ARM64_ERRATUM_1024718 ++ bool "Cortex-A55: 1024718: Update of DBM/AP bits without break before make might result in incorrect update" ++ default y ++ help ++ This option adds work around for Arm Cortex-A55 Erratum 1024718. ++ ++ Affected Cortex-A55 cores (r0p0, r0p1, r1p0) could cause incorrect ++ update of the hardware dirty bit when the DBM/AP bits are updated ++ without a break-before-make. The work around is to disable the usage ++ of hardware DBM locally on the affected cores. CPUs not affected by ++ erratum will continue to use the feature. ++ ++ If unsure, say Y. ++ + config CAVIUM_ERRATUM_22375 + bool "Cavium erratum 22375, 24313" + default y +--- a/arch/arm64/include/asm/assembler.h ++++ b/arch/arm64/include/asm/assembler.h +@@ -25,6 +25,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -595,4 +596,43 @@ USER(\label, ic ivau, \tmp2) // invali + #endif + .endm + ++/* ++ * Check the MIDR_EL1 of the current CPU for a given model and a range of ++ * variant/revision. See asm/cputype.h for the macros used below. ++ * ++ * model: MIDR_CPU_MODEL of CPU ++ * rv_min: Minimum of MIDR_CPU_VAR_REV() ++ * rv_max: Maximum of MIDR_CPU_VAR_REV() ++ * res: Result register. ++ * tmp1, tmp2, tmp3: Temporary registers ++ * ++ * Corrupts: res, tmp1, tmp2, tmp3 ++ * Returns: 0, if the CPU id doesn't match. Non-zero otherwise ++ */ ++ .macro cpu_midr_match model, rv_min, rv_max, res, tmp1, tmp2, tmp3 ++ mrs \res, midr_el1 ++ mov_q \tmp1, (MIDR_REVISION_MASK | MIDR_VARIANT_MASK) ++ mov_q \tmp2, MIDR_CPU_MODEL_MASK ++ and \tmp3, \res, \tmp2 // Extract model ++ and \tmp1, \res, \tmp1 // rev & variant ++ mov_q \tmp2, \model ++ cmp \tmp3, \tmp2 ++ cset \res, eq ++ cbz \res, .Ldone\@ // Model matches ? ++ ++ .if (\rv_min != 0) // Skip min check if rv_min == 0 ++ mov_q \tmp3, \rv_min ++ cmp \tmp1, \tmp3 ++ cset \res, ge ++ .endif // \rv_min != 0 ++ /* Skip rv_max check if rv_min == rv_max && rv_min != 0 */ ++ .if ((\rv_min != \rv_max) || \rv_min == 0) ++ mov_q \tmp2, \rv_max ++ cmp \tmp1, \tmp2 ++ cset \tmp2, le ++ and \res, \res, \tmp2 ++ .endif ++.Ldone\@: ++ .endm ++ + #endif /* __ASM_ASSEMBLER_H */ +--- a/arch/arm64/include/asm/cputype.h ++++ b/arch/arm64/include/asm/cputype.h +@@ -83,6 +83,7 @@ + #define ARM_CPU_PART_CORTEX_A53 0xD03 + #define ARM_CPU_PART_CORTEX_A73 0xD09 + #define ARM_CPU_PART_CORTEX_A75 0xD0A ++#define ARM_CPU_PART_CORTEX_A55 0xD05 + + #define APM_CPU_PART_POTENZA 0x000 + +@@ -102,6 +103,7 @@ + #define MIDR_CORTEX_A72 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A72) + #define MIDR_CORTEX_A73 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A73) + #define MIDR_CORTEX_A75 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A75) ++#define MIDR_CORTEX_A55 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A55) + #define MIDR_THUNDERX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX) + #define MIDR_THUNDERX_81XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_81XX) + #define MIDR_THUNDERX_83XX MIDR_CPU_MODEL(ARM_CPU_IMP_CAVIUM, CAVIUM_CPU_PART_THUNDERX_83XX) +--- a/arch/arm64/mm/proc.S ++++ b/arch/arm64/mm/proc.S +@@ -448,6 +448,11 @@ ENTRY(__cpu_setup) + cbz x9, 2f + cmp x9, #2 + b.lt 1f ++#ifdef CONFIG_ARM64_ERRATUM_1024718 ++ /* Disable hardware DBM on Cortex-A55 r0p0, r0p1 & r1p0 */ ++ cpu_midr_match MIDR_CORTEX_A55, MIDR_CPU_VAR_REV(0, 0), MIDR_CPU_VAR_REV(1, 0), x1, x2, x3, x4 ++ cbnz x1, 1f ++#endif + orr x10, x10, #TCR_HD // hardware Dirty flag update + 1: orr x10, x10, #TCR_HA // hardware Access flag update + 2: diff --git a/queue-4.16/series b/queue-4.16/series index af8dd087c03..35834608998 100644 --- a/queue-4.16/series +++ b/queue-4.16/series @@ -1 +1,2 @@ acpi-button-make-module-loadable-when-booted-in-non-acpi-mode.patch +arm64-add-work-around-for-arm-cortex-a55-erratum-1024718.patch