blob: df4232a759e14d47da06e088bdc292f7a0d6ef79 [file] [log] [blame]
Patrick Georgi02363b52020-05-05 20:48:50 +02001/* This file is part of the coreboot project. */
Patrick Georgiac959032020-05-05 22:49:26 +02002/* SPDX-License-Identifier: GPL-2.0-or-later */
Damien Zammit62477932015-05-03 21:34:38 +10003
4#ifndef NORTHBRIDGE_INTEL_PINEVIEW_H
5#define NORTHBRIDGE_INTEL_PINEVIEW_H
6
7#include <northbridge/intel/pineview/iomap.h>
8#include <southbridge/intel/i82801gx/i82801gx.h>
9
Damien Zammitf7060f12015-11-14 00:59:21 +110010#define BOOT_PATH_NORMAL 0
11#define BOOT_PATH_RESET 1
12#define BOOT_PATH_RESUME 2
13
14#define SYSINFO_DIMM_NOT_POPULATED 0x00
15#define SYSINFO_DIMM_X16SS 0x01
16#define SYSINFO_DIMM_X16DS 0x02
17#define SYSINFO_DIMM_X8DS 0x05
18#define SYSINFO_DIMM_X8DDS 0x06
19
Damien Zammit62477932015-05-03 21:34:38 +100020/* Device 0:0.0 PCI configuration space (Host Bridge) */
Angel Pons39ff7032020-03-09 21:39:44 +010021#define HOST_BRIDGE PCI_DEV(0, 0, 0)
Damien Zammit62477932015-05-03 21:34:38 +100022
23#define EPBAR 0x40
24#define MCHBAR 0x48
25#define PCIEXBAR 0x60
26#define DMIBAR 0x68
27#define PMIOBAR 0x78
28
Angel Pons39ff7032020-03-09 21:39:44 +010029#define GGC 0x52 /* GMCH Graphics Control */
Damien Zammit62477932015-05-03 21:34:38 +100030
Angel Pons39ff7032020-03-09 21:39:44 +010031#define DEVEN 0x54 /* Device Enable */
Damien Zammit62477932015-05-03 21:34:38 +100032#define DEVEN_D0F0 (1 << 0)
33#define DEVEN_D1F0 (1 << 1)
34#define DEVEN_D2F0 (1 << 3)
35#define DEVEN_D2F1 (1 << 4)
36
37#ifndef BOARD_DEVEN
38#define BOARD_DEVEN ( DEVEN_D0F0 | DEVEN_D2F0 | DEVEN_D2F1 )
39#endif /* BOARD_DEVEN */
40
41#define PAM0 0x90
42#define PAM1 0x91
43#define PAM2 0x92
44#define PAM3 0x93
45#define PAM4 0x94
46#define PAM5 0x95
47#define PAM6 0x96
48
49#define LAC 0x97 /* Legacy Access Control */
50#define REMAPBASE 0x98
51#define REMAPLIMIT 0x9a
52#define SMRAM 0x9d /* System Management RAM Control */
Arthur Heymans4bdfebd2018-04-09 22:10:33 +020053#define ESMRAMC 0x9e /* Extended System Management RAM Control */
Damien Zammit62477932015-05-03 21:34:38 +100054
55#define TOM 0xa0
56#define TOUUD 0xa2
57#define GBSM 0xa4
58#define BGSM 0xa8
Damien Zammitf7060f12015-11-14 00:59:21 +110059#define TSEG 0xac
Damien Zammit62477932015-05-03 21:34:38 +100060#define TOLUD 0xb0 /* Top of Low Used Memory */
61#define ERRSTS 0xc8
62#define ERRCMD 0xca
63#define SMICMD 0xcc
64#define SCICMD 0xce
65#define CGDIS 0xd8
66#define SKPAD 0xdc /* Scratchpad Data */
67#define CAPID0 0xe0
68#define DEV0T 0xf0
69#define MSLCK 0xf4
70#define MID0 0xf8
71#define DEBUP0 0xfc
72
73/* Device 0:1.0 PCI configuration space (PCI Express) */
74
Angel Pons39ff7032020-03-09 21:39:44 +010075#define PEGSTS 0x214 /* 32 bits */
Damien Zammit62477932015-05-03 21:34:38 +100076
Angel Pons39ff7032020-03-09 21:39:44 +010077/* Device 0:2.0 PCI configuration space (Integrated Graphics Device) */
78#define GMCH_IGD PCI_DEV(0, 2, 0)
Damien Zammit62477932015-05-03 21:34:38 +100079
80#define GMADR 0x18
81#define GTTADR 0x1c
82#define BSM 0x5c
Damien Zammit62477932015-05-03 21:34:38 +100083
Damien Zammitf7060f12015-11-14 00:59:21 +110084#define GPIO32(x) *((volatile u32 *)(DEFAULT_GPIOBASE + x))
Damien Zammit62477932015-05-03 21:34:38 +100085
86/*
87 * MCHBAR
88 */
89
Angel Pons39ff7032020-03-09 21:39:44 +010090#define MCHBAR8(x) (*((volatile u8 *)(DEFAULT_MCHBAR + (x))))
91#define MCHBAR16(x) (*((volatile u16 *)(DEFAULT_MCHBAR + (x))))
92#define MCHBAR32(x) (*((volatile u32 *)(DEFAULT_MCHBAR + x))) /* FIXME: causes changes */
93#define MCHBAR8_AND(x, and) (MCHBAR8(x) = MCHBAR8(x) & (and))
94#define MCHBAR16_AND(x, and) (MCHBAR16(x) = MCHBAR16(x) & (and))
95#define MCHBAR32_AND(x, and) (MCHBAR32(x) = MCHBAR32(x) & (and))
96#define MCHBAR8_OR(x, or) (MCHBAR8(x) = MCHBAR8(x) | (or))
97#define MCHBAR16_OR(x, or) (MCHBAR16(x) = MCHBAR16(x) | (or))
98#define MCHBAR32_OR(x, or) (MCHBAR32(x) = MCHBAR32(x) | (or))
99#define MCHBAR8_AND_OR(x, and, or) (MCHBAR8(x) = (MCHBAR8(x) & (and)) | (or))
100#define MCHBAR16_AND_OR(x, and, or) (MCHBAR16(x) = (MCHBAR16(x) & (and)) | (or))
101#define MCHBAR32_AND_OR(x, and, or) (MCHBAR32(x) = (MCHBAR32(x) & (and)) | (or))
102
103/* As there are many registers, define them on a separate file */
104
105#include "mchbar_regs.h"
Damien Zammit62477932015-05-03 21:34:38 +1000106
107/*
108 * EPBAR - Egress Port Root Complex Register Block
109 */
110
Angel Pons39ff7032020-03-09 21:39:44 +0100111#define EPBAR8(x) *((volatile u8 *)(DEFAULT_EPBAR + x))
Damien Zammit62477932015-05-03 21:34:38 +1000112#define EPBAR16(x) *((volatile u16 *)(DEFAULT_EPBAR + x))
113#define EPBAR32(x) *((volatile u32 *)(DEFAULT_EPBAR + x))
114
115/*
116 * DMIBAR
117 */
118
Angel Pons39ff7032020-03-09 21:39:44 +0100119#define DMIBAR8(x) *((volatile u8 *)(DEFAULT_DMIBAR + x))
Damien Zammit62477932015-05-03 21:34:38 +1000120#define DMIBAR16(x) *((volatile u16 *)(DEFAULT_DMIBAR + x))
121#define DMIBAR32(x) *((volatile u32 *)(DEFAULT_DMIBAR + x))
122
Damien Zammitf7060f12015-11-14 00:59:21 +1100123enum fsb_clk {
124 FSB_CLOCK_667MHz = 0,
125 FSB_CLOCK_800MHz = 1,
126};
127
128enum mem_clk {
129 MEM_CLOCK_667MHz = 0,
130 MEM_CLOCK_800MHz = 1,
131};
132
133enum ddr {
134 DDR2 = 2,
135 DDR3 = 3,
136};
137
138enum chip_width { /* as in DDR3 spd */
139 CHIP_WIDTH_x4 = 0,
140 CHIP_WIDTH_x8 = 1,
141 CHIP_WIDTH_x16 = 2,
142 CHIP_WIDTH_x32 = 3,
143};
144
145enum chip_cap { /* as in DDR3 spd */
146 CHIP_CAP_256M = 0,
147 CHIP_CAP_512M = 1,
148 CHIP_CAP_1G = 2,
149 CHIP_CAP_2G = 3,
150 CHIP_CAP_4G = 4,
151 CHIP_CAP_8G = 5,
152 CHIP_CAP_16G = 6,
153};
154
155struct timings {
156 unsigned int CAS;
157 enum fsb_clk fsb_clock;
158 enum mem_clk mem_clock;
159 unsigned int tRAS;
160 unsigned int tRP;
161 unsigned int tRCD;
162 unsigned int tWR;
163 unsigned int tRFC;
164 unsigned int tWTR;
165 unsigned int tRRD;
166 unsigned int tRTP;
167};
168
169struct dimminfo {
170 unsigned int card_type; /* 0x0: unpopulated,
171 0xa - 0xf: raw card type A - F */
172 u8 type;
173 enum chip_width width;
174 enum chip_cap chip_capacity;
175 unsigned int page_size; /* of whole DIMM in Bytes (4096 or 8192) */
176 unsigned int sides;
177 unsigned int banks;
178 unsigned int ranks;
179 unsigned int rows;
180 unsigned int cols;
181 unsigned int cas_latencies;
182 unsigned int tAAmin;
183 unsigned int tCKmin;
184 unsigned int tWR;
185 unsigned int tRP;
186 unsigned int tRCD;
187 unsigned int tRAS;
Martin Roth128c1042016-11-18 09:29:03 -0700188 unsigned int rank_capacity_mb; /* per rank in Megabytes */
Damien Zammitf7060f12015-11-14 00:59:21 +1100189 u8 spd_data[256];
190};
191
192struct pllparam {
193 u8 kcoarse[2][72];
194 u8 pi[2][72];
195 u8 dben[2][72];
196 u8 dbsel[2][72];
197 u8 clkdelay[2][72];
198};
199
200struct sysinfo {
201 u8 maxpi;
202 u8 pioffset;
203 u8 pi[8];
204 u16 coarsectrl;
205 u16 coarsedelay;
206 u16 mediumphase;
207 u16 readptrdelay;
208
209 int txt_enabled;
210 int cores;
211 int boot_path;
212 int max_ddr2_mhz;
213 int max_ddr3_mt;
214 int max_fsb_mhz;
215 int max_render_mhz;
216 int enable_igd;
217 int enable_peg;
218 u16 ggc;
219
220 int dimm_config[2];
221 int dimms_per_ch;
222 int spd_type;
223 int channel_capacity[2];
224 struct timings selected_timings;
225 struct dimminfo dimms[4];
226 u8 spd_map[4];
227
228 u8 nodll;
229 u8 async;
230 u8 dt0mode;
231 u8 mvco4x; /* 0 (8x) or 1 (4x) */
232};
233
Angel Pons39ff7032020-03-09 21:39:44 +0100234void pineview_early_init(void);
Damien Zammitf7060f12015-11-14 00:59:21 +1100235u32 decode_igd_memory_size(const u32 gms);
236u32 decode_igd_gtt_size(const u32 gsm);
237u8 decode_pciebar(u32 *const base, u32 *const len);
238
Arthur Heymansc6ff1ac2019-01-11 16:06:19 +0100239/* Mainboard romstage callback functions */
Arthur Heymansc6ff1ac2019-01-11 16:06:19 +0100240void get_mb_spd_addrmap(u8 *spd_addr_map);
241void mb_pirq_setup(void); /* optional */
242
Damien Zammitf7060f12015-11-14 00:59:21 +1100243struct acpi_rsdp;
244unsigned long northbridge_write_acpi_tables(unsigned long start, struct acpi_rsdp *rsdp);
245
Damien Zammit62477932015-05-03 21:34:38 +1000246#endif /* NORTHBRIDGE_INTEL_PINEVIEW_H */