1#ifndef LINUX_BCMA_DRIVER_CC_H_
2#define LINUX_BCMA_DRIVER_CC_H_
3
4
5#define BCMA_CC_ID 0x0000
6#define BCMA_CC_ID_ID 0x0000FFFF
7#define BCMA_CC_ID_ID_SHIFT 0
8#define BCMA_CC_ID_REV 0x000F0000
9#define BCMA_CC_ID_REV_SHIFT 16
10#define BCMA_CC_ID_PKG 0x00F00000
11#define BCMA_CC_ID_PKG_SHIFT 20
12#define BCMA_CC_ID_NRCORES 0x0F000000
13#define BCMA_CC_ID_NRCORES_SHIFT 24
14#define BCMA_CC_ID_TYPE 0xF0000000
15#define BCMA_CC_ID_TYPE_SHIFT 28
16#define BCMA_CC_CAP 0x0004
17#define BCMA_CC_CAP_NRUART 0x00000003
18#define BCMA_CC_CAP_MIPSEB 0x00000004
19#define BCMA_CC_CAP_UARTCLK 0x00000018
20#define BCMA_CC_CAP_UARTCLK_INT 0x00000008
21#define BCMA_CC_CAP_UARTGPIO 0x00000020
22#define BCMA_CC_CAP_EXTBUS 0x000000C0
23#define BCMA_CC_CAP_FLASHT 0x00000700
24#define BCMA_CC_FLASHT_NONE 0x00000000
25#define BCMA_CC_FLASHT_STSER 0x00000100
26#define BCMA_CC_FLASHT_ATSER 0x00000200
27#define BCMA_CC_FLASHT_PARA 0x00000700
28#define BCMA_CC_CAP_PLLT 0x00038000
29#define BCMA_PLLTYPE_NONE 0x00000000
30#define BCMA_PLLTYPE_1 0x00010000
31#define BCMA_PLLTYPE_2 0x00020000
32#define BCMA_PLLTYPE_3 0x00030000
33#define BCMA_PLLTYPE_4 0x00008000
34#define BCMA_PLLTYPE_5 0x00018000
35#define BCMA_PLLTYPE_6 0x00028000
36#define BCMA_PLLTYPE_7 0x00038000
37#define BCMA_CC_CAP_PCTL 0x00040000
38#define BCMA_CC_CAP_OTPS 0x00380000
39#define BCMA_CC_CAP_OTPS_SHIFT 19
40#define BCMA_CC_CAP_OTPS_BASE 5
41#define BCMA_CC_CAP_JTAGM 0x00400000
42#define BCMA_CC_CAP_BROM 0x00800000
43#define BCMA_CC_CAP_64BIT 0x08000000
44#define BCMA_CC_CAP_PMU 0x10000000
45#define BCMA_CC_CAP_ECI 0x20000000
46#define BCMA_CC_CAP_SPROM 0x40000000
47#define BCMA_CC_CORECTL 0x0008
48#define BCMA_CC_CORECTL_UARTCLK0 0x00000001
49#define BCMA_CC_CORECTL_SE 0x00000002
50#define BCMA_CC_CORECTL_UARTCLKEN 0x00000008
51#define BCMA_CC_BIST 0x000C
52#define BCMA_CC_OTPS 0x0010
53#define BCMA_CC_OTPS_PROGFAIL 0x80000000
54#define BCMA_CC_OTPS_PROTECT 0x00000007
55#define BCMA_CC_OTPS_HW_PROTECT 0x00000001
56#define BCMA_CC_OTPS_SW_PROTECT 0x00000002
57#define BCMA_CC_OTPS_CID_PROTECT 0x00000004
58#define BCMA_CC_OTPC 0x0014
59#define BCMA_CC_OTPC_RECWAIT 0xFF000000
60#define BCMA_CC_OTPC_PROGWAIT 0x00FFFF00
61#define BCMA_CC_OTPC_PRW_SHIFT 8
62#define BCMA_CC_OTPC_MAXFAIL 0x00000038
63#define BCMA_CC_OTPC_VSEL 0x00000006
64#define BCMA_CC_OTPC_SELVL 0x00000001
65#define BCMA_CC_OTPP 0x0018
66#define BCMA_CC_OTPP_COL 0x000000FF
67#define BCMA_CC_OTPP_ROW 0x0000FF00
68#define BCMA_CC_OTPP_ROW_SHIFT 8
69#define BCMA_CC_OTPP_READERR 0x10000000
70#define BCMA_CC_OTPP_VALUE 0x20000000
71#define BCMA_CC_OTPP_READ 0x40000000
72#define BCMA_CC_OTPP_START 0x80000000
73#define BCMA_CC_OTPP_BUSY 0x80000000
74#define BCMA_CC_IRQSTAT 0x0020
75#define BCMA_CC_IRQMASK 0x0024
76#define BCMA_CC_IRQ_GPIO 0x00000001
77#define BCMA_CC_IRQ_EXT 0x00000002
78#define BCMA_CC_IRQ_WDRESET 0x80000000
79#define BCMA_CC_CHIPCTL 0x0028
80#define BCMA_CC_CHIPSTAT 0x002C
81#define BCMA_CC_JCMD 0x0030
82#define BCMA_CC_JCMD_START 0x80000000
83#define BCMA_CC_JCMD_BUSY 0x80000000
84#define BCMA_CC_JCMD_PAUSE 0x40000000
85#define BCMA_CC_JCMD0_ACC_MASK 0x0000F000
86#define BCMA_CC_JCMD0_ACC_IRDR 0x00000000
87#define BCMA_CC_JCMD0_ACC_DR 0x00001000
88#define BCMA_CC_JCMD0_ACC_IR 0x00002000
89#define BCMA_CC_JCMD0_ACC_RESET 0x00003000
90#define BCMA_CC_JCMD0_ACC_IRPDR 0x00004000
91#define BCMA_CC_JCMD0_ACC_PDR 0x00005000
92#define BCMA_CC_JCMD0_IRW_MASK 0x00000F00
93#define BCMA_CC_JCMD_ACC_MASK 0x000F0000
94#define BCMA_CC_JCMD_ACC_IRDR 0x00000000
95#define BCMA_CC_JCMD_ACC_DR 0x00010000
96#define BCMA_CC_JCMD_ACC_IR 0x00020000
97#define BCMA_CC_JCMD_ACC_RESET 0x00030000
98#define BCMA_CC_JCMD_ACC_IRPDR 0x00040000
99#define BCMA_CC_JCMD_ACC_PDR 0x00050000
100#define BCMA_CC_JCMD_IRW_MASK 0x00001F00
101#define BCMA_CC_JCMD_IRW_SHIFT 8
102#define BCMA_CC_JCMD_DRW_MASK 0x0000003F
103#define BCMA_CC_JIR 0x0034
104#define BCMA_CC_JDR 0x0038
105#define BCMA_CC_JCTL 0x003C
106#define BCMA_CC_JCTL_FORCE_CLK 4
107#define BCMA_CC_JCTL_EXT_EN 2
108#define BCMA_CC_JCTL_EN 1
109#define BCMA_CC_FLASHCTL 0x0040
110#define BCMA_CC_FLASHCTL_START 0x80000000
111#define BCMA_CC_FLASHCTL_BUSY BCMA_CC_FLASHCTL_START
112#define BCMA_CC_FLASHADDR 0x0044
113#define BCMA_CC_FLASHDATA 0x0048
114#define BCMA_CC_BCAST_ADDR 0x0050
115#define BCMA_CC_BCAST_DATA 0x0054
116#define BCMA_CC_GPIOPULLUP 0x0058
117#define BCMA_CC_GPIOPULLDOWN 0x005C
118#define BCMA_CC_GPIOIN 0x0060
119#define BCMA_CC_GPIOOUT 0x0064
120#define BCMA_CC_GPIOOUTEN 0x0068
121#define BCMA_CC_GPIOCTL 0x006C
122#define BCMA_CC_GPIOPOL 0x0070
123#define BCMA_CC_GPIOIRQ 0x0074
124#define BCMA_CC_WATCHDOG 0x0080
125#define BCMA_CC_GPIOTIMER 0x0088
126#define BCMA_CC_GPIOTIMER_OFFTIME 0x0000FFFF
127#define BCMA_CC_GPIOTIMER_OFFTIME_SHIFT 0
128#define BCMA_CC_GPIOTIMER_ONTIME 0xFFFF0000
129#define BCMA_CC_GPIOTIMER_ONTIME_SHIFT 16
130#define BCMA_CC_GPIOTOUTM 0x008C
131#define BCMA_CC_CLOCK_N 0x0090
132#define BCMA_CC_CLOCK_SB 0x0094
133#define BCMA_CC_CLOCK_PCI 0x0098
134#define BCMA_CC_CLOCK_M2 0x009C
135#define BCMA_CC_CLOCK_MIPS 0x00A0
136#define BCMA_CC_CLKDIV 0x00A4
137#define BCMA_CC_CLKDIV_SFLASH 0x0F000000
138#define BCMA_CC_CLKDIV_SFLASH_SHIFT 24
139#define BCMA_CC_CLKDIV_OTP 0x000F0000
140#define BCMA_CC_CLKDIV_OTP_SHIFT 16
141#define BCMA_CC_CLKDIV_JTAG 0x00000F00
142#define BCMA_CC_CLKDIV_JTAG_SHIFT 8
143#define BCMA_CC_CLKDIV_UART 0x000000FF
144#define BCMA_CC_CAP_EXT 0x00AC
145#define BCMA_CC_PLLONDELAY 0x00B0
146#define BCMA_CC_FREFSELDELAY 0x00B4
147#define BCMA_CC_SLOWCLKCTL 0x00B8
148#define BCMA_CC_SLOWCLKCTL_SRC 0x00000007
149#define BCMA_CC_SLOWCLKCTL_SRC_LPO 0x00000000
150#define BCMA_CC_SLOWCLKCTL_SRC_XTAL 0x00000001
151#define BCMA_CC_SLOECLKCTL_SRC_PCI 0x00000002
152#define BCMA_CC_SLOWCLKCTL_LPOFREQ 0x00000200
153#define BCMA_CC_SLOWCLKCTL_LPOPD 0x00000400
154#define BCMA_CC_SLOWCLKCTL_FSLOW 0x00000800
155#define BCMA_CC_SLOWCLKCTL_IPLL 0x00001000
156#define BCMA_CC_SLOWCLKCTL_ENXTAL 0x00002000
157#define BCMA_CC_SLOWCLKCTL_XTALPU 0x00004000
158#define BCMA_CC_SLOWCLKCTL_CLKDIV 0xFFFF0000
159#define BCMA_CC_SLOWCLKCTL_CLKDIV_SHIFT 16
160#define BCMA_CC_SYSCLKCTL 0x00C0
161#define BCMA_CC_SYSCLKCTL_IDLPEN 0x00000001
162#define BCMA_CC_SYSCLKCTL_ALPEN 0x00000002
163#define BCMA_CC_SYSCLKCTL_PLLEN 0x00000004
164#define BCMA_CC_SYSCLKCTL_FORCEALP 0x00000008
165#define BCMA_CC_SYSCLKCTL_FORCEHT 0x00000010
166#define BCMA_CC_SYSCLKCTL_CLKDIV 0xFFFF0000
167#define BCMA_CC_SYSCLKCTL_CLKDIV_SHIFT 16
168#define BCMA_CC_CLKSTSTR 0x00C4
169#define BCMA_CC_EROM 0x00FC
170#define BCMA_CC_PCMCIA_CFG 0x0100
171#define BCMA_CC_PCMCIA_MEMWAIT 0x0104
172#define BCMA_CC_PCMCIA_ATTRWAIT 0x0108
173#define BCMA_CC_PCMCIA_IOWAIT 0x010C
174#define BCMA_CC_IDE_CFG 0x0110
175#define BCMA_CC_IDE_MEMWAIT 0x0114
176#define BCMA_CC_IDE_ATTRWAIT 0x0118
177#define BCMA_CC_IDE_IOWAIT 0x011C
178#define BCMA_CC_PROG_CFG 0x0120
179#define BCMA_CC_PROG_WAITCNT 0x0124
180#define BCMA_CC_FLASH_CFG 0x0128
181#define BCMA_CC_FLASH_WAITCNT 0x012C
182
183#define BCMA_CC_HW_WORKAROUND 0x01E4
184#define BCMA_CC_UART0_DATA 0x0300
185#define BCMA_CC_UART0_IMR 0x0304
186#define BCMA_CC_UART0_FCR 0x0308
187#define BCMA_CC_UART0_LCR 0x030C
188#define BCMA_CC_UART0_MCR 0x0310
189#define BCMA_CC_UART0_LSR 0x0314
190#define BCMA_CC_UART0_MSR 0x0318
191#define BCMA_CC_UART0_SCRATCH 0x031C
192#define BCMA_CC_UART1_DATA 0x0400
193#define BCMA_CC_UART1_IMR 0x0404
194#define BCMA_CC_UART1_FCR 0x0408
195#define BCMA_CC_UART1_LCR 0x040C
196#define BCMA_CC_UART1_MCR 0x0410
197#define BCMA_CC_UART1_LSR 0x0414
198#define BCMA_CC_UART1_MSR 0x0418
199#define BCMA_CC_UART1_SCRATCH 0x041C
200
201#define BCMA_CC_PMU_CTL 0x0600
202#define BCMA_CC_PMU_CTL_ILP_DIV 0xFFFF0000
203#define BCMA_CC_PMU_CTL_ILP_DIV_SHIFT 16
204#define BCMA_CC_PMU_CTL_NOILPONW 0x00000200
205#define BCMA_CC_PMU_CTL_HTREQEN 0x00000100
206#define BCMA_CC_PMU_CTL_ALPREQEN 0x00000080
207#define BCMA_CC_PMU_CTL_XTALFREQ 0x0000007C
208#define BCMA_CC_PMU_CTL_XTALFREQ_SHIFT 2
209#define BCMA_CC_PMU_CTL_ILPDIVEN 0x00000002
210#define BCMA_CC_PMU_CTL_LPOSEL 0x00000001
211#define BCMA_CC_PMU_CAP 0x0604
212#define BCMA_CC_PMU_CAP_REVISION 0x000000FF
213#define BCMA_CC_PMU_STAT 0x0608
214#define BCMA_CC_PMU_STAT_INTPEND 0x00000040
215#define BCMA_CC_PMU_STAT_SBCLKST 0x00000030
216#define BCMA_CC_PMU_STAT_HAVEALP 0x00000008
217#define BCMA_CC_PMU_STAT_HAVEHT 0x00000004
218#define BCMA_CC_PMU_STAT_RESINIT 0x00000003
219#define BCMA_CC_PMU_RES_STAT 0x060C
220#define BCMA_CC_PMU_RES_PEND 0x0610
221#define BCMA_CC_PMU_TIMER 0x0614
222#define BCMA_CC_PMU_MINRES_MSK 0x0618
223#define BCMA_CC_PMU_MAXRES_MSK 0x061C
224#define BCMA_CC_PMU_RES_TABSEL 0x0620
225#define BCMA_CC_PMU_RES_DEPMSK 0x0624
226#define BCMA_CC_PMU_RES_UPDNTM 0x0628
227#define BCMA_CC_PMU_RES_TIMER 0x062C
228#define BCMA_CC_PMU_CLKSTRETCH 0x0630
229#define BCMA_CC_PMU_WATCHDOG 0x0634
230#define BCMA_CC_PMU_RES_REQTS 0x0640
231#define BCMA_CC_PMU_RES_REQT 0x0644
232#define BCMA_CC_PMU_RES_REQM 0x0648
233#define BCMA_CC_CHIPCTL_ADDR 0x0650
234#define BCMA_CC_CHIPCTL_DATA 0x0654
235#define BCMA_CC_REGCTL_ADDR 0x0658
236#define BCMA_CC_REGCTL_DATA 0x065C
237#define BCMA_CC_PLLCTL_ADDR 0x0660
238#define BCMA_CC_PLLCTL_DATA 0x0664
239#define BCMA_CC_SPROM 0x0800
240#define BCMA_CC_SPROM_PCIE6 0x0830
241
242
243
244
245struct bcma_chipcommon_pmu {
246 u8 rev;
247 u32 crystalfreq;
248};
249
250struct bcma_drv_cc {
251 struct bcma_device *core;
252 u32 status;
253 u32 capabilities;
254 u32 capabilities_ext;
255
256 u16 fast_pwrup_delay;
257 struct bcma_chipcommon_pmu pmu;
258};
259
260
261#define bcma_cc_read32(cc, offset) \
262 bcma_read32((cc)->core, offset)
263#define bcma_cc_write32(cc, offset, val) \
264 bcma_write32((cc)->core, offset, val)
265
266#define bcma_cc_mask32(cc, offset, mask) \
267 bcma_cc_write32(cc, offset, bcma_cc_read32(cc, offset) & (mask))
268#define bcma_cc_set32(cc, offset, set) \
269 bcma_cc_write32(cc, offset, bcma_cc_read32(cc, offset) | (set))
270#define bcma_cc_maskset32(cc, offset, mask, set) \
271 bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set))
272
273extern void bcma_core_chipcommon_init(struct bcma_drv_cc *cc);
274
275extern void bcma_chipco_suspend(struct bcma_drv_cc *cc);
276extern void bcma_chipco_resume(struct bcma_drv_cc *cc);
277
278extern void bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc,
279 u32 ticks);
280
281void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value);
282
283u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask);
284
285
286u32 bcma_chipco_gpio_in(struct bcma_drv_cc *cc, u32 mask);
287u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value);
288u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value);
289u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value);
290u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value);
291u32 bcma_chipco_gpio_polarity(struct bcma_drv_cc *cc, u32 mask, u32 value);
292
293
294extern void bcma_pmu_init(struct bcma_drv_cc *cc);
295
296#endif
297