Stefan Roese | f8d25d7 | 2015-01-19 11:33:40 +0100 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) Marvell International Ltd. and its affiliates |
| 3 | * |
| 4 | * SPDX-License-Identifier: GPL-2.0 |
| 5 | */ |
| 6 | |
| 7 | #ifndef __AXP_VARS_H |
| 8 | #define __AXP_VARS_H |
| 9 | |
| 10 | #include "ddr3_axp_config.h" |
| 11 | #include "ddr3_axp_mc_static.h" |
| 12 | #include "ddr3_axp_training_static.h" |
| 13 | |
| 14 | MV_DRAM_MODES ddr_modes[MV_DDR3_MODES_NUMBER] = { |
| 15 | /* Conf name CPUFreq FabFreq Chip ID Chip/Board MC regs Training Values */ |
| 16 | /* db board values: */ |
| 17 | {"db_800-400", 0xA, 0x5, 0x0, A0, ddr3_A0_db_400, NULL}, |
| 18 | {"db_1200-300", 0x2, 0xC, 0x0, A0, ddr3_A0_db_400, NULL}, |
| 19 | {"db_1200-600", 0x2, 0x5, 0x0, A0, NULL, NULL}, |
| 20 | {"db_1333-667", 0x3, 0x5, 0x0, A0, ddr3_A0_db_667, ddr3_db_rev2_667}, |
| 21 | {"db_1600-800", 0xB, 0x5, 0x0, A0, ddr3_A0_db_667, ddr3_db_rev2_800}, |
| 22 | {"amc_1333-667", 0x3, 0x5, 0x0, A0_AMC, ddr3_A0_AMC_667, NULL}, |
| 23 | {"db_667-667", 0x9, 0x13, 0x0, Z1, ddr3_Z1_db_600, ddr3_db_667}, |
| 24 | {"db_800-400", 0xA, 0x1, 0x0, Z1, ddr3_Z1_db_300, ddr3_db_400}, |
| 25 | {"db_1066-533", 0x1, 0x1, 0x0, Z1, ddr3_Z1_db_300, ddr3_db_533}, |
| 26 | {"db_1200-300", 0x2, 0xC, 0x0, Z1, ddr3_Z1_db_300, ddr3_db_667}, |
| 27 | {"db_1200-600", 0x2, 0x5, 0x0, Z1, ddr3_Z1_db_600, NULL}, |
| 28 | {"db_1333-333", 0x3, 0xC, 0x0, Z1, ddr3_Z1_db_300, ddr3_db_400}, |
| 29 | {"db_1333-667", 0x3, 0x5, 0x0, Z1, ddr3_Z1_db_600, ddr3_db_667}, |
| 30 | /* pcac board values (Z1 device): */ |
| 31 | {"pcac_1200-600", 0x2, 0x5, 0x0, Z1_PCAC, ddr3_Z1_db_600, |
| 32 | ddr3_pcac_600}, |
| 33 | /* rd board values (Z1 device): */ |
| 34 | {"rd_667_0", 0x3, 0x5, 0x0, Z1_RD_SLED, ddr3_Z1_db_600, ddr3_rd_667_0}, |
| 35 | {"rd_667_1", 0x3, 0x5, 0x1, Z1_RD_SLED, ddr3_Z1_db_600, ddr3_rd_667_1}, |
| 36 | {"rd_667_2", 0x3, 0x5, 0x2, Z1_RD_SLED, ddr3_Z1_db_600, ddr3_rd_667_2}, |
| 37 | {"rd_667_3", 0x3, 0x5, 0x3, Z1_RD_SLED, ddr3_Z1_db_600, ddr3_rd_667_3} |
| 38 | }; |
| 39 | |
| 40 | /* ODT settings - if needed update the following tables: (ODT_OPT - represents the CS configuration bitmap) */ |
| 41 | |
| 42 | u16 odt_static[ODT_OPT][MAX_CS] = { /* NearEnd/FarEnd */ |
| 43 | {0, 0, 0, 0}, /* 0000 0/0 - Not supported */ |
| 44 | {ODT40, 0, 0, 0}, /* 0001 0/1 */ |
| 45 | {0, 0, 0, 0}, /* 0010 0/0 - Not supported */ |
| 46 | {ODT40, ODT40, 0, 0}, /* 0011 0/2 */ |
| 47 | {0, 0, ODT40, 0}, /* 0100 1/0 */ |
| 48 | {ODT30, 0, ODT30, 0}, /* 0101 1/1 */ |
| 49 | {0, 0, 0, 0}, /* 0110 0/0 - Not supported */ |
| 50 | {ODT120, ODT20, ODT20, 0}, /* 0111 1/2 */ |
| 51 | {0, 0, 0, 0}, /* 1000 0/0 - Not supported */ |
| 52 | {0, 0, 0, 0}, /* 1001 0/0 - Not supported */ |
| 53 | {0, 0, 0, 0}, /* 1010 0/0 - Not supported */ |
| 54 | {0, 0, 0, 0}, /* 1011 0/0 - Not supported */ |
| 55 | {0, 0, ODT40, 0}, /* 1100 2/0 */ |
| 56 | {ODT20, 0, ODT120, ODT20}, /* 1101 2/1 */ |
| 57 | {0, 0, 0, 0}, /* 1110 0/0 - Not supported */ |
| 58 | {ODT120, ODT30, ODT120, ODT30} /* 1111 2/2 */ |
| 59 | }; |
| 60 | |
| 61 | u16 odt_dynamic[ODT_OPT][MAX_CS] = { /* NearEnd/FarEnd */ |
| 62 | {0, 0, 0, 0}, /* 0000 0/0 */ |
| 63 | {0, 0, 0, 0}, /* 0001 0/1 */ |
| 64 | {0, 0, 0, 0}, /* 0010 0/0 - Not supported */ |
| 65 | {0, 0, 0, 0}, /* 0011 0/2 */ |
| 66 | {0, 0, 0, 0}, /* 0100 1/0 */ |
| 67 | {ODT120D, 0, ODT120D, 0}, /* 0101 1/1 */ |
| 68 | {0, 0, 0, 0}, /* 0110 0/0 - Not supported */ |
| 69 | {0, 0, ODT120D, 0}, /* 0111 1/2 */ |
| 70 | {0, 0, 0, 0}, /* 1000 0/0 - Not supported */ |
| 71 | {0, 0, 0, 0}, /* 1001 0/0 - Not supported */ |
| 72 | {0, 0, 0, 0}, /* 1010 0/0 - Not supported */ |
| 73 | {0, 0, 0, 0}, /* 1011 0/0 - Not supported */ |
| 74 | {0, 0, 0, 0}, /* 1100 2/0 */ |
| 75 | {ODT120D, 0, 0, 0}, /* 1101 2/1 */ |
| 76 | {0, 0, 0, 0}, /* 1110 0/0 - Not supported */ |
| 77 | {0, 0, 0, 0} /* 1111 2/2 */ |
| 78 | }; |
| 79 | |
| 80 | u32 odt_config[ODT_OPT] = { |
| 81 | 0, 0x00010000, 0, 0x00030000, 0x04000000, 0x05050104, 0, 0x07430340, 0, |
| 82 | 0, 0, 0, |
| 83 | 0x30000, 0x1C0D100C, 0, 0x3CC330C0 |
| 84 | }; |
| 85 | |
| 86 | /* |
| 87 | * User can manually set SPD values (in case SPD is not available on |
| 88 | * DIMM/System). |
| 89 | * SPD Values can simplify calculating the DUNIT registers values |
| 90 | */ |
| 91 | u8 spd_data[SPD_SIZE] = { |
| 92 | /* AXP DB Board DIMM SPD Values - manually set */ |
| 93 | 0x92, 0x10, 0x0B, 0x2, 0x3, 0x19, 0x0, 0x9, 0x09, 0x52, 0x1, 0x8, 0x0C, |
| 94 | 0x0, 0x7E, 0x0, 0x69, 0x78, |
| 95 | 0x69, 0x30, 0x69, 0x11, 0x20, 0x89, 0x0, 0x5, 0x3C, 0x3C, 0x0, 0xF0, |
| 96 | 0x82, 0x5, 0x80, 0x0, 0x0, 0x0, |
| 97 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 98 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 99 | 0x0, 0x0, 0x0, 0x0, 0x0F, 0x1, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 100 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 101 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 102 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 103 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 104 | 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, |
| 105 | 0x0, 0x80, 0x2C, 0x1, 0x10, 0x23, 0x35, 0x28, 0xEB, 0xCA, 0x19, 0x8F |
| 106 | }; |
| 107 | |
| 108 | /* |
| 109 | * Controller Specific configurations Starts Here - DO NOT MODIFY |
| 110 | */ |
| 111 | |
| 112 | /* Frequency - values are 1/HCLK in ps */ |
| 113 | u32 cpu_fab_clk_to_hclk[FAB_OPT][CLK_CPU] = |
| 114 | /* CPU Frequency: |
| 115 | 1000 1066 1200 1333 1500 1666 1800 2000 600 667 800 1600 Fabric */ |
| 116 | { |
| 117 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 118 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 3000, 2500, 0}, |
| 119 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 4500, 3750, 0}, |
| 120 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 121 | {0, 0, 2500, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 122 | {4000, 3750, 3333, 3000, 2666, 2400, 0, 0, 0, 0, 5000, 2500}, |
| 123 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 3000, 0, 0}, |
| 124 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 125 | {2500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 126 | {0, 0, 5000, 0, 4000, 0, 0, 0, 0, 0, 0, 3750}, |
| 127 | {5000, 0, 0, 3750, 3333, 0, 0, 0, 0, 0, 0, 3125}, |
| 128 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 129 | {0, 0, 3330, 3000, 0, 0, 0, 0, 0, 0, 0, 2500}, |
| 130 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3750}, |
| 131 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 132 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 133 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 134 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 135 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 136 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 3000, 2500, 0}, |
| 137 | {3000, 0, 2500, 0, 0, 0, 0, 0, 0, 0, 3750, 0} |
| 138 | }; |
| 139 | |
| 140 | u32 cpu_ddr_ratios[FAB_OPT][CLK_CPU] = |
| 141 | /* CPU Frequency: |
| 142 | 1000 1066 1200 1333 1500 1666 1800 2000 600 667 800 1600 Fabric */ |
| 143 | { |
| 144 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 145 | {0, 0, 0, 0, 0, 0, 0, 0, 0, DDR_333, DDR_400, 0}, |
| 146 | {0, 0, 0, 0, 0, 0, 0, 0, 0, DDR_444, DDR_533, 0}, |
| 147 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 148 | {0, 0, DDR_400, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 149 | {DDR_500, DDR_533, DDR_600, DDR_666, DDR_750, DDR_833, 0, 0, 0, 0, |
| 150 | DDR_400, DDR_800}, |
| 151 | {0, 0, 0, 0, 0, 0, 0, 0, 0, DDR_333, 0, 0}, |
| 152 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 153 | {DDR_400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 154 | {0, 0, DDR_400, 0, DDR_500, 0, 0, 0, 0, 0, 0, DDR_533}, |
| 155 | {DDR_400, 0, 0, DDR_533, DDR_600, 0, 0, 0, 0, 0, 0, DDR_640}, |
| 156 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 157 | {0, 0, DDR_300, DDR_333, 0, 0, 0, 0, 0, 0, 0, DDR_400}, |
| 158 | {0, 0, 0, 0, 0, 0, DDR_600, DDR_666, 0, 0, 0, DDR_533}, |
| 159 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 160 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 161 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 162 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 163 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
| 164 | {0, 0, 0, 0, 0, 0, 0, 0, 0, DDR_666, DDR_800, 0}, |
| 165 | {DDR_666, 0, DDR_800, 0, 0, 0, 0, 0, 0, 0, DDR_533, 0} |
| 166 | }; |
| 167 | |
| 168 | u8 div_ratio1to1[CLK_VCO][CLK_DDR] = |
| 169 | /* DDR Frequency: |
| 170 | 100 300 360 400 444 500 533 600 666 750 800 833 */ |
| 171 | { {0xA, 3, 0, 3, 0, 2, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1000 */ |
| 172 | {0xB, 3, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1066 */ |
| 173 | {0xC, 4, 0, 3, 0, 0, 0, 2, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1200 */ |
| 174 | {0xD, 4, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0}, /* 1:1 CLK_CPU_1333 */ |
| 175 | {0xF, 5, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1500 */ |
| 176 | {0x11, 5, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1666 */ |
| 177 | {0x12, 6, 5, 4, 0, 0, 0, 3, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1800 */ |
| 178 | {0x14, 7, 0, 5, 0, 4, 0, 0, 3, 0, 0, 0}, /* 1:1 CLK_CPU_2000 */ |
| 179 | {0x6, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_600 */ |
| 180 | {0x6, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_667 */ |
| 181 | {0x8, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_800 */ |
| 182 | {0x10, 5, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1600 */ |
| 183 | {0x14, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1000 VCO_2000 */ |
| 184 | {0x15, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1066 VCO_2133 */ |
| 185 | {0x18, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1200 VCO_2400 */ |
| 186 | {0x1A, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1333 VCO_2666 */ |
| 187 | {0x1E, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1500 VCO_3000 */ |
| 188 | {0x21, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1666 VCO_3333 */ |
| 189 | {0x24, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_1800 VCO_3600 */ |
| 190 | {0x28, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_2000 VCO_4000 */ |
| 191 | {0xC, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_600 VCO_1200 */ |
| 192 | {0xD, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_667 VCO_1333 */ |
| 193 | {0x10, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0}, /* 1:1 CLK_CPU_800 VCO_1600 */ |
| 194 | {0x20, 10, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0} /* 1:1 CLK_CPU_1600 VCO_3200 */ |
| 195 | }; |
| 196 | |
| 197 | u8 div_ratio2to1[CLK_VCO][CLK_DDR] = |
| 198 | /* DDR Frequency: |
| 199 | 100 300 360 400 444 500 533 600 666 750 800 833 */ |
| 200 | { {0, 0, 0, 0, 0, 2, 0, 0, 3, 0, 0, 0}, /* 2:1 CLK_CPU_1000 */ |
| 201 | {0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1066 */ |
| 202 | {0, 0, 0, 3, 5, 0, 0, 2, 0, 0, 3, 3}, /* 2:1 CLK_CPU_1200 */ |
| 203 | {0, 0, 0, 0, 0, 0, 5, 0, 2, 0, 3, 0}, /* 2:1 CLK_CPU_1333 */ |
| 204 | {0, 0, 0, 0, 0, 3, 0, 5, 0, 2, 0, 0}, /* 2:1 CLK_CPU_1500 */ |
| 205 | {0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 2}, /* 2:1 CLK_CPU_1666 */ |
| 206 | {0, 0, 0, 0, 0, 0, 0, 3, 0, 5, 0, 0}, /* 2:1 CLK_CPU_1800 */ |
| 207 | {0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 5}, /* 2:1 CLK_CPU_2000 */ |
| 208 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_600 */ |
| 209 | {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, /* 2:1 CLK_CPU_667 */ |
| 210 | {0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 0}, /* 2:1 CLK_CPU_800 */ |
| 211 | {0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 2, 0}, /* 2:1 CLK_CPU_1600 */ |
| 212 | {0, 0, 0, 5, 0, 0, 0, 0, 3, 0, 0, 0}, /* 2:1 CLK_CPU_1000 VCO_2000 */ |
| 213 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1066 VCO_2133 */ |
| 214 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0}, /* 2:1 CLK_CPU_1200 VCO_2400 */ |
| 215 | {0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1333 VCO_2666 */ |
| 216 | {0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1500 VCO_3000 */ |
| 217 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1666 VCO_3333 */ |
| 218 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_1800 VCO_3600 */ |
| 219 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_2000 VCO_4000 */ |
| 220 | {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_600 VCO_1200 */ |
| 221 | {0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_667 VCO_1333 */ |
| 222 | {0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0}, /* 2:1 CLK_CPU_800 VCO_1600 */ |
| 223 | {0, 0, 0, 0, 0, 0, 0, 5, 5, 0, 0, 0} /* 2:1 CLK_CPU_1600 VCO_3200 */ |
| 224 | }; |
| 225 | |
| 226 | #endif /* __AXP_VARS_H */ |