[Skiboot] [PATCH V4 0/9] Import external libraries for MCTP/PLDM protocols

Christophe Lombard clombard at linux.ibm.com
Wed Jun 21 00:51:58 AEST 2023


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
  ----------------            ----------------
 

The serie of patches put in place 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.

- MCTP over LPC Binding.
- PLDM responder.
- PLDM requester.
- PLDM Platform requests.
- PLDM Bios requests.
- PLDM File IO requests.
- PLDM LID Files handling.
- MCTP over PCIe VDM Binding.

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

Changelog[v4]
 - Rebase to latest upstream.
 - patch7: Re-synchronizing with latest upstream
 - patch8: Re-synchronizing with latest upstream
 - patch9: Re-synchronizing with latest upstream

Changelog[v3]
 - Rebase to latest upstream.
 - Remove patch: include: Create err.h header file
 - patch7: Re-synchronizing with latest upstream
 - patch8: Re-synchronizing with latest upstream
 - patch9: Re-synchronizing with latest upstream

Changelog[v2]
 - Rebase to latest upstream.
 - patch8 : - Add README.skiboot file.
 - patch9 : - Add README.skiboot file.
 - patch10: - Add README.skiboot file.

Christophe Lombard (9):
  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/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                                 |   15 +-
 core/console-log.c                            |    2 +-
 include/asm/byteorder.h                       |   10 +
 include/endian.h                              |   24 +
 include/inttypes.h                            |    6 +
 include/skiboot.h                             |    1 +
 libc/include/errno.h                          |   12 +-
 libc/include/limits.h                         |    6 +
 libc/include/stdint.h                         |    3 +
 libmctp/LICENSE                               |  547 ++++
 libmctp/Makefile.inc                          |   22 +
 libmctp/README.skiboot                        |   15 +
 libmctp/alloc.c                               |   59 +
 libmctp/astlpc.c                              | 1497 +++++++++++
 libmctp/config.h                              |   59 +
 libmctp/container_of.h                        |    9 +
 libmctp/core.c                                |  851 ++++++
 libmctp/crc32.c                               |   25 +
 libmctp/crc32.h                               |    9 +
 libmctp/libmctp-alloc.h                       |   12 +
 libmctp/libmctp-astlpc.h                      |   58 +
 libmctp/libmctp-cmds.h                        |   74 +
 libmctp/libmctp-log.h                         |   24 +
 libmctp/libmctp-serial.h                      |   40 +
 libmctp/libmctp.h                             |  174 ++
 libmctp/log.c                                 |   75 +
 libmctp/range.h                               |   26 +
 libmctp/serial.c                              |  383 +++
 pldm/include/libpldm/base.h                   |  580 ++++
 pldm/include/libpldm/bios.h                   |  620 +++++
 pldm/include/libpldm/bios_table.h             |  729 +++++
 pldm/include/libpldm/entity.h                 |  149 ++
 pldm/include/libpldm/firmware_update.h        | 1139 ++++++++
 pldm/include/libpldm/fru.h                    |  507 ++++
 .../libpldm/oem/ibm/libpldm/entity_oem_ibm.h  |   17 +
 .../include/libpldm/oem/ibm/libpldm/file_io.h |  915 +++++++
 .../libpldm/oem/ibm/libpldm/fru_oem_ibm.h     |   21 +
 pldm/include/libpldm/oem/ibm/libpldm/host.h   |  108 +
 .../oem/ibm/libpldm/platform_oem_ibm.h        |   56 +
 .../oem/ibm/libpldm/state_set_oem_ibm.h       |   58 +
 pldm/include/libpldm/pdr.h                    |  411 +++
 pldm/include/libpldm/platform.h               | 2184 +++++++++++++++
 pldm/include/libpldm/pldm_types.h             |  165 ++
 pldm/include/libpldm/state_set.h              |  237 ++
 pldm/include/libpldm/states.h                 |   27 +
 pldm/include/libpldm/utils.h                  |  111 +
 pldm/libpldm/Makefile.inc                     |   24 +
 pldm/libpldm/README.skiboot                   |   17 +
 pldm/libpldm/base.c                           |  518 ++++
 pldm/libpldm/bios.c                           |  671 +++++
 pldm/libpldm/bios_table.c                     | 1163 ++++++++
 pldm/libpldm/firmware_update.c                | 1571 +++++++++++
 pldm/libpldm/fru.c                            |  553 ++++
 pldm/libpldm/msgbuf.h                         |  596 +++++
 pldm/libpldm/msgbuf/platform.h                |  127 +
 pldm/libpldm/oem/ibm/Makefile.inc             |   19 +
 pldm/libpldm/oem/ibm/README.skiboot           |   15 +
 pldm/libpldm/oem/ibm/file_io.c                | 1057 ++++++++
 pldm/libpldm/oem/ibm/host.c                   |  108 +
 pldm/libpldm/oem/ibm/platform.c               |   50 +
 pldm/libpldm/pdr.c                            |  978 +++++++
 pldm/libpldm/platform.c                       | 2373 +++++++++++++++++
 pldm/libpldm/utils.c                          |  224 ++
 64 files changed, 22131 insertions(+), 7 deletions(-)
 create mode 100644 include/asm/byteorder.h
 create mode 100644 include/endian.h
 create mode 100644 libmctp/LICENSE
 create mode 100644 libmctp/Makefile.inc
 create mode 100644 libmctp/README.skiboot
 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/include/libpldm/base.h
 create mode 100644 pldm/include/libpldm/bios.h
 create mode 100644 pldm/include/libpldm/bios_table.h
 create mode 100644 pldm/include/libpldm/entity.h
 create mode 100644 pldm/include/libpldm/firmware_update.h
 create mode 100644 pldm/include/libpldm/fru.h
 create mode 100644 pldm/include/libpldm/oem/ibm/libpldm/entity_oem_ibm.h
 create mode 100644 pldm/include/libpldm/oem/ibm/libpldm/file_io.h
 create mode 100644 pldm/include/libpldm/oem/ibm/libpldm/fru_oem_ibm.h
 create mode 100644 pldm/include/libpldm/oem/ibm/libpldm/host.h
 create mode 100644 pldm/include/libpldm/oem/ibm/libpldm/platform_oem_ibm.h
 create mode 100644 pldm/include/libpldm/oem/ibm/libpldm/state_set_oem_ibm.h
 create mode 100644 pldm/include/libpldm/pdr.h
 create mode 100644 pldm/include/libpldm/platform.h
 create mode 100644 pldm/include/libpldm/pldm_types.h
 create mode 100644 pldm/include/libpldm/state_set.h
 create mode 100644 pldm/include/libpldm/states.h
 create mode 100644 pldm/include/libpldm/utils.h
 create mode 100644 pldm/libpldm/Makefile.inc
 create mode 100644 pldm/libpldm/README.skiboot
 create mode 100644 pldm/libpldm/base.c
 create mode 100644 pldm/libpldm/bios.c
 create mode 100644 pldm/libpldm/bios_table.c
 create mode 100644 pldm/libpldm/firmware_update.c
 create mode 100644 pldm/libpldm/fru.c
 create mode 100644 pldm/libpldm/msgbuf.h
 create mode 100644 pldm/libpldm/msgbuf/platform.h
 create mode 100644 pldm/libpldm/oem/ibm/Makefile.inc
 create mode 100644 pldm/libpldm/oem/ibm/README.skiboot
 create mode 100644 pldm/libpldm/oem/ibm/file_io.c
 create mode 100644 pldm/libpldm/oem/ibm/host.c
 create mode 100644 pldm/libpldm/oem/ibm/platform.c
 create mode 100644 pldm/libpldm/pdr.c
 create mode 100644 pldm/libpldm/platform.c
 create mode 100644 pldm/libpldm/utils.c

-- 
2.40.1



More information about the Skiboot mailing list