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