SSIT Support - 2023.2 English

Bootgen User Guide (UG1283)

Document ID
UG1283
Release Date
2023-10-18
Version
2023.2 English

Stacked Silicon Interconnect Technology (SSI technology) is used to break through the limitations of Moore’s law and deliver the capabilities to satisfy the most demanding design requirements.

A SSI Technology device consists of multiple super logic region (SLRs), where each SLR is one die. SLR0, also referred to as Master SLR, is the bottom die. SLR1 is second from bottom, SLR2 is third from bottom and so on. The AMD Versal™ adaptive SoC SSI technology variants can have a maximum of four SLRs.

Each SLR has its own platform management controller (PMC) and a programmable logic (PL) region like a monolithic Versal adaptive SoC, but the slave SLRs do not have AI Engine and processing system (PS) regions.

The final PDI to boot on this device is a PDI of PDIs. Because each SLR has its own PMC block, each SLR boots with a PDI which is integrated in the main PDI.
Note: PLM elf in each SLR should be same.
The BIF for Versal adaptive SoCs with SSI technology is different from its monolithic variant. Below is an example bif with two SLR devices.
Note: The whole BIF code block below goes into a Single file. Bootgen reads multiple BIF blocks and creates respective PDIs based on the BIF labels. These BIF block labels are referenced in master BIF, based on which Bootgen merges the individual PDIs into a master PDI. This master PDI alone is sufficient to boot an SSI technology device.
Note: The Slave SLRs is used the special smap_width=0 option indicating downstream connection and must not be changed.

SSI technology Non Secure Bif Example for a Single Slave SLR Device:

Example- HBM Devices

bitstream_boot_1:
{
 id_code = 0x04d28093
 extended_id_code = 0x01
 id = 0xb
 boot_config {smap_width=0}
 image
 {
  name = pmc_subsys
  id = 0x1c000001
  partition
  {
   id = 0xb01
   type = bootloader
   file = gen_files/plm.elf
  }
  partition
  {
   id = 0xb0A
   type = pmcdata, load = 0xf2000000
   file = gen_files/pmc_data_slr_1.cdo
  }
 }
 image
 {
  name = pl_noc
  id = 0x18700000
  partition
  {
   id = 0xb05
   type = cdo
   file = project_1_wrapper_boot_1.rnpi
  }
 }
}

bitstream_1:
{
 id_code = 0x04d28093
 extended_id_code = 0x01
 id = 0xc
 boot_config {smap_width=0}
 image
 {
  name = pl_cfi
  id = 0x18700000
  partition
  {
   id = 0xc03
   type = cdo
   file = project_1_wrapper_1.rcdo
  }
  partition
  {
   id = 0xc05
   type = cdo
   file = project_1_wrapper_1.rnpi
  }
 }
}

bitstream_master:
{
 id_code = 0x04d28093
 extended_id_code = 0x01
 id = 0x2
 image
 {
  name = pmc_subsys
  id = 0x1c000001
  partition
  {
   id = 0x01
   type = bootloader
   slr = 0
   file = gen_files/plm.elf
  }
  partition
  {
   id = 0x09
   type = pmcdata, load = 0xf2000000
   slr = 0
   file = gen_files/pmc_data.cdo
  }
 }
 image
 {
  name = SUB_SYSTEM_BOOT_MASTER
  id = 0x18700000
  type = slr-boot
  partition
  {
   id = 0x05
   type = cdo
   slr = 0
   file = project_1_wrapper_boot_0.rnpi
  }
  partition
  {
   id = 0xb15
   slr = 1
   section = bitstream_boot_1
  }
  partition
  {
   id = 0x02
   type = cdo
   file = noc_pll.rnpi
  }
 }
 image
 {
  name = lpd
  id = 0x4210002
  partition
  {
   id = 0x0C
   type = cdo
   slr = 0
   file = gen_files/lpd_data.cdo
  }
  partition
  {
   id = 0x0B
   core = psm
   slr = 0
   file = static_files/psm_fw.elf
  }
 }
 image
 {
  name = fpd
  id = 0x420c003
  partition
  {
   id = 0x08
   type = cdo
   slr = 0
   file = gen_files/fpd_data.cdo
  }
 }
 image
 {
  name = CONFIG_MASTER
  id = 0x18700000
  type = slr-config
  partition
  {
   id = 0xc16
   slr = 1
   section = bitstream_1
  }
  partition
  {
   id = 0x13
   type = cdo
   slr = 0
   file = project_1_wrapper_master_config.rcdo
  }
 }
}

