113 lines
2.4 KiB
Python
113 lines
2.4 KiB
Python
from dataclasses import dataclass
|
|
from typing import List
|
|
|
|
|
|
u32 = int
|
|
s32 = int
|
|
|
|
|
|
@dataclass
|
|
class DvbEntry:
|
|
freq: u32
|
|
volts: List[u32]
|
|
|
|
|
|
oldDvbTable = [
|
|
DvbEntry(204000, [637, 637, 637]),
|
|
DvbEntry(1331200, [650, 637, 637]),
|
|
DvbEntry(1600000, [675, 650, 637]),
|
|
DvbEntry(1866000, [700, 675, 650]),
|
|
DvbEntry(2133000, [725, 700, 675]),
|
|
DvbEntry(2400000, [750, 725, 700]),
|
|
DvbEntry(2666000, [775, 750, 725]),
|
|
DvbEntry(2933000, [800, 775, 750]),
|
|
DvbEntry(3200000, [800, 800, 775]),
|
|
]
|
|
|
|
newDvbTable = [
|
|
DvbEntry(204000, [637, 637, 637]),
|
|
DvbEntry(1331200, [650, 637, 637]),
|
|
DvbEntry(1600000, [675, 650, 637]),
|
|
DvbEntry(1866000, [700, 675, 650]),
|
|
DvbEntry(2133000, [725, 700, 675]),
|
|
DvbEntry(2400000, [750, 725, 700]),
|
|
DvbEntry(2666000, [850, 825, 800]),
|
|
DvbEntry(2933000, [950, 925, 900]),
|
|
DvbEntry(3200000, [1050, 1025, 1000]),
|
|
]
|
|
|
|
DVB_TABLE_SIZE = len(oldDvbTable)
|
|
INVALID_TABLE_INDEX = 32
|
|
|
|
|
|
def print_and_scan(message: str) -> u32:
|
|
return int(input(f"{message}: "))
|
|
|
|
|
|
def get_process_id(speedo: u32) -> u32:
|
|
if speedo <= 1597:
|
|
return 0
|
|
|
|
if speedo <= 1708:
|
|
return 1
|
|
|
|
# >= 1709
|
|
return 2
|
|
|
|
|
|
def get_voltage_and_index(
|
|
dvb_shift: u32,
|
|
emc: u32,
|
|
process_id: u32,
|
|
dvb_table: List[DvbEntry],
|
|
):
|
|
for i in range(DVB_TABLE_SIZE - 1):
|
|
if emc < dvb_table[i].freq or emc >= dvb_table[i + 1].freq:
|
|
continue
|
|
|
|
voltage = dvb_table[i].volts[process_id] + (25 * dvb_shift)
|
|
return voltage, i
|
|
|
|
return 0, INVALID_TABLE_INDEX
|
|
|
|
|
|
def get_shift(
|
|
old_voltage: u32,
|
|
process_id: u32,
|
|
dvb_table: List[DvbEntry],
|
|
index: u32,
|
|
) -> s32:
|
|
return (old_voltage - dvb_table[index].volts[process_id]) // 25
|
|
|
|
|
|
def main():
|
|
old_dvb = print_and_scan("Enter old dvb shift")
|
|
emc_max_mhz = print_and_scan("Enter max ram freq (MHz)")
|
|
speedo = print_and_scan("Enter soc speedo")
|
|
|
|
emc_max_khz = emc_max_mhz * 1000
|
|
process_id = get_process_id(speedo)
|
|
|
|
old_voltage, table_index = get_voltage_and_index(
|
|
old_dvb,
|
|
emc_max_khz,
|
|
process_id,
|
|
oldDvbTable,
|
|
)
|
|
|
|
if old_voltage == 0 or table_index == INVALID_TABLE_INDEX:
|
|
print("Invalid values!")
|
|
return
|
|
|
|
new_shift = get_shift(
|
|
old_voltage,
|
|
process_id,
|
|
newDvbTable,
|
|
table_index,
|
|
)
|
|
|
|
print(f"New dvb table shift: {new_shift}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |