This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

c6678 bootloader - SRIo and Ethernet modes

I have been looking through the keystone training and the sprugy5a user guide on the bootloader and had a few questions that needed clarification.

A little background: We will be making use of either SRIO or Ethernet to boot multiple DSPs by broadcasting or using point-to-point from a host processor on the same card. All of the cores are expected to run the same image which will load into SL2 and DDR3. At run time, different cores and DSPs may run different portions of the codebase depending on applications etc. Individual core L2s will only contain data.

My questions are:

The bootloader in ROM allocates a portion of corePac0 L2 for its use. These values include a DDR configuration table and the boot parameter tables. The user guide talks of the DDR config table values being all zero by default in the L2 space. Since the bootcode is in ROM, we obviously cannot change that from its default setup. Does the setup for the DDR work as follows: Bootloader runs with mode setup as SRIO or Ethernet; host then sends DDR table configuration code via a boot table over SRIO or Ethernet; on completion corePac0 jumps to DDR table configuration code (in corePac0 L2); code reset BOOT_MAGIC address to null and then populates entries in DDR config table then host after waiting a while to ensure that DSP has completed initialization loads application code similarly via SRIO or Ethernet using boot tables then writes the start address into the core 0 magic address which starts application. This idea can also be used to setup the EMAC mode boot parameter tables such as MAC addresses, ports etc to use for Ethernet packets directed to the PAs for each DSP. I am a little unsure about how the packets get to the DSP over Ethernet before the Ethernet mode boot parameter table values are setup in L2 space since the default values are all zeros so than the MAC address for the DSP will be all zeros so how will the host device know the mac address to send the Ethernet packets to?

The SRIO example under mcsdk_2_00_02_14\tools\boot_loader\examples\srio\ is really for DSP to DSP srio transfer in Direct I/o mode ? Can a non-DSP host also make use of it as long as it knows the destination memory space layout?

Is the corePacs BOOT_MAGIC_ADDRESS all intialized to zeros at initialization? I assume so as this location is being sampled to see a non-zero value to indicate that boot has completed and can then use that address as the start address for each corePac. I am assuming that the start address which is the first word in the boot table will be written after the termination record is received.

We should only need one bootload per DSP as all code is in SL2 and DDR3. The SL2 starting code is also tasked with setting up the boot magic addresses for the other cores and should write to the IPC register to trigger interrupts for each secondary corePac.

Can you confirm: For the SRIO mode, the SRIO message (i.e. boot tables sections which itself are prepended with the magic address) is prepended with the 32bit SRIO message mode boot header. While for the Ethernet boot mode the 32bit boot table frame header (which has the boot magic number) prepends the boot table sections but the Ethernet header prepends that.

