diff options
-rw-r--r-- | arch/arm/boot/dts/am3517.dtsi | 5 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap-smp.c | 41 |
2 files changed, 46 insertions, 0 deletions
diff --git a/arch/arm/boot/dts/am3517.dtsi b/arch/arm/boot/dts/am3517.dtsi index 4b6062b631b1..23ea381d363f 100644 --- a/arch/arm/boot/dts/am3517.dtsi +++ b/arch/arm/boot/dts/am3517.dtsi | |||
@@ -91,6 +91,11 @@ | |||
91 | }; | 91 | }; |
92 | }; | 92 | }; |
93 | 93 | ||
94 | /* Table Table 5-79 of the TRM shows 480ab000 is reserved */ | ||
95 | &usb_otg_hs { | ||
96 | status = "disabled"; | ||
97 | }; | ||
98 | |||
94 | &iva { | 99 | &iva { |
95 | status = "disabled"; | 100 | status = "disabled"; |
96 | }; | 101 | }; |
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c index 69df3620eca5..1c73694c871a 100644 --- a/arch/arm/mach-omap2/omap-smp.c +++ b/arch/arm/mach-omap2/omap-smp.c | |||
@@ -109,6 +109,45 @@ void omap5_erratum_workaround_801819(void) | |||
109 | static inline void omap5_erratum_workaround_801819(void) { } | 109 | static inline void omap5_erratum_workaround_801819(void) { } |
110 | #endif | 110 | #endif |
111 | 111 | ||
112 | #ifdef CONFIG_HARDEN_BRANCH_PREDICTOR | ||
113 | /* | ||
114 | * Configure ACR and enable ACTLR[0] (Enable invalidates of BTB with | ||
115 | * ICIALLU) to activate the workaround for secondary Core. | ||
116 | * NOTE: it is assumed that the primary core's configuration is done | ||
117 | * by the boot loader (kernel will detect a misconfiguration and complain | ||
118 | * if this is not done). | ||
119 | * | ||
120 | * In General Purpose(GP) devices, ACR bit settings can only be done | ||
121 | * by ROM code in "secure world" using the smc call and there is no | ||
122 | * option to update the "firmware" on such devices. This also works for | ||
123 | * High security(HS) devices, as a backup option in case the | ||
124 | * "update" is not done in the "security firmware". | ||
125 | */ | ||
126 | static void omap5_secondary_harden_predictor(void) | ||
127 | { | ||
128 | u32 acr, acr_mask; | ||
129 | |||
130 | asm volatile ("mrc p15, 0, %0, c1, c0, 1" : "=r" (acr)); | ||
131 | |||
132 | /* | ||
133 | * ACTLR[0] (Enable invalidates of BTB with ICIALLU) | ||
134 | */ | ||
135 | acr_mask = BIT(0); | ||
136 | |||
137 | /* Do we already have it done.. if yes, skip expensive smc */ | ||
138 | if ((acr & acr_mask) == acr_mask) | ||
139 | return; | ||
140 | |||
141 | acr |= acr_mask; | ||
142 | omap_smc1(OMAP5_DRA7_MON_SET_ACR_INDEX, acr); | ||
143 | |||
144 | pr_debug("%s: ARM ACR setup for CVE_2017_5715 applied on CPU%d\n", | ||
145 | __func__, smp_processor_id()); | ||
146 | } | ||
147 | #else | ||
148 | static inline void omap5_secondary_harden_predictor(void) { } | ||
149 | #endif | ||
150 | |||
112 | static void omap4_secondary_init(unsigned int cpu) | 151 | static void omap4_secondary_init(unsigned int cpu) |
113 | { | 152 | { |
114 | /* | 153 | /* |
@@ -131,6 +170,8 @@ static void omap4_secondary_init(unsigned int cpu) | |||
131 | set_cntfreq(); | 170 | set_cntfreq(); |
132 | /* Configure ACR to disable streaming WA for 801819 */ | 171 | /* Configure ACR to disable streaming WA for 801819 */ |
133 | omap5_erratum_workaround_801819(); | 172 | omap5_erratum_workaround_801819(); |
173 | /* Enable ACR to allow for ICUALLU workaround */ | ||
174 | omap5_secondary_harden_predictor(); | ||
134 | } | 175 | } |
135 | 176 | ||
136 | /* | 177 | /* |