blob: bd42f21006d4e415b83228a622df661afbeb9643 [file] [log] [blame]
Angel Pons4b429832020-04-02 23:48:50 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +01002
Angel Pons95de2312020-02-17 13:08:53 +01003#ifndef __NORTHBRIDGE_INTEL_IRONLAKE_IRONLAKE_H__
4#define __NORTHBRIDGE_INTEL_IRONLAKE_IRONLAKE_H__
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +01005
Kevin Paul Herbertbde6d302014-12-24 18:43:20 -08006#define DEFAULT_HECIBAR ((u8 *)0xfed17000)
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +01007
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +01008
9#define IOMMU_BASE1 0xfed90000
10#define IOMMU_BASE2 0xfed91000
11#define IOMMU_BASE3 0xfed92000
12#define IOMMU_BASE4 0xfed93000
13
14/*
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010015 * D1:F0 PEG
16 */
Angel Ponsdd6a3d82020-06-22 17:21:23 +020017#define PEG_CAP 0xa2
18#define SLOTCAP 0xb4
19#define PEGLC 0xec
20#define D1F0_VCCAP 0x104
21#define D1F0_VC0RCTL 0x114
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010022
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010023/* Chipset types */
Angel Ponsdd6a3d82020-06-22 17:21:23 +020024#define IRONLAKE_MOBILE 0
Angel Pons95de2312020-02-17 13:08:53 +010025#define IRONLAKE_DESKTOP 1
Angel Ponsdd6a3d82020-06-22 17:21:23 +020026#define IRONLAKE_SERVER 2
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010027
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010028/* Northbridge BARs */
Kevin Paul Herbertbde6d302014-12-24 18:43:20 -080029#ifndef __ACPI__
30#define DEFAULT_MCHBAR ((u8 *)0xfed10000) /* 16 KB */
31#define DEFAULT_DMIBAR ((u8 *)0xfed18000) /* 4 KB */
32#else
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010033#define DEFAULT_MCHBAR 0xfed10000 /* 16 KB */
34#define DEFAULT_DMIBAR 0xfed18000 /* 4 KB */
Kevin Paul Herbertbde6d302014-12-24 18:43:20 -080035#endif
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010036#define DEFAULT_EPBAR 0xfed19000 /* 4 KB */
Kevin Paul Herbertbde6d302014-12-24 18:43:20 -080037#define DEFAULT_RCBABASE ((u8 *)0xfed1c000)
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010038
39#define QUICKPATH_BUS 0xff
40
41#include <southbridge/intel/ibexpeak/pch.h>
42
43/* Everything below this line is ignored in the DSDT */
44#ifndef __ACPI__
45
46/* Device 0:0.0 PCI configuration space (Host Bridge) */
47
Angel Ponse9d1d702020-07-22 12:47:00 +020048#include "hostbridge_regs.h"
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010049
Angel Ponse9d1d702020-07-22 12:47:00 +020050/*
Angel Pons3ab19b32020-07-22 16:29:54 +020051 * SAD - System Address Decoder
Angel Ponse9d1d702020-07-22 12:47:00 +020052 */
Angel Pons3ab19b32020-07-22 16:29:54 +020053#define QPI_SAD PCI_DEV(QUICKPATH_BUS, 0, 1)
54
Angel Ponse9d1d702020-07-22 12:47:00 +020055#define QPD0F1_PAM(x) (0x40 + (x)) /* 0-6 */
Vladimir Serbinenko786c0f52014-01-02 10:16:46 +010056#define QPD0F1_SMRAM 0x4d /* System Management RAM Control */
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010057
Angel Pons45008932020-07-22 16:43:48 +020058#define SAD_PCIEXBAR 0x50
59
Angel Pons67573372020-07-22 16:56:00 +020060#define SAD_DRAM_RULE(x) (0x80 + 4 * (x)) /* 0-7 */
61#define SAD_INTERLEAVE_LIST(x) (0xc0 + 4 * (x)) /* 0-7 */
62
Angel Pons93d95172020-07-22 17:30:49 +020063/*
64 * QPI Link 0
65 */
66#define QPI_LINK_0 PCI_DEV(QUICKPATH_BUS, 2, 0)
67
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010068
69/* Device 0:2.0 PCI configuration space (Graphics Device) */
70
71#define MSAC 0x62 /* Multi Size Aperture Control */
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010072
73/*
74 * MCHBAR
75 */
76
Angel Ponsdd6a3d82020-06-22 17:21:23 +020077#define MCHBAR8(x) (*((volatile u8 *)(DEFAULT_MCHBAR + (x))))
78#define MCHBAR16(x) (*((volatile u16 *)(DEFAULT_MCHBAR + (x))))
79#define MCHBAR32(x) (*((volatile u32 *)(DEFAULT_MCHBAR + (x))))
80#define MCHBAR8_AND(x, and) (MCHBAR8(x) = MCHBAR8(x) & (and))
81#define MCHBAR16_AND(x, and) (MCHBAR16(x) = MCHBAR16(x) & (and))
82#define MCHBAR32_AND(x, and) (MCHBAR32(x) = MCHBAR32(x) & (and))
83#define MCHBAR8_OR(x, or) (MCHBAR8(x) = MCHBAR8(x) | (or))
84#define MCHBAR16_OR(x, or) (MCHBAR16(x) = MCHBAR16(x) | (or))
85#define MCHBAR32_OR(x, or) (MCHBAR32(x) = MCHBAR32(x) | (or))
86#define MCHBAR8_AND_OR(x, and, or) (MCHBAR8(x) = (MCHBAR8(x) & (and)) | (or))
87#define MCHBAR16_AND_OR(x, and, or) (MCHBAR16(x) = (MCHBAR16(x) & (and)) | (or))
88#define MCHBAR32_AND_OR(x, and, or) (MCHBAR32(x) = (MCHBAR32(x) & (and)) | (or))
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010089/*
90 * EPBAR - Egress Port Root Complex Register Block
91 */
92
Angel Ponsdd6a3d82020-06-22 17:21:23 +020093#define EPBAR8(x) (*((volatile u8 *)(DEFAULT_EPBAR + (x))))
94#define EPBAR16(x) (*((volatile u16 *)(DEFAULT_EPBAR + (x))))
95#define EPBAR32(x) (*((volatile u32 *)(DEFAULT_EPBAR + (x))))
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010096
97#define EPPVCCAP1 0x004 /* 32bit */
98#define EPPVCCAP2 0x008 /* 32bit */
99
100#define EPVC0RCAP 0x010 /* 32bit */
101#define EPVC0RCTL 0x014 /* 32bit */
102#define EPVC0RSTS 0x01a /* 16bit */
103
104#define EPVC1RCAP 0x01c /* 32bit */
105#define EPVC1RCTL 0x020 /* 32bit */
106#define EPVC1RSTS 0x026 /* 16bit */
107
108#define EPVC1MTS 0x028 /* 32bit */
109#define EPVC1IST 0x038 /* 64bit */
110
111#define EPESD 0x044 /* 32bit */
112
113#define EPLE1D 0x050 /* 32bit */
114#define EPLE1A 0x058 /* 64bit */
115#define EPLE2D 0x060 /* 32bit */
116#define EPLE2A 0x068 /* 64bit */
117
118#define PORTARB 0x100 /* 256bit */
119
120/*
121 * DMIBAR
122 */
123
Angel Ponsdd6a3d82020-06-22 17:21:23 +0200124#define DMIBAR8(x) (*((volatile u8 *)(DEFAULT_DMIBAR + (x))))
125#define DMIBAR16(x) (*((volatile u16 *)(DEFAULT_DMIBAR + (x))))
126#define DMIBAR32(x) (*((volatile u32 *)(DEFAULT_DMIBAR + (x))))
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100127
128#define DMIVCECH 0x000 /* 32bit */
129#define DMIPVCCAP1 0x004 /* 32bit */
130#define DMIPVCCAP2 0x008 /* 32bit */
131
132#define DMIPVCCCTL 0x00c /* 16bit */
133
134#define DMIVC0RCAP 0x010 /* 32bit */
Felix Held00d2b912018-07-28 21:06:01 +0200135#define DMIVC0RCTL 0x014 /* 32bit */
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100136#define DMIVC0RSTS 0x01a /* 16bit */
137
138#define DMIVC1RCAP 0x01c /* 32bit */
139#define DMIVC1RCTL 0x020 /* 32bit */
140#define DMIVC1RSTS 0x026 /* 16bit */
141
142#define DMILE1D 0x050 /* 32bit */
143#define DMILE1A 0x058 /* 64bit */
144#define DMILE2D 0x060 /* 32bit */
145#define DMILE2A 0x068 /* 64bit */
146
147#define DMILCAP 0x084 /* 32bit */
148#define DMILCTL 0x088 /* 16bit */
149#define DMILSTS 0x08a /* 16bit */
150
151#define DMICTL1 0x0f0 /* 32bit */
152#define DMICTL2 0x0fc /* 32bit */
153
154#define DMICC 0x208 /* 32bit */
155
156#define DMIDRCCFG 0xeb4 /* 32bit */
157
158#ifndef __ASSEMBLER__
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100159
Angel Pons95de2312020-02-17 13:08:53 +0100160void intel_ironlake_finalize_smm(void);
Kyösti Mälkki82c0e7e2019-11-05 19:06:56 +0200161
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100162int bridge_silicon_revision(void);
Angel Pons95de2312020-02-17 13:08:53 +0100163void ironlake_early_initialization(int chipset_type);
164void ironlake_late_initialization(void);
Arthur Heymanscea4fd92019-10-03 08:54:35 +0200165void mainboard_pre_raminit(void);
166void mainboard_get_spd_map(u8 *spd_addrmap);
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100167
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100168#endif
169#endif
Angel Pons95de2312020-02-17 13:08:53 +0100170#endif /* __NORTHBRIDGE_INTEL_IRONLAKE_IRONLAKE_H__ */