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.

Hyperlink segment length question (C6678)

I can't understand well the pourpose of the field rxlen_val in the Rx Address Segment Value Register.

Isn't that field redundant since in Rx Address Selector Control i've already choose the number of segment and the mask for identify the offset in the segment and consequently the size of the segments (field rxsegsel)?

What happen if i choose different values in rxlen_val and rxsegsel?

  • Hi Gabriele,

    The rxlen_val is used for select a segment size. (rxlen_val = 19, the segment size is 0x0010_0000).

    Rx Address Secure Selector(rxsegsel) =9, address bit 25 is used for the security selector. For Example: Bit 25 of the incoming address 0x1E08_0050 is 0b1. Therefore, the outgoing security signal uses the RXSECHI field in the Rx Address Selector Control Register. In this case, the RXSECHI field is 1.

    Please refer section "2.7.4.2.3 Example of Address Translation" on PCIe user guide(SPRUGW8C).

    Thanks,

  • i was asking about rxsegsel (Segment Selector) not about rxsecsel  (Security bit selector)...

    it seems that rxlen_val and rxsegsel both apply a mask to incoming address but i don't understand the difference and the priority of the 2 masking level and what happen if the lenght value in these 2 fields is different

  • Hi Gabriele,

    RxSegSel field is used to determine the segment address and OFFSET_MASK value is for the address remapping at the RX side. There are 16 offset masks in HyperLink.

    If RxSegSel = 8 , The segment selector is based on address bit 29:24 and the address mask is 0x00ffffff. (Ex: Rx address 0x1E08_0050 means segment sel = 0x1E, the segment address is value at 0x1E location.

    rxlen_val field is used for select a segment size. (rxlen_val = 19, the segment size is 0x0010_0000).

    Thanks,

  • Hi Gabriele

    You can see it in this way:
    rxsegsel defines the number of memory segments and their maximum size. So, for example, you can have a single segment of 256MB or 2 of 128MB, or 4 of 64MB, and so on...
    rxlen_val defines the effective size of the segment and of course his value must be lower than the one specified in rxsegsel

  • Henry, thanks for the answer.

    And so, in the formula Translated Address at the RX side = Segment Address + (Rx Address & OFFSET_MASK).
    What is the mask that is considered? The one defined by rxsegsel or the one defined by rxlen_val?

    Thanks