[Armadillo:04536] Re: A5001 と A5027 の違い
Yasushi SHOJI
email@hidden
2009年 8月 27日 (木) 20:07:53 JST
At Wed, 26 Aug 2009 11:45:56 +0900,
Ohtaki Yuichiro wrote:
>
> linux-2.6.18-at13
2.6.18だったんですね!
2.6.26を試すか、以下のパッチを試すことは可能ですか?
Freescaleがリリースしたドライバにバグあったので、
2.6.26には修正をマージしてあるのですが、2.6.18の
方には入れていません。
a500: M3IF snoop: 「端数のない場合、2で割る」処理を絶対に通らない
msbを-1するのを忘れているため、2のべき乗に端数があるような領域要求の場
合に2で割るという処理に入らないようなコードになっていた。このため、2MB
を要求すると4MBのwindow_sizeになってしまい、実際に確保した領域と
ハードウェアに通知している領域が異なるという現象になる。
この問題は、確保した領域がハードウェアに通知してるサイズでアライメント
されていない場合に限り snoopに指定した領域に書き込みが行なわれても割り
込みが発生しないという現象として表面化する。
i.MX31 reference manualの M3IFのセクションには、そのような記述がないた
め詳細は不明だが、現象としては上記のような振舞をしていることを確認した。
---
diff --git a/arch/arm/plat-mxc/snoop.c b/arch/arm/plat-mxc/snoop.c
index 2b724af..6333c71 100644
--- a/arch/arm/plat-mxc/snoop.c
+++ b/arch/arm/plat-mxc/snoop.c
@@ -62,7 +62,7 @@ int mxc_snoop_set_config(u32 num, unsigned long base, int size)
}
msb = fls(size);
- if (!(size & ((1UL << msb) - 1)))
+ if (!(size & ((1UL << (msb - 1)) - 1)))
msb--; /* Already aligned to power 2 */
if (msb < 11)
msb = 11;
armadillo メーリングリストの案内