AN 923: インテル® Stratix® 10 HPSペリフェラルのFPGAファブリックへの配線

ID 683838
日付 10/12/2020
Public

1.2.9. Linuxの構築

  1. Linux gitツリーのクローンを作成して、LTSIブランチを取得します。
    cd ~/ s10_spim_fpga/
    git clone https://github.com/altera-opensource/linux-socfpga\
     linux-socfpga.a53
    cd linux-socfpga.a53
    git checkout -b test-kernel -t origin/socfpga-5.4.44-lts
    make clean && make mrproper
  2. arch/arm64/configs/defconfig を次のように編集して、カーネルのコンフィグレーションを変更します。
    CONFIG_SPI_SPIDEV=y
    CONFIG_GPIO_ALTERA=y
    CONFIG_SPI_DESIGNWARE=y
    CONFIG_SPI_DW_MMIO=y
  3. デバイス・ツリー・ファイル arch/arm64/boot/dts/altera/socfpga_stratix10_socdk.dts を次のように編集します。
    FPGAファブリックで使用されるFPGAクロックを追加します。
    clk_100: clk_100 {
       compatible = "fixed-clock";
       clock-frequency = <100000000>;	
       clock-output-names = "clk_100-out_clk";
    };
    
    SPI CS信号を制御するPIOモジュールを追加します。
    spi_cs_pio: gpio@0xf9010000 {
       compatible = "altr,pio-19.1", "altr,pio-1.0";
       reg = <0xf9010000 0x00000020>;
       clocks = <&clk_100>;
       altr,gpio-bank-width = <1>;	
       resetvalue = <1>;
       #gpio-cells = <2>;
       gpio-controller;
       status = "okay";
    };
    
    SPIM0をイネーブルして、ソフトIP PIOをチップセレクトとして使用するようにし、spidevドライバーで使用できるようにします。
    &spi0 {
       num-cs = <1>;
       cs-gpios = <&spi_cs_pio 0 0>;
       status = "okay";
       spidev@0 {
          compatible = "custom,spidev";
          reg = <0x0>;
          spi-max-frequency = <0x5F5E10>;
          enable-dma = <0x1>;
       };
    };
    
  4. 「compatible」 プロパティーの spidev ドライバー・ソース・ファイル (drivers/spi/spidev.c) を編集して、作成されたデバイス・ツリー・エントリーと一致させます。
    { .compatible = "lineartechnology,ltc2488" },
     	{ .compatible = "ge,achc" },
     	{ .compatible = "semtech,sx1301" },
    	{ .compatible = "custom,spidev" },
     	{},
  5. Linuxカーネルおよびデバイスツリーを構築します。
    make clean && make mrproper
    # enable JFFS2 and disable 4K sectors for booting from QSPI
    echo "CONFIG_JFFS2_FS=y" >> arch/arm64/configs/defconfig
    echo "CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=n" >> arch/arm64/configs/defconfig
    # reduce QSPI clock to work on early boards
    sed -i 's/spi-max-frequency = <100000000>;/\
    spi-max-frequency = <50000000>;/g'\
     arch/arm64/boot/dts/altera/socfpga_stratix10_socdk.dts
    make defconfig
    make -j 48 Image dtbs modules
    make modules_install INSTALL_MOD_PATH=modules_install
    rm -rf modules_install/lib/modules/*/build
    rm -rf modules_install/lib/modules/*/source
    cd ..