|
@@ -178,3 +178,126 @@
|
|
|
/*
|
|
|
* Values for PageMask register
|
|
|
*/
|
|
|
+#ifdef CONFIG_CPU_VR41XX
|
|
|
+
|
|
|
+/* Why doesn't stupidity hurt ... */
|
|
|
+
|
|
|
+#define PM_1K 0x00000000
|
|
|
+#define PM_4K 0x00001800
|
|
|
+#define PM_16K 0x00007800
|
|
|
+#define PM_64K 0x0001f800
|
|
|
+#define PM_256K 0x0007f800
|
|
|
+
|
|
|
+#else
|
|
|
+
|
|
|
+#define PM_4K 0x00000000
|
|
|
+#define PM_8K 0x00002000
|
|
|
+#define PM_16K 0x00006000
|
|
|
+#define PM_32K 0x0000e000
|
|
|
+#define PM_64K 0x0001e000
|
|
|
+#define PM_128K 0x0003e000
|
|
|
+#define PM_256K 0x0007e000
|
|
|
+#define PM_512K 0x000fe000
|
|
|
+#define PM_1M 0x001fe000
|
|
|
+#define PM_2M 0x003fe000
|
|
|
+#define PM_4M 0x007fe000
|
|
|
+#define PM_8M 0x00ffe000
|
|
|
+#define PM_16M 0x01ffe000
|
|
|
+#define PM_32M 0x03ffe000
|
|
|
+#define PM_64M 0x07ffe000
|
|
|
+#define PM_256M 0x1fffe000
|
|
|
+#define PM_1G 0x7fffe000
|
|
|
+
|
|
|
+#endif
|
|
|
+
|
|
|
+/*
|
|
|
+ * Default page size for a given kernel configuration
|
|
|
+ */
|
|
|
+#ifdef CONFIG_PAGE_SIZE_4KB
|
|
|
+#define PM_DEFAULT_MASK PM_4K
|
|
|
+#elif defined(CONFIG_PAGE_SIZE_8KB)
|
|
|
+#define PM_DEFAULT_MASK PM_8K
|
|
|
+#elif defined(CONFIG_PAGE_SIZE_16KB)
|
|
|
+#define PM_DEFAULT_MASK PM_16K
|
|
|
+#elif defined(CONFIG_PAGE_SIZE_32KB)
|
|
|
+#define PM_DEFAULT_MASK PM_32K
|
|
|
+#elif defined(CONFIG_PAGE_SIZE_64KB)
|
|
|
+#define PM_DEFAULT_MASK PM_64K
|
|
|
+#else
|
|
|
+#error Bad page size configuration!
|
|
|
+#endif
|
|
|
+
|
|
|
+/*
|
|
|
+ * Default huge tlb size for a given kernel configuration
|
|
|
+ */
|
|
|
+#ifdef CONFIG_PAGE_SIZE_4KB
|
|
|
+#define PM_HUGE_MASK PM_1M
|
|
|
+#elif defined(CONFIG_PAGE_SIZE_8KB)
|
|
|
+#define PM_HUGE_MASK PM_4M
|
|
|
+#elif defined(CONFIG_PAGE_SIZE_16KB)
|
|
|
+#define PM_HUGE_MASK PM_16M
|
|
|
+#elif defined(CONFIG_PAGE_SIZE_32KB)
|
|
|
+#define PM_HUGE_MASK PM_64M
|
|
|
+#elif defined(CONFIG_PAGE_SIZE_64KB)
|
|
|
+#define PM_HUGE_MASK PM_256M
|
|
|
+#elif defined(CONFIG_MIPS_HUGE_TLB_SUPPORT)
|
|
|
+#error Bad page size configuration for hugetlbfs!
|
|
|
+#endif
|
|
|
+
|
|
|
+/*
|
|
|
+ * Values used for computation of new tlb entries
|
|
|
+ */
|
|
|
+#define PL_4K 12
|
|
|
+#define PL_16K 14
|
|
|
+#define PL_64K 16
|
|
|
+#define PL_256K 18
|
|
|
+#define PL_1M 20
|
|
|
+#define PL_4M 22
|
|
|
+#define PL_16M 24
|
|
|
+#define PL_64M 26
|
|
|
+#define PL_256M 28
|
|
|
+
|
|
|
+/*
|
|
|
+ * PageGrain bits
|
|
|
+ */
|
|
|
+#define PG_RIE (_ULCAST_(1) << 31)
|
|
|
+#define PG_XIE (_ULCAST_(1) << 30)
|
|
|
+#define PG_ELPA (_ULCAST_(1) << 29)
|
|
|
+#define PG_ESP (_ULCAST_(1) << 28)
|
|
|
+
|
|
|
+/*
|
|
|
+ * R4x00 interrupt enable / cause bits
|
|
|
+ */
|
|
|
+#define IE_SW0 (_ULCAST_(1) << 8)
|
|
|
+#define IE_SW1 (_ULCAST_(1) << 9)
|
|
|
+#define IE_IRQ0 (_ULCAST_(1) << 10)
|
|
|
+#define IE_IRQ1 (_ULCAST_(1) << 11)
|
|
|
+#define IE_IRQ2 (_ULCAST_(1) << 12)
|
|
|
+#define IE_IRQ3 (_ULCAST_(1) << 13)
|
|
|
+#define IE_IRQ4 (_ULCAST_(1) << 14)
|
|
|
+#define IE_IRQ5 (_ULCAST_(1) << 15)
|
|
|
+
|
|
|
+/*
|
|
|
+ * R4x00 interrupt cause bits
|
|
|
+ */
|
|
|
+#define C_SW0 (_ULCAST_(1) << 8)
|
|
|
+#define C_SW1 (_ULCAST_(1) << 9)
|
|
|
+#define C_IRQ0 (_ULCAST_(1) << 10)
|
|
|
+#define C_IRQ1 (_ULCAST_(1) << 11)
|
|
|
+#define C_IRQ2 (_ULCAST_(1) << 12)
|
|
|
+#define C_IRQ3 (_ULCAST_(1) << 13)
|
|
|
+#define C_IRQ4 (_ULCAST_(1) << 14)
|
|
|
+#define C_IRQ5 (_ULCAST_(1) << 15)
|
|
|
+
|
|
|
+/*
|
|
|
+ * Bitfields in the R4xx0 cp0 status register
|
|
|
+ */
|
|
|
+#define ST0_IE 0x00000001
|
|
|
+#define ST0_EXL 0x00000002
|
|
|
+#define ST0_ERL 0x00000004
|
|
|
+#define ST0_KSU 0x00000018
|
|
|
+# define KSU_USER 0x00000010
|
|
|
+# define KSU_SUPERVISOR 0x00000008
|
|
|
+# define KSU_KERNEL 0x00000000
|
|
|
+#define ST0_UX 0x00000020
|
|
|
+#define ST0_SX 0x00000040
|