|
@@ -0,0 +1,38 @@
|
|
|
+#!/usr/bin/env python2
|
|
|
+
|
|
|
+import glob
|
|
|
+import os
|
|
|
+import struct
|
|
|
+
|
|
|
+from periphery import MMIO
|
|
|
+from time import sleep
|
|
|
+
|
|
|
+UPDATE_RATE_SEC = 15
|
|
|
+
|
|
|
+
|
|
|
+def writemsr(msr, val):
|
|
|
+ n = glob.glob('/dev/cpu/[0-9]*/msr')
|
|
|
+ for c in n:
|
|
|
+ f = os.open(c, os.O_WRONLY)
|
|
|
+ os.lseek(f, msr, os.SEEK_SET)
|
|
|
+ os.write(f, struct.pack('Q', val))
|
|
|
+ os.close(f)
|
|
|
+ if not n:
|
|
|
+ raise OSError("msr module not loaded (run modprobe msr)")
|
|
|
+
|
|
|
+
|
|
|
+def main():
|
|
|
+ mchbar_mmio = MMIO(0xfed159a0, 8)
|
|
|
+ while True:
|
|
|
+ # set temperature trip point to 97 C
|
|
|
+ writemsr(0x1a2, 0x3000000)
|
|
|
+ # set MSR to PL1 45W, max duration - PL2 45W, 2ms
|
|
|
+ writemsr(0x610, 0x42816800fe8168)
|
|
|
+ # set MCHBAR register to the same PL1/2 values
|
|
|
+ mchbar_mmio.write32(0, 0x00fe8168)
|
|
|
+ mchbar_mmio.write32(4, 0x00428168)
|
|
|
+ sleep(UPDATE_RATE_SEC)
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ main()
|