libpldmresponder comments
Supreeth Venkatesh
supreeth.venkatesh at arm.com
Tue Oct 8 03:58:59 AEDT 2019
On Sat, 2019-10-05 at 04:05 -0500, Deepak Kodihalli wrote:
> On 05/10/19 3:01 AM, Supreeth Venkatesh wrote:
> > On Fri, 2019-10-04 at 09:28 -0500, Deepak Kodihalli wrote:
> > > On 04/10/19 7:26 PM, Supreeth Venkatesh wrote:
> > > > Hello Deepak/all,
> > > >
> > > > Sorry for the late comments/feedback.
> > >
> > > No problem, thanks for the feedback Supreeth!
> > >
> > > > I was looking at porting libpldmresponder and libpldm to an Arm
> > > > based
> > > > platform.
> > >
> > > libpldm - sure, it is meant to be portable across OpenBMC, but
> > > libpldmresponder is not :)
> > >
> > > > These are few observations with the design, some of them were
> > > > discussed
> > > > during OSF OpenBMC Hackathon, summarizing them here:
> > > >
> > > > Assumption was that libpldmresponder can be easily ported to
> > > > Host/other
> > > > Satellite/Service Management controller,
> > >
> > > libpldmresponder was not meant to be ported outside OpenBMC -
> > > it's
> > > the
> > > OpenBMC implementation of the BMC as a PLDM responder.
> >
> > From our previous discussion, I was under the impression you
> > wanted
> > libPLDMresponder to get publicity and ported over as well.
> > If I was mistaken, the rest of discussion is moot.
>
> Well, there has to be an aspect of the stack that transforms PLDM
> concepts to OpenBMC concepts, and vice versa. That's
> libpldmresponder
> today. However, I think we're talking about a layer above this
> (which
> can probably sit in libpldm itself). I believe that's what you're
> suggesting below as well.
Yes.
>
> > >
> > > > However, in the current design,
> > > >
> > > > 1. libpldmresponder implements standard Commands/APIs defined
> > > > by
> > > > PLDM
> > > > specifications in C++.
> > > > 2. libpldmresponder PDR, BIOS config structures are defined
> > > > by
> > > > PLDM
> > > > specifications, However, the library uses Json format,
> > > > thus
> > > > making
> > > > JSON parser mandatory for
> > > > Host/Service management controller firmware.
> > > >
> > > > 3. libpldmresponder has DBUS/other OpenBMC implementation
> > > > dependencies,
> > > > thus making portability harder. > 4. I guess the
> > > > expectation
> > > > when we started with the design was that
> > > > there will be one **single** library which will handle all
> > > > pldm
> > > > requests/responses and
> > > >
> > > > upper layer application/Daemon will call the APIs provided by
> > > > PLDM
> > > > library to implement use cases as they fit.
> > >
> > > https://github.com/openbmc/docs/blob/master/designs/pldm-stack.md
> > > makes
> > > the distinction between a portable libpldm (which handles the
> > > protocol
> > > encode/decode), and an OpenBMC specific responder implementation.
> > >
> > > > 5. Libpldm also has dependencies on OpenBMC structures/DBUS
> > > > objects,
> > > > making it a little harder to port.
> > >
> > > No, libpldm has no OpenBMC dependencies. It for example is used
> > > by
> >
> > If I remember right, in libpldm, for getting date and time, there
> > was
> > dependency on OpenBMC object to get it from the timer as opposed to
> > upper level app calling into libpldm and providing date and time?
> > Now that I look at the code in repo, it does not seem to be the
> > case.
> > Please ignore my rant.
> >
> > > IBM's
> > > host firmware stacks today without any code changes. Can you
> > > point me
> > > to
> > > where you see D-Bus dependencies in libpldm? Do you just mean you
> > > find
> > > this hard to build outside an OpenBMC environment?
> >
> >
> > >
> > > > Please let me know, how I can help fix some of these, so that
> > > > it
> > > > is
> > > > easily portable.
> > >
> > > No change should be needed to libpldm code, it should already be
> > > portable like noted earlier. As far as the libpldmresponder is
> > > considered, like we discussed at the OSFC, one thing we could do
> > > is
> > > to
> > > write a responder API layer, the implementation of which is
> > > platform
> > > (for eg OpenBMC/ARM) specific. Would you like to propose a design
> > > update
> > > for this to the existing document? I think we need to understand
> > > the
> > > usefulness of such a layer though. I mean for example if you
> > > consider
> > > a
> > > PLDM command along the lines of ReadSensor, such a sensor maybe a
> > > D-
> > > Bus
> > > object on OpenBMC and something else on the ARM platform, those
> > > specifics *must* be implemented on the platform, so what would
> > > the
> > > portable layer consist of? Those details would be good to capture
> > > in
> > > the
> > > design doc.
> >
> > Ok. Thanks for the example command.
> > Let's take the example of "GetSensorReading" as specified by one of
> > the
> > PLDM specification,
> >
> > Use case: BMC is trying to get the current reading from a platform
> > smart (MCTP enabled) sensor.
> > Request is:
> > GetSensorReading (uint16 sensorID, bool8 rearmEventStatus)
>
> Just to clarify, the examples I was talking about, and what
> libpldmresponder today is meant to serve, is the case where the BMC
> is
> the final PLDM responder. Another example - say a requester wants to
> reboot the BMC. The native API for the same is a D-Bus property, so
> at
> some layer, a PLDM SetEffecter to reboot the BMC needs to be
> converted
> to a D-Bus operation - that's what libpldmresponder does.
For the example of rebooting the BMC, I think you mean
"SetStateEffecterStates" command to as per the specification. correct?
If yes, "SetStateEffecterStates" API in BMC will implement the
following:
1. It will parse the incoming request (from other endpoint),
2. Does the action (Native API --> DBus property invocation)
3. Respond back.
The implementation for this API will be provided by the platform.
>
> > Request Message to the smart MCTP enabled sensor (not including
> > headers
> > and other field for illustration only) will be somthing like this
> > GetSensorReading | Sensor ID | rearmEventStatus
> >
> > Response will contain the following fields:
> > enum8 completionCowhatde,
> > enum8 sensorDataSize,
> > enum8 sensorOperationalState,
> > bool8 sensorEventMessageEnable,
> > enum8 presentState,
> > enum8 previousState,
> > enum8 eventState,
> > var presentReading
> > These fields will be filled in by smart MCTP enabled sensor or
> > microcontroller(MCTP endpoint) which controls the sensor.
> >
> > Hence for this use case, my current thinking is that PLDM library
> > will
> > provide the standard template for GetSensorReading API as a
> > function
> > pointer.
>
> I'm not sure I followed this (the standard template part) entirely,
> but
> I can wait for details in the design doc update.
>
> > The implementation of this GetSensorReading in openBMC and in smart
> > sensor software/firmware will be different.
> > To elaborate a little further, the implementation of this API in
> > OpenBMC for this particular use case is to fill in the PLDM request
> > fields and send it over the to the smart sensor over MCTP over
> > sensor
> > specific physical media and get the response. (or can use DBUS
> > specifics to get the response, if possible)
> >
> > The smart sensor implementation of GetSensorReading will be
> > different
> > and it will be to parse PLDM request and then to fill in the
> > response
> > fields and send back the PLDM message over MCTP over sensor
> > specific
> > physical media.
> >
> > So, my thinking is to have a wrapper with function pointers, which
> > will
> > have all standard commands defined by the PLDM specification.
> > This wrapper can then be ported across management controller
> > software
> > and devices alike.
>
> So the wrapper will not have any handlers of incoming PLDM requests,
> right? It expects platforms to provide handlers?
>
> > I am thinking from the specification view point, but from your
> > email it
> > looks like to you want merge DBUS and PLDM concept. please confirm.
>
> libpldmresponder is the sink of an incoming message meant intended to
> be
> addressed by the BMC as the PLDM responder, so at that level OpenBMC
> specifics are expected to be seen. Although I think you're
> suggesting
> (and I like the concept in general, like I mentioned at the OSFC) a
> layer above the platform specific responder implementation, which
> provides hooks for platforms to provide their specific
> implementations
> of a PLDM command. Please let me know if I've misunderstood what
> you're
> suggesting.
This is exactly what I am suggesting --> Platform hook.
>
> > I can add more details when I propose a design.
>
> Sounds good!
>
> >
> > >
> > > > Thanks,
> > > >
> > > > Supreeth
> > > >
> > > > IMPORTANT NOTICE: The contents of this email and any
> > > > attachments
> > > > are
> > > > confidential and may also be privileged. If you are not the
> > > > intended
> > > > recipient, please notify the sender immediately and do not
> > > > disclose
> > > > the
> > > > contents to any other person, use it for any purpose, or store
> > > > or
> > > > copy
> > > > the information in any medium. Thank you.
> > >
> > >
>
>
More information about the openbmc
mailing list