Description
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;
- 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:
AssignEndpointStatic
checks if it hasalready assigned a different EID
, so the final MCTP tree will be:
├─ /au/com/codeconstruct/mctp1/networks/1/endpoints/10
Only BIC1 is assigned EID.
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.