<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Dear Jeremy, Andrew,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Appreciated of your comments. W<span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">e are using the
</span><span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">userspace </span><span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">MCTP and will consider moving
 to kernel space MCTP as the suggestion. </span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">Because of the specific requirements, we look forward for simpler way. In our case, we have on-chip sensors and events which are allocated in both 2 sockets,
 and the situation is: we must send the PLDM command to poll the data.  </span><span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">I</span><span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">f
 using 2 interfaces to communicate with host, I think it would be complex when sending to multiple sockets. </span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="color: rgb(0, 0, 0); font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt;">The things should be considered as :</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
+ If a socket is problem during runtime, is the process of MCTPL/PLDM still ok</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
+ If one, or more socket problem. Can we reboot the whole system to recover ?</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
When using 1 interface, i think:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
+ From the host side, socket 0 (master) should manage its other sockets, (might be not via SMBus, but other faster sockets communication). Of course, the more work should be implemented in the firmware, and you have pointed.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
+ BMC just recover the system (via reboot) when socket 0 issue, otherwise it does properly</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Do you think any more issues with the communication performance ?</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Jeremy Kerr <jk@codeconstruct.com.au><br>
<b>Sent:</b> Thursday, January 20, 2022 7:53 AM<br>
<b>To:</b> Tung Nguyen OS <tungnguyen@os.amperecomputing.com>; openbmc@lists.ozlabs.org <openbmc@lists.ozlabs.org><br>
<b>Cc:</b> Thu Nguyen OS <thu@os.amperecomputing.com>; Thang Nguyen OS <thang@os.amperecomputing.com><br>
<b>Subject:</b> Re: MCTP/PLDM BMC-host communication design</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Hi Tung,<br>
<br>
> We are using community PLDM/MCTP code to design our MCTP/PLDM stack<br>
> via SMBUS on aarch64 system. Basically, we have 2 CPU sockets<br>
> corresponding with 2 SMBUS addresses, and the MCTP/PLDM stack looks<br>
> like this image:<br>
>  <br>
> <a href="https://github.com/tungnguyen-ampere/images/blob/7dba355b4742d0ffab9cd39303bbb6e9c8a6f646/current_design.png">
https://github.com/tungnguyen-ampere/images/blob/7dba355b4742d0ffab9cd39303bbb6e9c8a6f646/current_design.png</a><br>
<br>
That looks good to me, but a couple of notes:<br>
<br>
 - EID 0 and EID 1 are reserved addresses according to the spec, the<br>
   usable range starts at 8<br>
<br>
 - therefore, the *convention* so far for EID allocation is to assign<br>
   EID 8 to the BMC, as the top-level bus owner, and allocate onwards<br>
   from there. However, that's certainly not fixed if you require<br>
   something different for your design.<br>
<br>
 - you don't necessarily need two EIDs (0 and 1) for the BMC there.<br>
   Even if there are two interfaces, you can use a single EID on the<br>
   BMC, which simplifies things.<br>
<br>
> Due to the not supported of discovery process, we are fixing the EIDs<br>
> for host.<br>
<br>
As Andrew has mentioned, we have the in-kernel stack working, including<br>
the EID discovery process using MCTP Control Protocol messaging.<br>
<br>
If you'd like to experiment with this, we have a couple of backport<br>
branches for 5.10 and 5.15 kernels, depending on which you're working<br>
with:<br>
<br>
 <a href="https://codeconstruct.com.au/docs/mctp-on-linux-introduction/#our-development-branches">https://codeconstruct.com.au/docs/mctp-on-linux-introduction/#our-development-branches</a><br>
<br>
It's still possible to use fixed EID(s) for remote endpoints though, if<br>
your host MCTP stack does not support the control protocol. You'll just<br>
need to set up (on the BMC) some static routes for the fixed remote<br>
EIDs. I'm happy to help out with configuring that if you like.<br>
<br>
> A new way that is considering is like the image:  <br>
> <a href="https://github.com/tungnguyen-ampere/images/blob/7dba355b4742d0ffab9cd39303bbb6e9c8a6f646/new_design.png">
https://github.com/tungnguyen-ampere/images/blob/7dba355b4742d0ffab9cd39303bbb6e9c8a6f646/new_design.png</a><br>
<br>
That looks like it has some considerable drawbacks though, being:<br>
<br>
 - you'll now need to implement MCTP bridging between the SMBus link<br>
   (between host and socket 0) and whatever interface you're using to<br>
   communicate between socket 0 and socket 1. This may then require you<br>
   to implement more of the control protocol stack on the host (for<br>
   example, as you'll need to allocate EID pools from the top-level bus<br>
   owner, if you're doing dynamic addressing).<br>
<br>
   That's all still possible, but requires more firmware you'll need to<br>
   implement<br>
<br>
 - if there's an issue with the socket 0's link, (say, if the host<br>
   has offlined offlined CPUs in socket 0), you might lose MCTP<br>
   connectivity between the BMC and socket 1 too.<br>
<br>
That said, it's still feasible, but I'd suggest your first design as a<br>
simpler and more reliable solution.<br>
<br>
Regards,<br>
<br>
<br>
Jeremy<br>
<br>
</div>
</span></font></div>
</body>
</html>