HTC Dream(aka T-Mobile G1, Android Dev Phone 1)用JFv1.41のクロックアップカーネルを改良してみる

起動後からクロックアップされないのが不満だったのでもう少し解析を続けてみた。
全関数をトレースして、このタイミングであればクロックアップしても問題なさそうというところを見つけた。

パッチ

修正後のパッチが以下の通り。修正箇所はたった4行。

diff --git a/arch/arm/mach-msm/clock.c b/arch/arm/mach-msm/clock.c
index a27b2dc..ae704a2 100644
--- a/arch/arm/mach-msm/clock.c
+++ b/arch/arm/mach-msm/clock.c
@@ -644,10 +644,10 @@ device_initcall(clock_debug_init);
  */
 #define CPUFREQ_TABLE_MAX 4
 static struct cpufreq_frequency_table cpufreq_table[] =  {
-	{ 0, 81920 },
+	{ 0, 19200 },
 	{ 1, 122880 },
 	{ 2, 245760 },
-	{ 3, 384000 },
+	{ 3, 528000 },
 	{ CPUFREQ_TABLE_MAX, CPUFREQ_TABLE_END },
 };
 
@@ -798,7 +798,7 @@ static void msm_early_suspend(android_early_suspend_t *handler) {
 }
 
 static void msm_late_resume(android_early_suspend_t *handler) {
-	acpuclk_set_rate(NULL, 384000 * 1000, 0);
+	acpuclk_set_rate(NULL, 528000 * 1000, 0);
 }
 
 static struct android_early_suspend msm_power_suspend = {
@@ -852,6 +852,7 @@ static int __init clock_late_init(void)
 	pr_info("clock_late_init() disabled %d unused clocks\n", count);
 #ifdef CONFIG_ANDROID_POWER
 	android_register_early_suspend(&msm_power_suspend);
+	acpuclk_set_rate(NULL, 528000 * 1000, 0);
 #endif
 	return 0;
 }

イメージファイル

adp1限定。ここ http://tetsu.homelinux.org/android/ にイメージファイルがある。

  • special-boot-19MHz-528MHz-v2.img (adp1用)
  • special-boot-jf-19MHz-528MHz-v2.img (adp1+JFv1.41用)

インストール

まずはfastbootモードになる。

  • 終話ボタン(赤ボタン)を長押ししてシャットダウンする。
  • バックボタン(左矢印ボタン)を押しながら終話ボタン(赤ボタン)を押してFASTBOOTモードで起動。

この状態で、

$ fastboot erase boot
$ fastboot flash boot special-boot-jf-19MHz-528MHz-v2.img
$ fastboot reboot

のようにして書き込む。

使用感

電源のOFF/ONをやらなくても最初からクロックアップされている。
ベンチマークも最初からクロックアップ後の値が出た。
取りあえず満足。
でも、MSM7201Aのマニュアルが手に入れば、オーバークロックとかバス速度のチューニングとかもう少しいじれるのに。