SSI technology Non Secure Bif Example for a 2 Slave SLR Device:

// For generating SLR1 – boot PDI
bitstream_boot_1:
{
  id_code = 0x04d10093
  extended_id_code = 0x01
  id = 0xb
  boot_config {smap_width=0}
  image
  {
    name = pmc_subsys, id = 0x1c000001
    partition { id = 0xb01, type = bootloader, file = gen_files/plm.elf }
    partition { id = 0xb0A, type = pmcdata, load = 0xf2000000, file = gen_files/pmc_data_slr_1.cdo }
  }
  image
  {
    name = pl_noc, id = 0x18700000
    partition { id = 0xb05, type = cdo, file = boot_1.rnpi }
  }
}

// For generating SLR2 – boot PDI
bitstream_boot_2:
{
  id_code = 0x04d10093
  extended_id_code = 0x01
  id = 0xb
  boot_config {smap_width=0}
  image
  {
    name = pmc_subsys, id = 0x1c000001
    partition { id = 0xb01, type = bootloader, file = gen_files/plm.elf }
    partition { id = 0xb0A, type = pmcdata, load = 0xf2000000, file = gen_files/pmc_data_slr_2.cdo }
  }
  image
  {
    name = pl_noc, id = 0x18700000
    partition { id = 0xb05, type = cdo, file = boot_2.rnpi }
  }
}

// For generating SLR1 – partial config PDI
bitstream_1:
{
  id_code = 0x04d10093
  extended_id_code = 0x01
  id = 0xc
  boot_config {smap_width=0}
  image
  {
    name = pl_cfi, id = 0x18700000
    partition { id = 0xc03, type = cdo, file = config_1.rcdo }
    partition { id = 0xc05, type = cdo, file = config_1.rnpi }
  }
}

// For generating SLR2 – partial config PDI
bitstream_2:
{
  id_code = 0x04d10093
  extended_id_code = 0x01
  id = 0xc
  boot_config {smap_width=0}
  image
  {
    name = pl_cfi, id = 0x18700000
    partition { id = 0xc03, type = cdo, file = config_2.rcdo }
    partition { id = 0xc05, type = cdo, file = config_2.rnpi }
  }
}

// For generating final PDI – by combining above generated PDIs.
bitstream_master:
{
  id_code = 0x04d10093
  extended_id_code = 0x01
  id = 0x2
  image
  {
    name = pmc_subsys, id = 0x1c000001
    partition { id = 0x01, type = bootloader, slr = 0, file = gen_files/plm.elf }
    partition { id = 0x09, type = pmcdata, load = 0xf2000000, slr = 0, file = gen_files/pmc_data.cdo }
  }
  image
  {
    name = SUB_SYSTEM_BOOT_MASTER, id = 0x18700000, type = slr-boot
    partition { id = 0x05, type = cdo, slr = 0, file = boot_0.rnpi }
    partition { id = 0xb15, slr = 1, section = bitstream_boot_1 }
    partition { id = 0xb15, slr = 2, section = bitstream_boot_2 }
    partition { id = 0x02, type = cdo, file = gen_files/bd_70da_pspmc_0_0_noc_clock.cdo }
  }
  image
  {
    name = lpd, id = 0x4210002
    partition { id = 0x0C, type = cdo, slr = 0, file = gen_files/lpd_data.cdo }
    partition { id = 0x0B, core = psm, slr = 0, file = static_files/psm_fw.elf }
  }
  image
  {
    name = fpd, id = 0x420c003
    partition { id = 0x08, type = cdo, slr = 0, file = gen_files/fpd_data.cdo }
  }
  image
  {
    name = CONFIG_MASTER, id = 0x18700001, type = slr-config
    partition { id = 0xc16, slr = 1, section = bitstream_1 }
    partition { id = 0xc16, slr = 2, section = bitstream_2 }
    partition { id = 0x13, type = cdo, slr = 0, file = master_config.rcdo }
  }
}
Note: MCS format bootimage/PDI generation is supported for SSI technology devices. The intermediate PDIs that are generated for slaves are always in binary format. The final PDI generated would be in mcs format, if chosen.

