[PATCH 2/4] peci: Add peci-npcm controller driver

Winiarska, Iwona iwona.winiarska at intel.com
Thu Jul 20 18:38:25 AEST 2023


On Thu, 2023-07-20 at 08:20 +0200, Paul Menzel wrote:
> Dear Iwona,
> 
> 
> Am 20.07.23 um 00:08 schrieb Iwona Winiarska:
> > From: Tomer Maimon <tmaimon77 at gmail.com>
> > 
> > Add support for Nuvoton NPCM BMC hardware to the Platform Environment
> > Control Interface (PECI) subsystem.
> 
> Please elaborate on the implementation, and document the used datasheets.

As far as I know, there is no publicly available documentation.

> 
> Additionally, please document how you tested this.

Are you asking to include this information in the commit message?
That would be unusual.
But in general - it's a controller driver, it allows PECI subsystem to detect
devices behind it and for PECI drivers to bind to those devices.

> 
> > Signed-off-by: Tomer Maimon <tmaimon77 at gmail.com>
> > Signed-off-by: Tyrone Ting <warp5tw at gmail.com>
> > Co-developed-by: Iwona Winiarska <iwona.winiarska at intel.com>
> > Signed-off-by: Iwona Winiarska <iwona.winiarska at intel.com>
> > ---
> >   drivers/peci/controller/Kconfig     |  16 ++
> >   drivers/peci/controller/Makefile    |   1 +
> >   drivers/peci/controller/peci-npcm.c | 298 ++++++++++++++++++++++++++++
> >   3 files changed, 315 insertions(+)
> >   create mode 100644 drivers/peci/controller/peci-npcm.c
> > 
> > diff --git a/drivers/peci/controller/Kconfig
> > b/drivers/peci/controller/Kconfig
> > index 2fc5e2abb74a..4f9c245ad042 100644
> > --- a/drivers/peci/controller/Kconfig
> > +++ b/drivers/peci/controller/Kconfig
> > @@ -16,3 +16,19 @@ config PECI_ASPEED
> >   
> >           This driver can also be built as a module. If so, the module will
> >           be called peci-aspeed.
> > +
> > +config PECI_NPCM
> > +       tristate "Nuvoton NPCM PECI support"
> > +       depends on ARCH_NPCM || COMPILE_TEST
> > +       depends on OF
> > +       select REGMAP_MMIO
> > +       help
> > +         This option enables PECI controller driver for Nuvoton NPCM7XX
> > +         and NPCM8XX SoCs. It allows BMC to discover devices connected
> > +         to it and communicate with them using PECI protocol.
> > +
> > +         Say Y here if you want support for the Platform Environment
> > Control
> > +         Interface (PECI) bus adapter driver on the Nuvoton NPCM SoCs.
> > +
> > +         This support is also available as a module. If so, the module
> > +         will be called peci-npcm.
> > diff --git a/drivers/peci/controller/Makefile
> > b/drivers/peci/controller/Makefile
> > index 022c28ef1bf0..e247449bb423 100644
> > --- a/drivers/peci/controller/Makefile
> > +++ b/drivers/peci/controller/Makefile
> > @@ -1,3 +1,4 @@
> >   # SPDX-License-Identifier: GPL-2.0-only
> >   
> >   obj-$(CONFIG_PECI_ASPEED)     += peci-aspeed.o
> > +obj-$(CONFIG_PECI_NPCM)                += peci-npcm.o
> > diff --git a/drivers/peci/controller/peci-npcm.c
> > b/drivers/peci/controller/peci-npcm.c
> > new file mode 100644
> > index 000000000000..3647e3628a17
> > --- /dev/null
> > +++ b/drivers/peci/controller/peci-npcm.c
> > @@ -0,0 +1,298 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +// Copyright (c) 2019 Nuvoton Technology corporation.
> 
> No dot/period at the end.
> 
> […]
> 
> > +static int npcm_peci_xfer(struct peci_controller *controller, u8 addr,
> > struct peci_request *req)
> > +{
> > +       struct npcm_peci *priv = dev_get_drvdata(controller->dev.parent);
> > +       unsigned long timeout = msecs_to_jiffies(priv->cmd_timeout_ms);
> > +       unsigned int msg_rd;
> > +       u32 cmd_sts;
> > +       int i, ret;
> > +
> > +       /* Check command sts and bus idle state */
> > +       ret = regmap_read_poll_timeout(priv->regmap, NPCM_PECI_CTL_STS,
> > cmd_sts,
> > +                                      !(cmd_sts &
> > NPCM_PECI_CTRL_START_BUSY),
> > +                                      NPCM_PECI_IDLE_CHECK_INTERVAL_USEC,
> > +                                      NPCM_PECI_IDLE_CHECK_TIMEOUT_USEC);
> > +       if (ret)
> > +               return ret; /* -ETIMEDOUT */
> > +
> > +       spin_lock_irq(&priv->lock);
> > +       reinit_completion(&priv->xfer_complete);
> > +
> > +       regmap_write(priv->regmap, NPCM_PECI_ADDR, addr);
> > +       regmap_write(priv->regmap, NPCM_PECI_RD_LENGTH,
> > NPCM_PECI_WR_LEN_MASK & req->rx.len);
> > +       regmap_write(priv->regmap, NPCM_PECI_WR_LENGTH,
> > NPCM_PECI_WR_LEN_MASK & req->tx.len);
> > +
> > +       if (req->tx.len) {
> > +               regmap_write(priv->regmap, NPCM_PECI_CMD, req->tx.buf[0]);
> > +
> > +               for (i = 0; i < (req->tx.len - 1); i++)
> > +                       regmap_write(priv->regmap, NPCM_PECI_DAT_INOUT(i),
> > req->tx.buf[i + 1]);
> > +       }
> > +
> > +#if IS_ENABLED(CONFIG_DYNAMIC_DEBUG)
> > +       dev_dbg(priv->dev, "addr : %#02x, tx.len : %#02x, rx.len : %#02x\n",
> > +               addr, req->tx.len, req->rx.len);
> > +       print_hex_dump_bytes("TX : ", DUMP_PREFIX_NONE, req->tx.buf, req-
> > >tx.len);
> > +#endif
> 
> The preprocessor guards are not needed, as it’s taken care of in 
> `include/linux/printk.h`. Also in other parts of the patch.

Since this is dumping the raw contents of PECI messages, it's going to be quite
verbose. The idea behind preprocessor guard is that we don't ever want this to
be converted to regular printk. If there's no dynamic debug available - this
won't be printed unconditionally (even with -DDEBUG).

> 
> […]
> 
> > +module_platform_driver(npcm_peci_driver);
> > +
> > +MODULE_AUTHOR("Tomer Maimon <tomer.maimon at nuvoton.com>");
> > +MODULE_DESCRIPTION("NPCM PECI driver");
> > +MODULE_LICENSE("GPL");
> > +MODULE_IMPORT_NS(PECI);
> 
> Also add an entry to `MAINTAINERS`, if Tomer is going to be the maintainer?

All of the newly added files should already be covered by either ARM/NUVOTON
NPCM ARCHITECTURE or PECI SUBSYSTEM.

Thanks
-Iwona

> 
> 
> Kind regards,
> 
> Paul



More information about the openbmc mailing list