8000 Support for enumerating non-local endpoint IDs · Issue #61 · CodeConstruct/mctp · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Support for enumerating non-local endpoint IDs #61
Open
@yikaitsaiww

Description

@yikaitsaiww

We are facing a challenge where multiple devices in our system share the same I3C address and bus. This configuration is not supported by AssignEndpoint and AssignEndpointStatic.

Let me show our system architecture:

flowchart LR;
    BIC1["BIC 1
    StaticEID: 10"]
    BIC2["BIC 2
    StaticEID: 12"]
    CXL1["CXL 1
    StaticEID: 14"]
    CXL2["CXL 2
    StaticEID: 15"]
    BMC-->BIC1-->BIC2;
    BIC2-->CXL1;
    BIC2-->CXL2;
Loading
  • BMC communicates with BIC1, BIC2, CXL1, and CXL2 using MCTP over I3C.
  • BIC1 acts as a bridge for communications between the BMC and devices behind it (BIC2, CXL1, CXL2).
  • BIC1 leverages the EID to determine the destination of each transaction from the BMC.

To accommodate this architecture, we've configured all devices (BIC1, BIC2, CXL1, and CXL2) with the same I3C address in the entity-manager, distinguished only by their EIDs.

{
    "Address": ["7", "236", "128", "1", "0", "0"],
    "Bus": "1",
    "Class": "I3C",
    "StaticEndpointID": "10",
    "Name": "BIC1",
    "Type": "MCTPI3CTarget"
},
{
    "Address": ["7", "236", "128", "1", "0", "0"],
    "Bus": "1",
    "Class": "I3C",
    "StaticEndpointID": "12",
    "Name": "BIC2",
    "Type": "MCTPI3CTarget"
},
{
    "Address": ["7", "236", "128", "1", "0", "0"],
    "Bus": "1",
    "Class": "I3C",
    "StaticEndpointID": "14",
    "Name": "CXL1",
    "Type": "MCTPI3CTarget"
},
{
    "Address": ["7", "236", "128", "1", "0", "0"],
    "Bus": "1",
    "Class": "I3C",
    "StaticEndpointID": "15",
    "Name": "CXL2",
    "Type": "MCTPI3CTarget"
}

The MCTP tree we expect will be:

├─ /au/com/codeconstruct/mctp1/networks/1/endpoints/10
├─ /au/com/codeconstruct/mctp1/networks/1/endpoints/12
├─ /au/com/codeconstruct/mctp1/networks/1/endpoints/14
├─ /au/com/codeconstruct/mctp1/networks/1/endpoints/15

Here's a breakdown of the issue:

  1. AssignEndpointStatic checks if it has already assigned a different EID, so the final MCTP tree will be:
├─ /au/com/codeconstruct/mctp1/networks/1/endpoints/10

Only BIC1 is assigned EID.

  1. AssignEndpoint automatically assigns EIDs, and we confirmed journal that all four devices were assigned EID 9,
Jan 16 22:34:37 bmc mctpreactor[7126]: Added MCTP endpoint to device: [ network: 1, EID: 9 | interface: mctpi3c0, address: 0x [ 07 ec 80 01 00 00 ] ]
Jan 16 22:34:37 bmc mctpreactor[7126]: Added MCTP endpoint to device: [ network: 1, EID: 9 | interface: mctpi3c0, address: 0x [ 07 ec 80 01 00 00 ] ]
Jan 16 22:34:37 bmc mctpreactor[7126]: Added MCTP endpoint to device: [ network: 1, EID: 9 | interface: mctpi3c0, address: 0x [ 07 ec 80 01 00 00 ] ]
Jan 16 22:34:37 bmc mctpreactor[7126]: Added MCTP endpoint to device: [ network: 1, EID: 9 | interface: mctpi3c0, address: 0x [ 07 ec 80 01 00 00 ] ]

resulting in the MCTP tree shown in

├─ /au/com/codeconstruct/mctp1/networks/1/endpoints/9

Since all devices have the same EID, BIC1 cannot differentiate the destination based on the EID when the BMC tries to send data to BIC2, CXL1, or CXL2.

Given this, we're seeking alternative solutions to accommodate our specific configuration.

Thanks a lot.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0