]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - include/asm-arm/domain.h
Pull virt-cpu-accounting into release branch
[linux-2.6-omap-h63xx.git] / include / asm-arm / domain.h
index da1d960387d9880f2fa602b028aca633719fc3f0..3c12a7625304d24d19bcb9e469c5b5bbcca8faef 100644 (file)
  *  DOMAIN_IO     - domain 2 includes all IO only
  *  DOMAIN_USER   - domain 1 includes all user memory only
  *  DOMAIN_KERNEL - domain 0 includes all kernel memory only
+ *
+ * The domain numbering depends on whether we support 36 physical
+ * address for I/O or not.  Addresses above the 32 bit boundary can
+ * only be mapped using supersections and supersections can only
+ * be set for domain 0.  We could just default to DOMAIN_IO as zero,
+ * but there may be systems with supersection support and no 36-bit
+ * addressing.  In such cases, we want to map system memory with
+ * supersections to reduce TLB misses and footprint.
+ *
+ * 36-bit addressing and supersections are only available on
+ * CPUs based on ARMv6+ or the Intel XSC3 core.
  */
+#ifndef CONFIG_IO_36
 #define DOMAIN_KERNEL  0
 #define DOMAIN_TABLE   0
 #define DOMAIN_USER    1
 #define DOMAIN_IO      2
+#else
+#define DOMAIN_KERNEL  2
+#define DOMAIN_TABLE   2
+#define DOMAIN_USER    1
+#define DOMAIN_IO      0
+#endif
 
 /*
  * Domain types
 #define domain_val(dom,type)   ((type) << (2*(dom)))
 
 #ifndef __ASSEMBLY__
+
+#ifdef CONFIG_MMU
 #define set_domain(x)                                  \
        do {                                            \
        __asm__ __volatile__(                           \
        "mcr    p15, 0, %0, c3, c0      @ set domain"   \
          : : "r" (x));                                 \
+       isb();                                          \
        } while (0)
 
 #define modify_domain(dom,type)                                        \
        set_domain(thread->cpu_domain);                         \
        } while (0)
 
+#else
+#define set_domain(x)          do { } while (0)
+#define modify_domain(dom,type)        do { } while (0)
+#endif
+
 #endif
 #endif /* !__ASSEMBLY__ */