50 t->
reg[1] = (e->
tWR + 2 + (t->
tCWL - 1)) << 24 |
55 t->
reg[2] = 0x20200000 |
56 ((t->
tCWL - 1) << 24 |
61 NV_DEBUG(drm,
"Entry %d: 220: %08x %08x %08x\n", t->
id,
76 uint8_t unk18 = 1, unk20 = 0, unk21 = 0, tmp7_3;
81 switch (
min(len, (
u8) 22)) {
96 t->
reg[1] = (e->
tWR + 2 + (t->
tCWL - 1)) << 24 |
97 max(unk18, (
u8) 1) << 16 |
100 t->
reg[2] = ((t->
tCWL - 1) << 24 |
109 t->
reg[8] = boot->
reg[8] & 0xffffff00;
111 if (
P.version == 1) {
114 t->
reg[3] = (0x14 + e->
tCL) << 24 |
119 t->
reg[4] |= boot->
reg[4] & 0xffff0000;
121 t->
reg[6] = (0x33 - t->
tCWL) << 16 |
125 t->
reg[7] = 0x4000202 | (e->
tCL - 1) << 16;
128 if (pfb->
ram.type == NV_MEM_TYPE_DDR2) {
129 t->
reg[5] |= (e->
tCL + 3) << 8;
130 t->
reg[6] |= (t->
tCWL - 2) << 8;
131 t->
reg[8] |= (e->
tCL - 4);
133 t->
reg[5] |= (e->
tCL + 2) << 8;
135 t->
reg[8] |= (e->
tCL - 2);
141 t->
reg[3] = (0x30 + e->
tCL) << 24 |
142 (boot->
reg[3] & 0x00ff0000)|
143 (0xb + e->
tCL) << 8 |
146 t->
reg[4] |= (unk20 << 24 | unk21 << 16);
149 t->
reg[5] |= (t->
tCWL + 6) << 8;
151 t->
reg[6] = (0x5a + e->
tCL) << 16 |
155 tmp7_3 = (boot->
reg[7] & 0xff000000) >> 24;
156 t->
reg[7] = (tmp7_3 << 24) |
157 ((tmp7_3 - 6 + e->
tCL) << 16) |
161 NV_DEBUG(drm,
"Entry %d: 220: %08x %08x %08x %08x\n", t->
id,
163 NV_DEBUG(drm,
" 230: %08x %08x %08x %08x\n",
180 t->
reg[0] = (e->
tRP << 24 | (e->
tRAS & 0x7f) << 17 |
183 t->
reg[1] = (boot->
reg[1] & 0xff000000) |
184 (e->
tRCDWR & 0x0f) << 20 |
185 (e->
tRCDRD & 0x0f) << 14 |
189 t->
reg[2] = (boot->
reg[2] & 0xff0000ff) |
196 t->
reg[4] = (boot->
reg[4] & 0xfff00fff) |
197 (e->
tRRD&0x1f) << 15;
199 NV_DEBUG(drm,
"Entry %d: 290: %08x %08x %08x %08x\n", t->
id,
235 NV_WARN(drm,
"(%u) Invalid odt value, assuming disabled: %x",
240 t->
mr[0] = (boot->
mr[0] & 0x100f) |
243 t->
mr[1] = (boot->
mr[1] & 0x101fbb) |
244 (t->
odt & 0x1) << 2 |
252 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 5, 6, 6, 7, 7, 0, 0};
285 t->
mr[0] = (boot->
mr[0] & 0x180b) |
289 (nv_mem_wr_lut_ddr3[e->
tWR]) << 9;
290 t->
mr[1] = (boot->
mr[1] & 0x101dbb) |
291 (t->
odt & 0x1) << 2 |
292 (t->
odt & 0x2) << 5 |
294 t->
mr[2] = (boot->
mr[2] & 0x20ffb7) | (e->
tCWL - 5) << 3;
301 0, 0, 0, 0, 4, 5, 6, 7, 0, 1, 2, 3, 8, 9, 10, 11};
303 0, 0, 0, 0, 0, 2, 3, 8, 9, 10, 11, 0, 0, 1, 1, 0, 3};
332 NV_WARN(drm,
"(%u) Invalid odt value, assuming autocal: %x",
337 t->
mr[0] = (boot->
mr[0] & 0xe0b) |
339 ((nv_mem_cl_lut_gddr3[e->
tCL] & 0x7) << 4) |
340 ((nv_mem_cl_lut_gddr3[e->
tCL] & 0x8) >> 2);
343 (nv_mem_wr_lut_gddr3[e->
tWR] & 0xf) << 4;
344 t->
mr[2] = boot->
mr[2];
346 NV_DEBUG(drm,
"(%u) MR: %08x %08x %08x", t->
id,
347 t->
mr[0], t->
mr[1], t->
mr[2]);
378 NV_WARN(drm,
"(%u) Invalid odt value, assuming autocal: %x",
383 t->
mr[0] = (boot->
mr[0] & 0x007) |
384 ((e->
tCL - 5) << 3) |
386 t->
mr[1] = (boot->
mr[1] & 0x1007f0) |
407 if (!ptr || ptr[0] == 0x00) {
417 ret = nv40_mem_timing_calc(dev, freq, e, len, boot, t);
420 ret = nv50_mem_timing_calc(dev, freq, e, len, boot, t);
424 ret = nvc0_mem_timing_calc(dev, freq, e, len, boot, t);
431 switch (pfb->
ram.type * !ret) {
432 case NV_MEM_TYPE_GDDR3:
433 ret = nouveau_mem_gddr3_mr(dev, freq, e, len, boot, t);
435 case NV_MEM_TYPE_GDDR5:
436 ret = nouveau_mem_gddr5_mr(dev, freq, e, len, boot, t);
438 case NV_MEM_TYPE_DDR2:
439 ret = nouveau_mem_ddr2_mr(dev, freq, e, len, boot, t);
441 case NV_MEM_TYPE_DDR3:
442 ret = nouveau_mem_ddr3_mr(dev, freq, e, len, boot, t);
454 dll_off = !!(ramcfg[3] & 0x04);
456 dll_off = !!(ramcfg[2] & 0x40);
458 switch (pfb->
ram.type) {
459 case NV_MEM_TYPE_GDDR3:
460 t->
mr[1] &= ~0x00000040;
461 t->
mr[1] |= 0x00000040 * dll_off;
464 t->
mr[1] &= ~0x00000001;
465 t->
mr[1] |= 0x00000001 * dll_off;
478 u32 timing_base, timing_regs, mr_base;
482 timing_base = 0x10f290;
485 timing_base = 0x100220;
507 for(i = 0; i < timing_regs; i++)
508 t->
reg[i] = nv_rd32(device, timing_base + (0x04 * i));
512 t->
tCWL = ((nv_rd32(device, 0x100228) & 0x0f000000) >> 24) + 1;
514 t->
tCWL = ((nv_rd32(device, 0x10f294) & 0x00000f80) >> 7);
517 t->
mr[0] = nv_rd32(device, mr_base);
518 t->
mr[1] = nv_rd32(device, mr_base + 0x04);
519 t->
mr[2] = nv_rd32(device, mr_base + 0x20);
520 t->
mr[3] = nv_rd32(device, mr_base + 0x24);
525 switch (pfb->
ram.type) {
527 t->
odt |= (t->
mr[1] & 0x200) >> 7;
529 t->
odt |= (t->
mr[1] & 0x04) >> 2 |
530 (t->
mr[1] & 0x40) >> 5;
535 t->
odt = (t->
mr[1] & 0x0c) >> 2;
550 u32 tMRD = 1000, tCKSRE = 0, tCKSRX = 0, tXS = 0, tDLLK = 0;
551 u32 mr[3] = { info->
mr[0], info->
mr[1], info->
mr[2] };
554 switch (pfb->
ram.type) {
555 case NV_MEM_TYPE_DDR2:
557 mr1_dlloff = 0x00000001;
559 case NV_MEM_TYPE_DDR3:
563 mr1_dlloff = 0x00000001;
565 case NV_MEM_TYPE_GDDR3:
567 mr1_dlloff = 0x00000040;
570 NV_ERROR(drm,
"cannot reclock unsupported memtype\n");
575 switch (pfb->
ram.type) {
576 case NV_MEM_TYPE_GDDR3:
577 case NV_MEM_TYPE_DDR3:
578 mr[2] = exec->
mrg(exec, 2);
580 mr[1] = exec->
mrg(exec, 1);
581 mr[0] = exec->
mrg(exec, 0);
586 if (!(mr[1] & mr1_dlloff) && (info->
mr[1] & mr1_dlloff)) {
588 exec->
mrs (exec, 1, mr[1] | mr1_dlloff);
589 exec->
wait(exec, tMRD);
598 exec->
wait(exec, tCKSRE);
604 exec->
wait(exec, tCKSRX);
608 exec->
wait(exec, tXS);
609 exec->
wait(exec, tXS);
612 if (mr[2] != info->
mr[2]) {
613 exec->
mrs (exec, 2, info->
mr[2]);
614 exec->
wait(exec, tMRD);
617 if (mr[1] != info->
mr[1]) {
619 exec->
mrs (exec, 1, info->
mr[1] | (mr[1] & mr1_dlloff));
620 exec->
wait(exec, tMRD);
623 if (mr[0] != info->
mr[0]) {
624 exec->
mrs (exec, 0, info->
mr[0]);
625 exec->
wait(exec, tMRD);
632 if (!(info->
mr[1] & mr1_dlloff)) {
633 if (mr[1] & mr1_dlloff) {
634 exec->
mrs (exec, 1, info->
mr[1]);
635 exec->
wait(exec, tMRD);
637 exec->
mrs (exec, 0, info->
mr[0] | 0x00000100);
638 exec->
wait(exec, tMRD);
639 exec->
mrs (exec, 0, info->
mr[0] | 0x00000000);
640 exec->
wait(exec, tMRD);
641 exec->
wait(exec, tDLLK);
642 if (pfb->
ram.type == NV_MEM_TYPE_GDDR3)