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.

66ak2h14: HyperLink Boot ROM Segment Mapping

Part Number: 66AK2H14
Other Parts Discussed in Thread: 66AK2H14, CDCM6208

I have two EMVK2Hx boards that are connected via a custom backplane to allow HyperLink message passing. I have successfully run the HyperLink example application and established communication between the two boards. I'm now attempting to boot one board over HyperLink. I believe I have successfully configured the boot mode within the BMC console to allow CorePac0 to boot over HyperLink. With the RX device in HyperLink boot mode and the TX device running the HyperLink example application I believe the HyperLink connection is established correctly. Now I need to understand the default segment mapping for the RX device. 

The only information that I have found regarding the HyperLink Boot ROM segment mapping was contained in a post from 2012. In that correspondence, dated April 17, 2012, Mr. Arun Mani indicated that the table would be included in the "next document version". To my knowledge this information is not contained in any TI documentation. If there is a document providing this information could you please direct me to it's location. Below is a copy of the table from the original post. I'm unclear as to the actual mapping of the four regions described as "Config Regs" with respect to the KeyStone II 66AK2H14 device.

Boot ROM Initialized HyperLink Segment Mapping

Segment

Size

Translated Address

Description

0 - N

Size of L2

Global address of Core0 L2 to CoreN L2

Global L2

N + 1

128k

0x08000000

XMC config

N + 2

1Mb

0x0bc00000

MSMC config

N + 3

Size of MSMC memory

0x0c000000

MSMC memory

N + 4

4Mb

0x01c00000

Config Regs

N + 5

4Mb

0x02000000

Config Regs

N + 6

4Mb

0x02400000

Config Regs

N + 7

2Mb

0x02800000

Config Regs

N + 8

512 Bytes

0x21000000

DDR Config

(N + 9) – 63

4Mb

0x80000000 (4Mb steps)

DDR Memory

(1) Could you please provide an updated table that reflects the HyperLink Boot ROM Segment Mapping for a KeyStone II 66AK2H14 device?

(2) What is the proper way to bring CorePac0 out of Idle to start execution of the loaded code assuming the boot magic address has already been updated? 

Thank you for your support.

