kernel/eka/include/nkern/nk_cpu.h
changeset 15 4122176ea935
parent 0 a41df078684a
child 31 56f325a607ea
equal deleted inserted replaced
0:a41df078684a 15:4122176ea935
   321 									
   321 									
   322 #else
   322 #else
   323 #define FLUSH_ICACHE(cc,r)			asm("mcr"#cc" p15, 0, "#r", c7, c5, 0 "); /**< @internalTechnology */
   323 #define FLUSH_ICACHE(cc,r)			asm("mcr"#cc" p15, 0, "#r", c7, c5, 0 "); /**< @internalTechnology */
   324 #endif // else !(__CPU_ARM1136_ERRATUM_411920_FIXED) && (__CPU_ARM1136__ || __CPU_ARM1176__)
   324 #endif // else !(__CPU_ARM1136_ERRATUM_411920_FIXED) && (__CPU_ARM1136__ || __CPU_ARM1176__)
   325 #if defined(__CPU_ARM1136_ERRATUM_371025_FIXED) || !defined(__CPU_ARM1136__)
   325 #if defined(__CPU_ARM1136_ERRATUM_371025_FIXED) || !defined(__CPU_ARM1136__)
       
   326 
       
   327 #if !defined(__CPU_ARM1176_ERRATUM_720013_FIXED) && defined(__CPU_ARM1176__)
       
   328 #define FLUSH_ICACHE_LINE(cc,r,tmp) asm("mcr"#cc" p15, 0, "#r", c7, c5, 1 ");       \
       
   329                                     asm("mcr"#cc" p15, 0, "#r", c7, c5, 1 "); /**< @internalTechnology */
       
   330 #else
   326 #define FLUSH_ICACHE_LINE(cc,r,tmp)	asm("mcr"#cc" p15, 0, "#r", c7, c5, 1 "); /**< @internalTechnology */
   331 #define FLUSH_ICACHE_LINE(cc,r,tmp)	asm("mcr"#cc" p15, 0, "#r", c7, c5, 1 "); /**< @internalTechnology */
   327 #else // workaround for erratum 371025...
   332 #endif // !defined(__CPU_ARM1176_ERRATUM_720013_FIXED) && defined(__CPU_ARM1176__)
       
   333 
       
   334 #else // workaround for erratum 371025 of 1136...
   328 /** @internalTechnology */
   335 /** @internalTechnology */
   329 #define FLUSH_ICACHE_LINE(cc,r,tmp)	asm("orr"#cc" "#tmp", "#r", #0xC0000000 ");		\
   336 #define FLUSH_ICACHE_LINE(cc,r,tmp)	asm("orr"#cc" "#tmp", "#r", #0xC0000000 ");		\
   330 									asm("bic"#cc" "#tmp", "#tmp", #1 ");			\
   337 									asm("bic"#cc" "#tmp", "#tmp", #1 ");			\
   331 									asm("mcr"#cc" p15, 0, "#tmp", c7, c5, 2 ");		\
   338 									asm("mcr"#cc" p15, 0, "#tmp", c7, c5, 2 ");		\
   332 									asm("sub"#cc" "#tmp", "#tmp", #0x40000000 ");	\
   339 									asm("sub"#cc" "#tmp", "#tmp", #0x40000000 ");	\
   334 									asm("sub"#cc" "#tmp", "#tmp", #0x40000000 ");	\
   341 									asm("sub"#cc" "#tmp", "#tmp", #0x40000000 ");	\
   335 									asm("mcr"#cc" p15, 0, "#tmp", c7, c5, 2 ");		\
   342 									asm("mcr"#cc" p15, 0, "#tmp", c7, c5, 2 ");		\
   336 									asm("sub"#cc" "#tmp", "#tmp", #0x40000000 ");	\
   343 									asm("sub"#cc" "#tmp", "#tmp", #0x40000000 ");	\
   337 									asm("mcr"#cc" p15, 0, "#tmp", c7, c5, 2 ");
   344 									asm("mcr"#cc" p15, 0, "#tmp", c7, c5, 2 ");
   338 #endif //else (__CPU_ARM1136_ERRATUM_371025_FIXED) || !(__CPU_ARM1136__)
   345 #endif //else (__CPU_ARM1136_ERRATUM_371025_FIXED) || !(__CPU_ARM1136__)
       
   346 
       
   347 #if !defined(__CPU_ARM1176_ERRATUM_720013_FIXED) && defined(__CPU_ARM1176__)
       
   348 // It is commented out to ensure it is not used on 1176 cores with 720013 erratum
       
   349 // #define FLUSH_ICACHE_INDEX(cc,r)    asm("mcr"#cc" p15, 0, "#r", c7, c5, 2 ");
       
   350 #else
   339 #define FLUSH_ICACHE_INDEX(cc,r)	asm("mcr"#cc" p15, 0, "#r", c7, c5, 2 ");	/**< @internalTechnology */
   351 #define FLUSH_ICACHE_INDEX(cc,r)	asm("mcr"#cc" p15, 0, "#r", c7, c5, 2 ");	/**< @internalTechnology */
       
   352 #endif //!defined(__CPU_ARM1176_ERRATUM_720013_FIXED) && defined(__CPU_ARM1176__)
   340 #define PURGE_DCACHE_LINE(cc,r)		asm("mcr"#cc" p15, 0, "#r", c7, c6, 1 ");	/**< @internalTechnology */
   353 #define PURGE_DCACHE_LINE(cc,r)		asm("mcr"#cc" p15, 0, "#r", c7, c6, 1 ");	/**< @internalTechnology */
   341 #define PURGE_DCACHE_INDEX(cc,r)	asm("mcr"#cc" p15, 0, "#r", c7, c6, 2 ");	/**< @internalTechnology */
   354 #define PURGE_DCACHE_INDEX(cc,r)	asm("mcr"#cc" p15, 0, "#r", c7, c6, 2 ");	/**< @internalTechnology */
   342 #define CLEAN_DCACHE_LINE(cc,r)		asm("mcr"#cc" p15, 0, "#r", c7, c10, 1 ");	/**< @internalTechnology */
   355 #define CLEAN_DCACHE_LINE(cc,r)		asm("mcr"#cc" p15, 0, "#r", c7, c10, 1 ");	/**< @internalTechnology */
   343 
   356 
   344 #define CLEAN_DCACHE_INDEX(cc,r)	asm("mcr"#cc" p15, 0, "#r", c7, c10, 2 ");	/**< @internalTechnology */
   357 #define CLEAN_DCACHE_INDEX(cc,r)	asm("mcr"#cc" p15, 0, "#r", c7, c10, 2 ");	/**< @internalTechnology */