2011年8月4日 星期四

幫 pxa270 超頻

要幫 pxa270 超頻,先看 linux kernel arch/arm/mach-pxa/pxa27x.c 的
pxa27x_get_clk_frequency_khz() 如何讀出目前系統設定的 520MHz

CPLL 是用Crystal clock: 13MHz * L (16) * N (2.5) = 520MHz
我們 CPLL 目標是 624 MHz 因此外頻不改,只要改倍頻就可以達到:
Crystal clock: 13MHz * L (16) * N (3) = 624MHz

原本讀取是看 CCSR register,設定是設 CCCR,但是 CCCR 設完還要靠 CLKCFG
register 才能使 CCCR 的設定生效。

pxa270 datasheet CLKCFG 是 co-processor 不像 CCCR/CCSR 使用 memory map 後就可
以讀到,因此要使用 gnu arm assembly code,原本 pxa27x_get_clk_frequency_khz() 就有
讀 CLKCFG 的程式碼:



84 /* Read clkcfg register: it has turbo, b, half-turbo (and f) */
85 asm( "mrc\tp14, 0, %0, c6, c0, 0" : "=r" (clkcfg) );
86 t = clkcfg & (1 << 0);


然後找到
 Performance Profiling Techniques on Intel ® XScale™ Microarchitecture Processors pdf
有寫入 co-processor 14 register 6 (CLKCFG) 的語法


asm( "mcr\tp14, 0, %0, c6, c0, 0" : : "r" (VAL) );



好久沒看組語 XD,該學一下 GNU ARM assembly