k-nakai
2020年7月17日 17時24分
Armadillo-840でキャッシュ無効にする方法について確認です。
「make menuconfig」で「Disable I-Cache (I-bit)」「Disable D-Cache (C-bit)」を選択しましたが、
「watchdog timeout発生 ⇔ 再起動」を繰り返してしまい、うまく起動できません。
設定手順や詳細については添付ファイルをご確認お願いいたします。
キャッシュ無効で起動させるには、上記以外にも何か設定を行う必要がありますか?
または、別の設定方法があるのでしょうか?
知見がある方、ご教示いただけますと助かります。
ファイル | ファイルの説明 |
---|---|
Armadillo-840でキャッシュ無効.zip |
コメント
k-nakai
at_makoto.sato
佐藤です。
D-Cache無効時に、排他的レジスタストア命令(strex)がおかしな挙動をしています。
JTAGで確認したところ、DRAMへのstoreは実行された上でstrxのcondに"1"が返
されていました。
Linuxカーネルの_set_bit()で、strexのcondに"0"が返されるまで繰り返し実
行が行なわれる実装となっている為、起動することができません。
現在のところ、回避策はL1 cacheを有効化することしか見つけられていません。
L2 cacheは無効化しても本問題は発生しないことを確認済みです。
L2 cacheは以下のコンフィギュレーションで無効にできます。
System Type --->
[ ] Enable the L2x0 outer cache controller
k-nakai
at_mizo
溝渕です。
L1 Cacheを無効にした場合に、strex/ldrexを発行しないようにしてみました。
その他Cache関連操作を行なわないよう修正しています。パッチを添付します。
I-CacheおよびL2 Cacheを無効にしても起動可能ですが、D-Cacheを無効にする
と起動できません。
D-Cacheを無効にすると、initが起動できない(kernelは起動できている)こと
から、MMU(PTE)周辺の問題か考えて調べてみましたが、有益な情報を見つける
ことはできませんでした。
ファイル | ファイルの説明 |
---|---|
linux-3.4-at_cache-disable.patch |
at_makoto.sato
2020年7月20日 9時25分
佐藤です。
一点確認させてください。
Armadillo-840でキャッシュ無効としたい背景をお聞かせ願いますでしょうか。