blob: d09ccccfd7ac38de0838ab40f8c628992b3924ed [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
Angel Pons10993c42020-07-22 17:49:28 +020073/*
74 * QPI Physical Layer 0
75 */
76#define QPI_PHY_0 PCI_DEV(QUICKPATH_BUS, 2, 1)
77
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010078
79/* Device 0:2.0 PCI configuration space (Graphics Device) */
80
81#define MSAC 0x62 /* Multi Size Aperture Control */
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010082
83/*
84 * MCHBAR
85 */
86
Angel Ponsdd6a3d82020-06-22 17:21:23 +020087#define MCHBAR8(x) (*((volatile u8 *)(DEFAULT_MCHBAR + (x))))
88#define MCHBAR16(x) (*((volatile u16 *)(DEFAULT_MCHBAR + (x))))
89#define MCHBAR32(x) (*((volatile u32 *)(DEFAULT_MCHBAR + (x))))
90#define MCHBAR8_AND(x, and) (MCHBAR8(x) = MCHBAR8(x) & (and))
91#define MCHBAR16_AND(x, and) (MCHBAR16(x) = MCHBAR16(x) & (and))
92#define MCHBAR32_AND(x, and) (MCHBAR32(x) = MCHBAR32(x) & (and))
93#define MCHBAR8_OR(x, or) (MCHBAR8(x) = MCHBAR8(x) | (or))
94#define MCHBAR16_OR(x, or) (MCHBAR16(x) = MCHBAR16(x) | (or))
95#define MCHBAR32_OR(x, or) (MCHBAR32(x) = MCHBAR32(x) | (or))
96#define MCHBAR8_AND_OR(x, and, or) (MCHBAR8(x) = (MCHBAR8(x) & (and)) | (or))
97#define MCHBAR16_AND_OR(x, and, or) (MCHBAR16(x) = (MCHBAR16(x) & (and)) | (or))
98#define MCHBAR32_AND_OR(x, and, or) (MCHBAR32(x) = (MCHBAR32(x) & (and)) | (or))
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +010099/*
100 * EPBAR - Egress Port Root Complex Register Block
101 */
102
Angel Ponsdd6a3d82020-06-22 17:21:23 +0200103#define EPBAR8(x) (*((volatile u8 *)(DEFAULT_EPBAR + (x))))
104#define EPBAR16(x) (*((volatile u16 *)(DEFAULT_EPBAR + (x))))
105#define EPBAR32(x) (*((volatile u32 *)(DEFAULT_EPBAR + (x))))
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100106
107#define EPPVCCAP1 0x004 /* 32bit */
108#define EPPVCCAP2 0x008 /* 32bit */
109
110#define EPVC0RCAP 0x010 /* 32bit */
111#define EPVC0RCTL 0x014 /* 32bit */
112#define EPVC0RSTS 0x01a /* 16bit */
113
114#define EPVC1RCAP 0x01c /* 32bit */
115#define EPVC1RCTL 0x020 /* 32bit */
116#define EPVC1RSTS 0x026 /* 16bit */
117
118#define EPVC1MTS 0x028 /* 32bit */
119#define EPVC1IST 0x038 /* 64bit */
120
121#define EPESD 0x044 /* 32bit */
122
123#define EPLE1D 0x050 /* 32bit */
124#define EPLE1A 0x058 /* 64bit */
125#define EPLE2D 0x060 /* 32bit */
126#define EPLE2A 0x068 /* 64bit */
127
128#define PORTARB 0x100 /* 256bit */
129
130/*
131 * DMIBAR
132 */
133
Angel Ponsdd6a3d82020-06-22 17:21:23 +0200134#define DMIBAR8(x) (*((volatile u8 *)(DEFAULT_DMIBAR + (x))))
135#define DMIBAR16(x) (*((volatile u16 *)(DEFAULT_DMIBAR + (x))))
136#define DMIBAR32(x) (*((volatile u32 *)(DEFAULT_DMIBAR + (x))))
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100137
138#define DMIVCECH 0x000 /* 32bit */
139#define DMIPVCCAP1 0x004 /* 32bit */
140#define DMIPVCCAP2 0x008 /* 32bit */
141
142#define DMIPVCCCTL 0x00c /* 16bit */
143
144#define DMIVC0RCAP 0x010 /* 32bit */
Felix Held00d2b912018-07-28 21:06:01 +0200145#define DMIVC0RCTL 0x014 /* 32bit */
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100146#define DMIVC0RSTS 0x01a /* 16bit */
147
148#define DMIVC1RCAP 0x01c /* 32bit */
149#define DMIVC1RCTL 0x020 /* 32bit */
150#define DMIVC1RSTS 0x026 /* 16bit */
151
152#define DMILE1D 0x050 /* 32bit */
153#define DMILE1A 0x058 /* 64bit */
154#define DMILE2D 0x060 /* 32bit */
155#define DMILE2A 0x068 /* 64bit */
156
157#define DMILCAP 0x084 /* 32bit */
158#define DMILCTL 0x088 /* 16bit */
159#define DMILSTS 0x08a /* 16bit */
160
161#define DMICTL1 0x0f0 /* 32bit */
162#define DMICTL2 0x0fc /* 32bit */
163
164#define DMICC 0x208 /* 32bit */
165
166#define DMIDRCCFG 0xeb4 /* 32bit */
167
168#ifndef __ASSEMBLER__
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100169
Angel Pons95de2312020-02-17 13:08:53 +0100170void intel_ironlake_finalize_smm(void);
Kyösti Mälkki82c0e7e2019-11-05 19:06:56 +0200171
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100172int bridge_silicon_revision(void);
Angel Pons95de2312020-02-17 13:08:53 +0100173void ironlake_early_initialization(int chipset_type);
174void ironlake_late_initialization(void);
Arthur Heymanscea4fd92019-10-03 08:54:35 +0200175void mainboard_pre_raminit(void);
176void mainboard_get_spd_map(u8 *spd_addrmap);
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100177
Vladimir Serbinenkoc6f6be02013-11-12 22:32:08 +0100178#endif
179#endif
Angel Pons95de2312020-02-17 13:08:53 +0100180#endif /* __NORTHBRIDGE_INTEL_IRONLAKE_IRONLAKE_H__ */