Changeset 6ff23ff in mainline for kernel/arch
- Timestamp:
- 2018-05-17T13:46:56Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4f8772d4
- Parents:
- 7c3fb9b
- git-author:
- Jiri Svoboda <jiri@…> (2018-05-16 18:44:36)
- git-committer:
- Jiri Svoboda <jiri@…> (2018-05-17 13:46:56)
- Location:
- kernel/arch/arm32
- Files:
-
- 2 edited
-
include/arch/barrier.h (modified) (4 diffs)
-
src/fpu_context.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/arm32/include/arch/barrier.h
r7c3fb9b r6ff23ff 49 49 50 50 #if defined PROCESSOR_ARCH_armv7_a 51 /* ARMv7 uses instructions for memory barriers see ARM Architecture reference 51 /* 52 * ARMv7 uses instructions for memory barriers see ARM Architecture reference 52 53 * manual for details: 53 54 * DMB: ch. A8.8.43 page A8-376 … … 69 70 * ARM Architecture Reference Manual version I ch. B.3.2.1 p. B3-4 70 71 */ 71 /* ARMv6- use system control coprocessor (CP15) for memory barrier instructions. 72 /* 73 * ARMv6- use system control coprocessor (CP15) for memory barrier instructions. 72 74 * Although at least mcr p15, 0, r0, c7, c10, 4 is mentioned in earlier archs, 73 75 * CP15 implementation is mandatory only for armv6+. … … 86 88 #endif 87 89 #else 88 /* Older manuals mention syscalls as a way to implement cache coherency and 90 /* 91 * Older manuals mention syscalls as a way to implement cache coherency and 89 92 * barriers. See for example ARM Architecture Reference Manual Version D 90 93 * chapter 2.7.4 Prefetching and self-modifying code (p. A2-28) … … 123 126 inst_barrier(); /* Wait for Inst refetch */\ 124 127 } while (0) 125 /* @note: Cache type register is not available in uspace. We would need 126 * to export the cache line value, or use syscall for uspace smc_coherence */ 128 /* 129 * @note: Cache type register is not available in uspace. We would need 130 * to export the cache line value, or use syscall for uspace smc_coherence 131 */ 127 132 #define smc_coherence_block(a, l) \ 128 133 do { \ -
kernel/arch/arm32/src/fpu_context.c
r7c3fb9b r6ff23ff 117 117 static int fpu_have_coprocessor_access(void) 118 118 { 119 /*120 * The register containing the information (CPACR) is not available on armv6- 121 * rely on user decision to use CONFIG_FPU.122 */119 /* 120 * The register containing the information (CPACR) is not available 121 * on armv6-. Rely on user decision to use CONFIG_FPU. 122 */ 123 123 #ifdef PROCESSOR_ARCH_armv7_a 124 124 const uint32_t cpacr = CPACR_read(); 125 /* FPU needs access to coprocessor 10 and 11. 126 * Moreover they need to have same access enabled */ 125 /* 126 * FPU needs access to coprocessor 10 and 11. 127 * Moreover, they need to have same access enabled 128 */ 127 129 if (((cpacr & CPACR_CP_MASK(10)) != CPACR_CP_FULL_ACCESS(10)) && 128 130 ((cpacr & CPACR_CP_MASK(11)) != CPACR_CP_FULL_ACCESS(11))) { … … 131 133 } 132 134 #endif 135 133 136 return 1; 134 137 } … … 147 150 static void fpu_enable_coprocessor_access(void) 148 151 { 149 /*150 * The register containing the information (CPACR) is not available on armv6- 151 * rely on user decision to use CONFIG_FPU.152 */152 /* 153 * The register containing the information (CPACR) is not available 154 * on armv6-. Rely on user decision to use CONFIG_FPU. 155 */ 153 156 #ifdef PROCESSOR_ARCH_armv7_a 154 157 /* Allow coprocessor access */ 155 158 uint32_t cpacr = CPACR_read(); 156 /* FPU needs access to coprocessor 10 and 11. 157 * Moreover, they need to have same access enabled */ 159 /* 160 * FPU needs access to coprocessor 10 and 11. 161 * Moreover, they need to have same access enabled 162 */ 158 163 cpacr &= ~(CPACR_CP_MASK(10) | CPACR_CP_MASK(11)); 159 164 cpacr |= (CPACR_CP_FULL_ACCESS(10) | CPACR_CP_FULL_ACCESS(11)); … … 172 177 fpexc_write(0); 173 178 fpu_enable(); 174 /* Mask all exception traps, 179 /* 180 * Mask all exception traps, 175 181 * The bits are RAZ/WI on archs that don't support fpu exc traps. 176 182 */
Note:
See TracChangeset
for help on using the changeset viewer.
