37bcf572b9e9416a9a4ee5afa2eaba913be12cdb
[coreboot.git] / src / southbridge / intel / i82801gx / i82801gx.h
1 /*
2  * This file is part of the coreboot project.
3  *
4  * Copyright (C) 2008-2009 coresystems GmbH
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; version 2 of the License.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
18  */
19
20 #ifndef SOUTHBRIDGE_INTEL_I82801GX_I82801GX_H
21 #define SOUTHBRIDGE_INTEL_I82801GX_I82801GX_H
22 /*
23  * It does not matter where we put the SMBus I/O base, as long as we
24  * keep it consistent and don't interfere with other devices.  Stage2
25  * will relocate this anyways.
26  * Our solution is to have SMB initialization move the I/O to SMBUS_IO_BASE
27  * again. But handling static BARs is a generic problem that should be
28  * solved in the device allocator.
29  */
30 #define SMBUS_IO_BASE           0x0400
31 /* TODO Make sure these don't get changed by stage2 */
32 #define DEFAULT_GPIOBASE        0x0480
33 #define DEFAULT_PMBASE          0x0500
34
35 #define HPET_ADDR               0xfed00000
36 #define DEFAULT_RCBA            0xfed1c000
37
38 #ifndef __ACPI__
39 #define DEBUG_PERIODIC_SMIS 0
40
41 #if !defined(ASSEMBLY)
42 #if !defined(__PRE_RAM__)
43 #include "chip.h"
44 extern void i82801gx_enable(device_t dev);
45 #endif
46 void i82801gx_enable_usbdebug(unsigned int port);
47 #endif
48
49 #if defined(__PRE_RAM__) && !defined(__ROMCC__) && !defined(ASSEMBLY)
50 void enable_smbus(void);
51 int smbus_read_byte(unsigned device, unsigned address);
52 #endif
53
54 #define MAINBOARD_POWER_OFF     0
55 #define MAINBOARD_POWER_ON      1
56 #define MAINBOARD_POWER_KEEP    2
57
58 #ifndef CONFIG_MAINBOARD_POWER_ON_AFTER_POWER_FAIL
59 #define CONFIG_MAINBOARD_POWER_ON_AFTER_POWER_FAIL MAINBOARD_POWER_ON
60 #endif
61
62 /* PCI Configuration Space (D30:F0): PCI2PCI */
63 #define PSTS    0x06
64 #define SMLT    0x1b
65 #define SECSTS  0x1e
66 #define INTR    0x3c
67 #define BCTRL   0x3e
68 #define   SBR   (1 << 6)
69 #define   SEE   (1 << 1)
70 #define   PERE  (1 << 0)
71
72 /* PCI Configuration Space (D31:F0): LPC */
73
74 #define SERIRQ_CNTL             0x64
75
76 #define GEN_PMCON_1             0xa0
77 #define GEN_PMCON_2             0xa2
78 #define GEN_PMCON_3             0xa4
79
80 /* GEN_PMCON_3 bits */
81 #define RTC_BATTERY_DEAD        (1 << 2)
82 #define RTC_POWER_FAILED        (1 << 1)
83 #define SLEEP_AFTER_POWER_FAIL  (1 << 0)
84
85 #define PMBASE                  0x40
86 #define ACPI_CNTL               0x44
87 #define BIOS_CNTL               0xDC
88 #define GPIO_BASE               0x48 /* LPC GPIO Base Address Register */
89 #define GPIO_CNTL               0x4C /* LPC GPIO Control Register */
90
91 #define PIRQA_ROUT              0x60
92 #define PIRQB_ROUT              0x61
93 #define PIRQC_ROUT              0x62
94 #define PIRQD_ROUT              0x63
95 #define PIRQE_ROUT              0x68
96 #define PIRQF_ROUT              0x69
97 #define PIRQG_ROUT              0x6A
98 #define PIRQH_ROUT              0x6B
99
100 #define LPC_IO_DEC              0x80 /* IO Decode Ranges Register */
101 #define LPC_EN                  0x82 /* LPC IF Enables Register */
102
103 /* PCI Configuration Space (D31:F1): IDE */
104 #define INTR_LN                 0x3c
105 #define IDE_TIM_PRI             0x40    /* IDE timings, primary */
106 #define   IDE_DECODE_ENABLE     (1 << 15)
107 #define   IDE_SITRE             (1 << 14)
108 #define   IDE_ISP_5_CLOCKS      (0 << 12)
109 #define   IDE_ISP_4_CLOCKS      (1 << 12)
110 #define   IDE_ISP_3_CLOCKS      (2 << 12)
111 #define   IDE_RCT_4_CLOCKS      (0 <<  8)
112 #define   IDE_RCT_3_CLOCKS      (1 <<  8)
113 #define   IDE_RCT_2_CLOCKS      (2 <<  8)
114 #define   IDE_RCT_1_CLOCKS      (3 <<  8)
115 #define   IDE_DTE1              (1 <<  7)
116 #define   IDE_PPE1              (1 <<  6)
117 #define   IDE_IE1               (1 <<  5)
118 #define   IDE_TIME1             (1 <<  4)
119 #define   IDE_DTE0              (1 <<  3)
120 #define   IDE_PPE0              (1 <<  2)
121 #define   IDE_IE0               (1 <<  1)
122 #define   IDE_TIME0             (1 <<  0)
123 #define IDE_TIM_SEC             0x42    /* IDE timings, secondary */
124
125 #define IDE_SDMA_CNT            0x48    /* Synchronous DMA control */
126 #define   IDE_SSDE1             (1 <<  3)
127 #define   IDE_SSDE0             (1 <<  2)
128 #define   IDE_PSDE1             (1 <<  1)
129 #define   IDE_PSDE0             (1 <<  0)
130
131 #define IDE_SDMA_TIM            0x4a
132
133 #define IDE_CONFIG              0x54    /* IDE I/O Configuration Register */
134 #define   SIG_MODE_SEC_NORMAL   (0 << 18)
135 #define   SIG_MODE_SEC_TRISTATE (1 << 18)
136 #define   SIG_MODE_SEC_DRIVELOW (2 << 18)
137 #define   SIG_MODE_PRI_NORMAL   (0 << 16)
138 #define   SIG_MODE_PRI_TRISTATE (1 << 16)
139 #define   SIG_MODE_PRI_DRIVELOW (2 << 16)
140 #define   FAST_SCB1             (1 << 15)
141 #define   FAST_SCB0             (1 << 14)
142 #define   FAST_PCB1             (1 << 13)
143 #define   FAST_PCB0             (1 << 12)
144 #define   SCB1                  (1 <<  3)
145 #define   SCB0                  (1 <<  2)
146 #define   PCB1                  (1 <<  1)
147 #define   PCB0                  (1 <<  0)
148
149 /* PCI Configuration Space (D31:F3): SMBus */
150 #define SMB_BASE                0x20
151 #define HOSTC                   0x40
152
153 /* HOSTC bits */
154 #define I2C_EN                  (1 << 2)
155 #define SMB_SMI_EN              (1 << 1)
156 #define HST_EN                  (1 << 0)
157
158 /* SMBus I/O bits. */
159 #define SMBHSTSTAT              0x0
160 #define SMBHSTCTL               0x2
161 #define SMBHSTCMD               0x3
162 #define SMBXMITADD              0x4
163 #define SMBHSTDAT0              0x5
164 #define SMBHSTDAT1              0x6
165 #define SMBBLKDAT               0x7
166 #define SMBTRNSADD              0x9
167 #define SMBSLVDATA              0xa
168 #define SMLINK_PIN_CTL          0xe
169 #define SMBUS_PIN_CTL           0xf
170
171 #define SMBUS_TIMEOUT           (10 * 1000 * 100)
172
173
174 /* Southbridge IO BARs */
175
176 #define GPIOBASE                0x48
177
178 #define PMBASE          0x40
179
180 /* Root Complex Register Block */
181 #define RCBA            0xf0
182
183 #define RCBA8(x) *((volatile u8 *)(DEFAULT_RCBA + x))
184 #define RCBA16(x) *((volatile u16 *)(DEFAULT_RCBA + x))
185 #define RCBA32(x) *((volatile u32 *)(DEFAULT_RCBA + x))
186
187 #define VCH             0x0000  /* 32bit */
188 #define VCAP1           0x0004  /* 32bit */
189 #define VCAP2           0x0008  /* 32bit */
190 #define PVC             0x000c  /* 16bit */
191 #define PVS             0x000e  /* 16bit */
192
193 #define V0CAP           0x0010  /* 32bit */
194 #define V0CTL           0x0014  /* 32bit */
195 #define V0STS           0x001a  /* 16bit */
196
197 #define V1CAP           0x001c  /* 32bit */
198 #define V1CTL           0x0020  /* 32bit */
199 #define V1STS           0x0026  /* 16bit */
200
201 #define RCTCL           0x0100  /* 32bit */
202 #define ESD             0x0104  /* 32bit */
203 #define ULD             0x0110  /* 32bit */
204 #define ULBA            0x0118  /* 64bit */
205
206 #define RP1D            0x0120  /* 32bit */
207 #define RP1BA           0x0128  /* 64bit */
208 #define RP2D            0x0130  /* 32bit */
209 #define RP2BA           0x0138  /* 64bit */
210 #define RP3D            0x0140  /* 32bit */
211 #define RP3BA           0x0148  /* 64bit */
212 #define RP4D            0x0150  /* 32bit */
213 #define RP4BA           0x0158  /* 64bit */
214 #define HDD             0x0160  /* 32bit */
215 #define HDBA            0x0168  /* 64bit */
216 #define RP5D            0x0170  /* 32bit */
217 #define RP5BA           0x0178  /* 64bit */
218 #define RP6D            0x0180  /* 32bit */
219 #define RP6BA           0x0188  /* 64bit */
220
221 #define ILCL            0x01a0  /* 32bit */
222 #define LCAP            0x01a4  /* 32bit */
223 #define LCTL            0x01a8  /* 16bit */
224 #define LSTS            0x01aa  /* 16bit */
225
226 #define RPC             0x0224  /* 32bit */
227 #define RPFN            0x0238  /* 32bit */
228
229 #define TRSR            0x1e00  /*  8bit */
230 #define TRCR            0x1e10  /* 64bit */
231 #define TWDR            0x1e18  /* 64bit */
232
233 #define IOTR0           0x1e80  /* 64bit */
234 #define IOTR1           0x1e88  /* 64bit */
235 #define IOTR2           0x1e90  /* 64bit */
236 #define IOTR3           0x1e98  /* 64bit */
237
238 #define TCTL            0x3000  /*  8bit */
239
240 #define D31IP           0x3100  /* 32bit */
241 #define D30IP           0x3104  /* 32bit */
242 #define D29IP           0x3108  /* 32bit */
243 #define D28IP           0x310c  /* 32bit */
244 #define D27IP           0x3110  /* 32bit */
245 #define D31IR           0x3140  /* 16bit */
246 #define D30IR           0x3142  /* 16bit */
247 #define D29IR           0x3144  /* 16bit */
248 #define D28IR           0x3146  /* 16bit */
249 #define D27IR           0x3148  /* 16bit */
250 #define OIC             0x31ff  /*  8bit */
251
252 #define RC              0x3400  /* 32bit */
253 #define HPTC            0x3404  /* 32bit */
254 #define GCS             0x3410  /* 32bit */
255 #define BUC             0x3414  /* 32bit */
256 #define FD              0x3418  /* 32bit */
257 #define CG              0x341c  /* 32bit */
258
259 /* Function Disable (FD) register values.
260  * Setting a bit disables the corresponding
261  * feature.
262  * Not all features might be disabled on
263  * all chipsets. Esp. ICH-7U is picky.
264  */
265 #define FD_PCIE6        (1 << 21)
266 #define FD_PCIE5        (1 << 20)
267 #define FD_PCIE4        (1 << 19)
268 #define FD_PCIE3        (1 << 18)
269 #define FD_PCIE2        (1 << 17)
270 #define FD_PCIE1        (1 << 16)
271 #define FD_EHCI         (1 << 15)
272 #define FD_LPCB         (1 << 14)
273
274 /* UHCI must be disabled from 4 downwards.
275  * If UHCI controllers get disabled, EHCI
276  * must know about it, too! */
277 #define FD_UHCI4        (1 << 11)
278 #define FD_UHCI34       (1 << 10) | FD_UHCI4
279 #define FD_UHCI234      (1 <<  9) | FD_UHCI3
280 #define FD_UHCI1234     (1 <<  8) | FD_UHCI2
281
282 #define FD_INTLAN       (1 <<  7)
283 #define FD_ACMOD        (1 <<  6)
284 #define FD_ACAUD        (1 <<  5)
285 #define FD_HDAUD        (1 <<  4)
286 #define FD_SMBUS        (1 <<  3)
287 #define FD_SATA         (1 <<  2)
288 #define FD_PATA         (1 <<  1)
289
290 /* ICH7 GPIOBASE */
291 #define GPIO_USE_SEL    0x00
292 #define GP_IO_SEL       0x04
293 #define GP_LVL          0x0c
294 #define GPO_BLINK       0x18
295 #define GPI_INV         0x2c
296 #define GPIO_USE_SEL2   0x30
297 #define GP_IO_SEL2      0x34
298 #define GP_LVL2         0x38
299
300 /* ICH7 PMBASE */
301 #define PM1_STS         0x00
302 #define   WAK_STS       (1 << 15)
303 #define   PCIEXPWAK_STS (1 << 14)
304 #define   PRBTNOR_STS   (1 << 11)
305 #define   RTC_STS       (1 << 10)
306 #define   PWRBTN_STS    (1 << 8)
307 #define   GBL_STS       (1 << 5)
308 #define   BM_STS        (1 << 4)
309 #define   TMROF_STS     (1 << 0)
310 #define PM1_EN          0x02
311 #define   PCIEXPWAK_DIS (1 << 14)
312 #define   RTC_EN        (1 << 10)
313 #define   PWRBTN_EN     (1 << 8)
314 #define   GBL_EN        (1 << 5)
315 #define   TMROF_EN      (1 << 0)
316 #define PM1_CNT         0x04
317 #define   SLP_EN        (1 << 13)
318 #define   SLP_TYP       (7 << 10)
319 #define   GBL_RLS       (1 << 2)
320 #define   BM_RLD        (1 << 1)
321 #define   SCI_EN        (1 << 0)
322 #define PM1_TMR         0x08
323 #define PROC_CNT        0x10
324 #define LV2             0x14
325 #define LV3             0x15
326 #define LV4             0x16
327 #define PM2_CNT         0x20 // mobile only
328 #define GPE0_STS        0x28
329 #define   USB4_STS      (1 << 14)
330 #define   PME_B0_STS    (1 << 13)
331 #define   USB3_STS      (1 << 12)
332 #define   PME_STS       (1 << 11)
333 #define   BATLOW_STS    (1 << 10)
334 #define   PCI_EXP_STS   (1 << 9)
335 #define   RI_STS        (1 << 8)
336 #define   SMB_WAK_STS   (1 << 7)
337 #define   TCOSCI_STS    (1 << 6)
338 #define   AC97_STS      (1 << 5)
339 #define   USB2_STS      (1 << 4)
340 #define   USB1_STS      (1 << 3)
341 #define   SWGPE_STS     (1 << 2)
342 #define   HOT_PLUG_STS  (1 << 1)
343 #define   THRM_STS      (1 << 0)
344 #define GPE0_EN         0x2c
345 #define   PME_B0_EN     (1 << 13)
346 #define   PME_EN        (1 << 11)
347 #define SMI_EN          0x30
348 #define   EL_SMI_EN      (1 << 25) // Intel Quick Resume Technology
349 #define   INTEL_USB2_EN  (1 << 18) // Intel-Specific USB2 SMI logic
350 #define   LEGACY_USB2_EN (1 << 17) // Legacy USB2 SMI logic
351 #define   PERIODIC_EN    (1 << 14) // SMI on PERIODIC_STS in SMI_STS
352 #define   TCO_EN         (1 << 13) // Enable TCO Logic (BIOSWE et al)
353 #define   MCSMI_EN       (1 << 11) // Trap microcontroller range access
354 #define   BIOS_RLS       (1 <<  7) // asserts SCI on bit set
355 #define   SWSMI_TMR_EN   (1 <<  6) // start software smi timer on bit set
356 #define   APMC_EN        (1 <<  5) // Writes to APM_CNT cause SMI#
357 #define   SLP_SMI_EN     (1 <<  4) // Write to SLP_EN in PM1_CNT asserts SMI#
358 #define   LEGACY_USB_EN  (1 <<  3) // Legacy USB circuit SMI logic
359 #define   BIOS_EN        (1 <<  2) // Assert SMI# on setting GBL_RLS bit
360 #define   EOS            (1 <<  1) // End of SMI (deassert SMI#)
361 #define   GBL_SMI_EN     (1 <<  0) // SMI# generation at all?
362 #define SMI_STS         0x34
363 #define ALT_GP_SMI_EN   0x38
364 #define ALT_GP_SMI_STS  0x3a
365 #define GPE_CNTL        0x42
366 #define DEVACT_STS      0x44
367 #define SS_CNT          0x50
368 #define C3_RES          0x54
369
370 #endif /* __ACPI__ */
371 #endif                          /* SOUTHBRIDGE_INTEL_I82801GX_I82801GX_H */