xref: /openbmc/linux/drivers/edac/pnd2_edac.h (revision 5c71ad17f97e84d6d7e11a8e193d5d96890ed2ed)
1*5c71ad17STony Luck /*
2*5c71ad17STony Luck  * Register bitfield descriptions for Pondicherry2 memory controller.
3*5c71ad17STony Luck  *
4*5c71ad17STony Luck  * Copyright (c) 2016, Intel Corporation.
5*5c71ad17STony Luck  *
6*5c71ad17STony Luck  * This program is free software; you can redistribute it and/or modify it
7*5c71ad17STony Luck  * under the terms and conditions of the GNU General Public License,
8*5c71ad17STony Luck  * version 2, as published by the Free Software Foundation.
9*5c71ad17STony Luck  *
10*5c71ad17STony Luck  * This program is distributed in the hope it will be useful, but WITHOUT
11*5c71ad17STony Luck  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12*5c71ad17STony Luck  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13*5c71ad17STony Luck  * more details.
14*5c71ad17STony Luck  */
15*5c71ad17STony Luck 
16*5c71ad17STony Luck #ifndef _PND2_REGS_H
17*5c71ad17STony Luck #define _PND2_REGS_H
18*5c71ad17STony Luck 
19*5c71ad17STony Luck struct b_cr_touud_lo_pci {
20*5c71ad17STony Luck 	u32	lock : 1;
21*5c71ad17STony Luck 	u32	reserved_1 : 19;
22*5c71ad17STony Luck 	u32	touud : 12;
23*5c71ad17STony Luck };
24*5c71ad17STony Luck 
25*5c71ad17STony Luck #define b_cr_touud_lo_pci_port 0x4c
26*5c71ad17STony Luck #define b_cr_touud_lo_pci_offset 0xa8
27*5c71ad17STony Luck #define b_cr_touud_lo_pci_r_opcode 0x04
28*5c71ad17STony Luck 
29*5c71ad17STony Luck struct b_cr_touud_hi_pci {
30*5c71ad17STony Luck 	u32	touud : 7;
31*5c71ad17STony Luck 	u32	reserved_0 : 25;
32*5c71ad17STony Luck };
33*5c71ad17STony Luck 
34*5c71ad17STony Luck #define b_cr_touud_hi_pci_port 0x4c
35*5c71ad17STony Luck #define b_cr_touud_hi_pci_offset 0xac
36*5c71ad17STony Luck #define b_cr_touud_hi_pci_r_opcode 0x04
37*5c71ad17STony Luck 
38*5c71ad17STony Luck struct b_cr_tolud_pci {
39*5c71ad17STony Luck 	u32	lock : 1;
40*5c71ad17STony Luck 	u32	reserved_0 : 19;
41*5c71ad17STony Luck 	u32	tolud : 12;
42*5c71ad17STony Luck };
43*5c71ad17STony Luck 
44*5c71ad17STony Luck #define b_cr_tolud_pci_port 0x4c
45*5c71ad17STony Luck #define b_cr_tolud_pci_offset 0xbc
46*5c71ad17STony Luck #define b_cr_tolud_pci_r_opcode 0x04
47*5c71ad17STony Luck 
48*5c71ad17STony Luck struct b_cr_mchbar_lo_pci {
49*5c71ad17STony Luck 	u32 enable : 1;
50*5c71ad17STony Luck 	u32 pad_3_1 : 3;
51*5c71ad17STony Luck 	u32 pad_14_4: 11;
52*5c71ad17STony Luck 	u32 base: 17;
53*5c71ad17STony Luck };
54*5c71ad17STony Luck 
55*5c71ad17STony Luck struct b_cr_mchbar_hi_pci {
56*5c71ad17STony Luck 	u32 base : 7;
57*5c71ad17STony Luck 	u32 pad_31_7 : 25;
58*5c71ad17STony Luck };
59*5c71ad17STony Luck 
60*5c71ad17STony Luck /* Symmetric region */
61*5c71ad17STony Luck struct b_cr_slice_channel_hash {
62*5c71ad17STony Luck 	u64	slice_1_disabled : 1;
63*5c71ad17STony Luck 	u64	hvm_mode : 1;
64*5c71ad17STony Luck 	u64	interleave_mode : 2;
65*5c71ad17STony Luck 	u64	slice_0_mem_disabled : 1;
66*5c71ad17STony Luck 	u64	reserved_0 : 1;
67*5c71ad17STony Luck 	u64	slice_hash_mask : 14;
68*5c71ad17STony Luck 	u64	reserved_1 : 11;
69*5c71ad17STony Luck 	u64	enable_pmi_dual_data_mode : 1;
70*5c71ad17STony Luck 	u64	ch_1_disabled : 1;
71*5c71ad17STony Luck 	u64	reserved_2 : 1;
72*5c71ad17STony Luck 	u64	sym_slice0_channel_enabled : 2;
73*5c71ad17STony Luck 	u64	sym_slice1_channel_enabled : 2;
74*5c71ad17STony Luck 	u64	ch_hash_mask : 14;
75*5c71ad17STony Luck 	u64	reserved_3 : 11;
76*5c71ad17STony Luck 	u64	lock : 1;
77*5c71ad17STony Luck };
78*5c71ad17STony Luck 
79*5c71ad17STony Luck #define b_cr_slice_channel_hash_port 0x4c
80*5c71ad17STony Luck #define b_cr_slice_channel_hash_offset 0x4c58
81*5c71ad17STony Luck #define b_cr_slice_channel_hash_r_opcode 0x06
82*5c71ad17STony Luck 
83*5c71ad17STony Luck struct b_cr_mot_out_base_mchbar {
84*5c71ad17STony Luck 	u32	reserved_0 : 14;
85*5c71ad17STony Luck 	u32	mot_out_base : 15;
86*5c71ad17STony Luck 	u32	reserved_1 : 1;
87*5c71ad17STony Luck 	u32	tr_en : 1;
88*5c71ad17STony Luck 	u32	imr_en : 1;
89*5c71ad17STony Luck };
90*5c71ad17STony Luck 
91*5c71ad17STony Luck #define b_cr_mot_out_base_mchbar_port 0x4c
92*5c71ad17STony Luck #define b_cr_mot_out_base_mchbar_offset 0x6af0
93*5c71ad17STony Luck #define b_cr_mot_out_base_mchbar_r_opcode 0x00
94*5c71ad17STony Luck 
95*5c71ad17STony Luck struct b_cr_mot_out_mask_mchbar {
96*5c71ad17STony Luck 	u32	reserved_0 : 14;
97*5c71ad17STony Luck 	u32	mot_out_mask : 15;
98*5c71ad17STony Luck 	u32	reserved_1 : 1;
99*5c71ad17STony Luck 	u32	ia_iwb_en : 1;
100*5c71ad17STony Luck 	u32	gt_iwb_en : 1;
101*5c71ad17STony Luck };
102*5c71ad17STony Luck 
103*5c71ad17STony Luck #define b_cr_mot_out_mask_mchbar_port 0x4c
104*5c71ad17STony Luck #define b_cr_mot_out_mask_mchbar_offset 0x6af4
105*5c71ad17STony Luck #define b_cr_mot_out_mask_mchbar_r_opcode 0x00
106*5c71ad17STony Luck 
107*5c71ad17STony Luck struct b_cr_asym_mem_region0_mchbar {
108*5c71ad17STony Luck 	u32	pad : 4;
109*5c71ad17STony Luck 	u32	slice0_asym_base : 11;
110*5c71ad17STony Luck 	u32	pad_18_15 : 4;
111*5c71ad17STony Luck 	u32	slice0_asym_limit : 11;
112*5c71ad17STony Luck 	u32	slice0_asym_channel_select : 1;
113*5c71ad17STony Luck 	u32	slice0_asym_enable : 1;
114*5c71ad17STony Luck };
115*5c71ad17STony Luck 
116*5c71ad17STony Luck #define b_cr_asym_mem_region0_mchbar_port 0x4c
117*5c71ad17STony Luck #define b_cr_asym_mem_region0_mchbar_offset 0x6e40
118*5c71ad17STony Luck #define b_cr_asym_mem_region0_mchbar_r_opcode 0x00
119*5c71ad17STony Luck 
120*5c71ad17STony Luck struct b_cr_asym_mem_region1_mchbar {
121*5c71ad17STony Luck 	u32	pad : 4;
122*5c71ad17STony Luck 	u32	slice1_asym_base : 11;
123*5c71ad17STony Luck 	u32	pad_18_15 : 4;
124*5c71ad17STony Luck 	u32	slice1_asym_limit : 11;
125*5c71ad17STony Luck 	u32	slice1_asym_channel_select : 1;
126*5c71ad17STony Luck 	u32	slice1_asym_enable : 1;
127*5c71ad17STony Luck };
128*5c71ad17STony Luck 
129*5c71ad17STony Luck #define b_cr_asym_mem_region1_mchbar_port 0x4c
130*5c71ad17STony Luck #define b_cr_asym_mem_region1_mchbar_offset 0x6e44
131*5c71ad17STony Luck #define b_cr_asym_mem_region1_mchbar_r_opcode 0x00
132*5c71ad17STony Luck 
133*5c71ad17STony Luck /* Some bit fields moved in above two structs on Denverton */
134*5c71ad17STony Luck struct b_cr_asym_mem_region_denverton {
135*5c71ad17STony Luck 	u32	pad : 4;
136*5c71ad17STony Luck 	u32	slice_asym_base : 8;
137*5c71ad17STony Luck 	u32	pad_19_12 : 8;
138*5c71ad17STony Luck 	u32	slice_asym_limit : 8;
139*5c71ad17STony Luck 	u32	pad_28_30 : 3;
140*5c71ad17STony Luck 	u32	slice_asym_enable : 1;
141*5c71ad17STony Luck };
142*5c71ad17STony Luck 
143*5c71ad17STony Luck struct b_cr_asym_2way_mem_region_mchbar {
144*5c71ad17STony Luck 	u32	pad : 2;
145*5c71ad17STony Luck 	u32	asym_2way_intlv_mode : 2;
146*5c71ad17STony Luck 	u32	asym_2way_base : 11;
147*5c71ad17STony Luck 	u32	pad_16_15 : 2;
148*5c71ad17STony Luck 	u32	asym_2way_limit : 11;
149*5c71ad17STony Luck 	u32	pad_30_28 : 3;
150*5c71ad17STony Luck 	u32	asym_2way_interleave_enable : 1;
151*5c71ad17STony Luck };
152*5c71ad17STony Luck 
153*5c71ad17STony Luck #define b_cr_asym_2way_mem_region_mchbar_port 0x4c
154*5c71ad17STony Luck #define b_cr_asym_2way_mem_region_mchbar_offset 0x6e50
155*5c71ad17STony Luck #define b_cr_asym_2way_mem_region_mchbar_r_opcode 0x00
156*5c71ad17STony Luck 
157*5c71ad17STony Luck /* Apollo Lake d-unit */
158*5c71ad17STony Luck 
159*5c71ad17STony Luck struct d_cr_drp0 {
160*5c71ad17STony Luck 	u32	rken0 : 1;
161*5c71ad17STony Luck 	u32	rken1 : 1;
162*5c71ad17STony Luck 	u32	ddmen : 1;
163*5c71ad17STony Luck 	u32	rsvd3 : 1;
164*5c71ad17STony Luck 	u32	dwid : 2;
165*5c71ad17STony Luck 	u32	dden : 3;
166*5c71ad17STony Luck 	u32	rsvd13_9 : 5;
167*5c71ad17STony Luck 	u32	rsien : 1;
168*5c71ad17STony Luck 	u32	bahen : 1;
169*5c71ad17STony Luck 	u32	rsvd18_16 : 3;
170*5c71ad17STony Luck 	u32	caswizzle : 2;
171*5c71ad17STony Luck 	u32	eccen : 1;
172*5c71ad17STony Luck 	u32	dramtype : 3;
173*5c71ad17STony Luck 	u32	blmode : 3;
174*5c71ad17STony Luck 	u32	addrdec : 2;
175*5c71ad17STony Luck 	u32	dramdevice_pr : 2;
176*5c71ad17STony Luck };
177*5c71ad17STony Luck 
178*5c71ad17STony Luck #define d_cr_drp0_offset 0x1400
179*5c71ad17STony Luck #define d_cr_drp0_r_opcode 0x00
180*5c71ad17STony Luck 
181*5c71ad17STony Luck /* Denverton d-unit */
182*5c71ad17STony Luck 
183*5c71ad17STony Luck struct d_cr_dsch {
184*5c71ad17STony Luck 	u32	ch0en : 1;
185*5c71ad17STony Luck 	u32	ch1en : 1;
186*5c71ad17STony Luck 	u32	ddr4en : 1;
187*5c71ad17STony Luck 	u32	coldwake : 1;
188*5c71ad17STony Luck 	u32	newbypdis : 1;
189*5c71ad17STony Luck 	u32	chan_width : 1;
190*5c71ad17STony Luck 	u32	rsvd6_6 : 1;
191*5c71ad17STony Luck 	u32	ooodis : 1;
192*5c71ad17STony Luck 	u32	rsvd18_8 : 11;
193*5c71ad17STony Luck 	u32	ic : 1;
194*5c71ad17STony Luck 	u32	rsvd31_20 : 12;
195*5c71ad17STony Luck };
196*5c71ad17STony Luck 
197*5c71ad17STony Luck #define d_cr_dsch_port 0x16
198*5c71ad17STony Luck #define d_cr_dsch_offset 0x0
199*5c71ad17STony Luck #define d_cr_dsch_r_opcode 0x0
200*5c71ad17STony Luck 
201*5c71ad17STony Luck struct d_cr_ecc_ctrl {
202*5c71ad17STony Luck 	u32	eccen : 1;
203*5c71ad17STony Luck 	u32	rsvd31_1 : 31;
204*5c71ad17STony Luck };
205*5c71ad17STony Luck 
206*5c71ad17STony Luck #define d_cr_ecc_ctrl_offset 0x180
207*5c71ad17STony Luck #define d_cr_ecc_ctrl_r_opcode 0x0
208*5c71ad17STony Luck 
209*5c71ad17STony Luck struct d_cr_drp {
210*5c71ad17STony Luck 	u32	rken0 : 1;
211*5c71ad17STony Luck 	u32	rken1 : 1;
212*5c71ad17STony Luck 	u32	rken2 : 1;
213*5c71ad17STony Luck 	u32	rken3 : 1;
214*5c71ad17STony Luck 	u32	dimmdwid0 : 2;
215*5c71ad17STony Luck 	u32	dimmdden0 : 2;
216*5c71ad17STony Luck 	u32	dimmdwid1 : 2;
217*5c71ad17STony Luck 	u32	dimmdden1 : 2;
218*5c71ad17STony Luck 	u32	rsvd15_12 : 4;
219*5c71ad17STony Luck 	u32	dimmflip : 1;
220*5c71ad17STony Luck 	u32	rsvd31_17 : 15;
221*5c71ad17STony Luck };
222*5c71ad17STony Luck 
223*5c71ad17STony Luck #define d_cr_drp_offset 0x158
224*5c71ad17STony Luck #define d_cr_drp_r_opcode 0x0
225*5c71ad17STony Luck 
226*5c71ad17STony Luck struct d_cr_dmap {
227*5c71ad17STony Luck 	u32	ba0 : 5;
228*5c71ad17STony Luck 	u32	ba1 : 5;
229*5c71ad17STony Luck 	u32	bg0 : 5; /* if ddr3, ba2 = bg0 */
230*5c71ad17STony Luck 	u32	bg1 : 5; /* if ddr3, ba3 = bg1 */
231*5c71ad17STony Luck 	u32	rs0 : 5;
232*5c71ad17STony Luck 	u32	rs1 : 5;
233*5c71ad17STony Luck 	u32	rsvd : 2;
234*5c71ad17STony Luck };
235*5c71ad17STony Luck 
236*5c71ad17STony Luck #define d_cr_dmap_offset 0x174
237*5c71ad17STony Luck #define d_cr_dmap_r_opcode 0x0
238*5c71ad17STony Luck 
239*5c71ad17STony Luck struct d_cr_dmap1 {
240*5c71ad17STony Luck 	u32	ca11 : 6;
241*5c71ad17STony Luck 	u32	bxor : 1;
242*5c71ad17STony Luck 	u32	rsvd : 25;
243*5c71ad17STony Luck };
244*5c71ad17STony Luck 
245*5c71ad17STony Luck #define d_cr_dmap1_offset 0xb4
246*5c71ad17STony Luck #define d_cr_dmap1_r_opcode 0x0
247*5c71ad17STony Luck 
248*5c71ad17STony Luck struct d_cr_dmap2 {
249*5c71ad17STony Luck 	u32	row0 : 5;
250*5c71ad17STony Luck 	u32	row1 : 5;
251*5c71ad17STony Luck 	u32	row2 : 5;
252*5c71ad17STony Luck 	u32	row3 : 5;
253*5c71ad17STony Luck 	u32	row4 : 5;
254*5c71ad17STony Luck 	u32	row5 : 5;
255*5c71ad17STony Luck 	u32	rsvd : 2;
256*5c71ad17STony Luck };
257*5c71ad17STony Luck 
258*5c71ad17STony Luck #define d_cr_dmap2_offset 0x148
259*5c71ad17STony Luck #define d_cr_dmap2_r_opcode 0x0
260*5c71ad17STony Luck 
261*5c71ad17STony Luck struct d_cr_dmap3 {
262*5c71ad17STony Luck 	u32	row6 : 5;
263*5c71ad17STony Luck 	u32	row7 : 5;
264*5c71ad17STony Luck 	u32	row8 : 5;
265*5c71ad17STony Luck 	u32	row9 : 5;
266*5c71ad17STony Luck 	u32	row10 : 5;
267*5c71ad17STony Luck 	u32	row11 : 5;
268*5c71ad17STony Luck 	u32	rsvd : 2;
269*5c71ad17STony Luck };
270*5c71ad17STony Luck 
271*5c71ad17STony Luck #define d_cr_dmap3_offset 0x14c
272*5c71ad17STony Luck #define d_cr_dmap3_r_opcode 0x0
273*5c71ad17STony Luck 
274*5c71ad17STony Luck struct d_cr_dmap4 {
275*5c71ad17STony Luck 	u32	row12 : 5;
276*5c71ad17STony Luck 	u32	row13 : 5;
277*5c71ad17STony Luck 	u32	row14 : 5;
278*5c71ad17STony Luck 	u32	row15 : 5;
279*5c71ad17STony Luck 	u32	row16 : 5;
280*5c71ad17STony Luck 	u32	row17 : 5;
281*5c71ad17STony Luck 	u32	rsvd : 2;
282*5c71ad17STony Luck };
283*5c71ad17STony Luck 
284*5c71ad17STony Luck #define d_cr_dmap4_offset 0x150
285*5c71ad17STony Luck #define d_cr_dmap4_r_opcode 0x0
286*5c71ad17STony Luck 
287*5c71ad17STony Luck struct d_cr_dmap5 {
288*5c71ad17STony Luck 	u32	ca3 : 4;
289*5c71ad17STony Luck 	u32	ca4 : 4;
290*5c71ad17STony Luck 	u32	ca5 : 4;
291*5c71ad17STony Luck 	u32	ca6 : 4;
292*5c71ad17STony Luck 	u32	ca7 : 4;
293*5c71ad17STony Luck 	u32	ca8 : 4;
294*5c71ad17STony Luck 	u32	ca9 : 4;
295*5c71ad17STony Luck 	u32	rsvd : 4;
296*5c71ad17STony Luck };
297*5c71ad17STony Luck 
298*5c71ad17STony Luck #define d_cr_dmap5_offset 0x154
299*5c71ad17STony Luck #define d_cr_dmap5_r_opcode 0x0
300*5c71ad17STony Luck 
301*5c71ad17STony Luck #endif /* _PND2_REGS_H */
302