ジャンル不定の日記です。

U-bootでSPIフラッシュ認識した!

Orange pi R1でU-bootでSPIフラッシュを認識しなかった件ですごい苦戦したがやっとできた。

u-bootでspiフラッシュを使おうとすると
=> sf probe
Invalid bus 0 (err=-19)
Failed to initialize SPI flash at 0:0 (error -19).
こんな感じになって数日解決できなかった。

原因は、
arch/arm/dts/sun8i-h2-plus-orangepi-r1.dts
でデバイスの設定がされてるのだが、
&spi0 {
    status = "okay";

    flash@0 {
        compatible = "mxicy,mx25l12805d", "jedec,spi-nor";
    };
};
↑この部分まるごとコメントアウトされてた。
ブロックまるごとコメントアウトとは思わんし、.dtsファイルだからKateのハイライトが効いてなくてコメントに気づかなかった。
これアンコメントしたらdm treeでデバイスが出てきた。

それだけだとsf probeでエラーが出るのは変わらないのだが、
    aliases {
        ethernet1 = &rtl8189etv;
        spi0 = &spi0;
    };
spi0のエイリアスを設定すると利用できるようになる。

=> mtd list
List of MTD devices:
No MTD device found
=> sf probe
SF: Detected mx25l12805d with page size 256 Bytes, erase size 64 KiB, total 16 MiB
=> mtd list
List of MTD devices:
* nor0
  - type: NOR flash
  - block size: 0x10000 bytes
  - min I/O: 0x1 bytes
  - 0x000000000000-0x000001000000 : "nor0"
出てきた。

u-bootでSPIフラッシュ使う際はまずsf probeで認識させてからぽいね。

miZyの起動時の出力見ると、
最初の512kがu-bootでその次の64kがboot.scrでboot.scrを読み込んで実行してるみたい。
SPIからboot.scrをロードするには環境変数をいじる必要がある?
で、dtb kernel initramfs を読み込んで、カーネルの起動オプションにmtdpartsを指定してるぽい。

u-bootにboot.scrをロードさせて処理させることができればできそう。