The Ethernet ready frame that is configurable to be sent by the DSP every 3 seconds stops sending when the Rx queue receives the first boot packet. Also the user guide talks about after configuration of PA etc. is complete that the Ethernet ready frame is then sent. My question then is that if the bootloader is in Ethernet mode, it will run configuration so how can one setup the configuration. I am guessing this cannot be done in Ethernet mode and maybe this has to be done in SRIO mode prior to using Ethernet mode.

  • My answers are inline:

    I have been looking through the keystone training and the sprugy5a user guide on the bootloader and had a few questions that needed clarification.

    A little background: We will be making use of either SRIO or Ethernet to boot multiple DSPs by broadcasting or using point-to-point from a host processor on the same card. All of the cores are expected to run the same image which will load into SL2 and DDR3. At run time, different cores and DSPs may run different portions of the codebase depending on applications etc. Individual core L2s will only contain data.

    My questions are:

    The bootloader in ROM allocates a portion of corePac0 L2 for its use. These values include a DDR configuration table and the boot parameter tables. The user guide talks of the DDR config table values being all zero by default in the L2 space. Since the bootcode is in ROM, we obviously cannot change that from its default setup. Does the setup for the DDR work as follows: Bootloader runs with mode setup as SRIO or Ethernet; host then sends DDR table configuration code via a boot table over SRIO or Ethernet; on completion corePac0 jumps to DDR table configuration code (in corePac0 L2); code reset BOOT_MAGIC address to null and then populates entries in DDR config table then host after waiting a while to ensure that DSP has completed initialization loads application code similarly via SRIO or Ethernet using boot tables then writes the start address into the core 0 magic address which starts application. This idea can also be used to setup the EMAC mode boot parameter tables such as MAC addresses, ports etc to use for Ethernet packets directed to the PAs for each DSP. I am a little unsure about how the packets get to the DSP over Ethernet before the Ethernet mode boot parameter table values are setup in L2 space since the default values are all zeros so than the MAC address for the DSP will be all zeros so how will the host device know the mac address to send the Ethernet packets to?

    <AVM> You can do I2C primary boot and change the boot parameter for the Ethernet/SRIO boot and also the DDR configuration and then reenter the Ethernet boot mode.

    The SRIO example under mcsdk_2_00_02_14\tools\boot_loader\examples\srio\ is really for DSP to DSP srio transfer in Direct I/o mode ? Can a non-DSP host also make use of it as long as it knows the destination memory space layout?

    <AVM> Yes you can.

    Is the corePacs BOOT_MAGIC_ADDRESS all intialized to zeros at initialization? I assume so as this location is being sampled to see a non-zero value to indicate that boot has completed and can then use that address as the start address for each corePac. I am assuming that the start address which is the first word in the boot table will be written after the termination record is received.

    <AVM> Yes

    We should only need one bootload per DSP as all code is in SL2 and DDR3. The SL2 starting code is also tasked with setting up the boot magic addresses for the other cores and should write to the IPC register to trigger interrupts for each secondary corePac.

    <AVM> I am not sure what you meant by one bootload/core. But in general you can load all the images (one/core) and the code in core0 is responsible to write the boot magic address for other cores and set the IPC register to release other cores from IDLE.

    Can you confirm: For the SRIO mode, the SRIO message (i.e. boot tables sections which itself are prepended with the magic address) is prepended with the 32bit SRIO message mode boot header. While for the Ethernet boot mode the 32bit boot table frame header (which has the boot magic number) prepends the boot table sections but the Ethernet header prepends that.

    <AVM> Yes

    The Ethernet ready frame that is configurable to be sent by the DSP every 3 seconds stops sending when the Rx queue receives the first boot packet. Also the user guide talks about after configuration of PA etc. is complete that the Ethernet ready frame is then sent. My question then is that if the bootloader is in Ethernet mode, it will run configuration so how can one setup the configuration. I am guessing this cannot be done in Ethernet mode and maybe this has to be done in SRIO mode prior to using Ethernet mode.

    <AVM> Either you can do in SRIO boot mode if you don't want to you can configure the ethernet mode configuration in ethernet mode throught he image you are sending and reenter the boot code to boot again in ethernet mode.

    Thanks,

    Arun.

  • ArunMani wrote the following post at 12-28-2011 2:55 PM:

    My answers are inline:

    I have been looking through the keystone training and the sprugy5a user guide on the bootloader and had a few questions that needed clarification.

    A little background: We will be making use of either SRIO or Ethernet to boot multiple DSPs by broadcasting or using point-to-point from a host processor on the same card. All of the cores are expected to run the same image which will load into SL2 and DDR3. At run time, different cores and DSPs may run different portions of the codebase depending on applications etc. Individual core L2s will only contain data.

    My questions are:

    The bootloader in ROM allocates a portion of corePac0 L2 for its use. These values include a DDR configuration table and the boot parameter tables. The user guide talks of the DDR config table values being all zero by default in the L2 space. Since the bootcode is in ROM, we obviously cannot change that from its default setup. Does the setup for the DDR work as follows: Bootloader runs with mode setup as SRIO or Ethernet; host then sends DDR table configuration code via a boot table over SRIO or Ethernet; on completion corePac0 jumps to DDR table configuration code (in corePac0 L2); code reset BOOT_MAGIC address to null and then populates entries in DDR config table then host after waiting a while to ensure that DSP has completed initialization loads application code similarly via SRIO or Ethernet using boot tables then writes the start address into the core 0 magic address which starts application. This idea can also be used to setup the EMAC mode boot parameter tables such as MAC addresses, ports etc to use for Ethernet packets directed to the PAs for each DSP. I am a little unsure about how the packets get to the DSP over Ethernet before the Ethernet mode boot parameter table values are setup in L2 space since the default values are all zeros so than the MAC address for the DSP will be all zeros so how will the host device know the mac address to send the Ethernet packets to?

    <AVM> You can do I2C primary boot and change the boot parameter for the Ethernet/SRIO boot and also the DDR configuration and then reenter the Ethernet boot mode.

    I do not think I can do I2C primary boot so based on your reply to my later question, I am thinking I should be able to use Ethernet boot twice, once to setup the DDR and ethernet configuration and once more to use the update Ethernet and DDR configuration?

    The SRIO example under mcsdk_2_00_02_14\tools\boot_loader\examples\srio\ is really for DSP to DSP srio transfer in Direct I/o mode ? Can a non-DSP host also make use of it as long as it knows the destination memory space layout?

    <AVM> Yes you can.

    Is the corePacs BOOT_MAGIC_ADDRESS all intialized to zeros at initialization? I assume so as this location is being sampled to see a non-zero value to indicate that boot has completed and can then use that address as the start address for each corePac. I am assuming that the start address which is the first word in the boot table will be written after the termination record is received.

    <AVM> Yes

    We should only need one bootload per DSP as all code is in SL2 and DDR3. The SL2 starting code is also tasked with setting up the boot magic addresses for the other cores and should write to the IPC register to trigger interrupts for each secondary corePac.

    <AVM> I am not sure what you meant by one bootload/core. But in general you can load all the images (one/core) and the code in core0 is responsible to write the boot magic address for other cores and set the IPC register to release other cores from IDLE.

    thanks

    Can you confirm: For the SRIO mode, the SRIO message (i.e. boot tables sections which itself are prepended with the magic address) is prepended with the 32bit SRIO message mode boot header. While for the Ethernet boot mode the 32bit boot table frame header (which has the boot magic number) prepends the boot table sections but the Ethernet header prepends that.

    <AVM> Yes

    The Ethernet ready frame that is configurable to be sent by the DSP every 3 seconds stops sending when the Rx queue receives the first boot packet. Also the user guide talks about after configuration of PA etc. is complete that the Ethernet ready frame is then sent. My question then is that if the bootloader is in Ethernet mode, it will run configuration so how can one setup the configuration. I am guessing this cannot be done in Ethernet mode and maybe this has to be done in SRIO mode prior to using Ethernet mode.

    <AVM> Either you can do in SRIO boot mode if you don't want to you can configure the ethernet mode configuration in ethernet mode throught he image you are sending and reenter the boot code to boot again in ethernet mode.

    To reenter the boot code, does one simply put the MAGIC address as the ROM address so that the Bootcode executes on completion of the transfer of the ethernet mode configuration?

    Thanks,

    Arun.

    Thanks for your reply.
    Aamir
  • Arun,

    Are you able to confirm answers to my questions in the thread above for me please!

    Thanks, Aamir

  • Sorry for the delay Aamir.

    For the first quest yes you are right. For the second one. You cannot change the boot magic address. But in you first image that you are loading, add the branch address to ROM boot. The PLL fix in the processor wiki has the symbol you can use. Please let me know if you cannot find it.

     

    Thanks,

    Arun.

  • Thanks for the info on the PLL fix.

    I found the file reboot.c with the function call romtReInit to re-execute the ROM code.

    Thanks, Aamir