找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 1442|回复: 4

自编译MT7628固件修改CPU主频生效了,但启动过程中断

[复制链接]
以前改 MT7621 主频是在 UBoot 里改了后 Padavan 里就自动跟着 Uboot 的频率走,现在想改 MT7628 的主频,也是想办法先改了 Uboot 的频率,Uboot 改成了,发现 Padavan 启动信息上显示的频率还是默认频率,然后又试着改 Padavan 的源码,在文件 trunk/linux-3.4.x/arch/mips/rt2880/init.c 中的以下代码片段里改了红色部分:

#elif defined (CONFIG_RALINK_MT7628)
        case 0:
                if (xtal == 25)
                        mips_cpu_feq = 345 * 1000 * 1000;        /* 25MHZ Xtal */
                else
                        mips_cpu_feq = 580 * 1000 * 1000;        /* 40MHz Xtal */
                break;
        case 1:
                mips_cpu_feq = (480*1000*1000);
                break;


主要是设备是面板型AP,体积小空间封闭,只做 AP,发热太大,想改低主频看能不能凉快点。改完后 TTL 能看到启动信息,启动信息上也的确显示频率是我设置的频率的,但启动过程总在某位置卡死,如下:

MediaTek SoC: MT7628A, RevID: 0102, RAM: DDR2, XTAL: 25MHz
CPU/OCP/SYS frequency: 345/100/100 MHz
prom memory:64MB
CPU revision is: 00019655 (MIPS 24KEc)
Determined physical RAM map:
memory: 04000000 @ 00000000 (usable)
Zone PFN ranges:
  Normal   0x00000000 -> 0x00004000
Movable zone start PFN for each node
Early memory PFN ranges
    0: 0x00000000 -> 0x00004000
Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 16256
Kernel command line: console=ttyS0,115200n8 root=/dev/mtdblock4 rootfstype=squashfs
PID hash table entries: 256 (order: -2, 1024 bytes)
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Writing ErrCtl register=0007b6d0
Readback ErrCtl register=0007b6d0
Memory: 61780k/65536k available (2378k kernel code, 3756k reserved, 522k data, 168k init, 0k highmem)
NR_IRQS:40
console [ttyS0] enabled
Calibrating delay loop... 228.86 BogoMIPS (lpj=457728)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
NET: Registered protocol family 16
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
PCI host bridge to bus 0000:00
pci_bus 0000:00: root bus resource [mem 0x20000000-0x2fffffff]
pci_bus 0000:00: root bus resource [io  0x10160000-0x1016ffff]
pci 0000:00:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
pci 0000:00:00.0: BAR 0: can't assign mem (size 0x80000000)
pci 0000:00:00.0: BAR 8: assigned [mem 0x20000000-0x200fffff]
pci 0000:00:00.0: BAR 9: assigned [mem 0x20100000-0x201fffff pref]
pci 0000:01:00.0: BAR 0: assigned [mem 0x20000000-0x200fffff 64bit]
pci 0000:01:00.0: BAR 6: assigned [mem 0x20100000-0x2010ffff pref]
pci 0000:00:00.0: PCI bridge to [bus 01-01]
pci 0000:00:00.0:   bridge window [mem 0x20000000-0x200fffff]
pci 0000:00:00.0:   bridge window [mem 0x20100000-0x201fffff pref]
PCI: Enabling device 0000:00:00.0 (0000 -> 0002)
Switching to clocksource MIPS
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP: reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
squashfs: version 4.0 (2009/01/31) Phillip Lougher
msgmni has been set to 120
io scheduler noop registered (default)
Serial: 8250/16550 driver, 1 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0x10000c00 (irq = 28) is a 16550A
Ralink GPIO driver initialized. Number of GPIO: 64, GPIO mode: 55144455
loop: module loaded
MediaTek SPI flash driver, SPI clock: 25MHz
SPI flash chip: W25Q64 (ef 40170000) (8192 Kbytes)
Creating 7 MTD partitions on "raspi":
0x000000000000-0x000000030000 : "Bootloader"
0x000000030000-0x000000040000 : "Config"
0x000000040000-0x000000050000 : "Factory"
0x000000050000-0x00000015c950 : "Kernel"
0x00000015c950-0x0000007e0000 : "RootFS"
0x0000007e0000-0x000000800000 : "Storage"
0x000000050000-0x000000800000 : "Firmware_Stub"
tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
Ralink APSoC Ethernet Driver v3.2.4 (raeth)
raeth: PDMA RX ring 256, PDMA TX ring 256. Max packet size 1536
raeth: NAPI support, weight 32
raeth: Byte Queue Limits (BQL) support
PPP generic driver version 2.4.2
PPP MPPE Compression module registered
NET: Registered protocol family 24
PPTP driver version 0.8.5
usbcore: registered new interface driver libusual
nf_conntrack version 0.5.0 (16384 buckets, 32768 max)
xt_time: kernel timezone is -0000
Bridge firewalling registered
gre: GRE over IPv4 demultiplexor driver
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP: cubic registered
NET: Registered protocol family 17
L2TP core driver, V2.0
PPPoL2TP kernel driver, V2.0
8021q: 802.1Q VLAN Support v1.8
ASUS NVRAM, v0.08. Available space: 61440. Integrity: OK
VFS: Mounted root (squashfs filesystem) readonly on device 31:4.
Freeing unused kernel memory: 168k freed
Algorithmics/MIPS FPU Emulator v1.5
validate subfs:
MT7628 AP Driver version: 4.1.0.0
PCI: Enabling device 0000:01:00.0 (0000 -> 0002)
MT76x2 AP Driver version: 3.0.5.0
MTK AES Engine Module, HW verson: 04
AES Engine: register cbc(aes) crypto api
AES Engine: register ecb(aes) crypto api
Netfilter messages via NETLINK v0.30.
ip_set: protocol 6
Password for 'admin' changed
raeth: HW IP/TCP/UDP checksum RX offload enabled