Jack

  • Jack,

    Here is the update segment map for Keystone II devices.

    As indicated in the ARM Bootloader user guide :

    www.ti.com/.../spruhj3.pdf


    "After configuration of the peripheral, the ARM core executes a WFI instruction that causes the ARM to suspend execution waiting for an interrupt. While the ARM is suspended, the HyperLink host can write the boot image into the MSMC. After the image is written, the HyperLink host must write the execution starting address of the image to the host boot data address register. The HyperLink host must interrupt the ARM to break out of the suspended state. Each time an interrupt is triggered, the ARM core will poll the host boot data address register to check if the boot image is ready. If the host boot data address register indicates the boot image is ready, the bootloader will begin executing the boot image at the address specified in the register"

    You can refer to the SRIO example that we provide in the SDK to see how data gets pushed on the slave peripheral and then core0 wakeup takes place.

    The srioboot_example is the host side code.

    Regards,

    Rahul

  • Rahul,

    Thank you for your timely response. I will give this is try and let you know how it works out.

    Regards, 

    jack

  • Hi Rahul,

    I'm using CCS7 with PDK_K2HK_4_0_4. There is no "examples/srio" folder. In fact, there is no "examples" folder at all. There are only three subdirectories under "<PDK_ROOT>packages/ti/boot" which are "post", "sbl" and "writer". I have also downloaded the "keystone2_boot_examples.zip" and it doesn't have any SRIO boot examples either. The link that you sent is not for the KeyStone II family so I assume this is the disconnect. Are you suggesting that I download the C66x PDK to look at the SRIO boot examples?

    In my setup I'm not using any ARM cores. I'm using DSP CorePak0 on one EVMK2Hx board to load a boot image via HyperLink to a secondary EVMK2Hx board that has been configured to boot DSP CorePak0 via HyperLink. Hence, the instructions that you provided for bringing the ARM out of reset don't apply. However, I assume that the steps are similar looking at the DSP Bootloader Users Guide (sprugy5c.pdf). On the DSP side CorePak0 executes an IDLE instruction until an interrupt is received.

    If you could provide the SRIO boot example code for the KeyStone II that would be helpful.

    Thanks,

    jack

  • Jack,

    I am sorry, I meant there is an SRIO boot example in the Keystone I Processor SDK that you can use as reference.

    I have attached the zip version of the SRIO folder so that you don`t have to install the SDK for the Keystone I devices as well.

    7115.srio.zip

    Unfortunately, we don`t have any support for slave boot modes like Ethernet , SRIO or Hyperlink  in the Processor SDK for K2H devices.

    Here is some old Hyperlink boot test code that I found that you may be able to use as reference:

    vusrLoopBoot.zip

    Hope this helps.

    Regards,

    Rahul

  • Thanks for the information, I'll take a look at the code and let you know how it works out. 

    Regards, 

    jack

  • Hello Rahul, 

    I'm still not having any luck accessing the remote devices MSM (0x0C000000) via HyperLink. Below are some observations:

    (1) The HyperLink remote registers are not visible via offset (0x80) from the host HyperLink interface. I assumed that this was due to some configuration with the HyperLink interface in boot mode on the remote device. This is not the case when I have both boards running the example HyperLink demo application (hyplnk_K2HC66DevLibBiosExampleProject). 

    (2) I'm not sure if I'm running in to issues with the PrivID or SecID settings. In the example code that works the PrivID is set to 12 on both Tx and Rx sides. I've read in the HyperLink Training Slides (Eindhoven_Jan_12-08_Intro_To_Hyperlink.pdf) that the "agreed" values from HyperLink Privilege index is 13 for request from a core and 14 for requests initiated from another master. Does this still hold for the KeyStone II part and should I be setting the PrivID to 14 to interface with the remote device? Are there any particular settings that need to be observed for the security bits?

    (3) Based on the table that you supplied with the default segment mapping I have computed the following Tx side start addresses:

    Segment Tx Address Rx Address Description
    0 0x4000_0000 0x1080_0000 Core 0 Local L2
    1 0x4040_0000 0x1180_0000 Core 1 Local L2
    2 0x4080_0000 0x1280_0000 Core 2 Local L2
    3 0x40C0_0000 0x1380_0000 Core 3 Local L2
    4 0x4100_0000 0x1480_0000 Core 4 Local L2
    5 0x4140_0000 0x1580_0000 Core 5 Local L2
    6 0x4180_0000 0x1680_0000 Core 6 Local L2
    7 0x41C0_0000 0x1780_0000 Core 7 Local L2
    8 0x4200_0000 0x0BC0_0000 MSMC 
    9 0x4240_0000 0x0C00_0000 MSM (4MB) 
    10 0x4280_0000 0x0C40_0000 MSM (2MB)
    11 0x42C0_0000 0x01C0_0000 Control Reg.
    12 0x4300_0000 0x0200_0000 Control Reg.
    13 0x4340_0000 0x0240_0000 Control Reg.
    14 0x4380_0000 0x0280_0000 Control Reg.
    15 0x43C0_0000 0x2101_0000 DDR Config
    16 0x4400_0000 0x8000_0000 DDR Memory (4MB)

    WIth the above memory map I attempted to perform a transfer to MSM of the device configured in HyperLink boot mode as follows:

    uint32_t *hyplnk_RemoteMSMAddr_ptr = (uint32_t*)0x42400000;

    *hyplnk_RemoteMSMAddr_ptr = 0xCAFEBABE;

    The above transfer does not complete. No write occurs on the target DSP. Prior to the above setup I am configuring the HyperLink interface and setting the TxAddrOvly as follows:

    TXAddrOvly.txSecOvl = 0;

    TXAddrOvly.txPrivIDOvl = 14;

    TXAddrOvly.txIgnMask = 5;

    I've attempted a couple of different txPrivIDOvl settings with no luck. 

    As a sanity check I did confirm that I can write to MSM on the Rx device from within the debugger. So the question is, what should the TXAddrOvly settings be to match up with a device configured to boot via HyperLink over DSP 0?

    (4) It's not clear from documentation how to configure the HyperLink Boot device for a reference clock of 312.5 MHz. Bits 15:14 of the device configuration relate to the HyperLink reference clock. However, the only supported options, according to the latest KeyStone II reference manual, are 0 for 125 MHz and 1 for 156.25 MHz. The EVMK2Hx board clearly has a 312.5 MHz reference clock. What should the setting be for the reference clock in the boot configuration settings that I'm programming in the BMC for the device that is being configured for HyperLink boot via DSP0? Is 2 a valid option for the 312.5 MHz reference clock?

    Any thought/suggestions would be appreciated. 

  • HyperLink bootmode is not supported in the default configuration of the KeyStone II EVMK6Hx development board. As indicated above, the HyperLink reference clock is configured at 312.5MHz via the CDCM6208 Clock-Generator (U19). This can be modified via the BMC interface to adjust the clock down to the supported 156.25MHz rate. With this modification the place the interface appears to function as expected. I could successfully copy data to multiple regions of the "slave" device in HyperLink bootmode including MSM and L2 SRAM of multiple DSPs.
  • Jack,

    Thank you for posting your solution here. Hyperlink boot is not very widely used hence we don`t advertise the feature. Your effort will definitely help other who want to utilize this feature so we appreciate the guidance you have posted on the Forum.

    Regards,
    Rahul