RE: [PATCH 2/7] soc: aspeed: Introduce core eSPI controller support

YH Chung <[email protected]>
Newsgroups org.ozlabs.lists.openbmc,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.ozlabs.lists.linux-aspeed
Message-ID <KL1PR0601MB427697CB5765BF9485EB97AB9041A@KL1PR0601MB4276.apcprd06.prod.outlook.com>
Hi Philipp,

Thanks for the review.

> On Fr, 2026-03-13 at 18:07 +0800, aspeedyh wrote:
> > Add core eSPI controller support and common code for ASPEED SoCs. The
> > eSPI engine is a slave device in BMC to communicate with the Host over
> > the eSPI interface.
> >
> > The initial support includes basic eSPI driver probe/remove operations,
> > and provides operators for ASPEED SoCs to implement their own eSPI slave
> > device drivers that are different among SoC models.
> >
> > Signed-off-by: aspeedyh <[email protected]>
> > ---
> >  drivers/soc/aspeed/Kconfig            |   7 ++
> >  drivers/soc/aspeed/Makefile           |   1 +
> >  drivers/soc/aspeed/espi/Makefile      |   1 +
> >  drivers/soc/aspeed/espi/aspeed-espi.c | 143
> ++++++++++++++++++++++++++++++++++
> >  drivers/soc/aspeed/espi/aspeed-espi.h |  27 +++++++
> >  5 files changed, 179 insertions(+)
> >
> [...]
> > diff --git a/drivers/soc/aspeed/espi/aspeed-espi.c
> b/drivers/soc/aspeed/espi/aspeed-espi.c
> > new file mode 100644
> > index 000000000000..15d58b38bbe4
> > --- /dev/null
> > +++ b/drivers/soc/aspeed/espi/aspeed-espi.c
> > @@ -0,0 +1,143 @@
> > +// SPDX-License-Identifier: GPL-2.0+
> > +/*
> > + * Unified Aspeed eSPI driver framework for different generation SoCs
> > + */
> > +
> > +#include <linux/clk.h>
> > +#include <linux/dma-mapping.h>
> > +#include <linux/interrupt.h>
> > +#include <linux/module.h>
> > +#include <linux/of_device.h>
> > +#include <linux/of.h>
> > +#include <linux/platform_device.h>
> > +#include <linux/reset.h>
> > +
> > +#include "aspeed-espi.h"
> > +
> > +struct aspeed_espi_ops {
> > +	void (*espi_pre_init)(struct aspeed_espi *espi);
> > +	void (*espi_post_init)(struct aspeed_espi *espi);
> > +	void (*espi_deinit)(struct aspeed_espi *espi);
> > +	irqreturn_t (*espi_isr)(int irq, void *espi);
> > +};
> > +
> > +static const struct of_device_id aspeed_espi_of_matches[] = {
> > +	{ }
> > +};
> > +MODULE_DEVICE_TABLE(of, aspeed_espi_of_matches);
> > +
> > +static int aspeed_espi_probe(struct platform_device *pdev)
> > +{
> > +	const struct of_device_id *match;
> > +	struct aspeed_espi *espi;
> > +	struct resource *res;
> > +	struct device *dev;
> > +	int rc;
> > +
> > +	dev = &pdev->dev;
> > +	espi = devm_kzalloc(dev, sizeof(*espi), GFP_KERNEL);
> > +	if (!espi)
> > +		return -ENOMEM;
> > +
> [...]
> > +
> > +	espi->irq = platform_get_irq(pdev, 0);
> > +	if (espi->irq < 0) {
> > +		dev_err(dev, "cannot get IRQ number\n");
> > +		return espi->irq;
> > +	}
> > +
> > +	espi->rst = devm_reset_control_get_optional(dev, NULL);
> 
> Please use devm_reset_control_get_optional_exclusive() directly.
> 
I will update this to use devm_reset_control_get_optional_exclusive()

> > +	if (IS_ERR(espi->rst)) {
> > +		dev_err(dev, "cannot get reset control\n");
> > +		return PTR_ERR(espi->rst);
> 
> Consider using dev_err_probe, same for the other errors.
> That way the driver won't print incorrect error messages on
> -EPROBE_DEFER.
I will switch these error paths to dev_err_probe() so that -EPROBE_DEFER can be handled correctly.

> 
> [...]
> > diff --git a/drivers/soc/aspeed/espi/aspeed-espi.h
> b/drivers/soc/aspeed/espi/aspeed-espi.h
> > new file mode 100644
> > index 000000000000..f4ad7f61fef6
> > --- /dev/null
> > +++ b/drivers/soc/aspeed/espi/aspeed-espi.h
> > @@ -0,0 +1,27 @@
> > +/* SPDX-License-Identifier: GPL-2.0+ */
> > +/*
> > + * Unified eSPI driver header file and data structures
> > + * Copyright 2026 Aspeed Technology Inc.
> > + */
> > +#ifndef ASPEED_ESPI_H
> > +#define ASPEED_ESPI_H
> > +
> > +#include <linux/irqreturn.h>
> > +#include <linux/miscdevice.h>
> > +#include <linux/platform_device.h>
> > +#include <linux/types.h>
> > +
> > +#define DEVICE_NAME		"aspeed-espi"
> > +
> > +struct aspeed_espi {
> > +	struct platform_device *pdev;
> > +	struct device *dev;
> 
> Storing both pdev and &pdev->dev seems unnecessary.
> Is pdev used at all?
> 
Agreed, pdev is not used in the subsequent patches. I will remove it in the next revision.

> > +	void __iomem *regs;
> > +	struct reset_control *rst;
> 
> This is missing a forward declaration for struct reset_control.
> 
Will update to add <linux/reset.h> in the next revision to provide declaration for struct reset_control
> 
> regards
> Philipp

Thanks,
Yun Hsuan.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.