[Skiboot] [PATCH 00/10] Import external libraries for MCTP/PLDM protocols

Christophe Lombard clombard at linux.vnet.ibm.com
Sat Feb 26 00:46:35 AEDT 2022


On OpenBMC, IPMI is currently the primary industry-standard means of
communication between the BMC and the Host firmware. Due to some inherent
limitations of IPMI on OpenPOWER servers, there is a need to improve upon
the communication protocol.

This design aims to employ Platform Level Data Model (PLDM), a standard
application layer communication protocol defined by the DMTF. PLDM draws
inputs from IPMI, but it overcomes most of the latter's limitations. PLDM
is also designed to run on standard transport protocols, for e.g. MCTP
(also designed by the DMTF). MCTP provides for a common transport layer
over several physical channels, by defining hardware bindings. The
solution of PLDM over MCTP also helps overcome some of the limitations of
the hardware channels that IPMI uses.

PLDM is designed to be an effective interface and data model that provides
efficient access to low-level platform inventory, monitoring, control,
event, and data/parameters transfer functions.

    ----------------------------------------------------------------
    -            PLDM profiles (DSP0247-DSP0248, ...)  (libpldm)   -
    -                                                              -
    -                                                    oem IBM   -
    -  -----------------  --------------  -----------  ----------- -
    -  -    BIOS       -  - Platform   -  - FRU     -  - File io - -
    -  - configuration -  - monitoring -  - data    -  -         - -
    -  - & control     -  - & control  -  -         -  -         - -
    -  -               -  -            -  -         -  -         - -
    -  -----------------  --------------  -----------  ----------- -

  --------------------------------------------
  -            PLDM Base (libpldm)           -
  -             DSP0240                      -  -
  --------------------------------------------  | PLDM over MCTP binding
                                        |       | DSP0241
  --------------------------------------------  |
  -            MCTP Base (libmctp)           -  -
  -             DSP0236                      -
  --------------------------------------------  -
      |                           |             | MCTP PCIe VDM
  ----------------            ----------------  | transport binding
  -   LPC        -            -  PCIe VDM    -  - DSP0238
  ----------------            ----------------
 

This patch set imports external libraries to handle the MCTP and PLDM
protocols. New series will be provided later for the management of requests
to and from the host.

Implement MCTP and PLDM features:
- MCTP over LPC Binding.
- PLDM responder.
- PLDM requester.
- PLDM Platform requests.
- PLDM Bios requests.
- PLDM File IO requests.

Integrate PLDM on current flash handling code:
- PLDM LID Files handling.
- Opal-prd support

MCTP over PCIe VDM Binding.


To enable the new PLDM feature add CONFIG_PLDM as a parameter:
  make .... CONFIG_PLDM=1

