[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aFMB5ib19TYabeH+@lizhi-Precision-Tower-5810>
Date: Wed, 18 Jun 2025 14:13:58 -0400
From: Frank Li <Frank.li@....com>
To: Richard Zhu <hongxing.zhu@....com>
Cc: l.stach@...gutronix.de, lpieralisi@...nel.org, kwilczynski@...nel.org,
mani@...nel.org, robh@...nel.org, bhelgaas@...gle.com,
shawnguo@...nel.org, s.hauer@...gutronix.de, kernel@...gutronix.de,
festevam@...il.com, linux-pci@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, imx@...ts.linux.dev,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v1] PCI: imx6: Enable the vpcie regulator when fetch it
On Wed, Jun 18, 2025 at 04:20:42PM +0800, Richard Zhu wrote:
> vpcie regulator is used to provide power to the PCIe port include WAKE#
> signal on i.MX. To support outbound wake up mechanism, enable the vpcie
> regulator when fetch it, and keep it on during PCIe port life cycle.
how about
Enable the vpcie regulator at probe time and keep it enabled for the
entire PCIe controller lifecycle. This ensures support for outbound
wake-up mechanisms such as WAKE# signaling.
Frank
>
> Signed-off-by: Richard Zhu <hongxing.zhu@....com>
> ---
> drivers/pci/controller/dwc/pci-imx6.c | 27 ++++-----------------------
> 1 file changed, 4 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c
> index 5a38cfaf989b..7cab4bcfae56 100644
> --- a/drivers/pci/controller/dwc/pci-imx6.c
> +++ b/drivers/pci/controller/dwc/pci-imx6.c
> @@ -159,7 +159,6 @@ struct imx_pcie {
> u32 tx_deemph_gen2_6db;
> u32 tx_swing_full;
> u32 tx_swing_low;
> - struct regulator *vpcie;
> struct regulator *vph;
> void __iomem *phy_base;
>
> @@ -1198,15 +1197,6 @@ static int imx_pcie_host_init(struct dw_pcie_rp *pp)
> struct imx_pcie *imx_pcie = to_imx_pcie(pci);
> int ret;
>
> - if (imx_pcie->vpcie) {
> - ret = regulator_enable(imx_pcie->vpcie);
> - if (ret) {
> - dev_err(dev, "failed to enable vpcie regulator: %d\n",
> - ret);
> - return ret;
> - }
> - }
> -
> if (pp->bridge && imx_check_flag(imx_pcie, IMX_PCIE_FLAG_HAS_LUT)) {
> pp->bridge->enable_device = imx_pcie_enable_device;
> pp->bridge->disable_device = imx_pcie_disable_device;
> @@ -1222,7 +1212,7 @@ static int imx_pcie_host_init(struct dw_pcie_rp *pp)
> ret = imx_pcie_clk_enable(imx_pcie);
> if (ret) {
> dev_err(dev, "unable to enable pcie clocks: %d\n", ret);
> - goto err_reg_disable;
> + return ret;
> }
>
> if (imx_pcie->phy) {
> @@ -1269,9 +1259,6 @@ static int imx_pcie_host_init(struct dw_pcie_rp *pp)
> phy_exit(imx_pcie->phy);
> err_clk_disable:
> imx_pcie_clk_disable(imx_pcie);
> -err_reg_disable:
> - if (imx_pcie->vpcie)
> - regulator_disable(imx_pcie->vpcie);
> return ret;
> }
>
> @@ -1286,9 +1273,6 @@ static void imx_pcie_host_exit(struct dw_pcie_rp *pp)
> phy_exit(imx_pcie->phy);
> }
> imx_pcie_clk_disable(imx_pcie);
> -
> - if (imx_pcie->vpcie)
> - regulator_disable(imx_pcie->vpcie);
> }
>
> static void imx_pcie_host_post_init(struct dw_pcie_rp *pp)
> @@ -1739,12 +1723,9 @@ static int imx_pcie_probe(struct platform_device *pdev)
> pci->max_link_speed = 1;
> of_property_read_u32(node, "fsl,max-link-speed", &pci->max_link_speed);
>
> - imx_pcie->vpcie = devm_regulator_get_optional(&pdev->dev, "vpcie");
> - if (IS_ERR(imx_pcie->vpcie)) {
> - if (PTR_ERR(imx_pcie->vpcie) != -ENODEV)
> - return PTR_ERR(imx_pcie->vpcie);
> - imx_pcie->vpcie = NULL;
> - }
> + ret = devm_regulator_get_enable_optional(&pdev->dev, "vpcie");
> + if (ret < 0 && ret != -ENODEV)
> + return dev_err_probe(dev, ret, "failed to enable vpcie");
>
> imx_pcie->vph = devm_regulator_get_optional(&pdev->dev, "vph");
> if (IS_ERR(imx_pcie->vph)) {
> --
> 2.37.1
>
Powered by blists - more mailing lists