[Armadillo:00465] Re: [PATCH] カーネル2.6用Armadillo-9パッチ

Takeharu KATO email@hidden
2005年 8月 24日 (水) 02:40:26 JST


加藤です。

> こちらの実装で疑問に思う点やリクエストなどありましたら、
> どんどんぶつけてください。
> 今後ともよろしくお願いします。
>
ざっとパッチを見た限りで気づいた点を報告しておきます。
まだうごかしてはいません。あくまで見たままで言っているだけです。
まちがっていたら、すみません。

1) 初期化(メモリ回り)
arch/arm/mach-ep93xx/mach-armadillo9.c
下記設定だと、32Mしかメモリを認識しないように思います。
+MACHINE_START(ARMADILLO9, "Armadillo-9")
+    MAINTAINER("Atmark Techno, Inc.")
+    BOOT_MEM(SDRAM_START, 0x80000000, 0xe0000000)
+    /* understand this... */
+    BOOT_PARAMS(SDRAM_START + 0x00000100)
+    MAPIO(armadillo9_map_io)
+    INITIRQ(ep93xx_init_irq)
+    .timer = &ep93xx_timer, INIT_MACHINE(armadillo9_init)
+MACHINE_END
2.6系カーネルだと、FIXUPマクロで、メモリを再設定しないといけないのでは無いでしょうか?
私の記憶がたしかなら、ARMの場合、BOOT_MEMで指定したメモリリージョンは、
私のコードで言うと次の部分になります。
--
301 MACHINE_START(ARMADILLO9, "Armadillo9")
302     MAINTAINER("Takeharu KATO(Original Kernel 2.4.XAtmark Techno, Inc.)")
303     BOOT_MEM(PHYS_OFFSET, 0x80000000, 0xff000000)
304     FIXUP(fixup_armadillo9) <==この部分
--
fixup_armadillo9は、以下のような感じになります。
-- 
static void __init
fixup_armadillo9(struct machine_desc *desc, struct tag *tags,
               char **cmdline, struct meminfo *mi)
 {
         /*
          *  This board has 32Mx2 blocks
          */
         mi->bank[0].start = MACH_ARMADILLO9_MEM_BANK0_START;
         mi->bank[0].size = SZ_32M;
         mi->bank[0].node = 0;
         mi->bank[1].start = MACH_ARMADILLO9_MEM_BANK1_START;
         mi->bank[1].size = SZ_32M;
         mi->bank[1].node = 1;
         mi->nr_banks = 2;
 }
--
私は、以前この部分で、はまりました(それとも何か別の手を使って64Mを認識させているのでしょうか?)。
#「ああ、32Mしか認識してない」と気が付いたのはリリースした当日でした。
ざっとしか見てませんが、同じ問題が起こるのではないでしょうか?
あと、同じファイルの
--
+static struct map_desc armadillo9_io_desc[] __initdata = {
+       {IO_ADDRESS(EP93XX_AHB_BASE), EP93XX_AHB_BASE, SZ_1M, MT_DEVICE},
+       {IO_ADDRESS(EP93XX_APB_BASE), EP93XX_APB_BASE, SZ_8M, MT_DEVICE},
+       {PCMCIA_BASE_VIRT, PCMCIA_BASE_PHYS, PCMCIA_SIZE, MT_DEVICE},
+};
--
ですが、ベースとしているep93xx Unofficial 2.6パッチは最近、
IO_ADDRESSマクロの使用を取り止める方向になっていたと思います。
また、
{PCMCIA_BASE_VIRT, PCMCIA_BASE_PHYS, PCMCIA_SIZE, MT_DEVICE},
って何のためにマップしているのでしょうか?
これって本当に必要なのでしょうか?
私のパッチでは、不要だと思ってあっさり削除しました。
もしよろしければ、上記マップの理由を教えて下さい。
#ずっと、疑問だったもので…

ドライバ関連
1) i2c/mtd関連ドライバのファイル名
非本質的な話ですが、チップドライバの場合, i2c-XXXX.cよりXXXX.cという名前にしたほうが
良いように思います(他がそうなっているので)。
mtd-armadillo9.cについても同じです。
#私の手許のパッチは、他に習ってそのようにしています。
#なお、以前送ったものは、全部buses配下にi2cチップドライバを
#配置したままになっていて、後から気がついて、
#ちょっと、ちょっとはずかしい思いをしました…

mtd関連で言うと、私も後で気が付いたのですが、
march-armadillo9.c
のarmadillo9_initで、
       physmap_configure(0x60000000, 0x00800000, 2, NULL);
       platform_device_register(&cfi_flash_device);
という処理がありますが、これって必要ですか?
drivers/mtd/maps配下にマッピングドライバを作成しているなら
特に必要ないように思いますが…
後になって、同じフラッシュを2つの経路からアクセスできてしまうので
いまいちかなと思っていました。
#コンフィグレーションで外せますが…

以上、参考になれば、幸いに思います。



armadillo メーリングリストの案内