blob: aa2399f13693b67de100f95887aa2b56264f2215 [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
Angel Pons08143572020-07-22 17:47:06 +020068#define QPI_QPILCP 0x40 /* QPI Link Capability */
69#define QPI_QPILCL 0x48 /* QPI Link Control */
70#define QPI_QPILS 0x50 /* QPI Link Status */
71#define QPI_DEF_RMT_VN_CREDITS 0x58 /* Default Available Remote Credits */
72
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010073
74/* Device 0:2.0 PCI configuration space (Graphics Device) */
75
76#define MSAC 0x62 /* Multi Size Aperture Control */
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010077
78/*
79 * MCHBAR
80 */
81
Angel Ponsdd6a3d82020-06-22 17:21:23 +020082#define MCHBAR8(x) (*((volatile u8 *)(DEFAULT_MCHBAR + (x))))
83#define MCHBAR16(x) (*((volatile u16 *)(DEFAULT_MCHBAR + (x))))
84#define MCHBAR32(x) (*((volatile u32 *)(DEFAULT_MCHBAR + (x))))
85#define MCHBAR8_AND(x, and) (MCHBAR8(x) = MCHBAR8(x) & (and))
86#define MCHBAR16_AND(x, and) (MCHBAR16(x) = MCHBAR16(x) & (and))
87#define MCHBAR32_AND(x, and) (MCHBAR32(x) = MCHBAR32(x) & (and))
88#define MCHBAR8_OR(x, or) (MCHBAR8(x) = MCHBAR8(x) | (or))
89#define MCHBAR16_OR(x, or) (MCHBAR16(x) = MCHBAR16(x) | (or))
90#define MCHBAR32_OR(x, or) (MCHBAR32(x) = MCHBAR32(x) | (or))
91#define MCHBAR8_AND_OR(x, and, or) (MCHBAR8(x) = (MCHBAR8(x) & (and)) | (or))
92#define MCHBAR16_AND_OR(x, and, or) (MCHBAR16(x) = (MCHBAR16(x) & (and)) | (or))
93#define MCHBAR32_AND_OR(x, and, or) (MCHBAR32(x) = (MCHBAR32(x) & (and)) | (or))
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010094/*
95 * EPBAR - Egress Port Root Complex Register Block
96 */
97
Angel Ponsdd6a3d82020-06-22 17:21:23 +020098#define EPBAR8(x) (*((volatile u8 *)(DEFAULT_EPBAR + (x))))
99#define EPBAR16(x) (*((volatile u16 *)(DEFAULT_EPBAR + (x))))
100#define EPBAR32(x) (*((volatile u32 *)(DEFAULT_EPBAR + (x))))
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100101
102#define EPPVCCAP1 0x004 /* 32bit */
103#define EPPVCCAP2 0x008 /* 32bit */
104
105#define EPVC0RCAP 0x010 /* 32bit */
106#define EPVC0RCTL 0x014 /* 32bit */
107#define EPVC0RSTS 0x01a /* 16bit */
108
109#define EPVC1RCAP 0x01c /* 32bit */
110#define EPVC1RCTL 0x020 /* 32bit */
111#define EPVC1RSTS 0x026 /* 16bit */
112
113#define EPVC1MTS 0x028 /* 32bit */
114#define EPVC1IST 0x038 /* 64bit */
115
116#define EPESD 0x044 /* 32bit */
117
118#define EPLE1D 0x050 /* 32bit */
119#define EPLE1A 0x058 /* 64bit */
120#define EPLE2D 0x060 /* 32bit */
121#define EPLE2A 0x068 /* 64bit */
122
123#define PORTARB 0x100 /* 256bit */
124
125/*
126 * DMIBAR
127 */
128
Angel Ponsdd6a3d82020-06-22 17:21:23 +0200129#define DMIBAR8(x) (*((volatile u8 *)(DEFAULT_DMIBAR + (x))))
130#define DMIBAR16(x) (*((volatile u16 *)(DEFAULT_DMIBAR + (x))))
131#define DMIBAR32(x) (*((volatile u32 *)(DEFAULT_DMIBAR + (x))))
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100132
133#define DMIVCECH 0x000 /* 32bit */
134#define DMIPVCCAP1 0x004 /* 32bit */
135#define DMIPVCCAP2 0x008 /* 32bit */
136
137#define DMIPVCCCTL 0x00c /* 16bit */
138
139#define DMIVC0RCAP 0x010 /* 32bit */
Felix Held00d2b912018-07-28 21:06:01 +0200140#define DMIVC0RCTL 0x014 /* 32bit */
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100141#define DMIVC0RSTS 0x01a /* 16bit */
142
143#define DMIVC1RCAP 0x01c /* 32bit */
144#define DMIVC1RCTL 0x020 /* 32bit */
145#define DMIVC1RSTS 0x026 /* 16bit */
146
147#define DMILE1D 0x050 /* 32bit */
148#define DMILE1A 0x058 /* 64bit */
149#define DMILE2D 0x060 /* 32bit */
150#define DMILE2A 0x068 /* 64bit */
151
152#define DMILCAP 0x084 /* 32bit */
153#define DMILCTL 0x088 /* 16bit */
154#define DMILSTS 0x08a /* 16bit */
155
156#define DMICTL1 0x0f0 /* 32bit */
157#define DMICTL2 0x0fc /* 32bit */
158
159#define DMICC 0x208 /* 32bit */
160
161#define DMIDRCCFG 0xeb4 /* 32bit */
162
163#ifndef __ASSEMBLER__
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100164
Angel Pons95de2312020-02-17 13:08:53 +0100165void intel_ironlake_finalize_smm(void);
Kyösti Mälkki82c0e7e2019-11-05 19:06:56 +0200166
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100167int bridge_silicon_revision(void);
Angel Pons95de2312020-02-17 13:08:53 +0100168void ironlake_early_initialization(int chipset_type);
169void ironlake_late_initialization(void);
Arthur Heymanscea4fd92019-10-03 08:54:35 +0200170void mainboard_pre_raminit(void);
171void mainboard_get_spd_map(u8 *spd_addrmap);
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100172
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100173#endif
174#endif
Angel Pons95de2312020-02-17 13:08:53 +0100175#endif /* __NORTHBRIDGE_INTEL_IRONLAKE_IRONLAKE_H__ */