0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Zynq + Linux Kernel 4.5(以降) で "mmc0: Timeout waiting for hardware interrupt" が起きる場合の対処方法

Last updated at Posted at 2017-01-13

症状

Zynq で Linux Kernel 4.5以降 を動作させた時、"mmc0: Timeout waiting for hardware interrupt" が起きて SD-Card が読めません。
SD-Card に root file system を作っていた場合、Linux が起動出来なくなります。

原因

Linux Kernel 4.5 以降、なにやら sdhci ドライバ周りにかなり変更が入っています。その変更内容(特に ADMA 周り)が Zynq と相性悪いようです。

原因は別にあるようです。詳細は次の記事を参照してください。この記事の内容は古くなっていますが、参考のため残しておきます。

参考

https://forums.xilinx.com/t5/Embedded-Linux/mmc0-Timeout-waiting-for-hardware-interrupt-RFS-is-not-loaded/td-p/731734

対処方法

あくまでも暫定対策ですが、sdhci ドライバの ADMA を使わないようにします。

Linux メインラインの場合

手っ取り早く対処するには、bootargs に sdhci.debug_quirks=64 を追加します。

ちなみに 64 という数字は linux kernel の drivers/mmc/host/sdhci.h で次のように定義されている値です。

sdhci.h

/* Controller has an unusable ADMA engine */
#define SDHCI_QUIRK_BROKEN_ADMA				(1<<6)

この値を debug_quirks に設定していると、ADMA は BROKEN(壊れている?)と見なされて ADMA は使わないようになります。

Xilinx が提供する Linux の場合

Xilinx が提供している linux の場合、デバイスツリーで broken-adma2 プロパティを追加すると良いようです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?