Forum Discussion

plancheres's avatar
plancheres
Icon for New Contributor rankNew Contributor
1 month ago
Solved

RSU: Corrupted decision firmware after loading initial RSU image jic (Stratix 10)

Hi,

I'm programming an initial RSU image JIC containing a factory image and two application images and, after power cycling, the device always boots to the factory image with an RSU_STATUS of 

Current Image   : 0x00110000
Last Fail Image : 0x00100000
State           : 0xf004d00f
Version         : 0x0dcf0202
Error location  : 0x00000000
Error details   : 0x00000000
Retry counter   : 0x00000000

where state 0xF004D00F indicates decision firmware corruption. However, if I query the RSU DCMF status everything looks ok:

DCMF0: OK
DCMF1: OK
DCMF2: OK
DCMF3: OK

Perhaps there's something wrong with the boot.rbf that I assigned to the BOOT_INFO section? I generated the boot.rbf as follows:

quartus_pfg -c factory_image.sof boot.rbf -o rsu_boot=ON

Any ideas why the decision firmware is reported as being corrupted?

Extra info:

1) Note that the RSU image is otherwise fine, that is, the SPT/CPB are good and I can successfully switch to all the application images. Therefore, I don't believe there were any bit errors during JIC programming.

2) I  tried programming the initial RSU image using an SPT/CPB size of 32 KB and also 64 KB, and both gave the same result.

3) I'm not using the HPS, I'm using a Nios II core connected to the mailbox although I'm not sure this affects the decision firmware at all.

4) I attached the pfg that I used to generate the initial RSU image. The factory and application images are signed RBFs.

Regards,

Phil

  • Hi plancheres 

    The likely issue is that factory.rbf and the application RBFs are signed, but factory_boot.rbf was generated as an unsigned RBF:

     

    quartus_pfg -c factory_image.sof factory_boot_unsigned.rbf -o rsu_boot=ON

     

    Please sign the generated BOOT_INFO RBF using the same signing chain and private key used for the factory image:

     

    quartus_sign --family=stratix10 --operation=sign \  --qky=<signing_chain.qky> \  --pem=<signing_private_key.pem> \  factory_boot_unsigned.rbf factory_boot_signed.rbf

     

    Update Bitstream 1 in the PFG to use the signed file:

    <bitstream id="Bitstream_1">    <path>factory_boot_signed.rbf</path> </bitstream>

     

     

3 Replies

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

    Hi plancheres 

    The likely issue is that factory.rbf and the application RBFs are signed, but factory_boot.rbf was generated as an unsigned RBF:

     

    quartus_pfg -c factory_image.sof factory_boot_unsigned.rbf -o rsu_boot=ON

     

    Please sign the generated BOOT_INFO RBF using the same signing chain and private key used for the factory image:

     

    quartus_sign --family=stratix10 --operation=sign \  --qky=<signing_chain.qky> \  --pem=<signing_private_key.pem> \  factory_boot_unsigned.rbf factory_boot_signed.rbf

     

    Update Bitstream 1 in the PFG to use the signed file:

    <bitstream id="Bitstream_1">    <path>factory_boot_signed.rbf</path> </bitstream>

     

     

    • plancheres's avatar
      plancheres
      Icon for New Contributor rankNew Contributor

      Thank you for the clear solution tehjingy!

      Yes, my factory images and application images are signed and encrypted. Your solution worked, that is, signing the BOOT_INFO RBF with the quartus_sign command that you showed fixed the decision firmware corruption issue. My initial RSU image now boots into the first application image.

      Regards,

      Phil

  • plancheres's avatar
    plancheres
    Icon for New Contributor rankNew Contributor

    The pfg attachment isn't working so I'm copying the pfg file here, used to generate the initial RSU image:

    <pfg version="1">
        <settings custom_db_dir="./" mode="ASX4"/>
        <output_files>
            <output_file name="initial_rsu_dual_boot_image_64K_SPT_CPB" directory="." type="JIC">
                <file_options/>
                <secondary_file type="MAP" name="initial_rsu_dual_boot_image_64K_SPT_CPB_jic">
                    <file_options/>
                </secondary_file>
                <flash_device_id>Flash_Device_1</flash_device_id>
            </output_file>
        </output_files>
        <bitstreams>
            <bitstream id="Bitstream_1">
                <path>factory_boot.rbf</path>
            </bitstream>
            <bitstream id="Bitstream_2">
                <path>factory.rbf</path>
            </bitstream>
            <bitstream id="Bitstream_3">
                <path>Application_1.rbf</path>
            </bitstream>
            <bitstream id="Bitstream_4">
                <path>Application_2.rbf</path>
            </bitstream>
        </bitstreams>
        <flash_devices>
            <flash_device type="MT25QU02G" id="Flash_Device_1">
                <partition reserved="1" fixed_s_addr="1" s_addr="0x00000000" e_addr="0x0010FFFF" fixed_e_addr="1" id="BOOT_INFO" size="0"/>
                <partition reserved="1" extra_space="262144" fixed_s_addr="1" s_addr="0x00110000" e_addr="auto" fixed_e_addr="0" id="FACTORY_IMAGE" size="0"/>
                <partition reserved="1" fixed_s_addr="1" s_addr="auto" e_addr="auto" fixed_e_addr="1" id="SPT0" size="65536"/>
                <partition reserved="1" fixed_s_addr="1" s_addr="auto" e_addr="auto" fixed_e_addr="1" id="SPT1" size="65536"/>
                <partition reserved="1" fixed_s_addr="1" s_addr="auto" e_addr="auto" fixed_e_addr="1" id="CPB0" size="65536"/>
                <partition reserved="1" fixed_s_addr="1" s_addr="auto" e_addr="auto" fixed_e_addr="1" id="CPB1" size="65536"/>
                <partition reserved="0" fixed_s_addr="0" s_addr="auto" e_addr="auto" fixed_e_addr="0" id="P1" size="0"/>
                <partition reserved="0" fixed_s_addr="0" s_addr="auto" e_addr="auto" fixed_e_addr="0" id="P2" size="0"/>
            </flash_device>
            <flash_loader>1SM21BHU1AS</flash_loader>
        </flash_devices>
        <assignments>
            <assignment partition_id="BOOT_INFO">
                <bitstream_id>Bitstream_1</bitstream_id>
            </assignment>
            <assignment page="0" partition_id="FACTORY_IMAGE">
                <bitstream_id>Bitstream_2</bitstream_id>
            </assignment>
            <assignment page="1" partition_id="P1">
                <bitstream_id>Bitstream_3</bitstream_id>
            </assignment>
            <assignment page="2" partition_id="P2">
                <bitstream_id>Bitstream_4</bitstream_id>
            </assignment>
        </assignments>
    </pfg>