experiments/smc.py: Turn into SMC key dumper

Signed-off-by: Hector Martin <marcan@marcan.st>
This commit is contained in:
Hector Martin 2022-02-15 14:03:40 +09:00
parent d381341865
commit ec126bb16a

View file

@ -6,13 +6,15 @@ sys.path.append(str(pathlib.Path(__file__).resolve().parents[1]))
import struct
from m1n1.setup import *
from m1n1.fw.smc import SMCClient
from m1n1.fw.smc import SMCClient, SMCError
smc_addr = u.adt["arm-io/smc"].get_reg(0)[0]
smc = SMCClient(u, smc_addr)
smc.start()
smc.start_ep(0x20)
smc.verbose = 0
smcep = smc.epmap[0x20]
def gpio_key(pin):
@ -21,7 +23,25 @@ def gpio_key(pin):
fourcc = 'gP' + ('00'+(hex(pin)[2:]))[-2:]
return fourcc
# Enable wifi/bluetooth
RFKILL_PIN = 13
smcep.write(gpio_key(RFKILL_PIN), struct.pack('<I', 0x800000 | 0x0))
smcep.write(gpio_key(RFKILL_PIN), struct.pack('<I', 0x800000 | 0x1))
## Enable wifi/bluetooth
#RFKILL_PIN = 13
#smcep.write(gpio_key(RFKILL_PIN), struct.pack('<I', 0x800000 | 0x0))
#smcep.write(gpio_key(RFKILL_PIN), struct.pack('<I', 0x800000 | 0x1))
count = smcep.read32b("#KEY")
print(f"Key count: {count}")
for i in range(count):
k = smcep.get_key_by_index(i)
length, type, flags = smcep.get_key_info(k)
if flags & 0x80:
try:
val = smcep.read_type(k, length, type)
print(f"#{i}: {k} = ({type}, {flags:#x}) {val}")
except SMCError as e:
print(f"#{i}: {k} = ({type}, {flags:#x}) <error {e}>")
else:
print(f"#{i}: {k} = ({type}, {flags:#x}) <not available>")
smc.stop()