fff5ecdbea31ba5db0361cf19ed3fa6efa39919e
[openwrt.git] / target / linux / lantiq / files / arch / mips / include / asm / mach-lantiq / falcon / lantiq_soc.h
1 /*
2  * This program is free software; you can redistribute it and/or modify it
3  * under the terms of the GNU General Public License version 2 as published
4  * by the Free Software Foundation.
5  *
6  * Copyright (C) 2010 John Crispin <blogic@openwrt.org>
7  */
8
9 #ifndef _LTQ_FALCON_H__
10 #define _LTQ_FALCON_H__
11
12 #ifdef CONFIG_SOC_FALCON
13
14 #include <lantiq.h>
15
16 /* Chip IDs */
17 #define SOC_ID_FALCON           0x01B8
18
19 /* SoC Types */
20 #define SOC_TYPE_FALCON         0x01
21
22 /* ASC0/1 - serial port */
23 #define LTQ_ASC0_BASE_ADDR      0x1E100C00
24 #define LTQ_ASC1_BASE_ADDR      0x1E100B00
25 #define LTQ_ASC_SIZE            0x100
26
27 #define LTQ_ASC_TIR(x)          (INT_NUM_IM3_IRL0 + (x * 8))
28 #define LTQ_ASC_RIR(x)          (INT_NUM_IM3_IRL0 + (x * 8) + 1)
29 #define LTQ_ASC_EIR(x)          (INT_NUM_IM3_IRL0 + (x * 8) + 2)
30
31 /*
32  * during early_printk no ioremap possible at this early stage
33  * lets use KSEG1 instead
34  */
35 #define LTQ_EARLY_ASC           KSEG1ADDR(LTQ_ASC0_BASE_ADDR)
36
37 /* ICU - interrupt control unit */
38 #define LTQ_ICU_BASE_ADDR       0x1F880200
39 #define LTQ_ICU_SIZE            0x100
40
41 /* WDT */
42 #define LTQ_WDT_BASE_ADDR       0x1F8803F0
43 #define LTQ_WDT_SIZE            0x10
44
45 #define LTQ_RST_CAUSE_WDTRST    0x0002
46
47 /* EBU - external bus unit */
48 #define LTQ_EBU_BASE_ADDR       0x18000000
49 #define LTQ_EBU_SIZE            0x0100
50
51 #define LTQ_EBU_MODCON  0x000C
52
53 /* GPIO */
54 #define LTQ_GPIO0_BASE_ADDR     0x1D810000
55 #define LTQ_GPIO0_SIZE          0x0080
56 #define LTQ_GPIO1_BASE_ADDR     0x1E800100
57 #define LTQ_GPIO1_SIZE          0x0080
58 #define LTQ_GPIO2_BASE_ADDR     0x1D810100
59 #define LTQ_GPIO2_SIZE          0x0080
60 #define LTQ_GPIO3_BASE_ADDR     0x1E800200
61 #define LTQ_GPIO3_SIZE          0x0080
62 #define LTQ_GPIO4_BASE_ADDR     0x1E800300
63 #define LTQ_GPIO4_SIZE          0x0080
64 #define LTQ_PADCTRL0_BASE_ADDR  0x1DB01000
65 #define LTQ_PADCTRL0_SIZE       0x0100
66 #define LTQ_PADCTRL1_BASE_ADDR  0x1E800400
67 #define LTQ_PADCTRL1_SIZE       0x0100
68 #define LTQ_PADCTRL2_BASE_ADDR  0x1DB02000
69 #define LTQ_PADCTRL2_SIZE       0x0100
70 #define LTQ_PADCTRL3_BASE_ADDR  0x1E800500
71 #define LTQ_PADCTRL3_SIZE       0x0100
72 #define LTQ_PADCTRL4_BASE_ADDR  0x1E800600
73 #define LTQ_PADCTRL4_SIZE       0x0100
74
75 /* I2C */
76 #define GPON_I2C_BASE           0x1E200000
77 #define GPON_I2C_SIZE           0x00010000
78
79 /* CHIP ID */
80 #define LTQ_STATUS_BASE_ADDR    0x1E802000
81
82 #define LTQ_FALCON_CHIPID       ((u32 *)(KSEG1 + LTQ_STATUS_BASE_ADDR + 0x0c))
83 #define LTQ_FALCON_CHIPTYPE     ((u32 *)(KSEG1 + LTQ_STATUS_BASE_ADDR + 0x38))
84 #define LTQ_FALCON_CHIPCONF     ((u32 *)(KSEG1 + LTQ_STATUS_BASE_ADDR + 0x40))
85
86 /* SYSCTL - start/stop/restart/configure/... different parts of the Soc */
87 #define LTQ_SYS1_BASE_ADDR      0x1EF00000
88 #define LTQ_SYS1_SIZE           0x0100
89 #define LTQ_STATUS_BASE_ADDR    0x1E802000
90 #define LTQ_STATUS_SIZE         0x0080
91 #define LTQ_SYS_ETH_BASE_ADDR   0x1DB00000
92 #define LTQ_SYS_ETH_SIZE        0x0100
93 #define LTQ_SYS_GPE_BASE_ADDR   0x1D700000
94 #define LTQ_SYS_GPE_SIZE        0x0100
95
96 #define SYSCTL_SYS1             0
97 #define SYSCTL_SYSETH           1
98 #define SYSCTL_SYSGPE           2
99
100 /* Activation Status Register */
101 #define ACTS_ASC1_ACT   0x00000800
102 #define ACTS_I2C_ACT    0x00004000
103 #define ACTS_P0         0x00010000
104 #define ACTS_P1         0x00010000
105 #define ACTS_P2         0x00020000
106 #define ACTS_P3         0x00020000
107 #define ACTS_P4         0x00040000
108 #define ACTS_PADCTRL0   0x00100000
109 #define ACTS_PADCTRL1   0x00100000
110 #define ACTS_PADCTRL2   0x00200000
111 #define ACTS_PADCTRL3   0x00200000
112 #define ACTS_PADCTRL4   0x00400000
113 #define ACTS_I2C_ACT    0x00004000
114
115 /* global register ranges */
116 extern __iomem void *ltq_ebu_membase;
117 extern __iomem void *ltq_sys1_membase;
118 #define ltq_ebu_w32(x, y)       ltq_w32((x), ltq_ebu_membase + (y))
119 #define ltq_ebu_r32(x)          ltq_r32(ltq_ebu_membase + (x))
120 #define ltq_ebu_w32_mask(clear, set, reg)   \
121         ltq_ebu_w32((ltq_ebu_r32(reg) & ~(clear)) | (set), reg)
122
123 #define ltq_sys1_w32(x, y)      ltq_w32((x), ltq_sys1_membase + (y))
124 #define ltq_sys1_r32(x)         ltq_r32(ltq_sys1_membase + (x))
125 #define ltq_sys1_w32_mask(clear, set, reg)   \
126         ltq_sys1_w32((ltq_sys1_r32(reg) & ~(clear)) | (set), reg)
127
128 /* gpio wrapper to help configure the pin muxing */
129 extern int ltq_gpio_mux_set(unsigned int pin, unsigned int mux);
130
131 /* to keep the irq code generic we need to define these to 0 as falcon
132    has no EIU/EBU */
133 #define LTQ_EIU_BASE_ADDR       0
134 #define LTQ_EBU_PCC_ISTAT       0
135
136 static inline int ltq_is_ar9(void)
137 {
138         return 0;
139 }
140
141 static inline int ltq_is_vr9(void)
142 {
143         return 0;
144 }
145
146 static inline int ltq_is_falcon(void)
147 {
148         return 1;
149 }
150
151 #endif /* CONFIG_SOC_FALCON */
152 #endif /* _LTQ_XWAY_H__ */