remove trailing whitespace
[coreboot.git] / src / northbridge / amd / amdht / AsPsDefs.h
1 /*
2  * This file is part of the coreboot project.
3  *
4  * Copyright (C) 2007-2008 Advanced Micro Devices, Inc.
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
21 #ifndef ASPSDEFS_H
22 #define ASPSDEFS_H
23
24 #define APIC_BAR 0x1b                   /* APIC_BAR register */
25 #define APIC_BAR_BP 0x100               /* APIC_BAR BSP bit */
26
27 #define PS_LIM_REG 0xC0010061           /* P-state Current Limit Register */
28 #define PS_MAX_VAL_SHFT 4               /* P-state Maximum Value shift position */
29
30 #define PS_CTL_REG 0xC0010062           /* P-state Control Register */
31 #define PS_CMD_MASK_OFF 0xfffffff8      /* P-state Control Register CMD Mask OFF */
32
33 #define PS_STS_REG 0xC0010063           /* P-state Status Register */
34 #define PS_STS_MASK 0x7         /* P-state Status Mask */
35
36 #define PS_REG_BASE 0xC0010064          /* P-state Register base */
37 #define PS_MAX_REG 0xC0010068           /* Maximum P-State Register */
38 #define PS_MIN_REG 0xC0010064           /* Mimimum P-State Register */
39
40 /* P-state register offset */
41 #define PS_REG0 0                       /* offset for P0 */
42 #define PS_REG1 1                       /* offset for P1 */
43 #define PS_REG2 2                       /* offset for P2 */
44 #define PS_REG3 3                       /* offset for P3 */
45 #define PS_REG4 4                       /* offset for P4 */
46
47 #define PS_IDD_VALUE_SHFT 0            /* IddValue: current value
48                                           field offset for msr.hi */
49 #define PS_IDD_VALUE_MASK 0xFF         /* IddValue: current value
50                                           field mask for msr.hi */
51 #define PS_PSDIS_MASK   0x7fffffff      /* disable P-state register */
52 #define PS_EN_MASK  0x80000000          /* P-state register enable mask */
53 #define PS_NB_DID_MASK 0x400000 /* P-state Reg[NbDid] Mask */
54 #define PS_NB_VID_M_OFF 0x01ffffff      /* P-state Reg[NbVid] Mask OFF */
55 #define PS_CPU_VID_M_ON 0x0fe00 /* P-state Reg[CpuVid] Mask On */
56 #define PS_NB_VID_M_ON 0x0fe000000      /* P-state Reg[NbVid] Mask On */
57 #define PS_CPU_VID_SHFT 9               /* P-state bit shift for CpuVid */
58 #define PS_NB_VID_SHFT 25               /* P-state bit shift for NbVid */
59 #define PS_BOTH_VID_OFF 0x01ff01ff      /* Mask NbVid & CpuVid */
60 #define PS_CPU_NB_VID_SHFT 16           /* P-state bit shift from CpuVid to NbVid */
61 #define PS_DIS 0x7fffffff               /* disable P-state reg */
62 #define PS_EN 0x80000000                /* enable P-state reg */
63 #define PS_CPU_FID_MASK 0x03f           /* MSRC001_00[68:64][CpuFid]
64                                            Core Frequency Id */
65 #define PS_CURDIV_SHFT 8                /* P-state Current Divisor shift position */
66 #define PS_CPUDID_SHIFT 6               /* P-state CPU DID shift position */
67
68 /* for unfused parts */
69 #define PS_NB_VID_110V 0x48000000
70 #define PS_NB_VID_1175V 0x3c000000
71 /* NB VID 1.100V =0x12[PVI]=0x24[SVI] = 0100100b 7-bit code */
72
73 #define PS_NB_DID0 0                    /* NB DID 0 */
74 #define PS_NB_DID1 0x400000             /* NB DID 1 */
75 #define PS_CPU_VID_110V 0x4800          /* CPU VID 1.100V */
76 #define PS_CPU_VID_1175V 0x3c00 /* CPU VID 1.175V */
77 #define PS_CPU_DID 0x40         /* CPU DID 1 = divisor of 2 */
78 #define PS_CPU_DID0 0                   /* CPU DID 0 = divisor of 1 */
79 #define PS_CPU_FID_16G 0x00             /* CPU FID of 00 = 1.6GHz */
80 #define PS_CPU_FID_16G1 0x10            /* CPU FId of 16 COF = 16+16/2 = 16 */
81 #define PS_CPU_FID_18G 20               /* CPU FId of 20 COF = 20+16/2 = 18 */
82 #define PS_CPU_FID_19G 22               /* CPU FId of 20 COF = 22+16/2 = 19 */
83 #define PS_CPU_FID_20G 24               /* CPU FId of 20 COF = 24+16/2 = 20 */
84 #define PS_CPU_FID_22G 28               /* CPU FId of 2C COF = 28+16/2 = 22 */
85 #define PS_CPU_FID_30G 44               /* CPU FId of 2C COF = 44+16/2 = 30 */
86
87
88
89 #define PCI_DEV_BASE 24         /* System PCI device ID base */
90 #define LOCAL_APIC_ID_SHIFT 24          /* Local APIC ID shift bit # */
91 #define APIC_CID_SIZE_SHIFT 12          /* ApicCoreIdSize shift bit # */
92 #define FN_0 0                          /* Function 0 */
93 #define FN_1 1                          /* Function 1 */
94 #define FN_2 2                          /* Function 2 */
95 #define FN_3 3                          /* Function 3 */
96 #define FN_4 4                          /* Function 4 */
97 #define FN_5 5                          /* Function 5 */
98 #define FN_80000000 0x80000000          /* Function 8000_0000 */
99 #define FN_80000001 0x80000001          /* Function 8000_0001 */
100 #define FN_80000008 0x80000008          /* Function 8000_0008 */
101
102 #define LNK_INIT_REG 0x6C               /* F0x6C link initialization control register */
103 #define WARM_RESET_BIT 0x10             /* bit 4 =1 : warm reset */
104
105 #define HTC_REG 0x64                    /* hardware thermal control reg */
106 #define HTC_PS_LMT_MASK 0x8fffffff      /* HtcPstateLimit mask off */
107 #define PS_LIMIT_POS 28         /* PstateLimit position for HTC & STC */
108
109 #define STC_REG 0x68                    /* software thermal control reg */
110 #define STC_PS_LMT_MASK 0x8fffffff      /* StcPstateLimit mask off */
111
112 #define CPTC0 0x0d4                     /* Clock Power/Timing Control0 Register*/
113 #define CPTC0_MASK 0x000cffff           /* Reset mask for this register */
114 #define CPTC0_NBFID_MASK 0xffffffe0     /* NbFid mask off for this register */
115 #define CPTC0_NBFID_MON 0x1f            /* NbFid mask on for this register */
116 #define NB_FID_EN 0x20                  /* NbFidEn bit ON */
117 #define NB_CLKDID_ALL 0x80000000        /* NbClkDidApplyAll bit ON */
118 #define NB_CLKDID     0x40000000        /* NbClkDid value set by BIOS */
119 #define NB_CLKDID_SHIFT   28            /* NbClkDid bit shift */
120 #define PW_STP_UP50   0x08000000        /* PowerStepUp 50nS(1000b) */
121 #define PW_STP_DN50   0x00800000        /* PowerStepDown 50nS (1000b)*/
122 #define PW_STP_UP100  0x03000000        /* PowerStepUp 100nS(0011b) */
123 #define PW_STP_DN100  0x00300000        /* PowerStepDown 100nS (0011b)*/
124 #define PW_STP_UP200  0x02000000        /* PowerStepUp 200nS(0010b) */
125 #define PW_STP_DN200  0x00200000        /* PowerStepDown 200nS (0010b)*/
126 #define PW_STP_UP400  0x00000000        /* PowerStepUp 400nS(0000b) */
127 #define PW_STP_DN400  0x00000000        /* PowerStepDown 400nS (0000b)*/
128 #define CLK_RAMP_HYST_SEL_VAL 0x00000f00 /* value mask for clock ramp
129                                             hysteresis select. BIOS
130                                             should program
131                                             F3xC4[ClkRampHystSel] to
132                                             1111b */
133
134
135 #define LNK_PLL_LOCK  0x00010000        /* LnkPllLock value set (01b) by BIOS */
136
137
138
139 #define PSTATE_CTL 0xC0010070           /* P-state Control Register */
140 #define NB_VID_POS 25                   /* NbVid bit shift for position */
141 #define NB_VID_MASK_OFF 0x01ffffff      /* NbVid bits mask off */
142 #define NB_VID_MASK_ON 0xfe000000       /* NbVid bits mask on */
143 #define CPU_VID_POS 0x9         /* CpuVid bit shift for position */
144 #define CPU_VID_MASK_OFF 0xffff01ff     /* CpuVid bits mask off */
145 #define CPU_VID_MASK_ON 0x0000fe00      /* CpuVid bits mask on */
146 #define CPU_FID_DID_M_ON 0x000001ff     /* CpuFid & CpuDid mask on */
147 #define CPU_FID_DID_M_OFF 0xfffffe00    /* CpuFid & CpuDid mask off */
148 #define NB_DID_VID_M_ON 0xfe400000      /* NbDid & NbVid mask on */
149 #define NB_DID_M_ON 0x00400000          /* NbDid mask on */
150 #define NB_DID_M_OFF 0xffbfffff /* NbDid mask off */
151 #define NB_DID_POS 22                   /* NbDid bit shift for position */
152 #define PS_M_OFF 0xfff8ffff             /* Cur Pstate mask off */
153 #define PS_1 0x00010000         /* P-state 1 */
154 #define PS_2 0x00020000         /* P-state 2 */
155 #define PS_CPU_DID_1 0x40               /* Cpu Did 1 */
156
157 #define NB_VID1_MASK  0x00003f80      /* F3x1F4[NbVid1]*/
158 #define NB_VID1_SHIFT  7      /* F3x1F4[NbVid1] */
159
160
161
162 #define PSTATE_STS 0xC0010071           /* P-state Status Register */
163 #define STARTUP_PS_MASK 0x7             /* StartupPstate Mask */
164
165 /* define for NB VID & CPU VID transition functions */
166 #define IS_NB 1
167 #define IS_CPU 0
168
169 /* F3xD8 Clock Power/Timing Control 1 Register */
170 #define CPTC1 0xd8                      /* Clock Power/Timing Control1 Register*/
171 #define VSRAMP_SLAM_MASK 0xffffff88     /* MaskOff [VSRampTime]&[VSSlamTime] */
172 #define VSRAMP_SLAM_VALUE 0x16          /* [VSRampTime]=001b&[VSSlamTime]=110b */
173 #define VSRAMP_MASK 0xffffff8f          /* MaskOff [VSRampTime] */
174 #define VSRAMP_VALUE 0x10               /* [VSRampTime]=001b */
175 #define VS_RAMP_T 4                     /* VSRampTime bit position */
176 #define VSSLAM_MASK 0xfffffff8          /* MaskOff [VSSlamTime] */
177 #define PWR_PLN_SHIFT 28                /* PwrPlanes bit shift */
178 #define PWR_PLN_ON 0x10000000           /* PwrPlanes bit ON */
179 #define PWR_PLN_OFF 0x0efffffff /* PwrPlanes bit OFF */
180
181
182
183 /* Northbridge Capability Register */
184 #define NB_CAP 0xe8                     /* Northbridge Cap Reg */
185 #define CMP_CAP_SHFT 12         /* CMP CAP - number of enabled cores */
186
187 /* F3xDC Clock Power/Timing Control 2 Register */
188 #define CPTC2 0xdc                      /* Clock Power/Timing Control2 Register*/
189 #define PS_MAX_VAL_POS 8                /* PstateMaxValue bit shift */
190 #define PS_MAX_VAL_MASK 0xfffff8ff      /* PstateMaxValue Mask off */
191 #define NB_SYN_PTR_ADJ_POS 12            /* NbsynPtrAdj bit shift */
192 #define NB_SYN_PTR_ADJ_MASK (0x7 << NB_SYN_PTR_ADJ_POS)  /* NbsynPtrAdj bit mask */
193
194 #define PRCT_INFO 0x1fc         /* Product Info Register */
195 #define DUAL_PLANE_ONLY_MASK 0x80000000  /* F3x1FC[DualPlaneOnly] */
196 #define UNI_NB_FID_BIT 2                /* UniNbFid bit position */
197 #define UNI_NB_VID_BIT 7                /* UniNbVid bit position */
198 #define SPLT_NB_FID_OFFSET 14           /* SpltNbFidOffset value bit position */
199 #define SPLT_NB_VID_OFFSET 17           /* SpltNbVidOffset value bit position */
200 #define NB_CV_UPDATE 0x01               /* F3x1FC[NbCofVidUpdated] bit mask */
201 #define NB_VID_UPDATE_ALL 0x02          /* F3x1FC[NbVidUpdatedAll] bit mask */
202 #define C_FID_DID_M_OFF  0xfffffe00     /* mask off Core FID & DID */
203
204 #define CPB_MASK 0x00000020             /* core performance
205                                            boost. CPUID Fn8000 0007 edx */
206 #define NC_MASK 0x000000FF              /* number of cores - 1. CPUID
207                                            Fn8000 0008 ecx */
208 #define PW_CTL_MISC 0x0a0               /* Power Control Miscellaneous Register */
209 #define COF_VID_PROG_BIT 0x80000000     /* CofVidProg bit. 0= unfused part */
210 #define DUAL_VDD_BIT 0x40000000 /* DualVdd bit. */
211 #define NB_COFVID_UPDATE_BIT 0x01       /* NbCOFVIDUpdated bit */
212 #define PVI_MODE 0x100                  /* PviMode bit mask */
213 #define VID_SLAM_OFF 0x0dfffffff        /* set VidSlamMode OFF */
214 #define VID_SLAM_ON 0x020000000 /* set VidSlamMode ON */
215 #define NB_PSTATE_FORCE_ON 0x010000000 /* set Northbridge P-state
216                                           force on next LDTSTOP
217                                           assertion on, in F3xA0 */
218 #define BP_INS_TRI_EN_ON 0x00004000   /* breakpoint pins tristate
219                                          enable in F3xA0 */
220 #define PLLLOCK_OFF 0x0ffffc7ff /* PllLockTime Mask OFF */
221 #define PLLLOCK_DFT 0x00001800          /* PllLockTime default value = 011b */
222 #define PLLLOCK_DFT_L 0x00002800        /* PllLockTime long value = 101b */
223
224 #define SVI_HIGH_FREQ_ON 0x00000200     /* F3xA0[SviHighFreqSel] for
225                                            3.4 MHz SVI in rev. C3 */
226
227 /* P-state Specification register base in PCI space */
228 #define PS_SPEC_REG 0x1e0               /* PS Spec register base address */
229 #define PCI_REG_LEN 4                   /* PCI register length */
230 #define NB_DID_MASK 0x10000             /* NbDid bit mask */
231 #define NB_DID_2 2                      /* NbDid = 2 */
232 #define NB_DID_1 1                      /* NbDid = 1 */
233 #define SPEC_PWRDIV_M_ON 0x06000000     /* PwrDiv mask on */
234 #define SPEC_PWRVAL_M_ON 0x01e00000     /* PwrValue mask on */
235 #define SPEC_PWRDIV_SHFT 25             /* PwrDiv shift */
236 #define SPEC_PWRVAL_SHFT 17             /* PwrValue shift */
237
238 /* F4x1F4 Northbridge P-state spec register */
239 #define NB_PS_SPEC_REG 0x1f4            /* Nb PS spec reg */
240
241 /* F3x1F0 Product Information Register */
242 #define NB_PSTATE_MASK 0x00070000 /* NbPstate for CPU rev C3 */
243
244 /* F3x1FC Product Information Register */
245 #define NB_COF_VID_UPDATE_MASK 1 /* for CPU rev <= C */
246 #define SINGLE_PLANE_NB_FID_MASK 0x007c/* for CPU rev <= C */
247 #define SINGLE_PLANE_NB_FID_SHIFT 2/* for CPU rev <= C */
248 #define SINGLE_PLANE_NB_VID_MASK 0x3f80/* for CPU rev <= C */
249 #define SINGLE_PLANE_NB_VID_SHIFT 7/* for CPU rev <= C */
250
251 #define DUAL_PLANE_NB_FID_OFF_MASK 0x001c000/* for CPU rev <= C */
252 #define DUAL_PLANE_NB_FID_SHIFT 14/* for CPU rev <= C */
253 #define DUAL_PLANE_NB_VID_OFF_MASK 0x3e0000/* for CPU rev <= C */
254 #define DUAL_PLANE_NB_VID_SHIFT 17/* for CPU rev <= C */
255
256
257 #define NM_PS_REG 5                     /* number of P-state MSR registers */
258
259 /* sFidVidInit.outFlags defines */
260 #define PWR_CK_OK 0                     /* System board check OK */
261 #define PWR_CK_NO_PS 1                  /* All P-state registers are over
262                                            the limit */
263
264 /* bit mask */
265 #define BIT_MASK_1 0x1
266 #define BIT_MASK_2 0x3
267 #define BIT_MASK_3 0x7
268 #define BIT_MASK_4 0x0f
269 #define BIT_MASK_5 0x1f
270 #define BIT_MASK_6 0x3f
271 #define BIT_MASK_7 0x7f
272 #define BIT_MASK_8 0x0ff
273
274 /* VID Code */
275 #define VID_1_100V 0x12         /* 1.100V */
276 #define VID_1_175V 0x1E         /* 1.175V */
277
278
279 /* Nb Fid Code */
280 #define NB_FID_800M 0x00                /* 800MHz */
281
282 /* Nb DID Code */
283 #define NB_DID_0 0
284 #define NB_DID_1 1
285
286 /* GH Logical ID */
287
288 #define GH_REV_A2 0x4                   /* GH Rev A2 logical ID, Upper half */
289
290
291 #define TSC_MSR 0x10
292 #define CUR_PSTATE_MSR 0xc0010063
293 #define TSC_FREQ_SEL_SHIFT 24
294
295 #define TSC_FREQ_SEL_MASK (1 << TSC_FREQ_SEL_SHIFT)
296
297 #define  WAIT_PSTATE_TIMEOUT 80000000  /* 0.1 s , unit : 1.25 ns */
298
299 #endif