longhaul.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. /*
  2. * longhaul.h
  3. * (C) 2003 Dave Jones.
  4. *
  5. * Licensed under the terms of the GNU GPL License version 2.
  6. *
  7. * VIA-specific information
  8. */
  9. union msr_bcr2 {
  10. struct {
  11. unsigned Reseved:19, // 18:0
  12. ESOFTBF:1, // 19
  13. Reserved2:3, // 22:20
  14. CLOCKMUL:4, // 26:23
  15. Reserved3:5; // 31:27
  16. } bits;
  17. unsigned long val;
  18. };
  19. union msr_longhaul {
  20. struct {
  21. unsigned RevisionID:4, // 3:0
  22. RevisionKey:4, // 7:4
  23. EnableSoftBusRatio:1, // 8
  24. EnableSoftVID:1, // 9
  25. EnableSoftBSEL:1, // 10
  26. Reserved:3, // 11:13
  27. SoftBusRatio4:1, // 14
  28. VRMRev:1, // 15
  29. SoftBusRatio:4, // 19:16
  30. SoftVID:5, // 24:20
  31. Reserved2:3, // 27:25
  32. SoftBSEL:2, // 29:28
  33. Reserved3:2, // 31:30
  34. MaxMHzBR:4, // 35:32
  35. MaximumVID:5, // 40:36
  36. MaxMHzFSB:2, // 42:41
  37. MaxMHzBR4:1, // 43
  38. Reserved4:4, // 47:44
  39. MinMHzBR:4, // 51:48
  40. MinimumVID:5, // 56:52
  41. MinMHzFSB:2, // 58:57
  42. MinMHzBR4:1, // 59
  43. Reserved5:4; // 63:60
  44. } bits;
  45. unsigned long long val;
  46. };
  47. /*
  48. * Clock ratio tables. Div/Mod by 10 to get ratio.
  49. * The eblcr ones specify the ratio read from the CPU.
  50. * The clock_ratio ones specify what to write to the CPU.
  51. */
  52. /*
  53. * VIA C3 Samuel 1 & Samuel 2 (stepping 0)
  54. */
  55. static int __initdata samuel1_clock_ratio[16] = {
  56. -1, /* 0000 -> RESERVED */
  57. 30, /* 0001 -> 3.0x */
  58. 40, /* 0010 -> 4.0x */
  59. -1, /* 0011 -> RESERVED */
  60. -1, /* 0100 -> RESERVED */
  61. 35, /* 0101 -> 3.5x */
  62. 45, /* 0110 -> 4.5x */
  63. 55, /* 0111 -> 5.5x */
  64. 60, /* 1000 -> 6.0x */
  65. 70, /* 1001 -> 7.0x */
  66. 80, /* 1010 -> 8.0x */
  67. 50, /* 1011 -> 5.0x */
  68. 65, /* 1100 -> 6.5x */
  69. 75, /* 1101 -> 7.5x */
  70. -1, /* 1110 -> RESERVED */
  71. -1, /* 1111 -> RESERVED */
  72. };
  73. static int __initdata samuel1_eblcr[16] = {
  74. 50, /* 0000 -> RESERVED */
  75. 30, /* 0001 -> 3.0x */
  76. 40, /* 0010 -> 4.0x */
  77. -1, /* 0011 -> RESERVED */
  78. 55, /* 0100 -> 5.5x */
  79. 35, /* 0101 -> 3.5x */
  80. 45, /* 0110 -> 4.5x */
  81. -1, /* 0111 -> RESERVED */
  82. -1, /* 1000 -> RESERVED */
  83. 70, /* 1001 -> 7.0x */
  84. 80, /* 1010 -> 8.0x */
  85. 60, /* 1011 -> 6.0x */
  86. -1, /* 1100 -> RESERVED */
  87. 75, /* 1101 -> 7.5x */
  88. -1, /* 1110 -> RESERVED */
  89. 65, /* 1111 -> 6.5x */
  90. };
  91. /*
  92. * VIA C3 Samuel2 Stepping 1->15
  93. */
  94. static int __initdata samuel2_eblcr[16] = {
  95. 50, /* 0000 -> 5.0x */
  96. 30, /* 0001 -> 3.0x */
  97. 40, /* 0010 -> 4.0x */
  98. 100, /* 0011 -> 10.0x */
  99. 55, /* 0100 -> 5.5x */
  100. 35, /* 0101 -> 3.5x */
  101. 45, /* 0110 -> 4.5x */
  102. 110, /* 0111 -> 11.0x */
  103. 90, /* 1000 -> 9.0x */
  104. 70, /* 1001 -> 7.0x */
  105. 80, /* 1010 -> 8.0x */
  106. 60, /* 1011 -> 6.0x */
  107. 120, /* 1100 -> 12.0x */
  108. 75, /* 1101 -> 7.5x */
  109. 130, /* 1110 -> 13.0x */
  110. 65, /* 1111 -> 6.5x */
  111. };
  112. /*
  113. * VIA C3 Ezra
  114. */
  115. static int __initdata ezra_clock_ratio[16] = {
  116. 100, /* 0000 -> 10.0x */
  117. 30, /* 0001 -> 3.0x */
  118. 40, /* 0010 -> 4.0x */
  119. 90, /* 0011 -> 9.0x */
  120. 95, /* 0100 -> 9.5x */
  121. 35, /* 0101 -> 3.5x */
  122. 45, /* 0110 -> 4.5x */
  123. 55, /* 0111 -> 5.5x */
  124. 60, /* 1000 -> 6.0x */
  125. 70, /* 1001 -> 7.0x */
  126. 80, /* 1010 -> 8.0x */
  127. 50, /* 1011 -> 5.0x */
  128. 65, /* 1100 -> 6.5x */
  129. 75, /* 1101 -> 7.5x */
  130. 85, /* 1110 -> 8.5x */
  131. 120, /* 1111 -> 12.0x */
  132. };
  133. static int __initdata ezra_eblcr[16] = {
  134. 50, /* 0000 -> 5.0x */
  135. 30, /* 0001 -> 3.0x */
  136. 40, /* 0010 -> 4.0x */
  137. 100, /* 0011 -> 10.0x */
  138. 55, /* 0100 -> 5.5x */
  139. 35, /* 0101 -> 3.5x */
  140. 45, /* 0110 -> 4.5x */
  141. 95, /* 0111 -> 9.5x */
  142. 90, /* 1000 -> 9.0x */
  143. 70, /* 1001 -> 7.0x */
  144. 80, /* 1010 -> 8.0x */
  145. 60, /* 1011 -> 6.0x */
  146. 120, /* 1100 -> 12.0x */
  147. 75, /* 1101 -> 7.5x */
  148. 85, /* 1110 -> 8.5x */
  149. 65, /* 1111 -> 6.5x */
  150. };
  151. /*
  152. * VIA C3 (Ezra-T) [C5M].
  153. */
  154. static int __initdata ezrat_clock_ratio[32] = {
  155. 100, /* 0000 -> 10.0x */
  156. 30, /* 0001 -> 3.0x */
  157. 40, /* 0010 -> 4.0x */
  158. 90, /* 0011 -> 9.0x */
  159. 95, /* 0100 -> 9.5x */
  160. 35, /* 0101 -> 3.5x */
  161. 45, /* 0110 -> 4.5x */
  162. 55, /* 0111 -> 5.5x */
  163. 60, /* 1000 -> 6.0x */
  164. 70, /* 1001 -> 7.0x */
  165. 80, /* 1010 -> 8.0x */
  166. 50, /* 1011 -> 5.0x */
  167. 65, /* 1100 -> 6.5x */
  168. 75, /* 1101 -> 7.5x */
  169. 85, /* 1110 -> 8.5x */
  170. 120, /* 1111 -> 12.0x */
  171. -1, /* 0000 -> RESERVED (10.0x) */
  172. 110, /* 0001 -> 11.0x */
  173. 120, /* 0010 -> 12.0x */
  174. -1, /* 0011 -> RESERVED (9.0x)*/
  175. 105, /* 0100 -> 10.5x */
  176. 115, /* 0101 -> 11.5x */
  177. 125, /* 0110 -> 12.5x */
  178. 135, /* 0111 -> 13.5x */
  179. 140, /* 1000 -> 14.0x */
  180. 150, /* 1001 -> 15.0x */
  181. 160, /* 1010 -> 16.0x */
  182. 130, /* 1011 -> 13.0x */
  183. 145, /* 1100 -> 14.5x */
  184. 155, /* 1101 -> 15.5x */
  185. -1, /* 1110 -> RESERVED (13.0x) */
  186. -1, /* 1111 -> RESERVED (12.0x) */
  187. };
  188. static int __initdata ezrat_eblcr[32] = {
  189. 50, /* 0000 -> 5.0x */
  190. 30, /* 0001 -> 3.0x */
  191. 40, /* 0010 -> 4.0x */
  192. 100, /* 0011 -> 10.0x */
  193. 55, /* 0100 -> 5.5x */
  194. 35, /* 0101 -> 3.5x */
  195. 45, /* 0110 -> 4.5x */
  196. 95, /* 0111 -> 9.5x */
  197. 90, /* 1000 -> 9.0x */
  198. 70, /* 1001 -> 7.0x */
  199. 80, /* 1010 -> 8.0x */
  200. 60, /* 1011 -> 6.0x */
  201. 120, /* 1100 -> 12.0x */
  202. 75, /* 1101 -> 7.5x */
  203. 85, /* 1110 -> 8.5x */
  204. 65, /* 1111 -> 6.5x */
  205. -1, /* 0000 -> RESERVED (9.0x) */
  206. 110, /* 0001 -> 11.0x */
  207. 120, /* 0010 -> 12.0x */
  208. -1, /* 0011 -> RESERVED (10.0x)*/
  209. 135, /* 0100 -> 13.5x */
  210. 115, /* 0101 -> 11.5x */
  211. 125, /* 0110 -> 12.5x */
  212. 105, /* 0111 -> 10.5x */
  213. 130, /* 1000 -> 13.0x */
  214. 150, /* 1001 -> 15.0x */
  215. 160, /* 1010 -> 16.0x */
  216. 140, /* 1011 -> 14.0x */
  217. -1, /* 1100 -> RESERVED (12.0x) */
  218. 155, /* 1101 -> 15.5x */
  219. -1, /* 1110 -> RESERVED (13.0x) */
  220. 145, /* 1111 -> 14.5x */
  221. };
  222. /*
  223. * VIA C3 Nehemiah */
  224. static int __initdata nehemiah_a_clock_ratio[32] = {
  225. 100, /* 0000 -> 10.0x */
  226. 160, /* 0001 -> 16.0x */
  227. -1, /* 0010 -> RESERVED */
  228. 90, /* 0011 -> 9.0x */
  229. 95, /* 0100 -> 9.5x */
  230. -1, /* 0101 -> RESERVED */
  231. -1, /* 0110 -> RESERVED */
  232. 55, /* 0111 -> 5.5x */
  233. 60, /* 1000 -> 6.0x */
  234. 70, /* 1001 -> 7.0x */
  235. 80, /* 1010 -> 8.0x */
  236. 50, /* 1011 -> 5.0x */
  237. 65, /* 1100 -> 6.5x */
  238. 75, /* 1101 -> 7.5x */
  239. 85, /* 1110 -> 8.5x */
  240. 120, /* 1111 -> 12.0x */
  241. 100, /* 0000 -> 10.0x */
  242. -1, /* 0001 -> RESERVED */
  243. 120, /* 0010 -> 12.0x */
  244. 90, /* 0011 -> 9.0x */
  245. 105, /* 0100 -> 10.5x */
  246. 115, /* 0101 -> 11.5x */
  247. 125, /* 0110 -> 12.5x */
  248. 135, /* 0111 -> 13.5x */
  249. 140, /* 1000 -> 14.0x */
  250. 150, /* 1001 -> 15.0x */
  251. 160, /* 1010 -> 16.0x */
  252. 130, /* 1011 -> 13.0x */
  253. 145, /* 1100 -> 14.5x */
  254. 155, /* 1101 -> 15.5x */
  255. -1, /* 1110 -> RESERVED (13.0x) */
  256. 120, /* 1111 -> 12.0x */
  257. };
  258. static int __initdata nehemiah_b_clock_ratio[32] = {
  259. 100, /* 0000 -> 10.0x */
  260. 160, /* 0001 -> 16.0x */
  261. -1, /* 0010 -> RESERVED */
  262. 90, /* 0011 -> 9.0x */
  263. 95, /* 0100 -> 9.5x */
  264. -1, /* 0101 -> RESERVED */
  265. -1, /* 0110 -> RESERVED */
  266. 55, /* 0111 -> 5.5x */
  267. 60, /* 1000 -> 6.0x */
  268. 70, /* 1001 -> 7.0x */
  269. 80, /* 1010 -> 8.0x */
  270. 50, /* 1011 -> 5.0x */
  271. 65, /* 1100 -> 6.5x */
  272. 75, /* 1101 -> 7.5x */
  273. 85, /* 1110 -> 8.5x */
  274. 120, /* 1111 -> 12.0x */
  275. 100, /* 0000 -> 10.0x */
  276. 110, /* 0001 -> 11.0x */
  277. 120, /* 0010 -> 12.0x */
  278. 90, /* 0011 -> 9.0x */
  279. 105, /* 0100 -> 10.5x */
  280. 115, /* 0101 -> 11.5x */
  281. 125, /* 0110 -> 12.5x */
  282. 135, /* 0111 -> 13.5x */
  283. 140, /* 1000 -> 14.0x */
  284. 150, /* 1001 -> 15.0x */
  285. 160, /* 1010 -> 16.0x */
  286. 130, /* 1011 -> 13.0x */
  287. 145, /* 1100 -> 14.5x */
  288. 155, /* 1101 -> 15.5x */
  289. -1, /* 1110 -> RESERVED (13.0x) */
  290. 120, /* 1111 -> 12.0x */
  291. };
  292. static int __initdata nehemiah_c_clock_ratio[32] = {
  293. 100, /* 0000 -> 10.0x */
  294. 160, /* 0001 -> 16.0x */
  295. 40, /* 0010 -> RESERVED */
  296. 90, /* 0011 -> 9.0x */
  297. 95, /* 0100 -> 9.5x */
  298. -1, /* 0101 -> RESERVED */
  299. 45, /* 0110 -> RESERVED */
  300. 55, /* 0111 -> 5.5x */
  301. 60, /* 1000 -> 6.0x */
  302. 70, /* 1001 -> 7.0x */
  303. 80, /* 1010 -> 8.0x */
  304. 50, /* 1011 -> 5.0x */
  305. 65, /* 1100 -> 6.5x */
  306. 75, /* 1101 -> 7.5x */
  307. 85, /* 1110 -> 8.5x */
  308. 120, /* 1111 -> 12.0x */
  309. 100, /* 0000 -> 10.0x */
  310. 110, /* 0001 -> 11.0x */
  311. 120, /* 0010 -> 12.0x */
  312. 90, /* 0011 -> 9.0x */
  313. 105, /* 0100 -> 10.5x */
  314. 115, /* 0101 -> 11.5x */
  315. 125, /* 0110 -> 12.5x */
  316. 135, /* 0111 -> 13.5x */
  317. 140, /* 1000 -> 14.0x */
  318. 150, /* 1001 -> 15.0x */
  319. 160, /* 1010 -> 16.0x */
  320. 130, /* 1011 -> 13.0x */
  321. 145, /* 1100 -> 14.5x */
  322. 155, /* 1101 -> 15.5x */
  323. -1, /* 1110 -> RESERVED (13.0x) */
  324. 120, /* 1111 -> 12.0x */
  325. };
  326. static int __initdata nehemiah_a_eblcr[32] = {
  327. 50, /* 0000 -> 5.0x */
  328. 160, /* 0001 -> 16.0x */
  329. -1, /* 0010 -> RESERVED */
  330. 100, /* 0011 -> 10.0x */
  331. 55, /* 0100 -> 5.5x */
  332. -1, /* 0101 -> RESERVED */
  333. -1, /* 0110 -> RESERVED */
  334. 95, /* 0111 -> 9.5x */
  335. 90, /* 1000 -> 9.0x */
  336. 70, /* 1001 -> 7.0x */
  337. 80, /* 1010 -> 8.0x */
  338. 60, /* 1011 -> 6.0x */
  339. 120, /* 1100 -> 12.0x */
  340. 75, /* 1101 -> 7.5x */
  341. 85, /* 1110 -> 8.5x */
  342. 65, /* 1111 -> 6.5x */
  343. 90, /* 0000 -> 9.0x */
  344. -1, /* 0001 -> RESERVED */
  345. 120, /* 0010 -> 12.0x */
  346. 100, /* 0011 -> 10.0x */
  347. 135, /* 0100 -> 13.5x */
  348. 115, /* 0101 -> 11.5x */
  349. 125, /* 0110 -> 12.5x */
  350. 105, /* 0111 -> 10.5x */
  351. 130, /* 1000 -> 13.0x */
  352. 150, /* 1001 -> 15.0x */
  353. 160, /* 1010 -> 16.0x */
  354. 140, /* 1011 -> 14.0x */
  355. 120, /* 1100 -> 12.0x */
  356. 155, /* 1101 -> 15.5x */
  357. -1, /* 1110 -> RESERVED (13.0x) */
  358. 145 /* 1111 -> 14.5x */
  359. /* end of table */
  360. };
  361. static int __initdata nehemiah_b_eblcr[32] = {
  362. 50, /* 0000 -> 5.0x */
  363. 160, /* 0001 -> 16.0x */
  364. -1, /* 0010 -> RESERVED */
  365. 100, /* 0011 -> 10.0x */
  366. 55, /* 0100 -> 5.5x */
  367. -1, /* 0101 -> RESERVED */
  368. -1, /* 0110 -> RESERVED */
  369. 95, /* 0111 -> 9.5x */
  370. 90, /* 1000 -> 9.0x */
  371. 70, /* 1001 -> 7.0x */
  372. 80, /* 1010 -> 8.0x */
  373. 60, /* 1011 -> 6.0x */
  374. 120, /* 1100 -> 12.0x */
  375. 75, /* 1101 -> 7.5x */
  376. 85, /* 1110 -> 8.5x */
  377. 65, /* 1111 -> 6.5x */
  378. 90, /* 0000 -> 9.0x */
  379. 110, /* 0001 -> 11.0x */
  380. 120, /* 0010 -> 12.0x */
  381. 100, /* 0011 -> 10.0x */
  382. 135, /* 0100 -> 13.5x */
  383. 115, /* 0101 -> 11.5x */
  384. 125, /* 0110 -> 12.5x */
  385. 105, /* 0111 -> 10.5x */
  386. 130, /* 1000 -> 13.0x */
  387. 150, /* 1001 -> 15.0x */
  388. 160, /* 1010 -> 16.0x */
  389. 140, /* 1011 -> 14.0x */
  390. 120, /* 1100 -> 12.0x */
  391. 155, /* 1101 -> 15.5x */
  392. -1, /* 1110 -> RESERVED (13.0x) */
  393. 145 /* 1111 -> 14.5x */
  394. /* end of table */
  395. };
  396. static int __initdata nehemiah_c_eblcr[32] = {
  397. 50, /* 0000 -> 5.0x */
  398. 160, /* 0001 -> 16.0x */
  399. 40, /* 0010 -> RESERVED */
  400. 100, /* 0011 -> 10.0x */
  401. 55, /* 0100 -> 5.5x */
  402. -1, /* 0101 -> RESERVED */
  403. 45, /* 0110 -> RESERVED */
  404. 95, /* 0111 -> 9.5x */
  405. 90, /* 1000 -> 9.0x */
  406. 70, /* 1001 -> 7.0x */
  407. 80, /* 1010 -> 8.0x */
  408. 60, /* 1011 -> 6.0x */
  409. 120, /* 1100 -> 12.0x */
  410. 75, /* 1101 -> 7.5x */
  411. 85, /* 1110 -> 8.5x */
  412. 65, /* 1111 -> 6.5x */
  413. 90, /* 0000 -> 9.0x */
  414. 110, /* 0001 -> 11.0x */
  415. 120, /* 0010 -> 12.0x */
  416. 100, /* 0011 -> 10.0x */
  417. 135, /* 0100 -> 13.5x */
  418. 115, /* 0101 -> 11.5x */
  419. 125, /* 0110 -> 12.5x */
  420. 105, /* 0111 -> 10.5x */
  421. 130, /* 1000 -> 13.0x */
  422. 150, /* 1001 -> 15.0x */
  423. 160, /* 1010 -> 16.0x */
  424. 140, /* 1011 -> 14.0x */
  425. 120, /* 1100 -> 12.0x */
  426. 155, /* 1101 -> 15.5x */
  427. -1, /* 1110 -> RESERVED (13.0x) */
  428. 145 /* 1111 -> 14.5x */
  429. /* end of table */
  430. };
  431. /*
  432. * Voltage scales. Div/Mod by 1000 to get actual voltage.
  433. * Which scale to use depends on the VRM type in use.
  434. */
  435. static int __initdata vrm85scales[32] = {
  436. 1250, 1200, 1150, 1100, 1050, 1800, 1750, 1700,
  437. 1650, 1600, 1550, 1500, 1450, 1400, 1350, 1300,
  438. 1275, 1225, 1175, 1125, 1075, 1825, 1775, 1725,
  439. 1675, 1625, 1575, 1525, 1475, 1425, 1375, 1325,
  440. };
  441. static int __initdata mobilevrmscales[32] = {
  442. 2000, 1950, 1900, 1850, 1800, 1750, 1700, 1650,
  443. 1600, 1550, 1500, 1450, 1500, 1350, 1300, -1,
  444. 1275, 1250, 1225, 1200, 1175, 1150, 1125, 1100,
  445. 1075, 1050, 1025, 1000, 975, 950, 925, -1,
  446. };