内存频率本来是自动等于CPU主频的3分1的,我在定义内存频率的地方指定为 100 了,但不管内存频率怎么改,都不影响卡死的现象,然后发现只要主频低于 540MHZ,就指定卡死在这里。后面还有段代码:

#elif defined (CONFIG_RALINK_MT7628)
        surfboard_sysclk = mips_cpu_feq/3;
        if (clk_sel2)
                ram_type = "DDR1";
        else
                ram_type = "DDR2";
        /* set CPU ratio for sleep mode (USB OCP must be >= 30MHz) */
        reg = (*((volatile u32 *)(RALINK_SYSCTL_BASE + 0x440)));
        reg &= ~0x0f0f;
        reg |=  0x0606;        /* CPU ratio 1/6 for sleep mode (OCP: 575/6/3 = 31 MHz) */
        (*((volatile u32 *)(RALINK_SYSCTL_BASE + 0x440))) = reg;
        udelay(10);

        /* disable request preemption */
        reg = (*((volatile u32 *)(RALINK_RBUS_MATRIXCTL_BASE + 0x0)));
        reg &= ~0x04000000;
        (*((volatile u32 *)(RALINK_RBUS_MATRIXCTL_BASE + 0x0))) = reg;

        /* MIPS reset apply to Andes */
        reg = (*((volatile u32 *)(RALINK_SYSCTL_BASE + 0x38)));
        reg |= 0x200;
        (*((volatile u32 *)(RALINK_SYSCTL_BASE + 0x38))) = reg;
#else
        surfboard_sysclk = mips_cpu_feq/3;
#endif


上面写着某值不能低于 30MHZ,然后我算了一下,540/6/3 还真等于30,所以就真的主频不能低于 540了。因为本人不懂 C 语言,所以没办法弄懂上面代码。有朋友能指点下具体该怎么改吗?
我的恩山、我的无线 The best wifi forum is right here.
25m的晶振对应的主频就是575,后面各种分频都是基于575来算的,你想改也不是不行,重写所有涉及频率的代码,也就是相当于mtk开发芯片sdk的活

点评

各种频率应该就是在这个文件里决定。虽然其它频率是基于 575,但肯定有个固定的比例值。比如内存是 575 的 3 分1,这是明写在文件里的,我随便改内存频率也成功了。但就是后面这段代码里的必须大于 30MHZ 这一段,比  详情 回复 发表于 2021-10-15 11:55
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 彬彬 于 2021-10-15 11:58 编辑
paldier 发表于 2021-10-15 09:52
25m的晶振对应的主频就是575,后面各种分频都是基于575来算的,你想改也不是不行,重写所有涉及频率的代码 ...

各种频率应该就是在这个文件里决定。虽然其它频率是基于 575,但肯定有个固定的比例值。比如内存是 575 的 3 分1,这是明写在文件里的,我随便改内存频率也成功了。但就是后面这段代码里的必须大于 30MHZ 这一段,这一个的比例可能是读寄存器或EEPROM参数的,这些我就看不懂了。如果能将那个比例改小,从 6 分之1 改成 3 分之1,那就能安全降 50% 频率,如果6分之1改成2分之1,那主频就能安全降到原来575 的 20%了吧。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

mt7628 mt7688不支持修改频率的,所以别想超频了。

点评

我不是想超频,是想降频 UBOOT 里能任意改小,但也就限于 Uboot 里第一次。进 Padavan 后就恢复默认频率,Padavan 里现在只能改到 540MHZ,再小就不启动了。  详情 回复 发表于 2021-10-26 20:20
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
佐须之男 发表于 2021-10-25 14:35
mt7628 mt7688不支持修改频率的,所以别想超频了。

我不是想超频,是想降频
UBOOT 里能任意改小,但也就限于 Uboot 里第一次。进 Padavan 后就恢复默认频率,Padavan 里现在只能改到 540MHZ,再小就不启动了。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-28 00:23

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表