SSI technology Authentication Bif Example for a 3 Slave SLR Device:

command : bootgen -arch versal -image all.bif -w on -o final_ref.bin -log error
 
bitstream_boot_1:
{
 id_code = 0x04d14093
 extended_id_code = 0x01
 id = 0xb
 
 boot_config {smap_width=0,bh_auth_enable}
 pskfile = PSK1.pem
 sskfile = SSK1.pem
 
 metaheader
 {
  authentication = rsa
 }
 image
 {
  name = pmc_subsys
  id = 0x1c000001
  partition
  {
   id = 0xb01
   type = bootloader
   authentication = rsa
   file = gen_files/plm.elf
  }
  partition
  {
   id = 0xb0A
   type = pmcdata, load = 0xf2000000
   file = gen_files/pmc_data_slr_1.cdo
  }
 }
 image
 {
  name = pl_noc
  id = 0x18700000
  partition
  {
   id = 0xb05
   type = cdo
   authentication = rsa
   file = project_1_wrapper_boot_1.rnpi
  }
 }
}
 
bitstream_boot_2:
{
 id_code = 0x04d14093
 extended_id_code = 0x01
 id = 0xb
 
 boot_config {smap_width=0,bh_auth_enable}
 pskfile = PSK2.pem
 sskfile = SSK2.pem
 
 metaheader
 {
  authentication = rsa
 }
 image
 {
  name = pmc_subsys
  id = 0x1c000001
  partition
  {
   id = 0xb01
   type = bootloader
   authentication = rsa
   file = gen_files/plm.elf
  }
  partition
  {
   id = 0xb0A
   type = pmcdata, load = 0xf2000000
   file = gen_files/pmc_data_slr_2.cdo
  }
 }
 image
 {
  name = pl_noc
  id = 0x18700000
  partition
  {
   id = 0xb05
   type = cdo
   authentication = rsa
   file = project_1_wrapper_boot_2.rnpi
  }
 }
}
 
bitstream_boot_3:
{
 id_code = 0x04d14093
 extended_id_code = 0x01
 id = 0xb
 
 boot_config {smap_width=0,bh_auth_enable}
 pskfile = PSK3.pem
 sskfile = SSK3.pem
 
 metaheader
 {
  authentication = rsa
 }
 image
 {
  name = pmc_subsys
  id = 0x1c000001
  partition
  {
   id = 0xb01
   type = bootloader
   authentication = rsa
   file = gen_files/plm.elf
  }
  partition
  {
   id = 0xb0A
   type = pmcdata, load = 0xf2000000
   file = gen_files/pmc_data_slr_3.cdo
  }
 }
 image
 {
  name = pl_noc
  id = 0x18700000
  partition
  {
   id = 0xb05
   type = cdo
   authentication = rsa
   file = project_1_wrapper_boot_3.rnpi
  }
 }
}
 
bitstream_1:
{
 id_code = 0x04d14093
 extended_id_code = 0x01
 id = 0xc
 
 pskfile = PSK1.pem
 sskfile = SSK1.pem
 boot_config {smap_width=0,bh_auth_enable}
 
 metaheader
 {
  authentication = rsa
 }
 image
 {
  name = pl_cfi
  id = 0x18700000
  partition
  {
   id = 0xc03
   type = cdo
   authentication = rsa
   file = project_1_wrapper_1.rcdo
  }
  partition
  {
   id = 0xc05
   type = cdo
   authentication = rsa
   file = project_1_wrapper_1.rnpi
  }
 }
}
 
