* [PATCH v4 0/7] PCI: mediatek-gen3: add power control support
@ 2026-03-10 9:19 Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 1/7] PCI: mediatek-gen3: Clean up mtk_pcie_parse_port() with dev_err_probe() Chen-Yu Tsai
` (6 more replies)
0 siblings, 7 replies; 13+ messages in thread
From: Chen-Yu Tsai @ 2026-03-10 9:19 UTC (permalink / raw)
To: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: Chen-Yu Tsai, Bartosz Golaszewski, linux-pci, linux-mediatek,
linux-kernel
Hi folks,
This is v4 of my MediaTek PCIe gen3 controller driver power control
support series.
Changes since v3:
- Link to v3: https://lore.kernel.org/all/20260302053109.1117091-1-wenst@chromium.org/
- Added two patches to move kernel setup code before controller setup
code, and controller setup code before device setup code, as requested
by Bjorn
- Dropped dts patches as they are already merged
I kept all the existing reviewed-by tags, since the changes to the
existing patches aren't that big.
Changes since v2:
- Link to v2: https://lore.kernel.org/all/20260226092234.3859740-1-wenst@chromium.org/
- Made PCIE_MEDIATEK_GEN3 select PCI_PWRCTRL_SLOT, following existing
examples
I do wonder why the existing ones don't select PCI_PWRCTRL instead.
As there are multiple providers, and now even the M.2 power sequencing
driver, I think either we enable the common ones by default, or let
the user pick and choose.
Changes since v1:
- Link to v1: https://lore.kernel.org/all/20260224071258.2654521-1-wenst@chromium.org/
- commit message for patch 3 was rewritten
Jianjun Wang was dropped from the recipients as the email was
bouncing.
This series adds power control support to the MediaTek PCIe gen3
controller driver. This allows proper modeling of WiFi and NVMe
adapters in the device tree and control over their power supplies.
Patch 1 through 6 are cleanups and minor improvements to the driver.
Patch 7 adds power control support using the new pwrctrl API to the
PCIe controller driver.
Please have a look.
Thanks
ChenYu
[1] https://lore.kernel.org/linux-pci/20260224-pci-m2-e-v5-0-dd9b9501d33c@oss.qualcomm.com/
Chen-Yu Tsai (7):
PCI: mediatek-gen3: Clean up mtk_pcie_parse_port() with
dev_err_probe()
PCI: mediatek-gen3: Move mtk_pcie_setup_irq() out of mtk_pcie_setup()
PCI: mediatek-gen3: Move controller setup steps before PERST# control
PCI: mediatek-gen3: Add error path for resume driver callbacks
PCI: mediatek-gen3: Split out device power helpers
PCI: mediatek-gen3: Disable device if further setup fails
PCI: mediatek-gen3: Integrate new pwrctrl API
drivers/pci/controller/Kconfig | 1 +
drivers/pci/controller/pcie-mediatek-gen3.c | 223 +++++++++++---------
2 files changed, 129 insertions(+), 95 deletions(-)
--
2.53.0.473.g4a7958ca14-goog
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v4 1/7] PCI: mediatek-gen3: Clean up mtk_pcie_parse_port() with dev_err_probe()
2026-03-10 9:19 [PATCH v4 0/7] PCI: mediatek-gen3: add power control support Chen-Yu Tsai
@ 2026-03-10 9:19 ` Chen-Yu Tsai
2026-03-10 23:19 ` Bjorn Helgaas
2026-03-10 9:19 ` [PATCH v4 2/7] PCI: mediatek-gen3: Move mtk_pcie_setup_irq() out of mtk_pcie_setup() Chen-Yu Tsai
` (5 subsequent siblings)
6 siblings, 1 reply; 13+ messages in thread
From: Chen-Yu Tsai @ 2026-03-10 9:19 UTC (permalink / raw)
To: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: Chen-Yu Tsai, Bartosz Golaszewski, linux-pci, linux-mediatek,
linux-kernel, Bartosz Golaszewski
mtk_pcie_parse_port() in the pcie-mediatek-gen driver has a bunch of
if (err) {
dev_err(dev, "error message\n");
return err; # or goto
}
patterns.
Simplify these with dev_err_probe(). The system also gains proper
deferred probe messages that can be seen in
/sys/kernel/debug/devices_deferred
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
drivers/pci/controller/pcie-mediatek-gen3.c | 36 ++++++---------------
1 file changed, 10 insertions(+), 26 deletions(-)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 75ddb8bee168..1939cac995b5 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -876,10 +876,8 @@ static int mtk_pcie_parse_port(struct mtk_gen3_pcie *pcie)
if (!regs)
return -EINVAL;
pcie->base = devm_ioremap_resource(dev, regs);
- if (IS_ERR(pcie->base)) {
- dev_err(dev, "failed to map register base\n");
- return PTR_ERR(pcie->base);
- }
+ if (IS_ERR(pcie->base))
+ return dev_err_probe(dev, PTR_ERR(pcie->base), "failed to map register base\n");
pcie->reg_base = regs->start;
@@ -888,34 +886,20 @@ static int mtk_pcie_parse_port(struct mtk_gen3_pcie *pcie)
ret = devm_reset_control_bulk_get_optional_shared(dev, num_resets,
pcie->phy_resets);
- if (ret) {
- dev_err(dev, "failed to get PHY bulk reset\n");
- return ret;
- }
+ if (ret)
+ return dev_err_probe(dev, ret, "failed to get PHY bulk reset\n");
pcie->mac_reset = devm_reset_control_get_optional_exclusive(dev, "mac");
- if (IS_ERR(pcie->mac_reset)) {
- ret = PTR_ERR(pcie->mac_reset);
- if (ret != -EPROBE_DEFER)
- dev_err(dev, "failed to get MAC reset\n");
-
- return ret;
- }
+ if (IS_ERR(pcie->mac_reset))
+ return dev_err_probe(dev, PTR_ERR(pcie->mac_reset), "failed to get MAC reset\n");
pcie->phy = devm_phy_optional_get(dev, "pcie-phy");
- if (IS_ERR(pcie->phy)) {
- ret = PTR_ERR(pcie->phy);
- if (ret != -EPROBE_DEFER)
- dev_err(dev, "failed to get PHY\n");
-
- return ret;
- }
+ if (IS_ERR(pcie->phy))
+ return dev_err_probe(dev, PTR_ERR(pcie->phy), "failed to get PHY\n");
pcie->num_clks = devm_clk_bulk_get_all(dev, &pcie->clks);
- if (pcie->num_clks < 0) {
- dev_err(dev, "failed to get clocks\n");
- return pcie->num_clks;
- }
+ if (pcie->num_clks < 0)
+ return dev_err_probe(dev, pcie->num_clks, "failed to get clocks\n");
ret = of_property_read_u32(dev->of_node, "num-lanes", &num_lanes);
if (ret == 0) {
--
2.53.0.473.g4a7958ca14-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 2/7] PCI: mediatek-gen3: Move mtk_pcie_setup_irq() out of mtk_pcie_setup()
2026-03-10 9:19 [PATCH v4 0/7] PCI: mediatek-gen3: add power control support Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 1/7] PCI: mediatek-gen3: Clean up mtk_pcie_parse_port() with dev_err_probe() Chen-Yu Tsai
@ 2026-03-10 9:19 ` Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 3/7] PCI: mediatek-gen3: Move controller setup steps before PERST# control Chen-Yu Tsai
` (4 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Chen-Yu Tsai @ 2026-03-10 9:19 UTC (permalink / raw)
To: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: Chen-Yu Tsai, Bartosz Golaszewski, linux-pci, linux-mediatek,
linux-kernel, Bjorn Helgaas
mtk_pcie_setup_irq() just sets up the IRQ domains for PCI INTx and MSI,
and chains them to the controller's interrupt. It's not really related
to the setup of the actual PCIe controller.
Move the mtk_pcie_setup_irq() call out of and before mtk_pcie_setup(),
and add a proper error message for when it fails. Reorder
mtk_pcie_irq_teardown() in the remove callback to follow. Also create
an error path in the probe function.
Suggested-by: Bjorn Helgaas <helgaas@kernel.org>
Link: https://lore.kernel.org/all/20260309215056.GA603013@bhelgaas/
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
Changes since v3:
- New patch
---
drivers/pci/controller/pcie-mediatek-gen3.c | 25 ++++++++++++---------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 1939cac995b5..04ae195d36c2 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -1152,10 +1152,6 @@ static int mtk_pcie_setup(struct mtk_gen3_pcie *pcie)
if (err)
goto err_setup;
- err = mtk_pcie_setup_irq(pcie);
- if (err)
- goto err_setup;
-
return 0;
err_setup:
@@ -1181,21 +1177,28 @@ static int mtk_pcie_probe(struct platform_device *pdev)
pcie->soc = device_get_match_data(dev);
platform_set_drvdata(pdev, pcie);
+ err = mtk_pcie_setup_irq(pcie);
+ if (err)
+ return dev_err_probe(dev, err, "Failed to setup IRQ domains\n");
+
err = mtk_pcie_setup(pcie);
if (err)
- return err;
+ goto err_tear_down_irq;
host->ops = &mtk_pcie_ops;
host->sysdata = pcie;
err = pci_host_probe(host);
- if (err) {
- mtk_pcie_irq_teardown(pcie);
- mtk_pcie_power_down(pcie);
- return err;
- }
+ if (err)
+ goto err_power_down_pcie;
return 0;
+
+err_power_down_pcie:
+ mtk_pcie_power_down(pcie);
+err_tear_down_irq:
+ mtk_pcie_irq_teardown(pcie);
+ return err;
}
static void mtk_pcie_remove(struct platform_device *pdev)
@@ -1208,8 +1211,8 @@ static void mtk_pcie_remove(struct platform_device *pdev)
pci_remove_root_bus(host->bus);
pci_unlock_rescan_remove();
- mtk_pcie_irq_teardown(pcie);
mtk_pcie_power_down(pcie);
+ mtk_pcie_irq_teardown(pcie);
}
static void mtk_pcie_irq_save(struct mtk_gen3_pcie *pcie)
--
2.53.0.473.g4a7958ca14-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 3/7] PCI: mediatek-gen3: Move controller setup steps before PERST# control
2026-03-10 9:19 [PATCH v4 0/7] PCI: mediatek-gen3: add power control support Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 1/7] PCI: mediatek-gen3: Clean up mtk_pcie_parse_port() with dev_err_probe() Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 2/7] PCI: mediatek-gen3: Move mtk_pcie_setup_irq() out of mtk_pcie_setup() Chen-Yu Tsai
@ 2026-03-10 9:19 ` Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 4/7] PCI: mediatek-gen3: Add error path for resume driver callbacks Chen-Yu Tsai
` (3 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Chen-Yu Tsai @ 2026-03-10 9:19 UTC (permalink / raw)
To: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: Chen-Yu Tsai, Bartosz Golaszewski, linux-pci, linux-mediatek,
linux-kernel, Bjorn Helgaas
Setting up the translation windows and enabling MSI involve only
configuring the controller, not the device. These can be done before the
device is enabled.
Move these steps before the existing PERST# control. This provides a
cleaner separation of controller vs device setup. This also allows the
later patches that split out PERST# control and add device power
control to have cleaner teardown.
This change only moves code. No functional change is expected.
Suggested-by: Bjorn Helgaas <helgaas@kernel.org>
Link: https://lore.kernel.org/all/20260309215056.GA603013@bhelgaas/
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
Changes since v3:
- New patch
---
drivers/pci/controller/pcie-mediatek-gen3.c | 50 ++++++++++-----------
1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 04ae195d36c2..1b6290f2c360 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -464,6 +464,31 @@ static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)
val |= PCIE_DISABLE_DVFSRC_VLT_REQ;
writel_relaxed(val, pcie->base + PCIE_MISC_CTRL_REG);
+ mtk_pcie_enable_msi(pcie);
+
+ /* Set PCIe translation windows */
+ resource_list_for_each_entry(entry, &host->windows) {
+ struct resource *res = entry->res;
+ unsigned long type = resource_type(res);
+ resource_size_t cpu_addr;
+ resource_size_t pci_addr;
+ resource_size_t size;
+
+ if (type == IORESOURCE_IO)
+ cpu_addr = pci_pio_to_address(res->start);
+ else if (type == IORESOURCE_MEM)
+ cpu_addr = res->start;
+ else
+ continue;
+
+ pci_addr = res->start - entry->offset;
+ size = resource_size(res);
+ err = mtk_pcie_set_trans_table(pcie, cpu_addr, pci_addr, size,
+ type, &table_index);
+ if (err)
+ return err;
+ }
+
/*
* Airoha EN7581 has a hw bug asserting/releasing PCIE_PE_RSTB signal
* causing occasional PCIe link down. In order to overcome the issue,
@@ -510,31 +535,6 @@ static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)
return err;
}
- mtk_pcie_enable_msi(pcie);
-
- /* Set PCIe translation windows */
- resource_list_for_each_entry(entry, &host->windows) {
- struct resource *res = entry->res;
- unsigned long type = resource_type(res);
- resource_size_t cpu_addr;
- resource_size_t pci_addr;
- resource_size_t size;
-
- if (type == IORESOURCE_IO)
- cpu_addr = pci_pio_to_address(res->start);
- else if (type == IORESOURCE_MEM)
- cpu_addr = res->start;
- else
- continue;
-
- pci_addr = res->start - entry->offset;
- size = resource_size(res);
- err = mtk_pcie_set_trans_table(pcie, cpu_addr, pci_addr, size,
- type, &table_index);
- if (err)
- return err;
- }
-
return 0;
}
--
2.53.0.473.g4a7958ca14-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 4/7] PCI: mediatek-gen3: Add error path for resume driver callbacks
2026-03-10 9:19 [PATCH v4 0/7] PCI: mediatek-gen3: add power control support Chen-Yu Tsai
` (2 preceding siblings ...)
2026-03-10 9:19 ` [PATCH v4 3/7] PCI: mediatek-gen3: Move controller setup steps before PERST# control Chen-Yu Tsai
@ 2026-03-10 9:19 ` Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 5/7] PCI: mediatek-gen3: Split out device power helpers Chen-Yu Tsai
` (2 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Chen-Yu Tsai @ 2026-03-10 9:19 UTC (permalink / raw)
To: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: Chen-Yu Tsai, Bartosz Golaszewski, linux-pci, linux-mediatek,
linux-kernel, Bartosz Golaszewski
The resume callback currently does teardown in the conditional block
directly. This is going to get ugly when the pwrctrl calls are added.
Move the teardown to a proper error cleanup path.
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
Changes since v3:
- Dropped probe function error path; covered in previous patch
---
drivers/pci/controller/pcie-mediatek-gen3.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 1b6290f2c360..22a16e4ebc76 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -1304,14 +1304,16 @@ static int mtk_pcie_resume_noirq(struct device *dev)
return err;
err = mtk_pcie_startup_port(pcie);
- if (err) {
- mtk_pcie_power_down(pcie);
- return err;
- }
+ if (err)
+ goto err_power_down;
mtk_pcie_irq_restore(pcie);
return 0;
+
+err_power_down:
+ mtk_pcie_power_down(pcie);
+ return err;
}
static const struct dev_pm_ops mtk_pcie_pm_ops = {
--
2.53.0.473.g4a7958ca14-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 5/7] PCI: mediatek-gen3: Split out device power helpers
2026-03-10 9:19 [PATCH v4 0/7] PCI: mediatek-gen3: add power control support Chen-Yu Tsai
` (3 preceding siblings ...)
2026-03-10 9:19 ` [PATCH v4 4/7] PCI: mediatek-gen3: Add error path for resume driver callbacks Chen-Yu Tsai
@ 2026-03-10 9:19 ` Chen-Yu Tsai
2026-03-10 23:42 ` Bjorn Helgaas
2026-03-10 9:19 ` [PATCH v4 6/7] PCI: mediatek-gen3: Disable device if further setup fails Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API Chen-Yu Tsai
6 siblings, 1 reply; 13+ messages in thread
From: Chen-Yu Tsai @ 2026-03-10 9:19 UTC (permalink / raw)
To: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: Chen-Yu Tsai, Bartosz Golaszewski, linux-pci, linux-mediatek,
linux-kernel, Bartosz Golaszewski
In preparation for adding full power on/off control with the pwrctrl
API, split out the existing code that only partially deals with device
power sequencing into separate helper functions. The existing code only
handles PERST#.
This is purely moving code around, and brings no functional changes.
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
Changes since v3:
- Adapted to movement of existing setup code
Changes since v1:
- Updated commit message
---
drivers/pci/controller/pcie-mediatek-gen3.c | 87 ++++++++++++---------
1 file changed, 52 insertions(+), 35 deletions(-)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 22a16e4ebc76..3e5386c4cb35 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -403,6 +403,54 @@ static void mtk_pcie_enable_msi(struct mtk_gen3_pcie *pcie)
writel_relaxed(val, pcie->base + PCIE_INT_ENABLE_REG);
}
+static int mtk_pcie_device_power_up(struct mtk_gen3_pcie *pcie)
+{
+ int err;
+ u32 val;
+
+ /*
+ * Airoha EN7581 has a hw bug asserting/releasing PCIE_PE_RSTB signal
+ * causing occasional PCIe link down. In order to overcome the issue,
+ * PCIE_RSTB signals are not asserted/released at this stage and the
+ * PCIe block is reset using en7523_reset_assert() and
+ * en7581_pci_enable().
+ */
+ if (!(pcie->soc->flags & SKIP_PCIE_RSTB)) {
+ /* Assert all reset signals */
+ val = readl_relaxed(pcie->base + PCIE_RST_CTRL_REG);
+ val |= PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB |
+ PCIE_PE_RSTB;
+ writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
+
+ /*
+ * Described in PCIe CEM specification revision 6.0.
+ *
+ * The deassertion of PERST# should be delayed 100ms (TPVPERL)
+ * for the power and clock to become stable.
+ */
+ msleep(PCIE_T_PVPERL_MS);
+
+ /* De-assert reset signals */
+ val &= ~(PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB |
+ PCIE_PE_RSTB);
+ writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
+ }
+
+ return 0;
+}
+
+static void mtk_pcie_device_power_down(struct mtk_gen3_pcie *pcie)
+{
+ u32 val;
+
+ if (!(pcie->soc->flags & SKIP_PCIE_RSTB)) {
+ /* Assert the PERST# pin */
+ val = readl_relaxed(pcie->base + PCIE_RST_CTRL_REG);
+ val |= PCIE_PE_RSTB;
+ writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
+ }
+}
+
static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)
{
struct resource_entry *entry;
@@ -489,33 +537,9 @@ static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)
return err;
}
- /*
- * Airoha EN7581 has a hw bug asserting/releasing PCIE_PE_RSTB signal
- * causing occasional PCIe link down. In order to overcome the issue,
- * PCIE_RSTB signals are not asserted/released at this stage and the
- * PCIe block is reset using en7523_reset_assert() and
- * en7581_pci_enable().
- */
- if (!(pcie->soc->flags & SKIP_PCIE_RSTB)) {
- /* Assert all reset signals */
- val = readl_relaxed(pcie->base + PCIE_RST_CTRL_REG);
- val |= PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB |
- PCIE_PE_RSTB;
- writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
-
- /*
- * Described in PCIe CEM specification revision 6.0.
- *
- * The deassertion of PERST# should be delayed 100ms (TPVPERL)
- * for the power and clock to become stable.
- */
- msleep(PCIE_T_PVPERL_MS);
-
- /* De-assert reset signals */
- val &= ~(PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB |
- PCIE_PE_RSTB);
- writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
- }
+ err = mtk_pcie_device_power_up(pcie);
+ if (err)
+ return err;
/* Check if the link is up or not */
err = readl_poll_timeout(pcie->base + PCIE_LINK_STATUS_REG, val,
@@ -1270,7 +1294,6 @@ static int mtk_pcie_suspend_noirq(struct device *dev)
{
struct mtk_gen3_pcie *pcie = dev_get_drvdata(dev);
int err;
- u32 val;
/* Trigger link to L2 state */
err = mtk_pcie_turn_off_link(pcie);
@@ -1279,13 +1302,7 @@ static int mtk_pcie_suspend_noirq(struct device *dev)
return err;
}
- if (!(pcie->soc->flags & SKIP_PCIE_RSTB)) {
- /* Assert the PERST# pin */
- val = readl_relaxed(pcie->base + PCIE_RST_CTRL_REG);
- val |= PCIE_PE_RSTB;
- writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
- }
-
+ mtk_pcie_device_power_down(pcie);
dev_dbg(pcie->dev, "entered L2 states successfully");
mtk_pcie_irq_save(pcie);
--
2.53.0.473.g4a7958ca14-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 6/7] PCI: mediatek-gen3: Disable device if further setup fails
2026-03-10 9:19 [PATCH v4 0/7] PCI: mediatek-gen3: add power control support Chen-Yu Tsai
` (4 preceding siblings ...)
2026-03-10 9:19 ` [PATCH v4 5/7] PCI: mediatek-gen3: Split out device power helpers Chen-Yu Tsai
@ 2026-03-10 9:19 ` Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API Chen-Yu Tsai
6 siblings, 0 replies; 13+ messages in thread
From: Chen-Yu Tsai @ 2026-03-10 9:19 UTC (permalink / raw)
To: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: Chen-Yu Tsai, Bartosz Golaszewski, linux-pci, linux-mediatek,
linux-kernel, Bartosz Golaszewski
If further setup fails after the device is powered on and link training
succeeds, we want to place the device back in a quiescence state to
avoid unintended activity and save power. This also helps with power
state tracking and balancing once pwrctrl API is integrated.
Power down the device in the error paths of mtk_pcie_startup_port() and
mtk_pcie_probe().
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
Changes since v3:
- Adapted to movement of existing setup code
- Cleanup in mtk_pcie_setup() moved to mtk_pcie_probe()
---
drivers/pci/controller/pcie-mediatek-gen3.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index 3e5386c4cb35..f1a70b92cc9f 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -556,10 +556,14 @@ static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)
dev_err(pcie->dev,
"PCIe link down, current LTSSM state: %s (%#x)\n",
ltssm_state, val);
- return err;
+ goto err_power_down_device;
}
return 0;
+
+err_power_down_device:
+ mtk_pcie_device_power_down(pcie);
+ return err;
}
#define MTK_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \
@@ -1219,6 +1223,7 @@ static int mtk_pcie_probe(struct platform_device *pdev)
return 0;
err_power_down_pcie:
+ mtk_pcie_device_power_down(pcie);
mtk_pcie_power_down(pcie);
err_tear_down_irq:
mtk_pcie_irq_teardown(pcie);
--
2.53.0.473.g4a7958ca14-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API
2026-03-10 9:19 [PATCH v4 0/7] PCI: mediatek-gen3: add power control support Chen-Yu Tsai
` (5 preceding siblings ...)
2026-03-10 9:19 ` [PATCH v4 6/7] PCI: mediatek-gen3: Disable device if further setup fails Chen-Yu Tsai
@ 2026-03-10 9:19 ` Chen-Yu Tsai
2026-03-10 18:42 ` kernel test robot
` (2 more replies)
6 siblings, 3 replies; 13+ messages in thread
From: Chen-Yu Tsai @ 2026-03-10 9:19 UTC (permalink / raw)
To: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: Chen-Yu Tsai, Bartosz Golaszewski, linux-pci, linux-mediatek,
linux-kernel, Bartosz Golaszewski
With the new PCI pwrctrl API and PCI slot binding and power drivers, we
now have a way to describe and power up WiFi/BT adapters connected
through a PCIe or M.2 slot, or exploded onto the mainboard itself.
Integrate the PCI pwrctrl API into the PCIe driver, so that power is
properly enabled before PCIe link training is done, allowing the
card to successfully be detected.
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
---
Changes since v3:
- Adapted changes to movement of existing setup code
Changes since v2:
- Added "select PCI_PWRCTRL_SLOT" to Kconfig to fix kernel test robot
compilation error
I'm wondering why the two existing uses select PCI_PWRCTRL_SLOT and not
PCI_PWRCTRL though.
---
drivers/pci/controller/Kconfig | 1 +
drivers/pci/controller/pcie-mediatek-gen3.c | 38 ++++++++++++++++-----
2 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig
index 5aaed8ac6e44..e72ac6934379 100644
--- a/drivers/pci/controller/Kconfig
+++ b/drivers/pci/controller/Kconfig
@@ -222,6 +222,7 @@ config PCIE_MEDIATEK_GEN3
depends on ARCH_AIROHA || ARCH_MEDIATEK || COMPILE_TEST
depends on PCI_MSI
select IRQ_MSI_LIB
+ select PCI_PWRCTRL_SLOT
help
Adds support for PCIe Gen3 MAC controller for MediaTek SoCs.
This PCIe controller is compatible with Gen3, Gen2 and Gen1 speed,
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c
index f1a70b92cc9f..3800d0d730f2 100644
--- a/drivers/pci/controller/pcie-mediatek-gen3.c
+++ b/drivers/pci/controller/pcie-mediatek-gen3.c
@@ -22,6 +22,7 @@
#include <linux/of_device.h>
#include <linux/of_pci.h>
#include <linux/pci.h>
+#include <linux/pci-pwrctrl.h>
#include <linux/phy/phy.h>
#include <linux/platform_device.h>
#include <linux/pm_domain.h>
@@ -421,15 +422,23 @@ static int mtk_pcie_device_power_up(struct mtk_gen3_pcie *pcie)
val |= PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB |
PCIE_PE_RSTB;
writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
+ }
- /*
- * Described in PCIe CEM specification revision 6.0.
- *
- * The deassertion of PERST# should be delayed 100ms (TPVPERL)
- * for the power and clock to become stable.
- */
- msleep(PCIE_T_PVPERL_MS);
+ err = pci_pwrctrl_power_on_devices(pcie->dev);
+ if (err) {
+ dev_err(pcie->dev, "Failed to power on devices: %pe\n", ERR_PTR(err));
+ return err;
+ }
+ /*
+ * Described in PCIe CEM specification revision 6.0.
+ *
+ * The deassertion of PERST# should be delayed 100ms (TPVPERL)
+ * for the power and clock to become stable.
+ */
+ msleep(PCIE_T_PVPERL_MS);
+
+ if (!(pcie->soc->flags & SKIP_PCIE_RSTB)) {
/* De-assert reset signals */
val &= ~(PCIE_MAC_RSTB | PCIE_PHY_RSTB | PCIE_BRG_RSTB |
PCIE_PE_RSTB);
@@ -449,6 +458,8 @@ static void mtk_pcie_device_power_down(struct mtk_gen3_pcie *pcie)
val |= PCIE_PE_RSTB;
writel_relaxed(val, pcie->base + PCIE_RST_CTRL_REG);
}
+
+ pci_pwrctrl_power_off_devices(pcie->dev);
}
static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)
@@ -1209,9 +1220,15 @@ static int mtk_pcie_probe(struct platform_device *pdev)
if (err)
return dev_err_probe(dev, err, "Failed to setup IRQ domains\n");
+ err = pci_pwrctrl_create_devices(pcie->dev);
+ if (err) {
+ goto err_teardown_irq;
+ dev_err_probe(dev, err, "failed to create pwrctrl devices\n");
+ }
+
err = mtk_pcie_setup(pcie);
if (err)
- goto err_tear_down_irq;
+ goto err_destroy_pwrctrl;
host->ops = &mtk_pcie_ops;
host->sysdata = pcie;
@@ -1225,6 +1242,9 @@ static int mtk_pcie_probe(struct platform_device *pdev)
err_power_down_pcie:
mtk_pcie_device_power_down(pcie);
mtk_pcie_power_down(pcie);
+err_destroy_pwrctrl:
+ if (err != -EPROBE_DEFER)
+ pci_pwrctrl_destroy_devices(pcie->dev);
err_tear_down_irq:
mtk_pcie_irq_teardown(pcie);
return err;
@@ -1240,7 +1260,9 @@ static void mtk_pcie_remove(struct platform_device *pdev)
pci_remove_root_bus(host->bus);
pci_unlock_rescan_remove();
+ pci_pwrctrl_power_off_devices(pcie->dev);
mtk_pcie_power_down(pcie);
+ pci_pwrctrl_destroy_devices(pcie->dev);
mtk_pcie_irq_teardown(pcie);
}
--
2.53.0.473.g4a7958ca14-goog
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API
2026-03-10 9:19 ` [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API Chen-Yu Tsai
@ 2026-03-10 18:42 ` kernel test robot
2026-03-10 23:49 ` Bjorn Helgaas
2026-03-11 1:51 ` kernel test robot
2 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2026-03-10 18:42 UTC (permalink / raw)
To: Chen-Yu Tsai, Matthias Brugger, AngeloGioacchino Del Regno,
Ryder Lee, Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: oe-kbuild-all, Chen-Yu Tsai, Bartosz Golaszewski, linux-pci,
linux-mediatek, linux-kernel
Hi Chen-Yu,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/next]
[also build test ERROR on pci/for-linus linus/master v7.0-rc3 next-20260309]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Chen-Yu-Tsai/PCI-mediatek-gen3-Clean-up-mtk_pcie_parse_port-with-dev_err_probe/20260310-175537
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
patch link: https://lore.kernel.org/r/20260310091947.2742004-8-wenst%40chromium.org
patch subject: [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API
config: parisc-randconfig-001-20260310 (https://download.01.org/0day-ci/archive/20260311/202603110219.dgV01aTV-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 14.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260311/202603110219.dgV01aTV-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603110219.dgV01aTV-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
drivers/pci/controller/pcie-mediatek-gen3.c: In function 'mtk_pcie_probe':
>> drivers/pci/controller/pcie-mediatek-gen3.c:1248:1: warning: label 'err_tear_down_irq' defined but not used [-Wunused-label]
1248 | err_tear_down_irq:
| ^~~~~~~~~~~~~~~~~
>> drivers/pci/controller/pcie-mediatek-gen3.c:1225:17: error: label 'err_teardown_irq' used but not defined
1225 | goto err_teardown_irq;
| ^~~~
vim +/err_teardown_irq +1225 drivers/pci/controller/pcie-mediatek-gen3.c
1201
1202 static int mtk_pcie_probe(struct platform_device *pdev)
1203 {
1204 struct device *dev = &pdev->dev;
1205 struct mtk_gen3_pcie *pcie;
1206 struct pci_host_bridge *host;
1207 int err;
1208
1209 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
1210 if (!host)
1211 return -ENOMEM;
1212
1213 pcie = pci_host_bridge_priv(host);
1214
1215 pcie->dev = dev;
1216 pcie->soc = device_get_match_data(dev);
1217 platform_set_drvdata(pdev, pcie);
1218
1219 err = mtk_pcie_setup_irq(pcie);
1220 if (err)
1221 return dev_err_probe(dev, err, "Failed to setup IRQ domains\n");
1222
1223 err = pci_pwrctrl_create_devices(pcie->dev);
1224 if (err) {
> 1225 goto err_teardown_irq;
1226 dev_err_probe(dev, err, "failed to create pwrctrl devices\n");
1227 }
1228
1229 err = mtk_pcie_setup(pcie);
1230 if (err)
1231 goto err_destroy_pwrctrl;
1232
1233 host->ops = &mtk_pcie_ops;
1234 host->sysdata = pcie;
1235
1236 err = pci_host_probe(host);
1237 if (err)
1238 goto err_power_down_pcie;
1239
1240 return 0;
1241
1242 err_power_down_pcie:
1243 mtk_pcie_device_power_down(pcie);
1244 mtk_pcie_power_down(pcie);
1245 err_destroy_pwrctrl:
1246 if (err != -EPROBE_DEFER)
1247 pci_pwrctrl_destroy_devices(pcie->dev);
> 1248 err_tear_down_irq:
1249 mtk_pcie_irq_teardown(pcie);
1250 return err;
1251 }
1252
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4 1/7] PCI: mediatek-gen3: Clean up mtk_pcie_parse_port() with dev_err_probe()
2026-03-10 9:19 ` [PATCH v4 1/7] PCI: mediatek-gen3: Clean up mtk_pcie_parse_port() with dev_err_probe() Chen-Yu Tsai
@ 2026-03-10 23:19 ` Bjorn Helgaas
0 siblings, 0 replies; 13+ messages in thread
From: Bjorn Helgaas @ 2026-03-10 23:19 UTC (permalink / raw)
To: Chen-Yu Tsai
Cc: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas,
Bartosz Golaszewski, linux-pci, linux-mediatek, linux-kernel,
Bartosz Golaszewski
On Tue, Mar 10, 2026 at 05:19:40PM +0800, Chen-Yu Tsai wrote:
> mtk_pcie_parse_port() in the pcie-mediatek-gen driver has a bunch of
>
> if (err) {
> dev_err(dev, "error message\n");
> return err; # or goto
> }
Mani, if you apply this, tweak this to be indented with spaces; this
has a tab that makes "git log" output look like this:
if (err) {
dev_err(dev, "error message\n");
return err; # or goto
}
I had already done this on pci/controller/mediatek-gen3. ChenYu, if
you repost this for other reasons, you could fix it locally.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4 5/7] PCI: mediatek-gen3: Split out device power helpers
2026-03-10 9:19 ` [PATCH v4 5/7] PCI: mediatek-gen3: Split out device power helpers Chen-Yu Tsai
@ 2026-03-10 23:42 ` Bjorn Helgaas
0 siblings, 0 replies; 13+ messages in thread
From: Bjorn Helgaas @ 2026-03-10 23:42 UTC (permalink / raw)
To: Chen-Yu Tsai
Cc: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas,
Bartosz Golaszewski, linux-pci, linux-mediatek, linux-kernel,
Bartosz Golaszewski
On Tue, Mar 10, 2026 at 05:19:44PM +0800, Chen-Yu Tsai wrote:
> In preparation for adding full power on/off control with the pwrctrl
> API, split out the existing code that only partially deals with device
> power sequencing into separate helper functions. The existing code only
> handles PERST#.
> +static int mtk_pcie_device_power_up(struct mtk_gen3_pcie *pcie)
This function name suggests that there's only a single downstream
device, which obviously is not always the case. When you later call
pci_pwrctrl_power_on_devices() here, apparently that powers on the
entire hierarchy. Maybe this mtk_* name should be similar to make a
connection there?
> +static void mtk_pcie_device_power_down(struct mtk_gen3_pcie *pcie)
Same applies here, of course.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API
2026-03-10 9:19 ` [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API Chen-Yu Tsai
2026-03-10 18:42 ` kernel test robot
@ 2026-03-10 23:49 ` Bjorn Helgaas
2026-03-11 1:51 ` kernel test robot
2 siblings, 0 replies; 13+ messages in thread
From: Bjorn Helgaas @ 2026-03-10 23:49 UTC (permalink / raw)
To: Chen-Yu Tsai
Cc: Matthias Brugger, AngeloGioacchino Del Regno, Ryder Lee,
Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas,
Bartosz Golaszewski, linux-pci, linux-mediatek, linux-kernel,
Bartosz Golaszewski
On Tue, Mar 10, 2026 at 05:19:46PM +0800, Chen-Yu Tsai wrote:
> With the new PCI pwrctrl API and PCI slot binding and power drivers, we
> now have a way to describe and power up WiFi/BT adapters connected
> through a PCIe or M.2 slot, or exploded onto the mainboard itself.
On pci/controller/mediatek-gen3, I had replaced "exploded" with
"populated". Maybe "exploded" is industry jargon, but IMO it's a
little bit too obscure and evocative here. I'm also open to something
better than "populated".
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API
2026-03-10 9:19 ` [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API Chen-Yu Tsai
2026-03-10 18:42 ` kernel test robot
2026-03-10 23:49 ` Bjorn Helgaas
@ 2026-03-11 1:51 ` kernel test robot
2 siblings, 0 replies; 13+ messages in thread
From: kernel test robot @ 2026-03-11 1:51 UTC (permalink / raw)
To: Chen-Yu Tsai, Matthias Brugger, AngeloGioacchino Del Regno,
Ryder Lee, Lorenzo Pieralisi, Krzysztof Wilczyński,
Manivannan Sadhasivam, Rob Herring, Bjorn Helgaas
Cc: llvm, oe-kbuild-all, Chen-Yu Tsai, Bartosz Golaszewski, linux-pci,
linux-mediatek, linux-kernel
Hi Chen-Yu,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/next]
[also build test ERROR on pci/for-linus linus/master v7.0-rc3 next-20260310]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Chen-Yu-Tsai/PCI-mediatek-gen3-Clean-up-mtk_pcie_parse_port-with-dev_err_probe/20260310-175537
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git next
patch link: https://lore.kernel.org/r/20260310091947.2742004-8-wenst%40chromium.org
patch subject: [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API
config: sparc64-randconfig-001-20260310 (https://download.01.org/0day-ci/archive/20260311/202603110916.8SVCCZYO-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260311/202603110916.8SVCCZYO-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603110916.8SVCCZYO-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
>> drivers/pci/controller/pcie-mediatek-gen3.c:1225:8: error: use of undeclared label 'err_teardown_irq'
1225 | goto err_teardown_irq;
| ^
>> drivers/pci/controller/pcie-mediatek-gen3.c:1248:1: warning: unused label 'err_tear_down_irq' [-Wunused-label]
1248 | err_tear_down_irq:
| ^~~~~~~~~~~~~~~~~~
1 warning and 1 error generated.
vim +/err_teardown_irq +1225 drivers/pci/controller/pcie-mediatek-gen3.c
1201
1202 static int mtk_pcie_probe(struct platform_device *pdev)
1203 {
1204 struct device *dev = &pdev->dev;
1205 struct mtk_gen3_pcie *pcie;
1206 struct pci_host_bridge *host;
1207 int err;
1208
1209 host = devm_pci_alloc_host_bridge(dev, sizeof(*pcie));
1210 if (!host)
1211 return -ENOMEM;
1212
1213 pcie = pci_host_bridge_priv(host);
1214
1215 pcie->dev = dev;
1216 pcie->soc = device_get_match_data(dev);
1217 platform_set_drvdata(pdev, pcie);
1218
1219 err = mtk_pcie_setup_irq(pcie);
1220 if (err)
1221 return dev_err_probe(dev, err, "Failed to setup IRQ domains\n");
1222
1223 err = pci_pwrctrl_create_devices(pcie->dev);
1224 if (err) {
> 1225 goto err_teardown_irq;
1226 dev_err_probe(dev, err, "failed to create pwrctrl devices\n");
1227 }
1228
1229 err = mtk_pcie_setup(pcie);
1230 if (err)
1231 goto err_destroy_pwrctrl;
1232
1233 host->ops = &mtk_pcie_ops;
1234 host->sysdata = pcie;
1235
1236 err = pci_host_probe(host);
1237 if (err)
1238 goto err_power_down_pcie;
1239
1240 return 0;
1241
1242 err_power_down_pcie:
1243 mtk_pcie_device_power_down(pcie);
1244 mtk_pcie_power_down(pcie);
1245 err_destroy_pwrctrl:
1246 if (err != -EPROBE_DEFER)
1247 pci_pwrctrl_destroy_devices(pcie->dev);
> 1248 err_tear_down_irq:
1249 mtk_pcie_irq_teardown(pcie);
1250 return err;
1251 }
1252
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-03-11 1:52 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-10 9:19 [PATCH v4 0/7] PCI: mediatek-gen3: add power control support Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 1/7] PCI: mediatek-gen3: Clean up mtk_pcie_parse_port() with dev_err_probe() Chen-Yu Tsai
2026-03-10 23:19 ` Bjorn Helgaas
2026-03-10 9:19 ` [PATCH v4 2/7] PCI: mediatek-gen3: Move mtk_pcie_setup_irq() out of mtk_pcie_setup() Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 3/7] PCI: mediatek-gen3: Move controller setup steps before PERST# control Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 4/7] PCI: mediatek-gen3: Add error path for resume driver callbacks Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 5/7] PCI: mediatek-gen3: Split out device power helpers Chen-Yu Tsai
2026-03-10 23:42 ` Bjorn Helgaas
2026-03-10 9:19 ` [PATCH v4 6/7] PCI: mediatek-gen3: Disable device if further setup fails Chen-Yu Tsai
2026-03-10 9:19 ` [PATCH v4 7/7] PCI: mediatek-gen3: Integrate new pwrctrl API Chen-Yu Tsai
2026-03-10 18:42 ` kernel test robot
2026-03-10 23:49 ` Bjorn Helgaas
2026-03-11 1:51 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox