龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 26682|回复: 96

2f 的频率调节 --降频测试+超频

[复制链接]
发表于 2008-7-31 22:07:34 | 显示全部楼层 |阅读模式
+就是读写手册上的那个CR80寄存器,GOOGLE了两天的成果,就是编译出一个.ko驱动模块,里面其实只是在init函数中改写了低三位,初始值是7,改为4,卸载模块时恢复原值
用instmod 回载后在/var/log/kern.log中看值是修改成功了,可是用 cat /proc/cpuinfo,一点没变,一直是532,真不知道在哪里测试是否修改成功了...

[ 本帖最后由 alexzyy 于 2008-8-10 21:39 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册新用户(newuser)

x
 楼主| 发表于 2008-7-31 22:09:37 | 显示全部楼层
2.6.18.8

供高手参考,好多年不写C语言了,驱动什么的原理也不懂的,搬来的
#include <linux/init.h>
#include <linux/module.h>
#include <linux/ioport.h>
#include <asm/io.h>

#define PCR80_ADDR 0x1fe00180UL

MODULE_LICENSE("GPL");
struct resource *m_region;
void*   cr80_addr;

static unsigned char read_speed(void)
{
    unsigned char v;
    v = readb( cr80_addr);
    v &=0x07;
    return readb ( cr80_addr );
}
void write_speed(unsigned char speed)
{
        unsigned char v;
        //check input value first, shall range from 1:7
        if(speed < 1 || speed>7){
                printk("accepts range only from 1 to 7 , you specified %d\n",speed);
        }
        else{
                //read current value and set bit 0:2
            v = read_speed();
            //clear bit 0:2
            printk("current speed %x\n",v);
            v >>= 3;
            v <<= 3;
            v |= speed;
            printk("target speed %x\n",v);
            writeb(v, cr80_addr);
            printk("speed after adjust %x\n",read_speed());
        }

        //这里可以修改CYCLES_PER_JIFF 0806
        cycles_per_jiff = cycles_per_jiff * original_speed/target_speed....
}
static int f_init(void)
{
        printk(KERN_ALERT"freq starting\n");
        m_region = request_mem_region( PCR80_ADDR, 4, "loongson");
        if( m_region == NULL){
                printk("io memory request failed\n");
        }
        else{
                printk("io memory request succeeded\n");
        }
        cr80_addr = ioremap( PCR80_ADDR, 2);
        printk("CPU speed %x\n",read_speed());
        write_speed( 1 );

        return 0;
}
static void f_exit(void)
{
        printk(KERN_ALERT"freq exiting\n");
        //reset to full speed
        write_speed(7);
        if(m_region != NULL)
                release_mem_region(PCR80_ADDR,4);
        if(cr80_addr != NULL)
                iounmap( cr80_addr );
}

module_init(f_init);
module_exit(f_exit);

[ 本帖最后由 alexzyy 于 2008-8-6 22:01 编辑 ]
发表于 2008-7-31 22:55:46 | 显示全部楼层
CPUINFO好像不是实时更新的,bogo MIPS应该只在开机时计算。
发表于 2008-8-1 08:41:51 | 显示全部楼层
那意思就是成功了?
 楼主| 发表于 2008-8-1 09:02:52 | 显示全部楼层
今天有时间开个播放器之类的看看CPU占用率比较一下
发表于 2008-8-1 09:59:49 | 显示全部楼层
搞个超频测试就好了。
发表于 2008-8-1 10:00:41 | 显示全部楼层
2f目前的性能还是比较肉的。
能超频到1G应该爽些。
发表于 2008-8-1 11:41:17 | 显示全部楼层

回复 #1 alexzyy 的帖子

随便找一个基准程序看看运行速度有无明显变化就知道了。
 楼主| 发表于 2008-8-1 20:06:53 | 显示全部楼层
刚才用JAMESR的性能测试程序跑了一下,发现寄存器值为7和为1时居然只有极微小的变化,但是感觉上跑一次TESTCPU的时间明显变长了,才发现原来电脑的时钟变慢了,测了几次下来,电脑已经慢了15分钟了

找个电影放了一个,变化显著,值为1时就像慢动作了

[ 本帖最后由 alexzyy 于 2008-8-1 20:10 编辑 ]
 楼主| 发表于 2008-8-1 20:37:35 | 显示全部楼层
接下来看看能不能用读写I2C设备的方法找到时钟的控制寄存器,看手册上时钟应该是有三级可调的,没弄过硬件,不知道I2C设备地址怎么找

本版积分规则

小黑屋|手机版|Archiver|Lemote Inc.  

GMT+8, 2019-8-25 09:43 , Processed in 0.205718 second(s), 21 queries .

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