# -------- DON'T TOUCH --------
BASE_FREQ=24
CPU_PLL_ADDR="0x1C20000"
CPU_PLL_VAL=0x90000000
CPU_MUL=16
MEM_PLL_ADDR="0x1C20020"
MEM_PLL_VAL=0x90000000
MEM_MUL=12

# -------- USER ADJUSTABLE --------
# Effective frequency is BASE_FREQ*MUL
CPU_OC_MUL=26
MEM_OC_MUL=13


# Ensure the system clocks aren't modified already
if [ "$(devmem "$CPU_PLL_ADDR" 32)" != "$(printf '0x%X\n' $(($CPU_PLL_VAL+(CPU_MUL<<8))))" ] || [ "$(devmem "$MEM_PLL_ADDR" 32)" != "$(printf '0x%X\n' $(($MEM_PLL_VAL+(MEM_MUL<<8))))" ]; then
    echo "Overclock: Clocks already modified! Skipping..." >/dev/kmsg
    return
fi


echo "Overclock: Setting CPU to $(($CPU_OC_MUL*$BASE_FREQ))MHz..." >/dev/kmsg
while [ $CPU_MUL -lt $CPU_OC_MUL ]; do
    CPU_MUL=$(($CPU_MUL+1))
    devmem "$CPU_PLL_ADDR" 32 "$(printf '0x%x\n' $(($CPU_PLL_VAL+(CPU_MUL<<8))))"
    sleep  0.1
done
 
echo "Overclock: Setting MEM to $(($MEM_OC_MUL*$BASE_FREQ))MHz..." >/dev/kmsg
while [ $MEM_MUL -lt $MEM_OC_MUL ]; do
    MEM_MUL=$(($MEM_MUL+1))
    devmem "$MEM_PLL_ADDR" 32 "$(printf '0x%x\n' $(($MEM_PLL_VAL+0x100000+(MEM_MUL<<8))))"
    sleep  0.1
done