^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * longhaul.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * (C) 2003 Dave Jones.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * VIA-specific information
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) union msr_bcr2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) unsigned Reseved:19, // 18:0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) ESOFTBF:1, // 19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) Reserved2:3, // 22:20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) CLOCKMUL:4, // 26:23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) Reserved3:5; // 31:27
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) } bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) unsigned long val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) union msr_longhaul {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) unsigned RevisionID:4, // 3:0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) RevisionKey:4, // 7:4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) EnableSoftBusRatio:1, // 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) EnableSoftVID:1, // 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) EnableSoftBSEL:1, // 10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) Reserved:3, // 11:13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) SoftBusRatio4:1, // 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) VRMRev:1, // 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) SoftBusRatio:4, // 19:16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) SoftVID:5, // 24:20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) Reserved2:3, // 27:25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) SoftBSEL:2, // 29:28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) Reserved3:2, // 31:30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) MaxMHzBR:4, // 35:32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) MaximumVID:5, // 40:36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) MaxMHzFSB:2, // 42:41
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) MaxMHzBR4:1, // 43
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) Reserved4:4, // 47:44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) MinMHzBR:4, // 51:48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) MinimumVID:5, // 56:52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) MinMHzFSB:2, // 58:57
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) MinMHzBR4:1, // 59
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) Reserved5:4; // 63:60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) } bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) unsigned long long val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) * Clock ratio tables. Div/Mod by 10 to get ratio.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) * The eblcr values specify the ratio read from the CPU.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) * The mults values specify what to write to the CPU.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) * VIA C3 Samuel 1 & Samuel 2 (stepping 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) static const int samuel1_mults[16] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) -1, /* 0000 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 30, /* 0001 -> 3.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 40, /* 0010 -> 4.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) -1, /* 0011 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) -1, /* 0100 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 35, /* 0101 -> 3.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 45, /* 0110 -> 4.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 55, /* 0111 -> 5.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 60, /* 1000 -> 6.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 70, /* 1001 -> 7.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 80, /* 1010 -> 8.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 50, /* 1011 -> 5.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 65, /* 1100 -> 6.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 75, /* 1101 -> 7.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) -1, /* 1110 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) -1, /* 1111 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) static const int samuel1_eblcr[16] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 50, /* 0000 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 30, /* 0001 -> 3.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) 40, /* 0010 -> 4.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) -1, /* 0011 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 55, /* 0100 -> 5.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 35, /* 0101 -> 3.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) 45, /* 0110 -> 4.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) -1, /* 0111 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) -1, /* 1000 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) 70, /* 1001 -> 7.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) 80, /* 1010 -> 8.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) 60, /* 1011 -> 6.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) -1, /* 1100 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) 75, /* 1101 -> 7.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) -1, /* 1110 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) 65, /* 1111 -> 6.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) * VIA C3 Samuel2 Stepping 1->15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) static const int samuel2_eblcr[16] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 50, /* 0000 -> 5.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 30, /* 0001 -> 3.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 40, /* 0010 -> 4.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 100, /* 0011 -> 10.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 55, /* 0100 -> 5.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 35, /* 0101 -> 3.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 45, /* 0110 -> 4.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 110, /* 0111 -> 11.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 90, /* 1000 -> 9.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 70, /* 1001 -> 7.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 80, /* 1010 -> 8.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 60, /* 1011 -> 6.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 120, /* 1100 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 75, /* 1101 -> 7.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 130, /* 1110 -> 13.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 65, /* 1111 -> 6.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) * VIA C3 Ezra
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) static const int ezra_mults[16] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 100, /* 0000 -> 10.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 30, /* 0001 -> 3.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 40, /* 0010 -> 4.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 90, /* 0011 -> 9.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 95, /* 0100 -> 9.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 35, /* 0101 -> 3.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 45, /* 0110 -> 4.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 55, /* 0111 -> 5.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 60, /* 1000 -> 6.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) 70, /* 1001 -> 7.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 80, /* 1010 -> 8.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 50, /* 1011 -> 5.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 65, /* 1100 -> 6.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 75, /* 1101 -> 7.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 85, /* 1110 -> 8.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 120, /* 1111 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) static const int ezra_eblcr[16] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 50, /* 0000 -> 5.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 30, /* 0001 -> 3.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 40, /* 0010 -> 4.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 100, /* 0011 -> 10.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 55, /* 0100 -> 5.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 35, /* 0101 -> 3.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 45, /* 0110 -> 4.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 95, /* 0111 -> 9.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 90, /* 1000 -> 9.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 70, /* 1001 -> 7.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 80, /* 1010 -> 8.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 60, /* 1011 -> 6.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 120, /* 1100 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 75, /* 1101 -> 7.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 85, /* 1110 -> 8.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 65, /* 1111 -> 6.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) * VIA C3 (Ezra-T) [C5M].
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) static const int ezrat_mults[32] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 100, /* 0000 -> 10.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 30, /* 0001 -> 3.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 40, /* 0010 -> 4.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 90, /* 0011 -> 9.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 95, /* 0100 -> 9.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 35, /* 0101 -> 3.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 45, /* 0110 -> 4.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 55, /* 0111 -> 5.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 60, /* 1000 -> 6.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 70, /* 1001 -> 7.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 80, /* 1010 -> 8.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 50, /* 1011 -> 5.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 65, /* 1100 -> 6.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 75, /* 1101 -> 7.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 85, /* 1110 -> 8.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 120, /* 1111 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) -1, /* 0000 -> RESERVED (10.0x) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 110, /* 0001 -> 11.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) -1, /* 0010 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) -1, /* 0011 -> RESERVED (9.0x)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 105, /* 0100 -> 10.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 115, /* 0101 -> 11.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 125, /* 0110 -> 12.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 135, /* 0111 -> 13.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 140, /* 1000 -> 14.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 150, /* 1001 -> 15.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 160, /* 1010 -> 16.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 130, /* 1011 -> 13.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 145, /* 1100 -> 14.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 155, /* 1101 -> 15.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) -1, /* 1110 -> RESERVED (13.0x) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) -1, /* 1111 -> RESERVED (12.0x) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) static const int ezrat_eblcr[32] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 50, /* 0000 -> 5.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 30, /* 0001 -> 3.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 40, /* 0010 -> 4.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 100, /* 0011 -> 10.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 55, /* 0100 -> 5.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 35, /* 0101 -> 3.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 45, /* 0110 -> 4.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 95, /* 0111 -> 9.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 90, /* 1000 -> 9.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 70, /* 1001 -> 7.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 80, /* 1010 -> 8.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 60, /* 1011 -> 6.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 120, /* 1100 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 75, /* 1101 -> 7.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 85, /* 1110 -> 8.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 65, /* 1111 -> 6.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) -1, /* 0000 -> RESERVED (9.0x) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 110, /* 0001 -> 11.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 120, /* 0010 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) -1, /* 0011 -> RESERVED (10.0x)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 135, /* 0100 -> 13.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 115, /* 0101 -> 11.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 125, /* 0110 -> 12.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 105, /* 0111 -> 10.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 130, /* 1000 -> 13.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 150, /* 1001 -> 15.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 160, /* 1010 -> 16.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 140, /* 1011 -> 14.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) -1, /* 1100 -> RESERVED (12.0x) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 155, /* 1101 -> 15.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) -1, /* 1110 -> RESERVED (13.0x) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 145, /* 1111 -> 14.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) * VIA C3 Nehemiah */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) static const int nehemiah_mults[32] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 100, /* 0000 -> 10.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) -1, /* 0001 -> 16.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 40, /* 0010 -> 4.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 90, /* 0011 -> 9.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 95, /* 0100 -> 9.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) -1, /* 0101 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 45, /* 0110 -> 4.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 55, /* 0111 -> 5.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 60, /* 1000 -> 6.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 70, /* 1001 -> 7.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 80, /* 1010 -> 8.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 50, /* 1011 -> 5.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 65, /* 1100 -> 6.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 75, /* 1101 -> 7.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 85, /* 1110 -> 8.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 120, /* 1111 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) -1, /* 0000 -> 10.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 110, /* 0001 -> 11.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) -1, /* 0010 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) -1, /* 0011 -> 9.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 105, /* 0100 -> 10.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 115, /* 0101 -> 11.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 125, /* 0110 -> 12.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 135, /* 0111 -> 13.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 140, /* 1000 -> 14.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 150, /* 1001 -> 15.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 160, /* 1010 -> 16.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 130, /* 1011 -> 13.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 145, /* 1100 -> 14.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 155, /* 1101 -> 15.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) -1, /* 1110 -> RESERVED (13.0x) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) -1, /* 1111 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) static const int nehemiah_eblcr[32] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 50, /* 0000 -> 5.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 160, /* 0001 -> 16.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 40, /* 0010 -> 4.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 100, /* 0011 -> 10.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 55, /* 0100 -> 5.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) -1, /* 0101 -> RESERVED */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 45, /* 0110 -> 4.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) 95, /* 0111 -> 9.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 90, /* 1000 -> 9.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 70, /* 1001 -> 7.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 80, /* 1010 -> 8.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 60, /* 1011 -> 6.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 120, /* 1100 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 75, /* 1101 -> 7.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 85, /* 1110 -> 8.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 65, /* 1111 -> 6.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 90, /* 0000 -> 9.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 110, /* 0001 -> 11.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 120, /* 0010 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 100, /* 0011 -> 10.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 135, /* 0100 -> 13.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 115, /* 0101 -> 11.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 125, /* 0110 -> 12.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 105, /* 0111 -> 10.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 130, /* 1000 -> 13.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 150, /* 1001 -> 15.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 160, /* 1010 -> 16.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 140, /* 1011 -> 14.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 120, /* 1100 -> 12.0x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 155, /* 1101 -> 15.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) -1, /* 1110 -> RESERVED (13.0x) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 145 /* 1111 -> 14.5x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) * Voltage scales. Div/Mod by 1000 to get actual voltage.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) * Which scale to use depends on the VRM type in use.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) struct mV_pos {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) unsigned short mV;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) unsigned short pos;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) static const struct mV_pos vrm85_mV[32] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) {1250, 8}, {1200, 6}, {1150, 4}, {1100, 2},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) {1050, 0}, {1800, 30}, {1750, 28}, {1700, 26},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) {1650, 24}, {1600, 22}, {1550, 20}, {1500, 18},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) {1450, 16}, {1400, 14}, {1350, 12}, {1300, 10},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) {1275, 9}, {1225, 7}, {1175, 5}, {1125, 3},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) {1075, 1}, {1825, 31}, {1775, 29}, {1725, 27},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) {1675, 25}, {1625, 23}, {1575, 21}, {1525, 19},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) {1475, 17}, {1425, 15}, {1375, 13}, {1325, 11}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) static const unsigned char mV_vrm85[32] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 0x04, 0x14, 0x03, 0x13, 0x02, 0x12, 0x01, 0x11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 0x00, 0x10, 0x0f, 0x1f, 0x0e, 0x1e, 0x0d, 0x1d,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 0x0c, 0x1c, 0x0b, 0x1b, 0x0a, 0x1a, 0x09, 0x19,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 0x08, 0x18, 0x07, 0x17, 0x06, 0x16, 0x05, 0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) static const struct mV_pos mobilevrm_mV[32] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) {1750, 31}, {1700, 30}, {1650, 29}, {1600, 28},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) {1550, 27}, {1500, 26}, {1450, 25}, {1400, 24},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) {1350, 23}, {1300, 22}, {1250, 21}, {1200, 20},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) {1150, 19}, {1100, 18}, {1050, 17}, {1000, 16},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) {975, 15}, {950, 14}, {925, 13}, {900, 12},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) {875, 11}, {850, 10}, {825, 9}, {800, 8},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) {775, 7}, {750, 6}, {725, 5}, {700, 4},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) {675, 3}, {650, 2}, {625, 1}, {600, 0}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) static const unsigned char mV_mobilevrm[32] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x19, 0x18,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 0x17, 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)