lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <rarvqtex3vsve3sscaky3rw727hwp5avmxve3lluwoviqbt6m6@h3nlqbi2s3fd>
Date: Thu, 11 Sep 2025 22:33:18 +0530
From: Manivannan Sadhasivam <mani@...nel.org>
To: Inochi Amaoto <inochiama@...il.com>
Cc: Chen Wang <unicornxw@...il.com>, kwilczynski@...nel.org, 
	u.kleine-koenig@...libre.com, aou@...s.berkeley.edu, alex@...ti.fr, arnd@...db.de, 
	bwawrzyn@...co.com, bhelgaas@...gle.com, unicorn_wang@...look.com, 
	conor+dt@...nel.org, 18255117159@....com, kishon@...nel.org, krzk+dt@...nel.org, 
	lpieralisi@...nel.org, palmer@...belt.com, paul.walmsley@...ive.com, robh@...nel.org, 
	s-vadapalli@...com, tglx@...utronix.de, thomas.richard@...tlin.com, 
	sycamoremoon376@...il.com, devicetree@...r.kernel.org, linux-kernel@...r.kernel.org, 
	linux-pci@...r.kernel.org, linux-riscv@...ts.infradead.org, sophgo@...ts.linux.dev, 
	rabenda.cn@...il.com, chao.wei@...hgo.com, xiaoguang.xing@...hgo.com, 
	fengchun.li@...hgo.com
Subject: Re: [PATCH v2 3/7] PCI: sg2042: Add Sophgo SG2042 PCIe driver

