Forum Discussion

Scotty2's avatar
Scotty2
Icon for Occasional Contributor rankOccasional Contributor
3 years ago
Solved

How to load intel RSU driver using "insmod"?

Hi,

This question is slightly related to my question in this thread about Intel Stratix-10 RSU feature.

I have been following the instruction from this official document.

Currently, I am trying to load the "intel RSU driver" in Linux on an stratix-10 FPGA board. I have checked and confirmed that the the kernel configuration file sets the "CONFIG_INTEL_STRATIX10_RSU=m". This page of the RSU documentation suggests to use "insmod" to load this module in, but how would I go about this? Do I need a ".ko" file? If you can provide the command, or a link to a more thorough document, that would also be great!

I have noticed that the "dev/mtd0", which is the interface for the LIBRSU (RSU_CLIENT) is not mounted. The "/etc/librsu.rc" file has the default values as shown here. However when I try to run the "rsu_client" with any arguments I get the following:

root@board:~# ./rsu_client -c
librsu: librsu_misc_get_devattr(): error: Unable to open device attribute file '/sys/devices/platform/stratix10-rsu.0/spt0_address' [LOW]
librsu: librsu_ll_open_qspi(): error: Unable to open '/dev/mtd0' [LOW]
librsu_init return -2

I assume it at least partially has to do with the fact that the RSU driver is not loaded!

If it is any help, when I run "lsmod" I simply get "not tainted".

Lastly, the documentation mentions "the MTD QSPI partition to be used
by LIBRSU must start at the location of the SPT0, in order for LIBRSU to be able to
determine the flash partitioning information" here ; does this mean that in the device tree, it is not enough to describe the QSPI flash start location and we have to jump over the "BOOT_INFO" and "FACTORY_IMAGE" section in the flash by making a modification inthe device tree? how would one go about this? can this be done without rebuilding the kernel?

If there is a reference design/file/sample that'd be great too!

Thank you!

  • I will leave this here in case someone in the future needs to do this.

    checkout this link for version compatibility:

    Remote System Update Compatibility | Documentation | RocketBoards.org

    What "worked" for me was to compile ATF 2.4.1, kernel 5.4.114 with RSU and u-boot 2021.01 plus the RSU libraries that needs to be put on the HPS, essentially the exact version they had in their manual.

    ATF 2.6.1 crashed when booting into the kernel, with u-boot 2021.01, Intel does not really support older versions, so performance most likely will regress.

    Side note:

    Updating to u-boot 2021.01 from 2019 also meant that the L3 registers needed to be handled differently, the "sec_reg" driver that they introduced that can touch the L3 registers in the DTS file, only starts to exist from uboot 2021.04 and even then, it does not preserve the values of the RESERVED registers.

    So for that I had to follow the suggestions at here and recompile ATF with the modification to its source code and add a script in u-boot to set them before booting the kernel.

