|
以前改 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 语言,所以没办法弄懂上面代码。有朋友能指点下具体该怎么改吗?
|
|