On Wed, Sep 10, 2025 at 10:56:23AM GMT, Inochi Amaoto wrote:
> On Wed, Sep 10, 2025 at 10:08:39AM +0800, Chen Wang wrote:
> > From: Chen Wang <unicorn_wang@...look.com>
> > 
> > Add support for PCIe controller in SG2042 SoC. The controller
> > uses the Cadence PCIe core programmed by pcie-cadence*.c. The
> > PCIe controller will work in host mode only, supporting data
> > rate(gen4) and lanes(x16 or x8).
> > 
> > Signed-off-by: Chen Wang <unicorn_wang@...look.com>
> > ---
> >  drivers/pci/controller/cadence/Kconfig       |  10 ++
> >  drivers/pci/controller/cadence/Makefile      |   1 +
> >  drivers/pci/controller/cadence/pcie-sg2042.c | 104 +++++++++++++++++++
> >  3 files changed, 115 insertions(+)
> >  create mode 100644 drivers/pci/controller/cadence/pcie-sg2042.c
> > 
> > diff --git a/drivers/pci/controller/cadence/Kconfig b/drivers/pci/controller/cadence/Kconfig
> > index 666e16b6367f..02a639e55fd8 100644
> > --- a/drivers/pci/controller/cadence/Kconfig
> > +++ b/drivers/pci/controller/cadence/Kconfig
> > @@ -42,6 +42,15 @@ config PCIE_CADENCE_PLAT_EP
> >  	  endpoint mode. This PCIe controller may be embedded into many
> >  	  different vendors SoCs.
> >  
> > +config PCIE_SG2042_HOST
> > +	tristate "Sophgo SG2042 PCIe controller (host mode)"
> > +	depends on OF && (ARCH_SOPHGO || COMPILE_TEST)
> > +	select PCIE_CADENCE_HOST
> > +	help
> > +	  Say Y here if you want to support the Sophgo SG2042 PCIe platform
> > +	  controller in host mode. Sophgo SG2042 PCIe controller uses Cadence
> > +	  PCIe core.
> > +
> >  config PCI_J721E
> >  	tristate
> >  	select PCIE_CADENCE_HOST if PCI_J721E_HOST != n
> > @@ -67,4 +76,5 @@ config PCI_J721E_EP
> >  	  Say Y here if you want to support the TI J721E PCIe platform
> >  	  controller in endpoint mode. TI J721E PCIe controller uses Cadence PCIe
> >  	  core.
> > +
> >  endmenu
> > diff --git a/drivers/pci/controller/cadence/Makefile b/drivers/pci/controller/cadence/Makefile
> > index 9bac5fb2f13d..5e23f8539ecc 100644
> > --- a/drivers/pci/controller/cadence/Makefile
> > +++ b/drivers/pci/controller/cadence/Makefile
> > @@ -4,3 +4,4 @@ obj-$(CONFIG_PCIE_CADENCE_HOST) += pcie-cadence-host.o
> >  obj-$(CONFIG_PCIE_CADENCE_EP) += pcie-cadence-ep.o
> >  obj-$(CONFIG_PCIE_CADENCE_PLAT) += pcie-cadence-plat.o
> >  obj-$(CONFIG_PCI_J721E) += pci-j721e.o
> > +obj-$(CONFIG_PCIE_SG2042_HOST) += pcie-sg2042.o
> > diff --git a/drivers/pci/controller/cadence/pcie-sg2042.c b/drivers/pci/controller/cadence/pcie-sg2042.c
> > new file mode 100644
> > index 000000000000..c026e1ca5d6e
> > --- /dev/null
> > +++ b/drivers/pci/controller/cadence/pcie-sg2042.c
> > @@ -0,0 +1,104 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * pcie-sg2042 - PCIe controller driver for Sophgo SG2042 SoC
> > + *
> > + * Copyright (C) 2025 Sophgo Technology Inc.
> > + * Copyright (C) 2025 Chen Wang <unicorn_wang@...look.com>
> > + */
> > +
> > +#include <linux/mod_devicetable.h>
> > +#include <linux/pci.h>
> > +#include <linux/platform_device.h>
> > +#include <linux/pm_runtime.h>
> > +
> > +#include "pcie-cadence.h"
> > +
> > +/*
> > + * SG2042 only supports 4-byte aligned access, so for the rootbus (i.e. to
> > + * read/write the Root Port itself, read32/write32 is required. For
> > + * non-rootbus (i.e. to read/write the PCIe peripheral registers, supports
> > + * 1/2/4 byte aligned access, so directly using read/write should be fine.
> > + */
> > +
> > +static struct pci_ops sg2042_pcie_root_ops = {
> > +	.map_bus	= cdns_pci_map_bus,
> > +	.read		= pci_generic_config_read32,
> > +	.write		= pci_generic_config_write32,
> > +};
> > +
> > +static struct pci_ops sg2042_pcie_child_ops = {
> > +	.map_bus	= cdns_pci_map_bus,
> > +	.read		= pci_generic_config_read,
> > +	.write		= pci_generic_config_write,
> > +};
> > +
> > +static int sg2042_pcie_probe(struct platform_device *pdev)
> > +{
> > +	struct device *dev = &pdev->dev;
> > +	struct pci_host_bridge *bridge;
> > +	struct cdns_pcie *pcie;
> > +	struct cdns_pcie_rc *rc;
> > +	int ret;
> > +
> > +	bridge = devm_pci_alloc_host_bridge(dev, sizeof(*rc));
> > +	if (!bridge) {
> > +		dev_err_probe(dev, -ENOMEM, "Failed to alloc host bridge!\n");
> > +		return -ENOMEM;
> > +	}
> > +
> > +	bridge->ops = &sg2042_pcie_root_ops;
> > +	bridge->child_ops = &sg2042_pcie_child_ops;
> > +
> > +	rc = pci_host_bridge_priv(bridge);
> > +	pcie = &rc->pcie;
> > +	pcie->dev = dev;
> > +
> > +	platform_set_drvdata(pdev, pcie);
> > +
> > +	pm_runtime_set_active(dev);
> > +	pm_runtime_no_callbacks(dev);
> > +	devm_pm_runtime_enable(dev);
> > +
> > +	ret = cdns_pcie_init_phy(dev, pcie);
> > +	if (ret) {
> > +		dev_err_probe(dev, ret, "Failed to init phy!\n");
> > +		return ret;
> > +	}
> > +
> > +	ret = cdns_pcie_host_setup(rc);
> > +	if (ret) {
> > +		dev_err_probe(dev, ret, "Failed to setup host!\n");
> > +		cdns_pcie_disable_phy(pcie);
> > +		return ret;
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> 
> > +static void sg2042_pcie_remove(struct platform_device *pdev)
> > +{
> > +	struct cdns_pcie *pcie = platform_get_drvdata(pdev);
> > +
> > +	cdns_pcie_disable_phy(pcie);
> > +}
> > +
> 
> I think this remove is useless, as it is almost impossible to
> remove a pcie at runtime.
> 

Why impossible? We only have concerns with removing PCIe controllers
implementing irqchip, but this driver is not implementing it and using an
external irqchip controller.

So it is safe and possible to remove this driver during runtime.

- Mani

-- 
மணிவண்ணன் சதாசிவம்

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