98 lines
1.9 KiB
Python
Executable File
98 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import sys
|
|
import argparse
|
|
|
|
|
|
ramconfigs = {
|
|
'mba42': (
|
|
'2b_hynix',
|
|
None,
|
|
'4g_hynix',
|
|
None,
|
|
'2g_samsung',
|
|
None,
|
|
'4g_samsung',
|
|
None,
|
|
'2g_micron',
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
'4g_elpida',
|
|
),
|
|
'mba52': (
|
|
'4g_hynix',
|
|
'4g_micron',
|
|
'8g_hynix',
|
|
None,
|
|
'4g_samsung',
|
|
None,
|
|
'8g_samsung',
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
None,
|
|
'4g_elpida',
|
|
None,
|
|
'8g_elpida',
|
|
),
|
|
'mbp101': (
|
|
'4g_hynix_1600s',
|
|
'1g_samsung_1600',
|
|
'4g_samsung_1600s',
|
|
'1g_hynix_1600',
|
|
'4g_elpida_1600s',
|
|
'2g_samsung_1600',
|
|
'2g_samsung_1333',
|
|
'2g_hynix_1600',
|
|
'4g_samsung_1600',
|
|
'4g_hynix_1600',
|
|
'2g_elpida_1600s',
|
|
'2g_elpida_1600',
|
|
'4g_elpida_1600',
|
|
'2g_samsung_1600s',
|
|
'2g_hynix_1600s'
|
|
)
|
|
}
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('-m', '--model',
|
|
choices=list(ramconfigs.keys()),
|
|
help='MacBook model',
|
|
required=True)
|
|
|
|
args = parser.parse_args()
|
|
|
|
configs = ramconfigs[args.model]
|
|
|
|
reg = None
|
|
for line in sys.stdin:
|
|
line = line.strip()
|
|
if not line.endswith('(GPIO_LVL3)'):
|
|
continue
|
|
|
|
reg = int(line.split(' ')[1], 16)
|
|
break
|
|
|
|
if reg is None:
|
|
raise Exceptions("failed to parse gpio registers")
|
|
|
|
# GPIO68..GPIO71
|
|
ramcfg = (reg >> 4) & 0xf
|
|
|
|
# reverse bit order
|
|
ramcfg = int('{:04b}'.format(ramcfg)[::-1], 2)
|
|
|
|
if ramcfg >= len(configs) or configs[ramcfg] is None:
|
|
print("unsupported memory configuration %d" % ramcfg)
|
|
else:
|
|
print("%s (RAMCFG=%01x)" % (configs[ramcfg], ramcfg))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|