|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
|
|
|
+ * Copyright (C) 2009 Lemote, Inc.
|
|
|
* Author: Wu Zhangjin <wuzj@lemote.com>
|
|
|
*
|
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
@@ -219,4 +219,86 @@ extern void mach_irq_dispatch(unsigned int pending);
|
|
|
#define LOONGSON_PCIMAP_WIN(WIN, ADDR) \
|
|
|
((((ADDR)>>26) & LOONGSON_PCIMAP_PCIMAP_LO0) << ((WIN)*6))
|
|
|
|
|
|
+/* Chip Config */
|
|
|
+#ifdef CONFIG_CPU_LOONGSON2F
|
|
|
+#define LOONGSON_CHIPCFG0 LOONGSON_REG(LOONGSON_REGBASE + 0x80)
|
|
|
+#endif
|
|
|
+
|
|
|
+/*
|
|
|
+ * address windows configuration module
|
|
|
+ *
|
|
|
+ * loongson2e do not have this module
|
|
|
+ */
|
|
|
+#if defined(CONFIG_CPU_LOONGSON2F) && defined(CONFIG_64BIT)
|
|
|
+
|
|
|
+/* address window config module base address */
|
|
|
+#define LOONGSON_ADDRWINCFG_BASE 0x3ff00000ul
|
|
|
+#define LOONGSON_ADDRWINCFG_SIZE 0x180
|
|
|
+
|
|
|
+extern unsigned long _loongson_addrwincfg_base;
|
|
|
+#define LOONGSON_ADDRWINCFG(offset) \
|
|
|
+ (*(volatile u64 *)(_loongson_addrwincfg_base + (offset)))
|
|
|
+
|
|
|
+#define CPU_WIN0_BASE LOONGSON_ADDRWINCFG(0x00)
|
|
|
+#define CPU_WIN1_BASE LOONGSON_ADDRWINCFG(0x08)
|
|
|
+#define CPU_WIN2_BASE LOONGSON_ADDRWINCFG(0x10)
|
|
|
+#define CPU_WIN3_BASE LOONGSON_ADDRWINCFG(0x18)
|
|
|
+
|
|
|
+#define CPU_WIN0_MASK LOONGSON_ADDRWINCFG(0x20)
|
|
|
+#define CPU_WIN1_MASK LOONGSON_ADDRWINCFG(0x28)
|
|
|
+#define CPU_WIN2_MASK LOONGSON_ADDRWINCFG(0x30)
|
|
|
+#define CPU_WIN3_MASK LOONGSON_ADDRWINCFG(0x38)
|
|
|
+
|
|
|
+#define CPU_WIN0_MMAP LOONGSON_ADDRWINCFG(0x40)
|
|
|
+#define CPU_WIN1_MMAP LOONGSON_ADDRWINCFG(0x48)
|
|
|
+#define CPU_WIN2_MMAP LOONGSON_ADDRWINCFG(0x50)
|
|
|
+#define CPU_WIN3_MMAP LOONGSON_ADDRWINCFG(0x58)
|
|
|
+
|
|
|
+#define PCIDMA_WIN0_BASE LOONGSON_ADDRWINCFG(0x60)
|
|
|
+#define PCIDMA_WIN1_BASE LOONGSON_ADDRWINCFG(0x68)
|
|
|
+#define PCIDMA_WIN2_BASE LOONGSON_ADDRWINCFG(0x70)
|
|
|
+#define PCIDMA_WIN3_BASE LOONGSON_ADDRWINCFG(0x78)
|
|
|
+
|
|
|
+#define PCIDMA_WIN0_MASK LOONGSON_ADDRWINCFG(0x80)
|
|
|
+#define PCIDMA_WIN1_MASK LOONGSON_ADDRWINCFG(0x88)
|
|
|
+#define PCIDMA_WIN2_MASK LOONGSON_ADDRWINCFG(0x90)
|
|
|
+#define PCIDMA_WIN3_MASK LOONGSON_ADDRWINCFG(0x98)
|
|
|
+
|
|
|
+#define PCIDMA_WIN0_MMAP LOONGSON_ADDRWINCFG(0xa0)
|
|
|
+#define PCIDMA_WIN1_MMAP LOONGSON_ADDRWINCFG(0xa8)
|
|
|
+#define PCIDMA_WIN2_MMAP LOONGSON_ADDRWINCFG(0xb0)
|
|
|
+#define PCIDMA_WIN3_MMAP LOONGSON_ADDRWINCFG(0xb8)
|
|
|
+
|
|
|
+#define ADDRWIN_WIN0 0
|
|
|
+#define ADDRWIN_WIN1 1
|
|
|
+#define ADDRWIN_WIN2 2
|
|
|
+#define ADDRWIN_WIN3 3
|
|
|
+
|
|
|
+#define ADDRWIN_MAP_DST_DDR 0
|
|
|
+#define ADDRWIN_MAP_DST_PCI 1
|
|
|
+#define ADDRWIN_MAP_DST_LIO 1
|
|
|
+
|
|
|
+/*
|
|
|
+ * s: CPU, PCIDMA
|
|
|
+ * d: DDR, PCI, LIO
|
|
|
+ * win: 0, 1, 2, 3
|
|
|
+ * src: map source
|
|
|
+ * dst: map destination
|
|
|
+ * size: ~mask + 1
|
|
|
+ */
|
|
|
+#define LOONGSON_ADDRWIN_CFG(s, d, w, src, dst, size) do {\
|
|
|
+ s##_WIN##w##_BASE = (src); \
|
|
|
+ s##_WIN##w##_MMAP = (src) | ADDRWIN_MAP_DST_##d; \
|
|
|
+ s##_WIN##w##_MASK = ~(size-1); \
|
|
|
+} while (0)
|
|
|
+
|
|
|
+#define LOONGSON_ADDRWIN_CPUTOPCI(win, src, dst, size) \
|
|
|
+ LOONGSON_ADDRWIN_CFG(CPU, PCI, win, src, dst, size)
|
|
|
+#define LOONGSON_ADDRWIN_CPUTODDR(win, src, dst, size) \
|
|
|
+ LOONGSON_ADDRWIN_CFG(CPU, DDR, win, src, dst, size)
|
|
|
+#define LOONGSON_ADDRWIN_PCITODDR(win, src, dst, size) \
|
|
|
+ LOONGSON_ADDRWIN_CFG(PCIDMA, DDR, win, src, dst, size)
|
|
|
+
|
|
|
+#endif /* ! CONFIG_CPU_LOONGSON2F && CONFIG_64BIT */
|
|
|
+
|
|
|
#endif /* __ASM_MACH_LOONGSON_LOONGSON_H */
|