Loongson 3A6000官方EVB超频

最近这个3A6000比较火,买了一个发现性能还不错

华硕有一个主板支持超频,性能也能提升不少,但是暂时买不到:https://www.bilibili.com/video/BV15u4y1A7aK

研究一下

串口

第一件事,接串口。这个板子UEFI会打印比较完整的log,输出在前面板的RS232串口上

有了

哪里设置的频率呢?

看手册 https://www.loongson.cn/uploads/images/2023112818504442157.Loongson3A6000%20user%20book_V1.0.pdf

可以看到cpu clock是从main clock分频出来的,那么我们要改main clock

找到寄存器表

按这个算频率

我们先看看它怎么算出来原生的2.5Ghz的,只需要确定这三个参数

逆一下固件

根据串口log输出的信息

CPU CLK SEL : 00000002
MEM CLK SEL : 00000014
HT CLK SEL : 00000010
Change the scale of HT0 clock
Disable HT1/HT2/HT3 clock
Change the scale of HT1 clock
Soft CLK SEL adjust begin

搜字符串,定位到PreSecMain模块里

捞出来塞进ghidra里

右下角这坨就是在写0x01b0配置时钟,左上角这坨tX寄存器操作ghidra没有识别出来,需要手工跟一下

继续往前跟,发现它是这个逻辑

  • 从eFUSE里读板卡类型,读到是3A6000-HV,跳第一个switch-case
  • t2寄存器写入2500
  • 算出寄存器各个参数,拼成0x01b0寄存器
  • 写进去

所以我们把

                             LAB_ram_1c000a38                                XREF[2]:     ram:1c0009f0 (j) , 
                                                                                          ram:1c000a00 (j)   
    ram:1c000a38 0e  10  a7  03    ori        t2,zero ,0x9c4
    ram:1c000a3c 00  1c  00  50    b          LAB_ram_1c000a58

这里改成ori t2, zero, <freq_mhz> 就可以改成任意频率了

这里提供个汇编脚本

#!/bin/bash

opcode32() {
  echo $* > tmp.S && ./loongarch64-linux-gnu-gcc -c tmp.S -o tmp.o && ./loongarch64-linux-gnu-objdump -d tmp.o
  rm -f tmp.o tmp.S
}

改到2600mhz,看一下汇编长啥样

所以只要把原来的0e 10 a7 03改成0e a0 a8 03就行了

改完是不行的,因为这个main clock被太多东西用了,需要合理分频后才能用,参考手册

这个满足

这个是不满足的。我们看一下这个HT怎么分的频

可以看到这个HT分频写了个0xb进去

0xb就是1011,即开启分频,频率为main_freq*(0b11+1)/8就是main_freq/2,本来2.5G主频的时候/2正好是1.25G,但是我们改高了之后这个HT Freq就超过1.25G了,所以这里我们要改一下分频让它小点

不妨改成1010,即开启分频,频率为main_freq*(0b10+1)/8就是main_freq*3/8,975Mhz

所以这里我们也要改一下

改成lu12i.w a1, 0xa000000

然后替换hex

重打包

龙芯这个UEFI非常阳间,不搞骚操作,uefitool直接rebuild就行

插电,开机

屏幕轻松点亮

但是lscpu显示有毛病,BogoMIPS是对的,频率字符串也是对的,但是Max Freq是错的

不管了,跑个分,确实有提升,下面图片是没超频的,大概提升8-10%

直接读寄存器算出来也是对的

最高能超多少

2.7Ghz没问题

2.8G亮屏大概10秒后死机,看了下串口log貌似内存频率不对。拉到3600Mhz了都,有点离谱

有空再研究

不改电压的话2.7Ghz压测没问题

下载链接

https://github.com/naivekun/ls3a6000-overclock-firmware