@@ -8,16 +8,33 @@
#include <asm/system.h>
#define SMC_SIP_INVOKE_MCE 0x82FFFF00
-#define MCE_SMC_ROC_FLUSH_CACHE 11
+#define MCE_SMC_ROC_FLUSH_CACHE 11
+#define MCE_SMC_ROC_FLUSH_CACHE_ONLY 14
+#define MCE_SMC_ROC_CLEAN_CACHE_ONLY 15
-int flush_dcache_all_l3(void)
+static int smc_sip_invoke_mce(int cmd)
{
struct pt_regs regs = {0};
isb();
- regs.regs[0] = SMC_SIP_INVOKE_MCE | MCE_SMC_ROC_FLUSH_CACHE;
+ regs.regs[0] = SMC_SIP_INVOKE_MCE | cmd;
smc_call(®s);
return 0;
}
+
+int invalidate_dcache_all_l3(void)
+{
+ return smc_sip_invoke_mce(MCE_SMC_ROC_FLUSH_CACHE_ONLY);
+}
+
+int flush_dcache_all_l3(void)
+{
+ return smc_sip_invoke_mce(MCE_SMC_ROC_CLEAN_CACHE_ONLY);
+}
+
+int invalidate_icache_all_l3(void)
+{
+ return smc_sip_invoke_mce(MCE_SMC_ROC_FLUSH_CACHE);
+}