bitstream_2:
{
 id_code = 0x04d14093
 extended_id_code = 0x01
 id = 0xc
 
 pskfile = PSK2.pem
 sskfile = SSK2.pem
 boot_config {smap_width=0,bh_auth_enable}
 
 metaheader
 {
  authentication = rsa
 }
 image
 {
  name = pl_cfi
  id = 0x18700000
  partition
  {
   id = 0xc03
   type = cdo
   authentication = rsa
   file = project_1_wrapper_2.rcdo
  }
  partition
  {
   id = 0xc05
   type = cdo
   authentication = rsa
   file = project_1_wrapper_2.rnpi
  }
 }
}
 
bitstream_3:
{
 id_code = 0x04d14093
 extended_id_code = 0x01
 id = 0xc
 
 pskfile = PSK3.pem
 sskfile = SSK3.pem
 boot_config {smap_width=0,bh_auth_enable}
  
 metaheader
 {
  authentication = rsa
 }
 image
 {
  name = pl_cfi
  id = 0x18700000
  partition
  {
   id = 0xc03
   type = cdo
   authentication = rsa
   file = project_1_wrapper_3.rcdo
  }
  partition
  {
   id = 0xc05
   type = cdo
   authentication = rsa
   file = project_1_wrapper_3.rnpi
  }
 }
}
 
bitstream_master:
{
 id_code = 0x04d14093
 extended_id_code = 0x01
 id = 0x2
 
 boot_config { bh_auth_enable }
 pskfile = psk.pem
 sskfile = ssk.pem
 
 metaheader
 {
  authentication = rsa
 }
 image
 {
  name = pmc_subsys
  id = 0x1c000001
  partition
  {
   id = 0x01
   type = bootloader
   slr = 0
   authentication = rsa
   file = gen_files/plm.elf
  }
  partition
  {
   id = 0x09
   type = pmcdata, load = 0xf2000000
   slr = 0
   file = gen_files/pmc_data.cdo
  }
 }
 image
 {
  name = BOOT_MAS_AUTH
  id = 0x18700000
  type = slr-boot
  partition
  {
   id = 0x05
   type = cdo
   slr = 0
   authentication = rsa
   file = project_1_wrapper_boot_0.rnpi
  }
  partition
  {
   id = 0xb15
   slr = 1
   authentication = rsa
   section = bitstream_boot_1
  }
  partition
  {
   id = 0xb15
   slr = 2
   authentication = rsa
   section = bitstream_boot_2
  }
  partition
  {
   id = 0xb15
   slr = 3
   authentication = rsa
   section = bitstream_boot_3
  }
  partition
  {
   id = 0x02
   type = cdo
   authentication = rsa
   file = noc_pll.rnpi
  }
 }
 image
 {
  name = lpd
  id = 0x4210002
  partition
  {
   id = 0x0C
   type = cdo
   slr = 0
   authentication = rsa
   file = gen_files/lpd_data.cdo
  }
  partition
  {
   id = 0x0B
   core = psm
   slr = 0
   authentication = rsa
   file = static_files/psm_fw.elf
  }
 }
 image
 {
  name = fpd
  id = 0x420c003
  partition
  {
   id = 0x08
   type = cdo
   slr = 0
   authentication = rsa
   file = gen_files/fpd_data.cdo
  }
 }
 image
 {
  name = CONF_MAS_AUTH
  id = 0x18700000
  type = slr-config
  partition
  {
   id = 0xc16
   slr = 1
   authentication = rsa
   section = bitstream_1
  }
  partition
  {
   id = 0xc16
   slr = 2
   authentication = rsa
   section = bitstream_2
  }
  partition
  {
   id = 0xc16
   slr = 3
   authentication = rsa
   section = bitstream_3
  }
  partition
  {
   id = 0x13
   type = cdo
   slr = 0
   authentication = rsa
   file = project_1_wrapper_master_config.rcdo
  }
 }