[{"id":3674200,"web_url":"http://patchwork.ozlabs.org/comment/3674200/","msgid":"<7ewnbwdo5qtasbxj4uel6a6uthczq2l6udbvoqqkwm776lvseb@v54ri2gknwxn>","list_archive_url":null,"date":"2026-04-07T13:57:25","subject":"Re: [PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","submitter":{"id":78905,"url":"http://patchwork.ozlabs.org/api/people/78905/","name":"Manivannan Sadhasivam","email":"mani@kernel.org"},"content":"On Tue, Apr 07, 2026 at 06:41:46PM +0800, Sherry Sun wrote:\n> The current DT binding for pci-imx6 specifies the 'reset-gpios' property\n> in the host bridge node. However, the PERST# signal logically belongs to\n> individual Root Ports rather than the host bridge itself. This becomes\n> important when supporting PCIe KeyE connector and PCI power control\n> framework for pci-imx6 driver, which requires properties to be specified\n> in Root Port nodes.\n> \n> Add support for parsing 'reset-gpios' from Root Port child nodes using\n> the common helper pci_host_common_parse_ports(), and update the reset\n> GPIO handling to use the parsed port list from bridge->ports. To\n> maintain DT backwards compatibility, fallback to the legacy method of\n> parsing the host bridge node if the reset property is not present in the\n> Root Port node.\n> \n> Since now the reset GPIO is obtained with GPIOD_ASIS flag, it may be in\n> input mode, using gpiod_direction_output() instead of\n> gpiod_set_value_cansleep() to ensure the reset GPIO is properly\n> configured as output before setting its value.\n> \n> Signed-off-by: Sherry Sun <sherry.sun@nxp.com>\n> ---\n>  drivers/pci/controller/dwc/pci-imx6.c | 75 +++++++++++++++++++++------\n>  1 file changed, 60 insertions(+), 15 deletions(-)\n> \n> diff --git a/drivers/pci/controller/dwc/pci-imx6.c b/drivers/pci/controller/dwc/pci-imx6.c\n> index d99da7e42590..dd8f9c0fcec4 100644\n> --- a/drivers/pci/controller/dwc/pci-imx6.c\n> +++ b/drivers/pci/controller/dwc/pci-imx6.c\n> @@ -34,6 +34,7 @@\n>  #include <linux/pm_runtime.h>\n>  \n>  #include \"../../pci.h\"\n> +#include \"../pci-host-common.h\"\n>  #include \"pcie-designware.h\"\n>  \n>  #define IMX8MQ_GPR_PCIE_REF_USE_PAD\t\tBIT(9)\n> @@ -152,7 +153,6 @@ struct imx_lut_data {\n>  \n>  struct imx_pcie {\n>  \tstruct dw_pcie\t\t*pci;\n> -\tstruct gpio_desc\t*reset_gpiod;\n>  \tstruct clk_bulk_data\t*clks;\n>  \tint\t\t\tnum_clks;\n>  \tbool\t\t\tsupports_clkreq;\n> @@ -1224,6 +1224,32 @@ static void imx_pcie_disable_device(struct pci_host_bridge *bridge,\n>  \timx_pcie_remove_lut(imx_pcie, pci_dev_id(pdev));\n>  }\n>  \n> +static int imx_pcie_parse_legacy_binding(struct imx_pcie *pcie)\n> +{\n> +\tstruct device *dev = pcie->pci->dev;\n> +\tstruct pci_host_bridge *bridge = pcie->pci->pp.bridge;\n> +\tstruct pci_host_port *port;\n> +\tstruct gpio_desc *reset;\n> +\n> +\treset = devm_gpiod_get_optional(dev, \"reset\", GPIOD_ASIS);\n> +\tif (IS_ERR(reset))\n> +\t\treturn PTR_ERR(reset);\n> +\n> +\tif (!reset)\n> +\t\treturn 0;\n> +\n> +\tport = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);\n> +\tif (!port)\n> +\t\treturn -ENOMEM;\n> +\n> +\tport->reset = reset;\n> +\tINIT_LIST_HEAD(&port->list);\n> +\tlist_add_tail(&port->list, &bridge->ports);\n> +\n> +\treturn devm_add_action_or_reset(dev, pci_host_common_delete_ports,\n> +\t\t\t\t\t&bridge->ports);\n> +}\n> +\n>  static void imx_pcie_vpcie_aux_disable(void *data)\n>  {\n>  \tstruct regulator *vpcie_aux = data;\n> @@ -1233,13 +1259,22 @@ static void imx_pcie_vpcie_aux_disable(void *data)\n>  \n>  static void imx_pcie_assert_perst(struct imx_pcie *imx_pcie, bool assert)\n>  {\n> -\tif (assert) {\n> -\t\tgpiod_set_value_cansleep(imx_pcie->reset_gpiod, 1);\n> -\t} else {\n> -\t\tif (imx_pcie->reset_gpiod) {\n> -\t\t\tmsleep(PCIE_T_PVPERL_MS);\n> -\t\t\tgpiod_set_value_cansleep(imx_pcie->reset_gpiod, 0);\n> -\t\t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> +\tstruct dw_pcie *pci = imx_pcie->pci;\n> +\tstruct pci_host_bridge *bridge = pci->pp.bridge;\n> +\tstruct pci_host_port *port;\n> +\n> +\tif (!bridge)\n> +\t\treturn;\n> +\n> +\tlist_for_each_entry(port, &bridge->ports, list) {\n> +\t\tif (assert) {\n> +\t\t\tgpiod_direction_output(port->reset, 1);\n> +\t\t} else {\n> +\t\t\tif (port->reset) {\n> +\t\t\t\tmsleep(PCIE_T_PVPERL_MS);\n> +\t\t\t\tgpiod_direction_output(port->reset, 0);\n> +\t\t\t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> +\t\t\t}\n\nSashiko flagged this loop:\n\n```\nDoes this loop multiply the initialization delays?\nIf a controller has multiple Root Ports, the msleep calls will run\nsequentially for each port, linearly increasing the delay. Could we optimize\nthis by asserting all reset GPIOs, waiting the pre-delay once, de-asserting\nall GPIOs, and waiting the post-delay once for the entire bus?\n```\n\nMaybe you should do:\n\n\tif (!list_empty(&bridge->ports) && !assert)\n\t\tmsleep(PCIE_T_PVPERL_MS);\n\n\tlist_for_each_entry(port, &bridge->ports, list) {\n\t\t...\n\t\tgpiod_direction_output(port->reset, 0);\n\t\t...\n\t}\n\n\tif (!list_empty(&bridge->ports) && !assert)\n\t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n\nAnd then this:\n\n```\nAlso, since this function is called from imx_pcie_resume_noirq, which\nexecutes with hardware interrupts disabled, does the use of msleep here\ntrigger a 'sleeping while atomic' bug?\n```\n\nThis is a valid concern. You should use mdelay(). But I'd recommend\nswitching to IRQ enabled callback, resume() instead. There is no complelling\nreason to use resume_noirq() in this driver and adding delays in noirq()\ncallbacks is not recommended as it may increase the overall system resume time.\n\nI will submit a separate series to convert dw_pcie_resume_noirq() and its\ncallers to IRQ enabled callbacks since this dw_pcie_resume_noirq() could\npotentially cause delay up to 1sec.\n\n>  \t\t}\n>  \t}\n>  }\n> @@ -1249,8 +1284,25 @@ static int imx_pcie_host_init(struct dw_pcie_rp *pp)\n>  \tstruct dw_pcie *pci = to_dw_pcie_from_pp(pp);\n>  \tstruct device *dev = pci->dev;\n>  \tstruct imx_pcie *imx_pcie = to_imx_pcie(pci);\n> +\tstruct pci_host_bridge *bridge = pp->bridge;\n>  \tint ret;\n>  \n> +\tif (bridge && list_empty(&bridge->ports)) {\n> +\t\t/* Parse Root Port nodes if present */\n> +\t\tret = pci_host_common_parse_ports(dev, bridge);\n> +\t\tif (ret) {\n> +\t\t\tif (ret != -ENOENT) {\n> +\t\t\t\tdev_err(dev, \"Failed to parse Root Port nodes: %d\\n\", ret);\n> +\t\t\t\treturn ret;\n> +\t\t\t}\n> +\n> +\t\t\t/* Fallback to legacy binding for DT backwards compatibility */\n> +\t\t\tret = imx_pcie_parse_legacy_binding(imx_pcie);\n\nThis is also flagged by Sashiko:\n\n```\nCould this error handling corrupt the port state and trigger an invalid legacy\nfallback?\n\nIf a device tree defines multiple Root Ports and one lacks the optional\nreset GPIO, pci_host_common_parse_ports returns -ENOENT. This causes\nthe code to fall back to imx_pcie_parse_legacy_binding.\n\nSince the already-parsed child ports remain in bridge->ports without\nrollback, the legacy host bridge GPIO will be appended alongside them.\nValid child nodes are skipped, and both child and legacy GPIOs will be\ntoggled simultaneously.\n```\n\nYou should try to cleanup Root Port resources if pci_host_common_parse_ports()\nfails with -ENOENT.\n\n- Mani","headers":{"Return-Path":"\n <linux-pci+bounces-52073-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=n1VP5kih;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-52073-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"n1VP5kih\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fqnwZ5YLSz1xy1\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 08 Apr 2026 00:03:26 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id C964F30372FD\n\tfor <incoming@patchwork.ozlabs.org>; Tue,  7 Apr 2026 13:57:39 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 6563B3B583B;\n\tTue,  7 Apr 2026 13:57:36 +0000 (UTC)","from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F8B0315D46;\n\tTue,  7 Apr 2026 13:57:35 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 2485EC116C6;\n\tTue,  7 Apr 2026 13:57:29 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775570256; cv=none;\n b=O7q/JMFzpJIEz4JAhjRh4inTqJf1emO9dqFqWXSyZRnDza9uT/yC8SpcVTWhFrGjNIySuFtHL6SoQruVnxqX/6Ss+2Fccgb5uW4MUA8C1N/yEwD7oMmJvUZPwTTQg3aGU1qgWUhMudsrSYNHv9WLEHpSZMIPxjWLf/0EjL7kRLg=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775570256; c=relaxed/simple;\n\tbh=XapT16KA/LZ1Mf7VUVJ1UO30jbRieGjhqyjoieFHP00=;\n\th=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:\n\t Content-Type:Content-Disposition:In-Reply-To;\n b=By0/lx+rjIB3mojmu+Iw7TgXEHnonszouYqlzfaOXtPJSb6aRC1ObkBUDCT8fXeJM1EdjpACMwmHCWvQUwNYSpm/SxzLdU3jgqYRazO6kq7uniJadny8R703py1WPsmdZWJ8303yCGoShL06b4vdbRt1O3E2FGFenT0cNPrG250=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=n1VP5kih; arc=none smtp.client-ip=10.30.226.201","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1775570255;\n\tbh=XapT16KA/LZ1Mf7VUVJ1UO30jbRieGjhqyjoieFHP00=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=n1VP5kihEakJCHYXy+nt86eaQxnA0CFtGqzKEZqa6p9XJAqK1p4r+EHfyOkHsMpAd\n\t Kgtd5fhGGVds+JapfT90oJVZlX4TwM+NJRd2NuWV2XsvwHJMPJNqeTrQN96sSesZ4n\n\t 1bsiK8Gnmu2erNuO0UD3kjewFgy6XRh4NrFBy9a7SRw1aKdKTUHy+Tw+OU29dYEHwU\n\t 3uA4nzPvlxSZbuN1n5x97PMTanghtvfQxRyED99xpCO0/OYHyOlT49iDy8MFq91TgC\n\t 0QHGfXhbGBjHPoGlWfsaKXbzk+19xXv5IJODS4YUL5wxRXdG2xgss46LQyxLA0LBq7\n\t /7NIX/mmJ0RMA==","Date":"Tue, 7 Apr 2026 19:27:25 +0530","From":"Manivannan Sadhasivam <mani@kernel.org>","To":"Sherry Sun <sherry.sun@nxp.com>","Cc":"robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org,\n\tFrank.Li@nxp.com, s.hauer@pengutronix.de, kernel@pengutronix.de,\n\tfestevam@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org,\n\tbhelgaas@google.com, hongxing.zhu@nxp.com, l.stach@pengutronix.de,\n\timx@lists.linux.dev, linux-pci@vger.kernel.org,\n linux-arm-kernel@lists.infradead.org,\n\tdevicetree@vger.kernel.org, linux-kernel@vger.kernel.org","Subject":"Re: [PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","Message-ID":"<7ewnbwdo5qtasbxj4uel6a6uthczq2l6udbvoqqkwm776lvseb@v54ri2gknwxn>","References":"<20260407104154.2842132-1-sherry.sun@nxp.com>\n <20260407104154.2842132-5-sherry.sun@nxp.com>","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20260407104154.2842132-5-sherry.sun@nxp.com>"}},{"id":3674657,"web_url":"http://patchwork.ozlabs.org/comment/3674657/","msgid":"<VI0PR04MB12114AAA709016DADF0B45DA6925BA@VI0PR04MB12114.eurprd04.prod.outlook.com>","list_archive_url":null,"date":"2026-04-08T08:34:03","subject":"RE: [PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","submitter":{"id":77063,"url":"http://patchwork.ozlabs.org/api/people/77063/","name":"Sherry Sun","email":"sherry.sun@nxp.com"},"content":"> On Tue, Apr 07, 2026 at 06:41:46PM +0800, Sherry Sun wrote:\n> > The current DT binding for pci-imx6 specifies the 'reset-gpios'\n> > property in the host bridge node. However, the PERST# signal logically\n> > belongs to individual Root Ports rather than the host bridge itself.\n> > This becomes important when supporting PCIe KeyE connector and PCI\n> > power control framework for pci-imx6 driver, which requires properties\n> > to be specified in Root Port nodes.\n> >\n> > Add support for parsing 'reset-gpios' from Root Port child nodes using\n> > the common helper pci_host_common_parse_ports(), and update the reset\n> > GPIO handling to use the parsed port list from bridge->ports. To\n> > maintain DT backwards compatibility, fallback to the legacy method of\n> > parsing the host bridge node if the reset property is not present in\n> > the Root Port node.\n> >\n> > Since now the reset GPIO is obtained with GPIOD_ASIS flag, it may be\n> > in input mode, using gpiod_direction_output() instead of\n> > gpiod_set_value_cansleep() to ensure the reset GPIO is properly\n> > configured as output before setting its value.\n> >\n> > Signed-off-by: Sherry Sun <sherry.sun@nxp.com>\n> > ---\n> >  drivers/pci/controller/dwc/pci-imx6.c | 75\n> > +++++++++++++++++++++------\n> >  1 file changed, 60 insertions(+), 15 deletions(-)\n> >\n> > diff --git a/drivers/pci/controller/dwc/pci-imx6.c\n> > b/drivers/pci/controller/dwc/pci-imx6.c\n> > index d99da7e42590..dd8f9c0fcec4 100644\n> > --- a/drivers/pci/controller/dwc/pci-imx6.c\n> > +++ b/drivers/pci/controller/dwc/pci-imx6.c\n> > @@ -34,6 +34,7 @@\n> >  #include <linux/pm_runtime.h>\n> >\n> >  #include \"../../pci.h\"\n> > +#include \"../pci-host-common.h\"\n> >  #include \"pcie-designware.h\"\n> >\n> >  #define IMX8MQ_GPR_PCIE_REF_USE_PAD\t\tBIT(9)\n> > @@ -152,7 +153,6 @@ struct imx_lut_data {\n> >\n> >  struct imx_pcie {\n> >  \tstruct dw_pcie\t\t*pci;\n> > -\tstruct gpio_desc\t*reset_gpiod;\n> >  \tstruct clk_bulk_data\t*clks;\n> >  \tint\t\t\tnum_clks;\n> >  \tbool\t\t\tsupports_clkreq;\n> > @@ -1224,6 +1224,32 @@ static void imx_pcie_disable_device(struct\n> pci_host_bridge *bridge,\n> >  \timx_pcie_remove_lut(imx_pcie, pci_dev_id(pdev));  }\n> >\n> > +static int imx_pcie_parse_legacy_binding(struct imx_pcie *pcie) {\n> > +\tstruct device *dev = pcie->pci->dev;\n> > +\tstruct pci_host_bridge *bridge = pcie->pci->pp.bridge;\n> > +\tstruct pci_host_port *port;\n> > +\tstruct gpio_desc *reset;\n> > +\n> > +\treset = devm_gpiod_get_optional(dev, \"reset\", GPIOD_ASIS);\n> > +\tif (IS_ERR(reset))\n> > +\t\treturn PTR_ERR(reset);\n> > +\n> > +\tif (!reset)\n> > +\t\treturn 0;\n> > +\n> > +\tport = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);\n> > +\tif (!port)\n> > +\t\treturn -ENOMEM;\n> > +\n> > +\tport->reset = reset;\n> > +\tINIT_LIST_HEAD(&port->list);\n> > +\tlist_add_tail(&port->list, &bridge->ports);\n> > +\n> > +\treturn devm_add_action_or_reset(dev,\n> pci_host_common_delete_ports,\n> > +\t\t\t\t\t&bridge->ports);\n> > +}\n> > +\n> >  static void imx_pcie_vpcie_aux_disable(void *data)  {\n> >  \tstruct regulator *vpcie_aux = data;\n> > @@ -1233,13 +1259,22 @@ static void imx_pcie_vpcie_aux_disable(void\n> > *data)\n> >\n> >  static void imx_pcie_assert_perst(struct imx_pcie *imx_pcie, bool\n> > assert)  {\n> > -\tif (assert) {\n> > -\t\tgpiod_set_value_cansleep(imx_pcie->reset_gpiod, 1);\n> > -\t} else {\n> > -\t\tif (imx_pcie->reset_gpiod) {\n> > -\t\t\tmsleep(PCIE_T_PVPERL_MS);\n> > -\t\t\tgpiod_set_value_cansleep(imx_pcie->reset_gpiod, 0);\n> > -\t\t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> > +\tstruct dw_pcie *pci = imx_pcie->pci;\n> > +\tstruct pci_host_bridge *bridge = pci->pp.bridge;\n> > +\tstruct pci_host_port *port;\n> > +\n> > +\tif (!bridge)\n> > +\t\treturn;\n> > +\n> > +\tlist_for_each_entry(port, &bridge->ports, list) {\n> > +\t\tif (assert) {\n> > +\t\t\tgpiod_direction_output(port->reset, 1);\n> > +\t\t} else {\n> > +\t\t\tif (port->reset) {\n> > +\t\t\t\tmsleep(PCIE_T_PVPERL_MS);\n> > +\t\t\t\tgpiod_direction_output(port->reset, 0);\n> > +\t\t\t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> > +\t\t\t}\n> \n> Sashiko flagged this loop:\n> \n> ```\n> Does this loop multiply the initialization delays?\n> If a controller has multiple Root Ports, the msleep calls will run sequentially\n> for each port, linearly increasing the delay. Could we optimize this by\n> asserting all reset GPIOs, waiting the pre-delay once, de-asserting all GPIOs,\n> and waiting the post-delay once for the entire bus?\n> ```\n> \n> Maybe you should do:\n> \n> \tif (!list_empty(&bridge->ports) && !assert)\n> \t\tmsleep(PCIE_T_PVPERL_MS);\n> \n> \tlist_for_each_entry(port, &bridge->ports, list) {\n> \t\t...\n> \t\tgpiod_direction_output(port->reset, 0);\n> \t\t...\n> \t}\n> \n> \tif (!list_empty(&bridge->ports) && !assert)\n> \t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> \n\nHi Mani, I think the code below looks clearer, is that ok for you?\n\n    if (assert) {\n        list_for_each_entry(port, &bridge->ports, list)\n            gpiod_direction_output(port->reset, 1);\n    } else {\n        if (list_empty(&bridge->ports))\n            return;\n\n        msleep(PCIE_T_PVPERL_MS);\n        list_for_each_entry(port, &bridge->ports, list)\n            gpiod_direction_output(port->reset, 0);\n        msleep(PCIE_RESET_CONFIG_WAIT_MS);\n    }\n\n> And then this:\n> \n> ```\n> Also, since this function is called from imx_pcie_resume_noirq, which\n> executes with hardware interrupts disabled, does the use of msleep here\n> trigger a 'sleeping while atomic' bug?\n> ```\n> \n> This is a valid concern. You should use mdelay(). But I'd recommend switching\n> to IRQ enabled callback, resume() instead. There is no complelling reason to\n> use resume_noirq() in this driver and adding delays in noirq() callbacks is not\n> recommended as it may increase the overall system resume time.\n> \n> I will submit a separate series to convert dw_pcie_resume_noirq() and its\n> callers to IRQ enabled callbacks since this dw_pcie_resume_noirq() could\n> potentially cause delay up to 1sec.\n\nYes, this is not a new bug introduced by this patch. I agree we should covert the\nconvert dw_pcie_resume_noirq() and the caller to IRQ enabled callbacks to fix\nthis in a separate patch series.\nFor now, should I leave it as is, or switch to mdelay in this patch?\n\n> \n> >  \t\t}\n> >  \t}\n> >  }\n> > @@ -1249,8 +1284,25 @@ static int imx_pcie_host_init(struct dw_pcie_rp\n> *pp)\n> >  \tstruct dw_pcie *pci = to_dw_pcie_from_pp(pp);\n> >  \tstruct device *dev = pci->dev;\n> >  \tstruct imx_pcie *imx_pcie = to_imx_pcie(pci);\n> > +\tstruct pci_host_bridge *bridge = pp->bridge;\n> >  \tint ret;\n> >\n> > +\tif (bridge && list_empty(&bridge->ports)) {\n> > +\t\t/* Parse Root Port nodes if present */\n> > +\t\tret = pci_host_common_parse_ports(dev, bridge);\n> > +\t\tif (ret) {\n> > +\t\t\tif (ret != -ENOENT) {\n> > +\t\t\t\tdev_err(dev, \"Failed to parse Root Port\n> nodes: %d\\n\", ret);\n> > +\t\t\t\treturn ret;\n> > +\t\t\t}\n> > +\n> > +\t\t\t/* Fallback to legacy binding for DT backwards\n> compatibility */\n> > +\t\t\tret = imx_pcie_parse_legacy_binding(imx_pcie);\n> \n> This is also flagged by Sashiko:\n> \n> ```\n> Could this error handling corrupt the port state and trigger an invalid legacy\n> fallback?\n> \n> If a device tree defines multiple Root Ports and one lacks the optional reset\n> GPIO, pci_host_common_parse_ports returns -ENOENT. This causes the code\n> to fall back to imx_pcie_parse_legacy_binding.\n> \n> Since the already-parsed child ports remain in bridge->ports without rollback,\n> the legacy host bridge GPIO will be appended alongside them.\n> Valid child nodes are skipped, and both child and legacy GPIOs will be toggled\n> simultaneously.\n> ```\n> \n> You should try to cleanup Root Port resources if\n> pci_host_common_parse_ports() fails with -ENOENT.\n\nSure, I will call pci_host_common_delete_ports() to clean up any partially parsed\nRoot Port resources before falling back to legacy binding.\n\nBest Regards\nSherry","headers":{"Return-Path":"\n <linux-pci+bounces-52136-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=baRv+C85;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-52136-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=\"baRv+C85\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.70.26","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=nxp.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4frGgR4mWkz1xv0\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 08 Apr 2026 18:38:43 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 536983031804\n\tfor <incoming@patchwork.ozlabs.org>; Wed,  8 Apr 2026 08:34:11 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id D91AC3A2548;\n\tWed,  8 Apr 2026 08:34:10 +0000 (UTC)","from AS8PR04CU009.outbound.protection.outlook.com\n (mail-westeuropeazon11011026.outbound.protection.outlook.com [52.101.70.26])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 19ACF3A4530;\n\tWed,  8 Apr 2026 08:34:07 +0000 (UTC)","from VI0PR04MB12114.eurprd04.prod.outlook.com\n (2603:10a6:800:315::13) by PA2PR04MB10375.eurprd04.prod.outlook.com\n (2603:10a6:102:41a::6) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.21; Wed, 8 Apr\n 2026 08:34:03 +0000","from VI0PR04MB12114.eurprd04.prod.outlook.com\n ([fe80::feda:fd0e:147f:f994]) by VI0PR04MB12114.eurprd04.prod.outlook.com\n ([fe80::feda:fd0e:147f:f994%6]) with mapi id 15.20.9769.018; Wed, 8 Apr 2026\n 08:34:03 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775637250; cv=fail;\n b=I8XggyfPYpOX+shmtRYTCIduaFcRkAPrzYDnsTLZgvnaymhGlFicEtho27Nj0RF+T3wrrhKnuxE0nJtteCV33qBMnkJAfvriV3spTyKlkxmRy7SK5KHtcsKp0tXJTGX77JYM37S7cMZ4SIuddTo0oQIaruP6U5xqCbr9hbQSkh4=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=umyGUxFACGW6cGLcM+fytbZdxr4/32VZocm/81vEUgVpWqxGp07QQCB/cjJMzyb1PiABy3OgxneMe0c+og+rvwXJqr9YQ3iYu99+2tVieKzPI1eZ8owEktKhgRAF4Hj3rsCL+IPcikyAivJShCWHC+mAoTgbayUYjhreC4Gs1UL+vo65mUGi4yYVQ60ntas0JaWHzAMM3e3SswwsTaAFa1+cqvH7ZVggJkkOPLuJChCusEJXnUsrEWIdmKFqcZLJrGUTpnuyvvOAg1+xXik/Rv2qZIF/ELPFtTw/IH0sIcbCJBODQIcOEfWqvTZqLXSdLJHuRDKxmwQNR0N4sVt3gA=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775637250; c=relaxed/simple;\n\tbh=KoPk7v1rfouk18DZf/BztdGcc4M0DWmZ4J3/7OC4l0c=;\n\th=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:\n\t Content-Type:MIME-Version;\n b=BXpfSVCh3DVFWHoyCWANH4LyDa3xb1Gvg8GhixKAb4vhhy6AqDOxFitZJhNRtqo/2UEVT6CN3E0t821K1FdFI8syHKZBHYh96Esf4uPwGNCZeWGk/6ky0bvbAsgBlB88+ISV8ODP2jvs6+glhW1N14WgPphjeHYkQ8cNrcoouIA=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=KoPk7v1rfouk18DZf/BztdGcc4M0DWmZ4J3/7OC4l0c=;\n b=raV0yxfD07vDUhlbc5Hm10FWq7HV5CqGsVyngGUJ3TFa5zdrVd+/ej1j/T2U2FlqYVodH6t5JnFzzqNvIvDHBetOeOATEmxrrzydVW5V/6Im4gwjHo3pefzOtwWy9nFEM9fc/xey9TMD1ayFj63h2f2x16ijdDAGw4BIZ8TKqgZAPxTHUXy7JIQjiPbNdYmC48qOBY1/zLRx7RVW8WaSUD+XpQnQKwctytvI7CBn2xph1YaeEkZA7TI3A20iZNzw3icNjL57D10bu5IKeT6TqljD+RfcMKMl1YIepukCk+7ex45z6oSbJcu+r/BU3vozyknloBbdNNYTDbLT99O/bg=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com;\n spf=pass smtp.mailfrom=nxp.com;\n dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=baRv+C85; arc=fail smtp.client-ip=52.101.70.26","i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass\n header.d=nxp.com; arc=none"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=KoPk7v1rfouk18DZf/BztdGcc4M0DWmZ4J3/7OC4l0c=;\n b=baRv+C85PuZ4cEMYwYBiuJp+Afr+LAAGGRlmhzBBk5i/DlKuP3s7ekKqH1tJSZlbMtIqC/t2PBN2jJporg8evF2Rfnlttgg+h1iusn5WHt1sUHarE80bJ7EJnQ/U7h9uYEQDPM1g2XOxsrQ+CKH79dhjlVvfgQv2UtOUFe2GrOGtpjfUcU7idGwf4YZUFlfNH1sA8s8enSZDzwpqdc8G9/ocJ4Lt/YO5ZO1qLk5wYzlwlEnsDV7GTCCOKnVmA0y2rHwWE6HIZqn/kbsIQoJ8EiIYm+4ZTX+ef68sv/kruv8hw/OUebpHC9p+ZyGEafZLyHwd/RbuumF+PblQmIfv9Q==","From":"Sherry Sun <sherry.sun@nxp.com>","To":"Manivannan Sadhasivam <mani@kernel.org>","CC":"\"robh@kernel.org\" <robh@kernel.org>, \"krzk+dt@kernel.org\"\n\t<krzk+dt@kernel.org>, \"conor+dt@kernel.org\" <conor+dt@kernel.org>, Frank Li\n\t<frank.li@nxp.com>, \"s.hauer@pengutronix.de\" <s.hauer@pengutronix.de>,\n\t\"kernel@pengutronix.de\" <kernel@pengutronix.de>, \"festevam@gmail.com\"\n\t<festevam@gmail.com>, \"lpieralisi@kernel.org\" <lpieralisi@kernel.org>,\n\t\"kwilczynski@kernel.org\" <kwilczynski@kernel.org>, \"bhelgaas@google.com\"\n\t<bhelgaas@google.com>, Hongxing Zhu <hongxing.zhu@nxp.com>,\n\t\"l.stach@pengutronix.de\" <l.stach@pengutronix.de>, \"imx@lists.linux.dev\"\n\t<imx@lists.linux.dev>, \"linux-pci@vger.kernel.org\"\n\t<linux-pci@vger.kernel.org>, \"linux-arm-kernel@lists.infradead.org\"\n\t<linux-arm-kernel@lists.infradead.org>, \"devicetree@vger.kernel.org\"\n\t<devicetree@vger.kernel.org>, \"linux-kernel@vger.kernel.org\"\n\t<linux-kernel@vger.kernel.org>","Subject":"RE: [PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","Thread-Topic":"[PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","Thread-Index":"AQHcxnsvpEGHOh8zy0CNlQtKGkFWybXTn/aAgAE0/uA=","Date":"Wed, 8 Apr 2026 08:34:03 +0000","Message-ID":"\n <VI0PR04MB12114AAA709016DADF0B45DA6925BA@VI0PR04MB12114.eurprd04.prod.outlook.com>","References":"<20260407104154.2842132-1-sherry.sun@nxp.com>\n <20260407104154.2842132-5-sherry.sun@nxp.com>\n <7ewnbwdo5qtasbxj4uel6a6uthczq2l6udbvoqqkwm776lvseb@v54ri2gknwxn>","In-Reply-To":"<7ewnbwdo5qtasbxj4uel6a6uthczq2l6udbvoqqkwm776lvseb@v54ri2gknwxn>","Accept-Language":"zh-CN, en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=baRv+C85;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-52136-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=\"baRv+C85\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.70.26","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=nxp.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"VI0PR04MB12114:EE_|PA2PR04MB10375:EE_","x-ms-office365-filtering-correlation-id":"f81724b4-d89e-4f55-9a20-08de95499710","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"\n BCL:0;ARA:13230040|7416014|376014|19092799006|366016|1800799024|38070700021|56012099003|22082099003|18002099003;","x-microsoft-antispam-message-info":"\n TYDMcgSW3S9xFIyfJwqL/4XaN+eCUD2d73lSwYLfc9stXNRESDF27JtKxFCPmKFTWC/EQK1W5PJeqOZWXCJd252iMcbzDnWdu7Oj1MaOIqRprs3j21jj1WNBy//k00k8H6GbaPNIZb0CR9YwP/rACw7TavMtDAZvoClZzWk7IJTREumClAPFFq2AjYcf4/seEQU5wpPy6Xgw/YcLuVqGkYoEe/fPNDDSz4+5va1nlfkJ68BAKPFr30pCG2VXtsfaOLnskf5S7VGSBHYba5ulnC9pKM6Yes00aExcI1+7DYbVpnND37pxA61tEoxBWJ2fuL3YySbKRmLIwgyXSK3A34J1hTVjFNrzujekKMhO1l3gAFB00ZiRlvS0djsNYCMbMLdrZ2zQ089EY5tD/49K0ZV7Xe9Yuwh7K5n/NQG0LJiSpZKEpbzYQYsNBc+BMsPnCB7TfaVYcnacPiF7YzSXByo8wMW6/ZotXxlKpcHj/kEwjuVFAzfANz6J6xBQh+gKAjScIZ2Zj+unfcQHHU9cLOqrgQ/vhULcQz9IhdIParHUyDrsBpSpNCt5VN7E4LkMOwCPa+SCLjt+bRrI0qA5MnnXnLX9xVH9gv1XwNn4j5uyafZJtdB+pNE3LAMcvqP2bU/2DdWKhqOPmC9+7FM7uFJu7yGw59kGeGjoFzYtq9Em+twfTaLpQsEZETZ1iIOC6Qfx9KvgOJUeuRH7uHKVsMHkBBUGdgCNo7oC/FU8CPeBU6ncB2J0umErKQGhbvPN6ikYTO1u2/n2h0ATUXJdJ3slYSc1CcsZXflVeSk9pUU=","x-forefront-antispam-report":"\n CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR04MB12114.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(19092799006)(366016)(1800799024)(38070700021)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?kWTiFbkIUPsXsFqbPmMien7nGZCY?=\n\t=?utf-8?q?mLDyoYDhatDJ8tpRkedi6cjtMjIMCVDd88+HCs0h1vCi/ru0W/uJ/HqYs2t9/d94H?=\n\t=?utf-8?q?sVo4XmJTFAobWfjIw1vGDQe7aDpeMEhAxxR6oqIlu8XXTpaSN+pdS2LQyu5Wa97nq?=\n\t=?utf-8?q?rOuRt99b+jkSrLiGnjt5ZAiRDOd5Tn77Sj46ENpE19lxgh1HvbBl9G4U/KVa3acqh?=\n\t=?utf-8?q?heyvj/F9xqxvnFMRCrA7kBa7Dn3mYhjZacHccz0qkrv1vHVF7s2rEUMwB/MKhRI+/?=\n\t=?utf-8?q?dG8ATx1wArRWQCuJwPmuKHs5MB3cMm5Fh40rTDHwOqmIS4otJGJcYQsBMtyaIw6PC?=\n\t=?utf-8?q?fRQyzxXrNeAGkg8XsvXvNfKvzkoxeqBc2eQOCxTFM3ydSh25HmMBerwI8LXEaB2M0?=\n\t=?utf-8?q?/u6tF93IieRa8WzDVflea6civ5Wi/IzSnpRuZlpGByxWft3AQx3+/6IsCidnwwv31?=\n\t=?utf-8?q?YKp3/VoDvBkQ+Q9tBLdOtZjx1aXvzjkkYjZ04GVwvgsOAJegboncV5jxF8BgOsBhT?=\n\t=?utf-8?q?n7F1VPd/DoROSzalsnvr9lvmAIBI1wHYPVyUaEXGjYq+UuW5Rpp1LQ5wIiSBofrmb?=\n\t=?utf-8?q?7p6FAHe31iNRK/DUliNW2o3LIexFZqwTNwjtWIYSChBBBa2F/AsnT0EYF+s7MGBQ/?=\n\t=?utf-8?q?cnhS0tSaGVbAGElG6GWvZXFPrAhQcfekjJwJYzTvnBtPfnvktlBkf8Bp+3wEXMyN4?=\n\t=?utf-8?q?P86KBsgtCRproL/CyD5yWajaVWrazaTcxgxxVyRNVoAOwTEq9PAFoNy7eO4iyKmIR?=\n\t=?utf-8?q?xyeszMF+oNmUMjvBgz+RptAGK0F+a0hNUw3Vf7XrKw1K/nMhBprT+aJuQDgFUmDrD?=\n\t=?utf-8?q?CpO9pAFFaleYol85giI08n7B7vHj8IA/IJTZ+FpFttzjAjQ9kvcFPKaybtZ/SY9Bp?=\n\t=?utf-8?q?zVwr57KeaHSWwcHsxuLgT/FDsM+zHxHuyr28k4/Si5Dm/ivSRM3egTdiMgb2R2IuY?=\n\t=?utf-8?q?uwhBpHeYZfEzibjewh1jQ+MtUSgoI8G/obwkHkcvOxjlE9HkDlNkNjGXdioGQje/7?=\n\t=?utf-8?q?hbHiLkej89aoda8JakV21qA/blxEGTBHf81BMEDGg0teGk6T2dBLCRp34/BZyVR/r?=\n\t=?utf-8?q?5mKIxilhKFiAYalv2E+oeIXGsm6DgkqlBa1C0wdruF+LtZ8+bWDnu37kSM4hazGN7?=\n\t=?utf-8?q?ek3raLByhtafLhYlE5UYiX5k+6oaKUR0g8G+fSeSJQh8JB6Y9F0yN9yhYl9l2iOMf?=\n\t=?utf-8?q?MHfHIAVMgBO2HABZl2VQbLMgnkRJlmCjwuAukE0tyh/iTVE5SYOAbf0iKjmj6tB6t?=\n\t=?utf-8?q?OiYLqWr11UbAsG4CKcHd/iEZl+pwMyyipUkLIY4lq0UCvCfoMS90FG5At8fQKrLER?=\n\t=?utf-8?q?YcEefnmZqEDqsL9WIG5OULF+3Gqnngdud+nq+t7VJl1qtzsCKvliHwV1Kzfl+OV+d?=\n\t=?utf-8?q?WvVNs6SKwkGiXa/EpivvjzN0OtT3eyRYdcF0OKBUn3NLGLQuOa0/IP7WwW40Y3QSt?=\n\t=?utf-8?q?hTRmbfy+V0A/MXKDhOw/vI1jTTMh/s08rdBxF20EbAbcx0G/0JYZmqvR/0L0HL6t6?=\n\t=?utf-8?q?ldsLKUbqdqVyUt+jV7vWW1rOpARD9O42wInVKYXTQfH8j5YDRd1kLKkw/LONPSjV/?=\n\t=?utf-8?q?Tyj26vTLUv9XIEKd0OjSM5NCY0BJAvX92vGhxJlHNo80zzNa2MAxCC2CUcYuIipnK?=\n\t=?utf-8?q?k7X3fAKSM7?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"VI0PR04MB12114.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n f81724b4-d89e-4f55-9a20-08de95499710","X-MS-Exchange-CrossTenant-originalarrivaltime":"08 Apr 2026 08:34:03.2687\n (UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"\n EAD6ywCXfHDbO++P6QHyAm9w0YaF3WqyQW35aO2l9KHEwr1endMj2reKlRzMl3HCCQNKkFpuZCOFZEAEQdWbig==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"PA2PR04MB10375"}},{"id":3674791,"web_url":"http://patchwork.ozlabs.org/comment/3674791/","msgid":"<t5x45nyn6lw7cofzj2rec5j6z2ml6kve2hvzeeastdrv4hilsu@ujhkmltpp5ky>","list_archive_url":null,"date":"2026-04-08T13:55:19","subject":"Re: [PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","submitter":{"id":78905,"url":"http://patchwork.ozlabs.org/api/people/78905/","name":"Manivannan Sadhasivam","email":"mani@kernel.org"},"content":"On Wed, Apr 08, 2026 at 08:34:03AM +0000, Sherry Sun wrote:\n> > On Tue, Apr 07, 2026 at 06:41:46PM +0800, Sherry Sun wrote:\n> > > The current DT binding for pci-imx6 specifies the 'reset-gpios'\n> > > property in the host bridge node. However, the PERST# signal logically\n> > > belongs to individual Root Ports rather than the host bridge itself.\n> > > This becomes important when supporting PCIe KeyE connector and PCI\n> > > power control framework for pci-imx6 driver, which requires properties\n> > > to be specified in Root Port nodes.\n> > >\n> > > Add support for parsing 'reset-gpios' from Root Port child nodes using\n> > > the common helper pci_host_common_parse_ports(), and update the reset\n> > > GPIO handling to use the parsed port list from bridge->ports. To\n> > > maintain DT backwards compatibility, fallback to the legacy method of\n> > > parsing the host bridge node if the reset property is not present in\n> > > the Root Port node.\n> > >\n> > > Since now the reset GPIO is obtained with GPIOD_ASIS flag, it may be\n> > > in input mode, using gpiod_direction_output() instead of\n> > > gpiod_set_value_cansleep() to ensure the reset GPIO is properly\n> > > configured as output before setting its value.\n> > >\n> > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com>\n> > > ---\n> > >  drivers/pci/controller/dwc/pci-imx6.c | 75\n> > > +++++++++++++++++++++------\n> > >  1 file changed, 60 insertions(+), 15 deletions(-)\n> > >\n> > > diff --git a/drivers/pci/controller/dwc/pci-imx6.c\n> > > b/drivers/pci/controller/dwc/pci-imx6.c\n> > > index d99da7e42590..dd8f9c0fcec4 100644\n> > > --- a/drivers/pci/controller/dwc/pci-imx6.c\n> > > +++ b/drivers/pci/controller/dwc/pci-imx6.c\n> > > @@ -34,6 +34,7 @@\n> > >  #include <linux/pm_runtime.h>\n> > >\n> > >  #include \"../../pci.h\"\n> > > +#include \"../pci-host-common.h\"\n> > >  #include \"pcie-designware.h\"\n> > >\n> > >  #define IMX8MQ_GPR_PCIE_REF_USE_PAD\t\tBIT(9)\n> > > @@ -152,7 +153,6 @@ struct imx_lut_data {\n> > >\n> > >  struct imx_pcie {\n> > >  \tstruct dw_pcie\t\t*pci;\n> > > -\tstruct gpio_desc\t*reset_gpiod;\n> > >  \tstruct clk_bulk_data\t*clks;\n> > >  \tint\t\t\tnum_clks;\n> > >  \tbool\t\t\tsupports_clkreq;\n> > > @@ -1224,6 +1224,32 @@ static void imx_pcie_disable_device(struct\n> > pci_host_bridge *bridge,\n> > >  \timx_pcie_remove_lut(imx_pcie, pci_dev_id(pdev));  }\n> > >\n> > > +static int imx_pcie_parse_legacy_binding(struct imx_pcie *pcie) {\n> > > +\tstruct device *dev = pcie->pci->dev;\n> > > +\tstruct pci_host_bridge *bridge = pcie->pci->pp.bridge;\n> > > +\tstruct pci_host_port *port;\n> > > +\tstruct gpio_desc *reset;\n> > > +\n> > > +\treset = devm_gpiod_get_optional(dev, \"reset\", GPIOD_ASIS);\n> > > +\tif (IS_ERR(reset))\n> > > +\t\treturn PTR_ERR(reset);\n> > > +\n> > > +\tif (!reset)\n> > > +\t\treturn 0;\n> > > +\n> > > +\tport = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);\n> > > +\tif (!port)\n> > > +\t\treturn -ENOMEM;\n> > > +\n> > > +\tport->reset = reset;\n> > > +\tINIT_LIST_HEAD(&port->list);\n> > > +\tlist_add_tail(&port->list, &bridge->ports);\n> > > +\n> > > +\treturn devm_add_action_or_reset(dev,\n> > pci_host_common_delete_ports,\n> > > +\t\t\t\t\t&bridge->ports);\n> > > +}\n> > > +\n> > >  static void imx_pcie_vpcie_aux_disable(void *data)  {\n> > >  \tstruct regulator *vpcie_aux = data;\n> > > @@ -1233,13 +1259,22 @@ static void imx_pcie_vpcie_aux_disable(void\n> > > *data)\n> > >\n> > >  static void imx_pcie_assert_perst(struct imx_pcie *imx_pcie, bool\n> > > assert)  {\n> > > -\tif (assert) {\n> > > -\t\tgpiod_set_value_cansleep(imx_pcie->reset_gpiod, 1);\n> > > -\t} else {\n> > > -\t\tif (imx_pcie->reset_gpiod) {\n> > > -\t\t\tmsleep(PCIE_T_PVPERL_MS);\n> > > -\t\t\tgpiod_set_value_cansleep(imx_pcie->reset_gpiod, 0);\n> > > -\t\t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> > > +\tstruct dw_pcie *pci = imx_pcie->pci;\n> > > +\tstruct pci_host_bridge *bridge = pci->pp.bridge;\n> > > +\tstruct pci_host_port *port;\n> > > +\n> > > +\tif (!bridge)\n> > > +\t\treturn;\n> > > +\n> > > +\tlist_for_each_entry(port, &bridge->ports, list) {\n> > > +\t\tif (assert) {\n> > > +\t\t\tgpiod_direction_output(port->reset, 1);\n> > > +\t\t} else {\n> > > +\t\t\tif (port->reset) {\n> > > +\t\t\t\tmsleep(PCIE_T_PVPERL_MS);\n> > > +\t\t\t\tgpiod_direction_output(port->reset, 0);\n> > > +\t\t\t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> > > +\t\t\t}\n> > \n> > Sashiko flagged this loop:\n> > \n> > ```\n> > Does this loop multiply the initialization delays?\n> > If a controller has multiple Root Ports, the msleep calls will run sequentially\n> > for each port, linearly increasing the delay. Could we optimize this by\n> > asserting all reset GPIOs, waiting the pre-delay once, de-asserting all GPIOs,\n> > and waiting the post-delay once for the entire bus?\n> > ```\n> > \n> > Maybe you should do:\n> > \n> > \tif (!list_empty(&bridge->ports) && !assert)\n> > \t\tmsleep(PCIE_T_PVPERL_MS);\n> > \n> > \tlist_for_each_entry(port, &bridge->ports, list) {\n> > \t\t...\n> > \t\tgpiod_direction_output(port->reset, 0);\n> > \t\t...\n> > \t}\n> > \n> > \tif (!list_empty(&bridge->ports) && !assert)\n> > \t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> > \n> \n> Hi Mani, I think the code below looks clearer, is that ok for you?\n> \n>     if (assert) {\n>         list_for_each_entry(port, &bridge->ports, list)\n>             gpiod_direction_output(port->reset, 1);\n>     } else {\n>         if (list_empty(&bridge->ports))\n>             return;\n> \n\nThis check should be moved out of the if() condition. Other than this, the\nchange looks good.\n\n>         msleep(PCIE_T_PVPERL_MS);\n>         list_for_each_entry(port, &bridge->ports, list)\n>             gpiod_direction_output(port->reset, 0);\n>         msleep(PCIE_RESET_CONFIG_WAIT_MS);\n>     }\n>\n> > And then this:\n> > \n> > ```\n> > Also, since this function is called from imx_pcie_resume_noirq, which\n> > executes with hardware interrupts disabled, does the use of msleep here\n> > trigger a 'sleeping while atomic' bug?\n> > ```\n> > \n> > This is a valid concern. You should use mdelay(). But I'd recommend switching\n> > to IRQ enabled callback, resume() instead. There is no complelling reason to\n> > use resume_noirq() in this driver and adding delays in noirq() callbacks is not\n> > recommended as it may increase the overall system resume time.\n> > \n> > I will submit a separate series to convert dw_pcie_resume_noirq() and its\n> > callers to IRQ enabled callbacks since this dw_pcie_resume_noirq() could\n> > potentially cause delay up to 1sec.\n> \n> Yes, this is not a new bug introduced by this patch. I agree we should covert the\n> convert dw_pcie_resume_noirq() and the caller to IRQ enabled callbacks to fix\n> this in a separate patch series.\n> For now, should I leave it as is, or switch to mdelay in this patch?\n> \n\nJust use mdelay() in your patch for now.\n\n- Mani","headers":{"Return-Path":"\n <linux-pci+bounces-52157-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=Xyh+eGOS;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-52157-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=\"Xyh+eGOS\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=10.30.226.201"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org\n [IPv6:2600:3c0a:e001:db::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4frPrb67w9z1xv0\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 00:02:06 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 4BA2830B8214\n\tfor <incoming@patchwork.ozlabs.org>; Wed,  8 Apr 2026 13:55:30 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 1A2873D0924;\n\tWed,  8 Apr 2026 13:55:30 +0000 (UTC)","from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org\n [10.30.226.201])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id EAFE13B8938;\n\tWed,  8 Apr 2026 13:55:29 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id DA82DC19421;\n\tWed,  8 Apr 2026 13:55:23 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775656530; cv=none;\n b=k2KcMr7TNZEy7SO0ou6bCqyVZf1/vifg579OFiywz7ylLFd3vpJHDb3aD9Kny48dt++R2PQJB+c/1SDZMlNlArXcR5XWln+ZznP+V75t0StUIREUUnCjFKireBV5OqqgUW0GwK+GmSHdx4VNFTpgREkBEi/wkonagHVihuVrK7s=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775656530; c=relaxed/simple;\n\tbh=bWhTBkh9lG0OYn3p1uqGUIvyw6GLsmFHsj0//fglkRI=;\n\th=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version:\n\t Content-Type:Content-Disposition:In-Reply-To;\n b=M7qp2G3/hCf2nwv9pALkmEH4qvgcr+NzH01sHt5i5OZ03w2Fj3QO5SOEQ028aPNBm4fbqIs+mgufGW4N3vtWdxD9pUROGFDL5qUPf43iwPE+uQTFB+3oXVcHwepbg92fTsaEzYUA4ocSn1zXbTkDGixTRgolXt818L0b30jPqtQ=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org\n header.b=Xyh+eGOS; arc=none smtp.client-ip=10.30.226.201","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1775656529;\n\tbh=bWhTBkh9lG0OYn3p1uqGUIvyw6GLsmFHsj0//fglkRI=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Xyh+eGOS1uEhknb6elYjvxe9plsLEQA0ndZ/lEoPUYioAiP5zQvjd2bNOOWvI5MCL\n\t dZfs0TsU9xwBVF5m6omQOw13bGHGgud/VvcptZASu3QkiKC8BCoEO+mkYwyUCwzz1J\n\t jes4D92bC7QMF7a9IOOGoVb3U8JTx4tCUFf4SaCvo5DDyZDEcXE3XDiP3Rq4W/skR9\n\t zf/ld081YahQDRuyOUmAPBGZFFE1GEOdZjtyqIvCZrXGAXsLZBOzMXh6jasUlbgBvO\n\t 1D/CXQGw4lO4f54mBTQyiNhYZU2Klfd6QJQ5LTHEYWyQ09Dks+38g79+7twLd8/bex\n\t //beLRzRUVylA==","Date":"Wed, 8 Apr 2026 19:25:19 +0530","From":"Manivannan Sadhasivam <mani@kernel.org>","To":"Sherry Sun <sherry.sun@nxp.com>","Cc":"\"robh@kernel.org\" <robh@kernel.org>,\n\t\"krzk+dt@kernel.org\" <krzk+dt@kernel.org>,\n \"conor+dt@kernel.org\" <conor+dt@kernel.org>,\n\tFrank Li <frank.li@nxp.com>,\n \"s.hauer@pengutronix.de\" <s.hauer@pengutronix.de>,\n\t\"kernel@pengutronix.de\" <kernel@pengutronix.de>,\n \"festevam@gmail.com\" <festevam@gmail.com>,\n\t\"lpieralisi@kernel.org\" <lpieralisi@kernel.org>,\n \"kwilczynski@kernel.org\" <kwilczynski@kernel.org>,\n\t\"bhelgaas@google.com\" <bhelgaas@google.com>,\n Hongxing Zhu <hongxing.zhu@nxp.com>,\n\t\"l.stach@pengutronix.de\" <l.stach@pengutronix.de>,\n \"imx@lists.linux.dev\" <imx@lists.linux.dev>,\n\t\"linux-pci@vger.kernel.org\" <linux-pci@vger.kernel.org>,\n\t\"linux-arm-kernel@lists.infradead.org\"\n <linux-arm-kernel@lists.infradead.org>,\n \"devicetree@vger.kernel.org\" <devicetree@vger.kernel.org>,\n\t\"linux-kernel@vger.kernel.org\" <linux-kernel@vger.kernel.org>","Subject":"Re: [PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","Message-ID":"<t5x45nyn6lw7cofzj2rec5j6z2ml6kve2hvzeeastdrv4hilsu@ujhkmltpp5ky>","References":"<20260407104154.2842132-1-sherry.sun@nxp.com>\n <20260407104154.2842132-5-sherry.sun@nxp.com>\n <7ewnbwdo5qtasbxj4uel6a6uthczq2l6udbvoqqkwm776lvseb@v54ri2gknwxn>\n <VI0PR04MB12114AAA709016DADF0B45DA6925BA@VI0PR04MB12114.eurprd04.prod.outlook.com>","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"\n <VI0PR04MB12114AAA709016DADF0B45DA6925BA@VI0PR04MB12114.eurprd04.prod.outlook.com>"}},{"id":3675049,"web_url":"http://patchwork.ozlabs.org/comment/3675049/","msgid":"<VI0PR04MB12114B5FD1ACD1B8CC789B12592582@VI0PR04MB12114.eurprd04.prod.outlook.com>","list_archive_url":null,"date":"2026-04-09T02:40:26","subject":"RE: [PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","submitter":{"id":77063,"url":"http://patchwork.ozlabs.org/api/people/77063/","name":"Sherry Sun","email":"sherry.sun@nxp.com"},"content":"> Subject: Re: [PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n> property in new Root Port binding\n> \n> On Wed, Apr 08, 2026 at 08:34:03AM +0000, Sherry Sun wrote:\n> > > On Tue, Apr 07, 2026 at 06:41:46PM +0800, Sherry Sun wrote:\n> > > > The current DT binding for pci-imx6 specifies the 'reset-gpios'\n> > > > property in the host bridge node. However, the PERST# signal\n> > > > logically belongs to individual Root Ports rather than the host bridge\n> itself.\n> > > > This becomes important when supporting PCIe KeyE connector and PCI\n> > > > power control framework for pci-imx6 driver, which requires\n> > > > properties to be specified in Root Port nodes.\n> > > >\n> > > > Add support for parsing 'reset-gpios' from Root Port child nodes\n> > > > using the common helper pci_host_common_parse_ports(), and update\n> > > > the reset GPIO handling to use the parsed port list from\n> > > > bridge->ports. To maintain DT backwards compatibility, fallback to\n> > > > the legacy method of parsing the host bridge node if the reset\n> > > > property is not present in the Root Port node.\n> > > >\n> > > > Since now the reset GPIO is obtained with GPIOD_ASIS flag, it may\n> > > > be in input mode, using gpiod_direction_output() instead of\n> > > > gpiod_set_value_cansleep() to ensure the reset GPIO is properly\n> > > > configured as output before setting its value.\n> > > >\n> > > > Signed-off-by: Sherry Sun <sherry.sun@nxp.com>\n> > > > ---\n> > > >  drivers/pci/controller/dwc/pci-imx6.c | 75\n> > > > +++++++++++++++++++++------\n> > > >  1 file changed, 60 insertions(+), 15 deletions(-)\n> > > >\n> > > > diff --git a/drivers/pci/controller/dwc/pci-imx6.c\n> > > > b/drivers/pci/controller/dwc/pci-imx6.c\n> > > > index d99da7e42590..dd8f9c0fcec4 100644\n> > > > --- a/drivers/pci/controller/dwc/pci-imx6.c\n> > > > +++ b/drivers/pci/controller/dwc/pci-imx6.c\n> > > > @@ -34,6 +34,7 @@\n> > > >  #include <linux/pm_runtime.h>\n> > > >\n> > > >  #include \"../../pci.h\"\n> > > > +#include \"../pci-host-common.h\"\n> > > >  #include \"pcie-designware.h\"\n> > > >\n> > > >  #define IMX8MQ_GPR_PCIE_REF_USE_PAD\t\tBIT(9)\n> > > > @@ -152,7 +153,6 @@ struct imx_lut_data {\n> > > >\n> > > >  struct imx_pcie {\n> > > >  \tstruct dw_pcie\t\t*pci;\n> > > > -\tstruct gpio_desc\t*reset_gpiod;\n> > > >  \tstruct clk_bulk_data\t*clks;\n> > > >  \tint\t\t\tnum_clks;\n> > > >  \tbool\t\t\tsupports_clkreq;\n> > > > @@ -1224,6 +1224,32 @@ static void imx_pcie_disable_device(struct\n> > > pci_host_bridge *bridge,\n> > > >  \timx_pcie_remove_lut(imx_pcie, pci_dev_id(pdev));  }\n> > > >\n> > > > +static int imx_pcie_parse_legacy_binding(struct imx_pcie *pcie) {\n> > > > +\tstruct device *dev = pcie->pci->dev;\n> > > > +\tstruct pci_host_bridge *bridge = pcie->pci->pp.bridge;\n> > > > +\tstruct pci_host_port *port;\n> > > > +\tstruct gpio_desc *reset;\n> > > > +\n> > > > +\treset = devm_gpiod_get_optional(dev, \"reset\", GPIOD_ASIS);\n> > > > +\tif (IS_ERR(reset))\n> > > > +\t\treturn PTR_ERR(reset);\n> > > > +\n> > > > +\tif (!reset)\n> > > > +\t\treturn 0;\n> > > > +\n> > > > +\tport = devm_kzalloc(dev, sizeof(*port), GFP_KERNEL);\n> > > > +\tif (!port)\n> > > > +\t\treturn -ENOMEM;\n> > > > +\n> > > > +\tport->reset = reset;\n> > > > +\tINIT_LIST_HEAD(&port->list);\n> > > > +\tlist_add_tail(&port->list, &bridge->ports);\n> > > > +\n> > > > +\treturn devm_add_action_or_reset(dev,\n> > > pci_host_common_delete_ports,\n> > > > +\t\t\t\t\t&bridge->ports);\n> > > > +}\n> > > > +\n> > > >  static void imx_pcie_vpcie_aux_disable(void *data)  {\n> > > >  \tstruct regulator *vpcie_aux = data; @@ -1233,13 +1259,22 @@\n> > > > static void imx_pcie_vpcie_aux_disable(void\n> > > > *data)\n> > > >\n> > > >  static void imx_pcie_assert_perst(struct imx_pcie *imx_pcie, bool\n> > > > assert)  {\n> > > > -\tif (assert) {\n> > > > -\t\tgpiod_set_value_cansleep(imx_pcie->reset_gpiod, 1);\n> > > > -\t} else {\n> > > > -\t\tif (imx_pcie->reset_gpiod) {\n> > > > -\t\t\tmsleep(PCIE_T_PVPERL_MS);\n> > > > -\t\t\tgpiod_set_value_cansleep(imx_pcie->reset_gpiod, 0);\n> > > > -\t\t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> > > > +\tstruct dw_pcie *pci = imx_pcie->pci;\n> > > > +\tstruct pci_host_bridge *bridge = pci->pp.bridge;\n> > > > +\tstruct pci_host_port *port;\n> > > > +\n> > > > +\tif (!bridge)\n> > > > +\t\treturn;\n> > > > +\n> > > > +\tlist_for_each_entry(port, &bridge->ports, list) {\n> > > > +\t\tif (assert) {\n> > > > +\t\t\tgpiod_direction_output(port->reset, 1);\n> > > > +\t\t} else {\n> > > > +\t\t\tif (port->reset) {\n> > > > +\t\t\t\tmsleep(PCIE_T_PVPERL_MS);\n> > > > +\t\t\t\tgpiod_direction_output(port->reset, 0);\n> > > > +\t\t\t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> > > > +\t\t\t}\n> > >\n> > > Sashiko flagged this loop:\n> > >\n> > > ```\n> > > Does this loop multiply the initialization delays?\n> > > If a controller has multiple Root Ports, the msleep calls will run\n> > > sequentially for each port, linearly increasing the delay. Could we\n> > > optimize this by asserting all reset GPIOs, waiting the pre-delay\n> > > once, de-asserting all GPIOs, and waiting the post-delay once for the entire\n> bus?\n> > > ```\n> > >\n> > > Maybe you should do:\n> > >\n> > > \tif (!list_empty(&bridge->ports) && !assert)\n> > > \t\tmsleep(PCIE_T_PVPERL_MS);\n> > >\n> > > \tlist_for_each_entry(port, &bridge->ports, list) {\n> > > \t\t...\n> > > \t\tgpiod_direction_output(port->reset, 0);\n> > > \t\t...\n> > > \t}\n> > >\n> > > \tif (!list_empty(&bridge->ports) && !assert)\n> > > \t\tmsleep(PCIE_RESET_CONFIG_WAIT_MS);\n> > >\n> >\n> > Hi Mani, I think the code below looks clearer, is that ok for you?\n> >\n> >     if (assert) {\n> >         list_for_each_entry(port, &bridge->ports, list)\n> >             gpiod_direction_output(port->reset, 1);\n> >     } else {\n> >         if (list_empty(&bridge->ports))\n> >             return;\n> >\n> \n> This check should be moved out of the if() condition. Other than this, the\n> change looks good.\n\nOk, will do.\n\n> \n> >         msleep(PCIE_T_PVPERL_MS);\n> >         list_for_each_entry(port, &bridge->ports, list)\n> >             gpiod_direction_output(port->reset, 0);\n> >         msleep(PCIE_RESET_CONFIG_WAIT_MS);\n> >     }\n> >\n> > > And then this:\n> > >\n> > > ```\n> > > Also, since this function is called from imx_pcie_resume_noirq,\n> > > which executes with hardware interrupts disabled, does the use of\n> > > msleep here trigger a 'sleeping while atomic' bug?\n> > > ```\n> > >\n> > > This is a valid concern. You should use mdelay(). But I'd recommend\n> > > switching to IRQ enabled callback, resume() instead. There is no\n> > > complelling reason to use resume_noirq() in this driver and adding\n> > > delays in noirq() callbacks is not recommended as it may increase the\n> overall system resume time.\n> > >\n> > > I will submit a separate series to convert dw_pcie_resume_noirq()\n> > > and its callers to IRQ enabled callbacks since this\n> > > dw_pcie_resume_noirq() could potentially cause delay up to 1sec.\n> >\n> > Yes, this is not a new bug introduced by this patch. I agree we should\n> > covert the convert dw_pcie_resume_noirq() and the caller to IRQ\n> > enabled callbacks to fix this in a separate patch series.\n> > For now, should I leave it as is, or switch to mdelay in this patch?\n> >\n> \n> Just use mdelay() in your patch for now.\n\nOk, thanks!\n\nBest Regards\nSherry","headers":{"Return-Path":"\n <linux-pci+bounces-52186-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=IdmABsWN;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-52186-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=\"IdmABsWN\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.159.44","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=nxp.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4frkgn1p0mz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 12:40:37 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id E717130143C8\n\tfor <incoming@patchwork.ozlabs.org>; Thu,  9 Apr 2026 02:40:33 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 2B110366810;\n\tThu,  9 Apr 2026 02:40:33 +0000 (UTC)","from OSPPR02CU001.outbound.protection.outlook.com\n (mail-norwayeastazon11013044.outbound.protection.outlook.com [40.107.159.44])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 59BA6288C2F;\n\tThu,  9 Apr 2026 02:40:31 +0000 (UTC)","from VI0PR04MB12114.eurprd04.prod.outlook.com\n (2603:10a6:800:315::13) by GV1PR04MB10992.eurprd04.prod.outlook.com\n (2603:10a6:150:207::20) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Thu, 9 Apr\n 2026 02:40:27 +0000","from VI0PR04MB12114.eurprd04.prod.outlook.com\n ([fe80::feda:fd0e:147f:f994]) by VI0PR04MB12114.eurprd04.prod.outlook.com\n ([fe80::feda:fd0e:147f:f994%6]) with mapi id 15.20.9769.018; Thu, 9 Apr 2026\n 02:40:26 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775702433; cv=fail;\n b=UtLKvbVYVT0QmthekfAX64zKmUOI2I7uTkMm6bbfVQE8CXiMC2K+yFXBMGKvrz/Cj8PSOL393WEFJ0B+tRCz5mAiyY0o8oygIurpF61CP3kL9/WyYI+SGrUQvQzxWPgyi9wKwYthVy1bBo4B4EH92R0tHoy/g5S6+SpkeMBfPx0=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=AWeI2GyfxAfhe/v66nb4kWZSx99UPLdOA0qpFCtwcHxkt9Z7YcUpN9p5JyK6AAKTP0ajYaMuu+1cto3iskWXPDPkDrqCltBYRw/s3EF73PyC9X9LaZY59As/DX46pBbVcZMoF2eA3J5gzX/0Fc+UlPjAgij8Zu/6JMbLw4PYjwRzWrr5J7rALu8Dfr+Q80en03rEti+tGqGkz5RFnXpGo6JEXMcfpJwDORhPJJXQbntPt8AWd+Y7s6j1/WpDsjLJmnh/j5oavgfplvx1axvRIra4UhU0SiI7LixUCfDCeSihTM+vNzEAUCllKUL0XY5OKEQYeVIIVdSeP3kK9QhSLA=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775702433; c=relaxed/simple;\n\tbh=5g5qB4RD6e8kh3F0/bM0IOV35xTiXw1WKZbgmimrTeQ=;\n\th=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To:\n\t Content-Type:MIME-Version;\n b=FeUTWlzuhk67a+hr6z/OtojrSDDABMJap98o4D1ydMf8//pAj0bUU+D/9fhGrw9q6PHTmreKyL5cGVBEI+XTyCrdMHs/eWLjx61v2AMebCT2tkpH0G8POZQC5UHqc0ZR11Q2nGPtbqi3JiU+7aMSfqSaITXw1xHYIdntutWEKMY=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=5g5qB4RD6e8kh3F0/bM0IOV35xTiXw1WKZbgmimrTeQ=;\n b=sPG2Fhyh9ob42l4jpkM+TmEkC/BGz7tQ02fX3qhFDRKdBjPRdW3s9vSFktXZw5hs7pJhL3n/89c4u/06T0VlayGb8/i6D4fTPqxRVmhQFpOLGmedp06uZKJqPmFzfTPuzgpkiK/21cRNPqUG3FsKUiNzstoy379IrDgsdgc6Psa/1yRqiFHCfl18NF1oO8xKMtFbo1jWc6vXE+0nA8RtVI21NXBX65PcpckG6zSelEWRtECX1h8g1s2CSiWMqkDSHllUK43TUYHaSsfUMa7nZxgTNxyLMae09udD8hT47U653U/MaZNIjzb2Mp5QINi4qyxs9E3U2ExgYlPiV4Rkug=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com;\n spf=pass smtp.mailfrom=nxp.com;\n dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=IdmABsWN; arc=fail smtp.client-ip=40.107.159.44","i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass\n header.d=nxp.com; arc=none"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=5g5qB4RD6e8kh3F0/bM0IOV35xTiXw1WKZbgmimrTeQ=;\n b=IdmABsWNaHtmdX+CvkTg/OQyyQAy8IBXWQzvrF7GOkGPa0trZxAA7nDW50mp9EC+ePsLoJ+Q5wNU8UxkT2XPf9W4ywkeI6vCntK0/K1U40SjVCtt/mnqku5TkyS+sIIERWytRL0ka1S4TiwGgY7ssNX3KzciT53PMssHkDBBCGUAr+baSQRq5qmY1QZ8wqp0wG7t5K3HcaJRyGsgymNvymcljyrt3m0NKSusgSS4xEXjt8bXhbUDQfBDkg2u31z1oQ1zXZN8q1WN0X7hi1/oAv4uLi3mUfBkGFtNnGwFV09EGP8d2S77FsrQoG+Afh1wHDxvdZOrDz7uEhLt1LtEZg==","From":"Sherry Sun <sherry.sun@nxp.com>","To":"Manivannan Sadhasivam <mani@kernel.org>","CC":"\"robh@kernel.org\" <robh@kernel.org>, \"krzk+dt@kernel.org\"\n\t<krzk+dt@kernel.org>, \"conor+dt@kernel.org\" <conor+dt@kernel.org>, Frank Li\n\t<frank.li@nxp.com>, \"s.hauer@pengutronix.de\" <s.hauer@pengutronix.de>,\n\t\"kernel@pengutronix.de\" <kernel@pengutronix.de>, \"festevam@gmail.com\"\n\t<festevam@gmail.com>, \"lpieralisi@kernel.org\" <lpieralisi@kernel.org>,\n\t\"kwilczynski@kernel.org\" <kwilczynski@kernel.org>, \"bhelgaas@google.com\"\n\t<bhelgaas@google.com>, Hongxing Zhu <hongxing.zhu@nxp.com>,\n\t\"l.stach@pengutronix.de\" <l.stach@pengutronix.de>, \"imx@lists.linux.dev\"\n\t<imx@lists.linux.dev>, \"linux-pci@vger.kernel.org\"\n\t<linux-pci@vger.kernel.org>, \"linux-arm-kernel@lists.infradead.org\"\n\t<linux-arm-kernel@lists.infradead.org>, \"devicetree@vger.kernel.org\"\n\t<devicetree@vger.kernel.org>, \"linux-kernel@vger.kernel.org\"\n\t<linux-kernel@vger.kernel.org>","Subject":"RE: [PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","Thread-Topic":"[PATCH V11 04/12] PCI: imx6: Add support for parsing the reset\n property in new Root Port binding","Thread-Index":"AQHcxnsvpEGHOh8zy0CNlQtKGkFWybXTn/aAgAE0/uCAAFzBgIAA1Uvw","Date":"Thu, 9 Apr 2026 02:40:26 +0000","Message-ID":"\n <VI0PR04MB12114B5FD1ACD1B8CC789B12592582@VI0PR04MB12114.eurprd04.prod.outlook.com>","References":"<20260407104154.2842132-1-sherry.sun@nxp.com>\n <20260407104154.2842132-5-sherry.sun@nxp.com>\n <7ewnbwdo5qtasbxj4uel6a6uthczq2l6udbvoqqkwm776lvseb@v54ri2gknwxn>\n <VI0PR04MB12114AAA709016DADF0B45DA6925BA@VI0PR04MB12114.eurprd04.prod.outlook.com>\n <t5x45nyn6lw7cofzj2rec5j6z2ml6kve2hvzeeastdrv4hilsu@ujhkmltpp5ky>","In-Reply-To":"<t5x45nyn6lw7cofzj2rec5j6z2ml6kve2hvzeeastdrv4hilsu@ujhkmltpp5ky>","Accept-Language":"zh-CN, en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=IdmABsWN;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-52186-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=\"IdmABsWN\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.159.44","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=nxp.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"VI0PR04MB12114:EE_|GV1PR04MB10992:EE_","x-ms-office365-filtering-correlation-id":"8963c263-6e93-407d-6a87-08de95e15b78","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"\n BCL:0;ARA:13230040|366016|19092799006|7416014|376014|1800799024|22082099003|18002099003|38070700021|56012099003;","x-microsoft-antispam-message-info":"\n /a49k8uxPY5QTDgmqS1oqLRG9piw+nkNGwvTLTRQZOGNAd+AXODJkYO/XLDMG5kJgImqQpaGBvBh/rhBHywpg2O+uvRIb1cep1jgxhKPi+brYjtcKTVvQq9RCN0jKl303iYv1qNS3f/X9Hm5EAe2RFdFqKARTiIQZHTaRfXsjiGSZSZUCjOnJKvb8C18ornz7uDpH+QTRWBPyYZjMQW0iK/3pz+0h0tNM4NT7by8F75OsLmE9TVuRTfDWQwLiTnhhvrTySlX4EJtRc9HeGRbeIEeQIL4RL2Rj8WRlE9gf2aBFc8gUgHWRyUPdoyZi0vAaa5X3lRospwgM9QAFoNrY5QdBsKtM2tUcK/J8fUf3bJZCHz01rWdMi79TFwt0Js3L2Ls5AJ5f+XHnwuAe10iLA2vOWZcwRx8XYcaVOxwS36S+tu0/FFButWlkn1Nh1ihZ56HSUA5WI8gr/Y0dkeH430PRHE4fUBYWYpkT90toNIS7bFyeD1+Im9urwLDwaKgAeL+0qQ58mLv6q2xT+ILB/AaJXyH0B2t0D6zvyelVB4dMIKp/UZ/9HGcgn2MoL/uUhxITy+2Z965A4owBTz9HLpXe20MJq8Vxo1GRI/qJmSjJdQcTPYCq+faRe0lftEzPRR9Rs+jIg+geVhUK1FbmONuu8q6Run1kBtOIjPXDAfZZzgKslEa7k3BOZcDLwRthSD33RmJwOi2uJSAZMekbD6BHoZ67nI02I37QrEdFKu1JHGu52QnpsIE2yhmT/zEXLzmQlZbia57DnGedHA612HmEsSin/Urk48Rt1SbUiI=","x-forefront-antispam-report":"\n CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR04MB12114.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(7416014)(376014)(1800799024)(22082099003)(18002099003)(38070700021)(56012099003);DIR:OUT;SFP:1101;","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?jUeZAfQd8PZ/OspHQWvnxSCCnDy6?=\n\t=?utf-8?q?ckxuQ5yJU+14HiDNnTYGWknBQmTXBz5ib2l0C4lFS5/cj36zo8c+Qz6M7ZqIgvk7D?=\n\t=?utf-8?q?/UBcqhJeAJrCfF37OLBqwH0r4ST81nk2gPX6pVKW0H0mWmM/XUULNOaz9/ZPumz5D?=\n\t=?utf-8?q?U2/SnzoLYp4AIIx+UfwbvA6NUldWZim1Fn5g1yvvScJFlWa5uWZkvt6oPaIoS7jyf?=\n\t=?utf-8?q?vefRl+K2P24kOmJpWNQRok6TJb3zJxsx48yqYxt6cPqbQwz6gHnCtys02jDn4T10B?=\n\t=?utf-8?q?YCNOoXCuxnSnlzZiWaxEZPanv7Gmyojk7MS5FKGrMRYZVQOfI1XqyAkzefjlyIwo7?=\n\t=?utf-8?q?1rmjFLtkilvoCK4q3PQoxyNZFfWBS3rhMYrhCYtjMpsLGjDs2/aV1R39l+r0VnA0o?=\n\t=?utf-8?q?KFCDt4HGh7s9vT2rGVdm27VnS0HFom2DyWpUQTwZSBjvuJKrQBkP4FEl85El1Ejuu?=\n\t=?utf-8?q?HQC/cYLwyIURt8D0Q9hWd0LiymvYT/wkTi473ZnBZWGOHMTEca4qKqQYwc3r6zEOy?=\n\t=?utf-8?q?xD8Myqhm0eVYPKy+5vl5l6huNZA4K0WoLqT+df2f4Je8G11QG5KppOjiHOxIMUQAR?=\n\t=?utf-8?q?DW7vGkEkPCjL8EgoERPfU5WcRbhQUDKS8/LOQni5fx0OdtdPwYVqbIbbpUhsDXbSd?=\n\t=?utf-8?q?sPgzb454UDCtDUySyASbV88jCe0ErRBtVunSs5vArdd1OSGHRdfx5JCTngrALRDRm?=\n\t=?utf-8?q?OJBOcfS4WrVBbFACywr7VrcNV0lWH9OU6xPJfcwdmwowpp4E6Dz7IgMAOk5x0pp3D?=\n\t=?utf-8?q?bOG7Sh/qw/oo5fIs+WAgofysa7Rd6Uhrd7mCc/6LEU+5FPiBvy+0xNEsmbEeelyAA?=\n\t=?utf-8?q?u+qbSMmyNGPJcraMj/AYUpOjeetR0Yud0kUGbnR3HZEnZklcpBbPrbqqc+YSiddMR?=\n\t=?utf-8?q?nQ6iKZlUxR2f4ev6WEavsR1JiwEnFpm+TOTLSTdaILcGpqKOwh0SmNk4lyDqjBzIH?=\n\t=?utf-8?q?g4A0aJS3dMQTUKP0m/H8WUTilL9DQcqjybFc5Qq/m3oXaWZj6g2NsusWFPm4knpzw?=\n\t=?utf-8?q?i6T+aMQOt+DbOyNfaOFc43yvLy0yfINxRMFHXdUu0GZ5RjfQXBt2eMaiOoti8ntjg?=\n\t=?utf-8?q?GirMPPm1Px7gE1eQvTMH2jB93w6gEgUNQgva4+qS+JiHDpgBczG4PHDlJmNMmLwu+?=\n\t=?utf-8?q?GQroNQblwUxayTEmbUJax+hJdJ4hX/htxZNw6OQMins0yS9IaEhZvB6oMSoWckbHb?=\n\t=?utf-8?q?+zZcWx05ej9S4il7mbOTMcZ4T1MYFxE+C/Q1HC1qnT3WkDiUkrJxpY+jETBGz4xMU?=\n\t=?utf-8?q?/9Iu7QrsqmQggTOwG3vr03lDexIX+0UuJ6hLEOMe5A1wLvOoons2QWhDLv2WOGYV5?=\n\t=?utf-8?q?yN14VLQC6BZcRNvvw5oeUrxe1kUxOIZ3+y9i+6qsE0ysTs5BkoRWZLem66EZdfKI0?=\n\t=?utf-8?q?ciGZfz2kMgW2/+XmH63E3gEgLUCzBMu6Zn2/QXAZJXrzA+4/4SH2B8Gw4XgQfBk1C?=\n\t=?utf-8?q?CDa3EeW4UKGb4rHnxTuq4fvVSXqPLCTto0Uhn7o/yPNsu5oSOo9YKZ0TABgjCqlSd?=\n\t=?utf-8?q?6YjTtBkqI6mgyVJ/VAV2IwRgdKJGbVu8znUw0bHY3B+4/U27L9I8neY1h0Khs6+Hl?=\n\t=?utf-8?q?3MLpZjFqBjVMZ8qkUpeEJv1rwdeW1UJLeMMtFPHK18n3X01bmD+nComdKEvTu+AMo?=\n\t=?utf-8?q?G58XwkRZXX?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"VI0PR04MB12114.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 8963c263-6e93-407d-6a87-08de95e15b78","X-MS-Exchange-CrossTenant-originalarrivaltime":"09 Apr 2026 02:40:26.7955\n (UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"\n AfkOP61aU1xNg20ZQxdcHDY9HPGWEv2rz70qQDhVT0awSBFKSBCzjC8hpm8OjKlkEU/O8WTsM+sZQR6NYbpjTw==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"GV1PR04MB10992"}}]