9 Replies

  • tehjingy_Altera's avatar
    tehjingy_Altera
    Icon for Regular Contributor rankRegular Contributor

    Hello Sir


    Instead of compiling it as a loadable module.

    Could you try to set the flag to y instead of m.

    "CONFIG_INTEL_STRATIX10_RSU=y"

    This way you do not need to explicitly insmod the module on boot up.


    Regards

    Jingyang, Teh


    • Scotty2's avatar
      Scotty2
      Icon for Occasional Contributor rankOccasional Contributor

      Hi,

      Yes I will be trying that, but unfortunately the build process and the deployment on our project is a fairly lengthy one and I am hoping to understand the process better or have a workaround until we can try to build this module into the kernel.

      For that, I have locally also tried setting the config to an "m" in the "defconfig" file and trying to build the modules only with "make modules" but it does not generate a ".ko" file, hoping that I can then use this to load the module on the board. (this older document shows the process for the quartus prime version 19.3 and they do not build the module into the kernel).

      Would you please advise on how to proceed and my other questions stated before?

      Also would you kindly confirm that having this module loaded would automatically result in "/dev/mtd0" to be mounted on boot up?

      If you can point me to other documents and guides on the process and the lower level details, I'd appreciate that as well!

      Thank you!

  • tehjingy_Altera's avatar
    tehjingy_Altera
    Icon for Regular Contributor rankRegular Contributor

    Hi Nicolas


    Sorry for the late reply.

    After making the modules there is an additional steps to install the module to a desired location.

    make -j modules_install INSTALL_MOD_PATH=<PATH>

    Once done, you could find the "stratix10-rsu.ko" at the path "modules_install/lib/modules/5.15.30-147098-gfeb06c9cc378/kernel/drivers/firmware"

    Please be aware that there are additional steps to build the ZLIB & RSU Client

    For more details you could look at the example at section 7.2 at the following document.

    https://www.intel.com/content/www/us/en/docs/programmable/683021/21-4/building-rsu-example-binaries-s10-fm.html


    The /dev/mtd0 should appear once u make the changes in quartus.

    Following the steps here:

    https://www.intel.com/content/www/us/en/docs/programmable/683184/21-4/creating-the-initial-flash-image-fm.html


    Regards

    Jingyang, Teh



    • Scotty2's avatar
      Scotty2
      Icon for Occasional Contributor rankOccasional Contributor

      Hi,

      I am waiting for the kernel with the right version and the enabled RSU module to be built so that I can try it on the hardware.

      Although I did follow the steps to build the initial flash version for "HPS first", the board does not seem to be able to boot without the RSU module loaded/baked/built into the kernel it seems.

      Will update this thread once I can run it on the hardware soon!

      Thank you

  • tehjingy_Altera's avatar
    tehjingy_Altera
    Icon for Regular Contributor rankRegular Contributor

    Hi


    Since there are no feedback for this thread, I shall set this thread to close pending. If you still need further assistance, you are welcome reopen this thread within 20days or open a new thread, someone will be right with you.


    If you happened to close this thread you might receive a survey. If you think you would rank your support experience less than 10 out of 10, please allow me to correct it before closing or if the problem can’t be corrected, please let me know the cause so that I may improve your future service experience.


    Regards

    Jingyang, Teh


  • Scotty2's avatar
    Scotty2
    Icon for Occasional Contributor rankOccasional Contributor

    Hello,

    I finally got the chance to test it on the hardware, I have set the "CONFIG_INTEL_STRATIX10_RSU=y" as suggested and copied the libraries for the RSU to the SD-CARD.

    The flash image was built with HPS first, following the instructions for creating multiple section in the flash for the FACTORY_IMAGE and the INITIAL_IMAGE.

    Trying to boot with this flash image and the RSU enabled, creates the following boot error in u-boot:

    Invalid bus 0 (err=-19)
    Failed to initialize SPI flash at 0:0 (error -19)
    RSU: Remote System Update Status
    Current Image   : 0x01000000
    Last Fail Image : 0x00000000
    State           : 0x00000000
    Version         : 0x00000202
    Error location  : 0x00000000
    Error details   : 0x00000000
    Retry counter   : 0x00000000
    RSU: Sub-partition table 0 offset 0x00910000
    RSU: Sub-partition table 1 offset 0x00918000
    Invalid bus 0 (err=-19)
    RSU: SPI probe failed.
    

    The output of the "dm tree" in u-boot (the spi does not seem to be binding/loading):

     Class     Index  Probed  Driver                Name
    -----------------------------------------------------------
     root         0  [ + ]   root_driver           root_driver
     simple_bus   0  [ + ]   generic_simple_bus    `-- soc
     reset        0  [ + ]   socfpga-reset             |-- rstmgr@ffd11000
     sysreset     0  [   ]   socfpga_sysreset          |   `-- sysreset
     eth          0  [   ]   dwmac_socfpga             |-- ethernet@ff800000
     mmc          0  [ + ]   socfpga_dwmmc             |-- dwmmc0@0xff808000
     blk          0  [ + ]   mmc_blk                   |   `-- dwmmc0@0xff808000.blk
     serial       0  [ + ]   ns16550_serial            |-- serial0@ffc02000
     spi          0  [   ]   cadence_spi               |-- spi@ff8d2000
     i2c          0  [   ]   i2c_designware            |-- i2c@ffc02800
     i2c          1  [   ]   i2c_designware            |-- i2c@ffc02900
     syscon       0  [ + ]   syscon                    `-- sysmgr@ffd12000
    

    for reference, the map file of the flash image is the following:

    BOOT_INFO                     0x00000000      0x0010FFFF
    FACTORY_IMAGE                 0x00110000      0x0090FFFF (0x0017BFFF)
    SPT0                          0x00910000      0x00917FFF
    SPT1                          0x00918000      0x0091FFFF
    CPB0                          0x00920000      0x00927FFF
    CPB1                          0x00928000      0x0092FFFF
    P1                            0x01000000      0x01FFFFFF (0x0106BFFF)
    P2                            0x02000000      0x02FFFFFF
    P3                            0x03000000      0x03FFFFFF

    I have searched online for solutions and came across this post with similar error message...

    Note that booting with a "normal" flash image (without the RSU feature) still works but of course the original issues still persist:

    librsu: librsu_misc_get_devattr(): error: Unable to open device attribute file '/sys/devices/platform/stratix10-rsu.0/spt0_address' [LOW]
    librsu: librsu_ll_open_qspi(): error: Unable to open '/dev/mtd0' [LOW]
    librsu_init return -2

    Are there other configurations that need to be change to support RSU? maybe u-boot .config file or the device tree?

    thank you!

  • Scotty2's avatar
    Scotty2
    Icon for Occasional Contributor rankOccasional Contributor

    I will leave this here in case someone in the future needs to do this.

    checkout this link for version compatibility:

    Remote System Update Compatibility | Documentation | RocketBoards.org

    What "worked" for me was to compile ATF 2.4.1, kernel 5.4.114 with RSU and u-boot 2021.01 plus the RSU libraries that needs to be put on the HPS, essentially the exact version they had in their manual.

    ATF 2.6.1 crashed when booting into the kernel, with u-boot 2021.01, Intel does not really support older versions, so performance most likely will regress.

    Side note:

    Updating to u-boot 2021.01 from 2019 also meant that the L3 registers needed to be handled differently, the "sec_reg" driver that they introduced that can touch the L3 registers in the DTS file, only starts to exist from uboot 2021.04 and even then, it does not preserve the values of the RESERVED registers.

    So for that I had to follow the suggestions at here and recompile ATF with the modification to its source code and add a script in u-boot to set them before booting the kernel.