Christophe Lombard (10):
  libc: Expand limits.h and include in stdint.h
  libc: Add ENXIO error code
  include: Expand print conversion specificier macros
  include: Provide endian conversion functions
  include: Create err.h header file
  include/asm: Create asm_byteorder.h header file
  pldm: Export logging feature
  libmctp: Import libmctp library handling MCTP protocol
  pldm/libpldm: Import libpldm library handling PLDM protocol
  pldm/ibm/libpldm: Import oem IBM libpldm library

 Makefile                            |    2 +
 Makefile.main                       |   20 +-
 core/console-log.c                  |    2 +-
 include/asm/byteorder.h             |   10 +
 include/endian.h                    |   21 +
 include/inttypes.h                  |    6 +
 include/skiboot.h                   |    1 +
 libc/include/err.h                  |   16 +
 libc/include/errno.h                |   11 +-
 libc/include/limits.h               |    6 +
 libc/include/stdint.h               |    3 +
 libmctp/LICENSE                     |  547 +++++++++
 libmctp/Makefile.inc                |   22 +
 libmctp/alloc.c                     |   60 +
 libmctp/astlpc.c                    | 1366 +++++++++++++++++++++
 libmctp/config.h                    |   59 +
 libmctp/container_of.h              |    9 +
 libmctp/core.c                      |  813 +++++++++++++
 libmctp/crc32.c                     |   25 +
 libmctp/crc32.h                     |    9 +
 libmctp/libmctp-alloc.h             |   12 +
 libmctp/libmctp-astlpc.h            |   54 +
 libmctp/libmctp-cmds.h              |   74 ++
 libmctp/libmctp-log.h               |   24 +
 libmctp/libmctp-serial.h            |   38 +
 libmctp/libmctp.h                   |  151 +++
 libmctp/log.c                       |   75 ++
 libmctp/range.h                     |   18 +
 libmctp/serial.c                    |  359 ++++++
 pldm/ibm/libpldm/Makefile.inc       |   17 +
 pldm/ibm/libpldm/file_io.c          |  841 +++++++++++++
 pldm/ibm/libpldm/file_io.h          |  725 ++++++++++++
 pldm/ibm/libpldm/fru.h              |   21 +
 pldm/ibm/libpldm/host.c             |  106 ++
 pldm/ibm/libpldm/host.h             |  108 ++
 pldm/ibm/libpldm/platform_oem_ibm.c |   50 +
 pldm/ibm/libpldm/platform_oem_ibm.h |   56 +
 pldm/libpldm/Makefile.inc           |   23 +
 pldm/libpldm/base.c                 |  438 +++++++
 pldm/libpldm/base.h                 |  505 ++++++++
 pldm/libpldm/bios.c                 |  668 +++++++++++
 pldm/libpldm/bios.h                 |  618 ++++++++++
 pldm/libpldm/bios_table.c           | 1126 ++++++++++++++++++
 pldm/libpldm/bios_table.h           |  728 ++++++++++++
 pldm/libpldm/entity.h               |  149 +++
 pldm/libpldm/firmware_update.c      | 1567 ++++++++++++++++++++++++
 pldm/libpldm/firmware_update.h      | 1132 ++++++++++++++++++
 pldm/libpldm/fru.c                  |  548 +++++++++
 pldm/libpldm/fru.h                  |  507 ++++++++
 pldm/libpldm/pdr.c                  |  914 ++++++++++++++
 pldm/libpldm/pdr.h                  |  399 +++++++
 pldm/libpldm/platform.c             | 1706 +++++++++++++++++++++++++++
 pldm/libpldm/platform.h             | 1625 +++++++++++++++++++++++++
 pldm/libpldm/pldm_types.h           |  165 +++
 pldm/libpldm/state_set.h            |  236 ++++
 pldm/libpldm/states.h               |   27 +
 pldm/libpldm/utils.c                |  211 ++++
 pldm/libpldm/utils.h                |  108 ++
 58 files changed, 19130 insertions(+), 7 deletions(-)
 create mode 100644 include/asm/byteorder.h
 create mode 100644 include/endian.h
 create mode 100644 libc/include/err.h
 create mode 100644 libmctp/LICENSE
 create mode 100644 libmctp/Makefile.inc
 create mode 100644 libmctp/alloc.c
 create mode 100644 libmctp/astlpc.c
 create mode 100644 libmctp/config.h
 create mode 100644 libmctp/container_of.h
 create mode 100644 libmctp/core.c
 create mode 100644 libmctp/crc32.c
 create mode 100644 libmctp/crc32.h
 create mode 100644 libmctp/libmctp-alloc.h
 create mode 100644 libmctp/libmctp-astlpc.h
 create mode 100644 libmctp/libmctp-cmds.h
 create mode 100644 libmctp/libmctp-log.h
 create mode 100644 libmctp/libmctp-serial.h
 create mode 100644 libmctp/libmctp.h
 create mode 100644 libmctp/log.c
 create mode 100644 libmctp/range.h
 create mode 100644 libmctp/serial.c
 create mode 100644 pldm/ibm/libpldm/Makefile.inc
 create mode 100644 pldm/ibm/libpldm/file_io.c
 create mode 100644 pldm/ibm/libpldm/file_io.h
 create mode 100644 pldm/ibm/libpldm/fru.h
 create mode 100644 pldm/ibm/libpldm/host.c
 create mode 100644 pldm/ibm/libpldm/host.h
 create mode 100644 pldm/ibm/libpldm/platform_oem_ibm.c
 create mode 100644 pldm/ibm/libpldm/platform_oem_ibm.h
 create mode 100644 pldm/libpldm/Makefile.inc
 create mode 100644 pldm/libpldm/base.c
 create mode 100644 pldm/libpldm/base.h
 create mode 100644 pldm/libpldm/bios.c
 create mode 100644 pldm/libpldm/bios.h
 create mode 100644 pldm/libpldm/bios_table.c
 create mode 100644 pldm/libpldm/bios_table.h
 create mode 100644 pldm/libpldm/entity.h
 create mode 100644 pldm/libpldm/firmware_update.c
 create mode 100644 pldm/libpldm/firmware_update.h
 create mode 100644 pldm/libpldm/fru.c
 create mode 100644 pldm/libpldm/fru.h
 create mode 100644 pldm/libpldm/pdr.c
 create mode 100644 pldm/libpldm/pdr.h
 create mode 100644 pldm/libpldm/platform.c
 create mode 100644 pldm/libpldm/platform.h
 create mode 100644 pldm/libpldm/pldm_types.h
 create mode 100644 pldm/libpldm/state_set.h
 create mode 100644 pldm/libpldm/states.h
 create mode 100644 pldm/libpldm/utils.c
 create mode 100644 pldm/libpldm/utils.h

-- 
2.35.1



More information about the Skiboot mailing list