Hi aarch64 maintainers,

Question 1:
In __aarch64_sync_cache_range function, if CTR_EL0.IDC = 0b1,
Shall the dc cvau and the dsb ish will be removed or
only dc cvau will be removed?

-  for (; address < (const char *) end; address += dcache_lsize)
-    asm volatile ("dc\tcvau, %0"
-                 :
-                 : "r" (address)
-                 : "memory");
-
-  asm volatile ("dsb\tish" : : : "memory");
-

Question 2:
In __aarch64_sync_cache_range function, if CTR_EL0.DIC = 0b1,
Shall the ic ivau, dsb ish and isb will be removed or
only ic ivau and dsb ish will be removed, only isb left?
-  for (; address < (const char *) end; address += icache_lsize)
-    asm volatile ("ic\tivau, %0"
-                 :
-                 : "r" (address)
-                 : "memory");
-
-  asm volatile ("dsb\tish; isb" : : : "memory");

Question 3:
For ic ivau/iallu/ialluis, is there any other place that would use these 
instructions except
self-modify scenario?

Question 4:
If CTR_EL0.IDC = 0b1 and CTR_EL0.DIC = 0b1, if software still execute ic 
ivau/iallu/ialluis
instrution, is it ok for cpu to treat it as NOP?

Cheers,
Shaokun

Reply via email to