#define CTR_L1IP(ctr)          (((ctr) >> CTR_L1IP_SHIFT) & CTR_L1IP_MASK)
 
+#define ICACHE_POLICY_VPIPT    0
 #define ICACHE_POLICY_VIPT     2
 #define ICACHE_POLICY_PIPT     3
 
 #include <linux/bitops.h>
 
 #define ICACHEF_ALIASING       0
+#define ICACHEF_VPIPT          1
 extern unsigned long __icache_flags;
 
 /*
        return test_bit(ICACHEF_ALIASING, &__icache_flags);
 }
 
+static inline int icache_is_vpipt(void)
+{
+       return test_bit(ICACHEF_VPIPT, &__icache_flags);
+}
+
 static inline u32 cache_type_cwg(void)
 {
        return (read_cpuid_cachetype() >> CTR_CWG_SHIFT) & CTR_CWG_MASK;
 
        [0 ... ICACHE_POLICY_PIPT]      = "RESERVED/UNKNOWN",
        [ICACHE_POLICY_VIPT]            = "VIPT",
        [ICACHE_POLICY_PIPT]            = "PIPT",
+       [ICACHE_POLICY_VPIPT]           = "VPIPT",
 };
 
 unsigned long __icache_flags;
        switch (l1ip) {
        case ICACHE_POLICY_PIPT:
                break;
+       case ICACHE_POLICY_VPIPT:
+               set_bit(ICACHEF_VPIPT, &__icache_flags);
+               break;
        default:
                /* Fallthrough */
        case ICACHE_POLICY_VIPT: