Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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)