ページ

2014年5月26日月曜日

eSDHC (Enhanced Secure Digital Host Controller)

えっとながらく NetWalker の ld0 が認識できなかった問題解決しました。
コマンド自体の読み込みはできるけど書き込みができないという問題。

さて、問題が発生したのは ARM のページサイズを 8K にしちゃったのがトリガーでした。

http://www.nerv.org/~ryo/netbsd/netbsd/?q=id:20140330T155052Z.7c513f9ea30a7fb89a9a886235a32bdcf2b9bcb6

この変更以降そもそもブートしなかったり色々 修正を余儀無くされました。
ブートするように直しても今度は NetWalker の ld0 (sdmmc(4)) が認識しない。
pmap が腐ったのかとか dma が悪さしてるんじゃないかとか色々疑ってみましたが、どれもよくわからず。

(NetBSD時間で)数日悩んでいたのですが、どうも問題が発生しているのが sdmmc(4) だけでしたので、ふと sys/dev/sdmmc の下で PAGE_SIZE を検索すると sdhc.c が引っ掛かるじゃないですか。
どうやら SDHC の Block Size Register (Offset 004h) の 14-12 bit は "Host SDMA Buffer Boundary"として使用するようなのですが、 Freescale さんの eSHDC にはこの ビットフィールドが存在しません。

https://www.sdcard.org/jp/developers/overview/host_controller/simple_spec/

このビット、PAGE_SIZE が 4K の場合には 0 ですので悪さしないんですが、 8K の時 1 が立ってしまいます。
そのせいで転送完了割り込みが発生しなくてエラーとなっておりました。
ちゃんちゃん

http://cvsweb.netbsd.org/cgi-bin/cvsweb.cgi/src/sys/dev/sdmmc/sdhc.c.diff?r1=1.43&r2=1.44&f=h

で修正したので、直ったはず。
これで kobo にとりかかれる。 

0 件のコメント:

コメントを投稿