Armadilloフォーラム

Armadillo-840でキャッシュ無効にする方法について

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
コメント

at_makoto.sato

2020年7月20日 9時25分

佐藤です。

一点確認させてください。
Armadillo-840でキャッシュ無効としたい背景をお聞かせ願いますでしょうか。

k-nakai

2020年7月20日 14時37分

> 佐藤です。
>
> 一点確認させてください。
> Armadillo-840でキャッシュ無効としたい背景をお聞かせ願いますでしょうか。

お世話になります。中居です。

キャッシュメモリが誤動作する可能性が高い環境での、Armadilloの利用を考えております。
現時点では、キャッシュメモリを無効にした影響度(処理速度など)を確認したい段階です。
以上が背景となります。

at_makoto.sato

2020年7月21日 15時08分

佐藤です。

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

2020年7月29日 9時22分

中居です。

ご意見ありがとうございます。
頂いた情報をもとに色々と試してみます。

at_mizo

2020年7月28日 17時08分

溝渕です。

L1 Cacheを無効にした場合に、strex/ldrexを発行しないようにしてみました。
その他Cache関連操作を行なわないよう修正しています。パッチを添付します。

I-CacheおよびL2 Cacheを無効にしても起動可能ですが、D-Cacheを無効にする
と起動できません。

D-Cacheを無効にすると、initが起動できない(kernelは起動できている)こと
から、MMU(PTE)周辺の問題か考えて調べてみましたが、有益な情報を見つける
ことはできませんでした。

ファイル ファイルの説明
linux-3.4-at_cache-disable.patch