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