* [PATCH v6 0/2] Add EcoNet EN7528 (and EN751221) PCIe support. @ 2026-05-13 19:16 Caleb James DeLisle 2026-05-13 19:16 ` [PATCH v6 1/2] dt-bindings: PCI: mediatek: Add support for EcoNet EN7528 Caleb James DeLisle 2026-05-13 19:16 ` [PATCH v6 2/2] PCI: mediatek: Add support for EcoNet EN7528 SoC Caleb James DeLisle 0 siblings, 2 replies; 7+ messages in thread From: Caleb James DeLisle @ 2026-05-13 19:16 UTC (permalink / raw) To: linux-pci Cc: linux-mips, naseefkm, ryder.lee, helgaas, lpieralisi, kwilczynski, mani, robh, krzk+dt, conor+dt, matthias.bgg, angelogioacchino.delregno, ansuelsmth, linux-mediatek, devicetree, linux-kernel, Caleb James DeLisle Changes from v5: * s/errno-base.h/errno.h/ * Breakout mtk_pcie_retrain() into a function * Use for_each_pci_bridge() to find root bridge * v5: https://lore.kernel.org/linux-mips/20260413140339.16238-1-cjd@cjdns.fr/ Changes from v4: * Fixed missing Acked-by * Rebased to 66672af7a095d89f082c5327f3b15bc2f93d558e * v4: https://lore.kernel.org/linux-mips/20260404182854.2183651-1-cjd@cjdns.fr/ Changes from v3: * s/initiallized/initialized/ * Use PCIE_T_PVPERL_MS for sleep time * Use PCI_PM_D3COLD_WAIT for startup wait time * Clarify comment "Activate INTx interrupts" * Add MTK_PCIE_RETRAIN quirk for devices which require link re-train * Do not retrain *all* bridges, only root bridge * Better comments and logging in retraining logic * v3: https://lore.kernel.org/linux-mips/20260320094212.696671-1-cjd@cjdns.fr/ Changes from v2: * mediatek-pcie.yaml -> s/power-domain/power-domains/ and drop example * Patch 3 dropped as it has been applied (Thanks!) * v2: https://lore.kernel.org/linux-mips/20260316155157.679533-1-cjd@cjdns.fr/ Changes from v1: * mediatek-pcie.yaml slot0 needs device-type = "pci", fix dt_binding_check Link: https://lore.kernel.org/linux-mips/177334026016.3889069.9474337544951486443.robh@kernel.org * v1: https://lore.kernel.org/linux-mips/20260312165332.569772-1-cjd@cjdns.fr/ This was split from a larger PCIe patchset which crossed multiple subsystems. I'm not labeling this a v3 because it's a new patchset, but I'm keeping the historical record anyway. Changes from econet-pcie v2: * mediatek-pcie.yaml add missing constraints to PCI node properties * econet-pcie v2: https://lore.kernel.org/linux-mips/20260309131818.74467-1-cjd@cjdns.fr Changes from econet-pcie v1: * pcie-mediatek.c Exclude pcie_retrain_link() when building as a module * econet-pcie v1: https://lore.kernel.org/linux-mips/20260303190948.694783-1-cjd@cjdns.fr/ Caleb James DeLisle (2): dt-bindings: PCI: mediatek: Add support for EcoNet EN7528 PCI: mediatek: Add support for EcoNet EN7528 SoC .../bindings/pci/mediatek-pcie.yaml | 26 +++ drivers/pci/controller/Kconfig | 2 +- drivers/pci/controller/pcie-mediatek.c | 150 ++++++++++++++++++ 3 files changed, 177 insertions(+), 1 deletion(-) base-commit: e98d21c170b01ddef366f023bbfcf6b31509fa83 -- 2.39.5 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v6 1/2] dt-bindings: PCI: mediatek: Add support for EcoNet EN7528 2026-05-13 19:16 [PATCH v6 0/2] Add EcoNet EN7528 (and EN751221) PCIe support Caleb James DeLisle @ 2026-05-13 19:16 ` Caleb James DeLisle 2026-05-13 19:16 ` [PATCH v6 2/2] PCI: mediatek: Add support for EcoNet EN7528 SoC Caleb James DeLisle 1 sibling, 0 replies; 7+ messages in thread From: Caleb James DeLisle @ 2026-05-13 19:16 UTC (permalink / raw) To: linux-pci Cc: linux-mips, naseefkm, ryder.lee, helgaas, lpieralisi, kwilczynski, mani, robh, krzk+dt, conor+dt, matthias.bgg, angelogioacchino.delregno, ansuelsmth, linux-mediatek, devicetree, linux-kernel, Caleb James DeLisle, Conor Dooley Introduce EcoNet EN7528 SoC compatible in MediaTek PCIe controller binding. EcoNet PCIe controller has the same configuration model as Mediatek v2 but is initialized more similarly to an MT7621 PCIe. Signed-off-by: Caleb James DeLisle <cjd@cjdns.fr> Acked-by: Conor Dooley <conor.dooley@microchip.com> --- .../bindings/pci/mediatek-pcie.yaml | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Documentation/devicetree/bindings/pci/mediatek-pcie.yaml b/Documentation/devicetree/bindings/pci/mediatek-pcie.yaml index 0b8c78ec4f91..7e1b0876c291 100644 --- a/Documentation/devicetree/bindings/pci/mediatek-pcie.yaml +++ b/Documentation/devicetree/bindings/pci/mediatek-pcie.yaml @@ -14,6 +14,7 @@ properties: oneOf: - enum: - airoha,an7583-pcie + - econet,en7528-pcie - mediatek,mt2712-pcie - mediatek,mt7622-pcie - mediatek,mt7629-pcie @@ -226,6 +227,31 @@ allOf: mediatek,pbus-csr: false + - if: + properties: + compatible: + contains: + const: econet,en7528-pcie + then: + properties: + clocks: + maxItems: 1 + + clock-names: + maxItems: 1 + + reset: false + + reset-names: false + + power-domains: false + + mediatek,pbus-csr: false + + required: + - phys + - phy-names + unevaluatedProperties: false examples: -- 2.39.5 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v6 2/2] PCI: mediatek: Add support for EcoNet EN7528 SoC 2026-05-13 19:16 [PATCH v6 0/2] Add EcoNet EN7528 (and EN751221) PCIe support Caleb James DeLisle 2026-05-13 19:16 ` [PATCH v6 1/2] dt-bindings: PCI: mediatek: Add support for EcoNet EN7528 Caleb James DeLisle @ 2026-05-13 19:16 ` Caleb James DeLisle 2026-05-13 21:07 ` Bjorn Helgaas 1 sibling, 1 reply; 7+ messages in thread From: Caleb James DeLisle @ 2026-05-13 19:16 UTC (permalink / raw) To: linux-pci Cc: linux-mips, naseefkm, ryder.lee, helgaas, lpieralisi, kwilczynski, mani, robh, krzk+dt, conor+dt, matthias.bgg, angelogioacchino.delregno, ansuelsmth, linux-mediatek, devicetree, linux-kernel, Caleb James DeLisle Add support for the PCIe present on the EcoNet EN7528 (and EN751221) SoCs. These SoCs have a mix of Gen1 and Gen2 capable ports, but the Gen2 ports require re-training after startup. Co-developed-by: Ahmed Naseef <naseefkm@gmail.com> Signed-off-by: Ahmed Naseef <naseefkm@gmail.com> Signed-off-by: Caleb James DeLisle <cjd@cjdns.fr> --- drivers/pci/controller/Kconfig | 2 +- drivers/pci/controller/pcie-mediatek.c | 150 +++++++++++++++++++++++++ 2 files changed, 151 insertions(+), 1 deletion(-) diff --git a/drivers/pci/controller/Kconfig b/drivers/pci/controller/Kconfig index 2247709ef6d6..8a3a31b2bc12 100644 --- a/drivers/pci/controller/Kconfig +++ b/drivers/pci/controller/Kconfig @@ -209,7 +209,7 @@ config PCI_MVEBU config PCIE_MEDIATEK tristate "MediaTek PCIe controller" - depends on ARCH_AIROHA || ARCH_MEDIATEK || COMPILE_TEST + depends on ARCH_AIROHA || ARCH_MEDIATEK || ECONET || COMPILE_TEST depends on OF depends on PCI_MSI select IRQ_MSI_LIB diff --git a/drivers/pci/controller/pcie-mediatek.c b/drivers/pci/controller/pcie-mediatek.c index 75722524fe74..540cc0822be4 100644 --- a/drivers/pci/controller/pcie-mediatek.c +++ b/drivers/pci/controller/pcie-mediatek.c @@ -9,11 +9,13 @@ #include <linux/clk.h> #include <linux/delay.h> +#include <linux/errno.h> #include <linux/iopoll.h> #include <linux/irq.h> #include <linux/irqchip/chained_irq.h> #include <linux/irqchip/irq-msi-lib.h> #include <linux/irqdomain.h> +#include <linux/kconfig.h> #include <linux/kernel.h> #include <linux/mfd/syscon.h> #include <linux/msi.h> @@ -77,6 +79,7 @@ #define PCIE_CONF_VEND_ID 0x100 #define PCIE_CONF_DEVICE_ID 0x102 +#define PCIE_CONF_REV_CLASS 0x104 #define PCIE_CONF_CLASS_ID 0x106 #define PCIE_INT_MASK 0x420 @@ -89,6 +92,11 @@ #define MSI_MASK BIT(23) #define MTK_MSI_IRQS_NUM 32 +#define EN7528_HOST_MODE 0x00804201 +#define EN7528_LINKUP_REG 0x50 +#define EN7528_RC0_LINKUP BIT(1) +#define EN7528_RC1_LINKUP BIT(2) + #define PCIE_AHB_TRANS_BASE0_L 0x438 #define PCIE_AHB_TRANS_BASE0_H 0x43c #define AHB2PCIE_SIZE(x) ((x) & GENMASK(4, 0)) @@ -148,12 +156,15 @@ struct mtk_pcie_port; * @MTK_PCIE_FIX_DEVICE_ID: host's device ID needed to be fixed * @MTK_PCIE_NO_MSI: Bridge has no MSI support, and relies on an external block * @MTK_PCIE_SKIP_RSTB: Skip calling RSTB bits on PCIe probe + * @MTK_PCIE_RETRAIN: Re-train link to bridge after startup because some + * Gen2-capable devices start as Gen1. */ enum mtk_pcie_quirks { MTK_PCIE_FIX_CLASS_ID = BIT(0), MTK_PCIE_FIX_DEVICE_ID = BIT(1), MTK_PCIE_NO_MSI = BIT(2), MTK_PCIE_SKIP_RSTB = BIT(3), + MTK_PCIE_RETRAIN = BIT(4), }; /** @@ -753,6 +764,132 @@ static int mtk_pcie_startup_port_v2(struct mtk_pcie_port *port) return 0; } +static int mtk_pcie_startup_port_en7528(struct mtk_pcie_port *port) +{ + struct mtk_pcie *pcie = port->pcie; + struct pci_host_bridge *host = pci_host_bridge_from_priv(pcie); + struct resource *mem = NULL; + struct resource_entry *entry; + u32 val, link_mask; + int err; + + entry = resource_list_first_type(&host->windows, IORESOURCE_MEM); + if (entry) + mem = entry->res; + if (!mem) + return -EINVAL; + + if (!pcie->cfg) { + dev_err(pcie->dev, "EN7528: pciecfg syscon not available\n"); + return -EINVAL; + } + + /* Assert all reset signals */ + writel(0, port->base + PCIE_RST_CTRL); + + /* + * Enable PCIe link down reset, if link status changed from link up to + * link down, this will reset MAC control registers and configuration + * space. + */ + writel(PCIE_LINKDOWN_RST_EN, port->base + PCIE_RST_CTRL); + + msleep(PCIE_T_PVPERL_MS); + + /* De-assert PHY, PE, PIPE, MAC and configuration reset */ + val = readl(port->base + PCIE_RST_CTRL); + val |= PCIE_PHY_RSTB | PCIE_PERSTB | PCIE_PIPE_SRSTB | + PCIE_MAC_SRSTB | PCIE_CRSTB; + writel(val, port->base + PCIE_RST_CTRL); + + writel(PCIE_CLASS_CODE | PCIE_REVISION_ID, + port->base + PCIE_CONF_REV_CLASS); + writel(EN7528_HOST_MODE, port->base); + + link_mask = (port->slot == 0) ? EN7528_RC0_LINKUP : EN7528_RC1_LINKUP; + + /* 100ms timeout value should be enough for Gen1/2 training */ + err = regmap_read_poll_timeout(pcie->cfg, EN7528_LINKUP_REG, val, + !!(val & link_mask), 20, + PCI_PM_D3COLD_WAIT * USEC_PER_MSEC); + if (err) { + dev_err(pcie->dev, "EN7528: port%d link timeout\n", port->slot); + return -ETIMEDOUT; + } + + /* Activate INTx interrupts */ + val = readl(port->base + PCIE_INT_MASK); + val &= ~INTX_MASK; + writel(val, port->base + PCIE_INT_MASK); + + if (IS_ENABLED(CONFIG_PCI_MSI)) + mtk_pcie_enable_msi(port); + + /* Set AHB to PCIe translation windows */ + val = lower_32_bits(mem->start) | + AHB2PCIE_SIZE(fls(resource_size(mem))); + writel(val, port->base + PCIE_AHB_TRANS_BASE0_L); + + val = upper_32_bits(mem->start); + writel(val, port->base + PCIE_AHB_TRANS_BASE0_H); + + writel(WIN_ENABLE, port->base + PCIE_AXI_WINDOW0); + + return 0; +} + +/** + * mtk_pcie_retrain - retrain the root bridge link if needed + * @dev: The device, for use in logging + * @host: The host bridge which contains the link + * + * Due to what is likely a hardware bug, some devices (notably EcoNet) start up + * as Gen1, and must be re-trained once after initial configuration in order to + * reach Gen2. + * + * These devices always self-identify as Gen2 capable, but sometimes the PHY is + * only capable of Gen1 operation, and sometimes the PCIe card (e.g. wifi) is + * only Gen1 capable. Therefore it is most convenient to re-train every port + * after startup. + */ +static int mtk_pcie_retrain(struct device *dev, struct pci_host_bridge *host) +{ + struct pci_dev *rp; + int ret = -ENOENT; + u16 lnksta = 0; + u32 speed; + + for_each_pci_bridge(rp, host->bus) { + if (pci_pcie_type(rp) == PCI_EXP_TYPE_ROOT_PORT) + goto found_port; + } + + /* Should not happen */ + return dev_err_probe(dev, ret, "root bridge not found\n"); + +found_port: + if (!IS_BUILTIN(CONFIG_PCIE_MEDIATEK)) { + /* Let it go because the device will work as Gen1 */ + dev_warn(dev, "module must be built-in to retrain to Gen2\n"); + return 0; + } + +#if IS_BUILTIN(CONFIG_PCIE_MEDIATEK) + ret = pcie_retrain_link(rp, true); +#endif + + if (ret) + return dev_err_probe(dev, ret, "failed to retrain port\n"); + + pcie_capability_read_word(rp, PCI_EXP_LNKSTA, &lnksta); + speed = lnksta & PCI_EXP_LNKSTA_CLS; + + dev_info(dev, "link retrained, speed %s\n", + pci_speed_string(pcie_link_speed[speed])); + + return 0; +} + static void __iomem *mtk_pcie_map_bus(struct pci_bus *bus, unsigned int devfn, int where) { @@ -1149,6 +1286,11 @@ static int mtk_pcie_probe(struct platform_device *pdev) if (err) goto put_resources; + if (pcie->soc->quirks & MTK_PCIE_RETRAIN) + err = mtk_pcie_retrain(dev, host); + if (err) + goto put_resources; + return 0; put_resources: @@ -1264,8 +1406,16 @@ static const struct mtk_pcie_soc mtk_pcie_soc_mt7629 = { .quirks = MTK_PCIE_FIX_CLASS_ID | MTK_PCIE_FIX_DEVICE_ID, }; +static const struct mtk_pcie_soc mtk_pcie_soc_en7528 = { + .ops = &mtk_pcie_ops_v2, + .startup = mtk_pcie_startup_port_en7528, + .setup_irq = mtk_pcie_setup_irq, + .quirks = MTK_PCIE_RETRAIN, +}; + static const struct of_device_id mtk_pcie_ids[] = { { .compatible = "airoha,an7583-pcie", .data = &mtk_pcie_soc_an7583 }, + { .compatible = "econet,en7528-pcie", .data = &mtk_pcie_soc_en7528 }, { .compatible = "mediatek,mt2701-pcie", .data = &mtk_pcie_soc_v1 }, { .compatible = "mediatek,mt7623-pcie", .data = &mtk_pcie_soc_v1 }, { .compatible = "mediatek,mt2712-pcie", .data = &mtk_pcie_soc_mt2712 }, -- 2.39.5 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v6 2/2] PCI: mediatek: Add support for EcoNet EN7528 SoC 2026-05-13 19:16 ` [PATCH v6 2/2] PCI: mediatek: Add support for EcoNet EN7528 SoC Caleb James DeLisle @ 2026-05-13 21:07 ` Bjorn Helgaas 2026-05-13 21:39 ` Caleb James DeLisle 0 siblings, 1 reply; 7+ messages in thread From: Bjorn Helgaas @ 2026-05-13 21:07 UTC (permalink / raw) To: Caleb James DeLisle Cc: linux-pci, linux-mips, naseefkm, ryder.lee, lpieralisi, kwilczynski, mani, robh, krzk+dt, conor+dt, matthias.bgg, angelogioacchino.delregno, ansuelsmth, linux-mediatek, devicetree, linux-kernel On Wed, May 13, 2026 at 07:16:52PM +0000, Caleb James DeLisle wrote: > Add support for the PCIe present on the EcoNet EN7528 (and EN751221) SoCs. > > These SoCs have a mix of Gen1 and Gen2 capable ports, but the Gen2 ports > require re-training after startup. s/re-training/retraining/ > + * @MTK_PCIE_RETRAIN: Re-train link to bridge after startup because some > + * Gen2-capable devices start as Gen1. s/Re-train/Retrain/ to make this consistent and more greppable. Also more instances below. > + * as Gen1, and must be re-trained once after initial configuration in order to > + * only Gen1 capable. Therefore it is most convenient to re-train every port > + return dev_err_probe(dev, ret, "root bridge not found\n"); "Root bridge" is not a term used by the specs, but in common usage it refers to the host bridge, i.e., the RC. In this case, you didn't find a "Root Port". > +found_port: > + if (!IS_BUILTIN(CONFIG_PCIE_MEDIATEK)) { > + /* Let it go because the device will work as Gen1 */ > + dev_warn(dev, "module must be built-in to retrain to Gen2\n"); I suppose this will cause a warning even in cases where Gen2 is impossible, e.g., the endpoint only supports Gen1? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 2/2] PCI: mediatek: Add support for EcoNet EN7528 SoC 2026-05-13 21:07 ` Bjorn Helgaas @ 2026-05-13 21:39 ` Caleb James DeLisle 2026-05-13 22:06 ` Bjorn Helgaas 0 siblings, 1 reply; 7+ messages in thread From: Caleb James DeLisle @ 2026-05-13 21:39 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-mips, naseefkm, ryder.lee, lpieralisi, kwilczynski, mani, robh, krzk+dt, conor+dt, matthias.bgg, angelogioacchino.delregno, ansuelsmth, linux-mediatek, devicetree, linux-kernel On 13/05/2026 23:07, Bjorn Helgaas wrote: > On Wed, May 13, 2026 at 07:16:52PM +0000, Caleb James DeLisle wrote: >> Add support for the PCIe present on the EcoNet EN7528 (and EN751221) SoCs. >> >> These SoCs have a mix of Gen1 and Gen2 capable ports, but the Gen2 ports >> require re-training after startup. > s/re-training/retraining/ OK > >> + * @MTK_PCIE_RETRAIN: Re-train link to bridge after startup because some >> + * Gen2-capable devices start as Gen1. > s/Re-train/Retrain/ to make this consistent and more greppable. > Also more instances below. OK > >> + * as Gen1, and must be re-trained once after initial configuration in order to >> + * only Gen1 capable. Therefore it is most convenient to re-train every port >> + return dev_err_probe(dev, ret, "root bridge not found\n"); > "Root bridge" is not a term used by the specs, but in common usage it > refers to the host bridge, i.e., the RC. In this case, you didn't > find a "Root Port". OK Thanks > >> +found_port: >> + if (!IS_BUILTIN(CONFIG_PCIE_MEDIATEK)) { >> + /* Let it go because the device will work as Gen1 */ >> + dev_warn(dev, "module must be built-in to retrain to Gen2\n"); > I suppose this will cause a warning even in cases where Gen2 is > impossible, e.g., the endpoint only supports Gen1? Correct indeed. I imagine in most cases, if the port is Gen1 only then board integrator uses a Gen1 card as well, so I could try being fancy and probe the card to see if it supports Gen2. In OpenWrt the PCI driver is always built-in so I didn't really consider this something to worry about. What's your preference? Thanks, Caleb ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 2/2] PCI: mediatek: Add support for EcoNet EN7528 SoC 2026-05-13 21:39 ` Caleb James DeLisle @ 2026-05-13 22:06 ` Bjorn Helgaas 2026-05-13 22:17 ` Caleb James DeLisle 0 siblings, 1 reply; 7+ messages in thread From: Bjorn Helgaas @ 2026-05-13 22:06 UTC (permalink / raw) To: Caleb James DeLisle Cc: linux-pci, linux-mips, naseefkm, ryder.lee, lpieralisi, kwilczynski, mani, robh, krzk+dt, conor+dt, matthias.bgg, angelogioacchino.delregno, ansuelsmth, linux-mediatek, devicetree, linux-kernel On Wed, May 13, 2026 at 11:39:25PM +0200, Caleb James DeLisle wrote: > On 13/05/2026 23:07, Bjorn Helgaas wrote: > > On Wed, May 13, 2026 at 07:16:52PM +0000, Caleb James DeLisle wrote: > > > Add support for the PCIe present on the EcoNet EN7528 (and EN751221) SoCs. > > > > > > These SoCs have a mix of Gen1 and Gen2 capable ports, but the Gen2 ports > > > require re-training after startup. > > > +found_port: > > > + if (!IS_BUILTIN(CONFIG_PCIE_MEDIATEK)) { > > > + /* Let it go because the device will work as Gen1 */ > > > + dev_warn(dev, "module must be built-in to retrain to Gen2\n"); > > > > I suppose this will cause a warning even in cases where Gen2 is > > impossible, e.g., the endpoint only supports Gen1? > > Correct indeed. > > I imagine in most cases, if the port is Gen1 only then board integrator uses > a Gen1 card as well, so I could try being fancy and probe the card to see if > it supports Gen2. In OpenWrt the PCI driver is always built-in so I didn't > really consider this something to worry about. Probing the downstream device sounds like overkill because it hasn't been enumerated yet and there's no good place to check after it is enumerated. I would consider just logging one message as "info" instead of "warn", maybe in mtk_pcie_startup_port_en7528()? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v6 2/2] PCI: mediatek: Add support for EcoNet EN7528 SoC 2026-05-13 22:06 ` Bjorn Helgaas @ 2026-05-13 22:17 ` Caleb James DeLisle 0 siblings, 0 replies; 7+ messages in thread From: Caleb James DeLisle @ 2026-05-13 22:17 UTC (permalink / raw) To: Bjorn Helgaas Cc: linux-pci, linux-mips, naseefkm, ryder.lee, lpieralisi, kwilczynski, mani, robh, krzk+dt, conor+dt, matthias.bgg, angelogioacchino.delregno, ansuelsmth, linux-mediatek, devicetree, linux-kernel On 14/05/2026 00:06, Bjorn Helgaas wrote: > On Wed, May 13, 2026 at 11:39:25PM +0200, Caleb James DeLisle wrote: >> On 13/05/2026 23:07, Bjorn Helgaas wrote: >>> On Wed, May 13, 2026 at 07:16:52PM +0000, Caleb James DeLisle wrote: >>>> Add support for the PCIe present on the EcoNet EN7528 (and EN751221) SoCs. >>>> >>>> These SoCs have a mix of Gen1 and Gen2 capable ports, but the Gen2 ports >>>> require re-training after startup. >>>> +found_port: >>>> + if (!IS_BUILTIN(CONFIG_PCIE_MEDIATEK)) { >>>> + /* Let it go because the device will work as Gen1 */ >>>> + dev_warn(dev, "module must be built-in to retrain to Gen2\n"); >>> I suppose this will cause a warning even in cases where Gen2 is >>> impossible, e.g., the endpoint only supports Gen1? >> Correct indeed. >> >> I imagine in most cases, if the port is Gen1 only then board integrator uses >> a Gen1 card as well, so I could try being fancy and probe the card to see if >> it supports Gen2. In OpenWrt the PCI driver is always built-in so I didn't >> really consider this something to worry about. > Probing the downstream device sounds like overkill because it hasn't > been enumerated yet and there's no good place to check after it is > enumerated. I would consider just logging one message as "info" > instead of "warn", maybe in mtk_pcie_startup_port_en7528()? Works for me, worth noting if anybody adds a startup for another device which has this quirk, they'll also need to copy the log line - but it's highly likely that no other such device exists, and duplicating 3 lines of code is not the end of the world. Thanks, Caleb ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-05-13 22:17 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-05-13 19:16 [PATCH v6 0/2] Add EcoNet EN7528 (and EN751221) PCIe support Caleb James DeLisle 2026-05-13 19:16 ` [PATCH v6 1/2] dt-bindings: PCI: mediatek: Add support for EcoNet EN7528 Caleb James DeLisle 2026-05-13 19:16 ` [PATCH v6 2/2] PCI: mediatek: Add support for EcoNet EN7528 SoC Caleb James DeLisle 2026-05-13 21:07 ` Bjorn Helgaas 2026-05-13 21:39 ` Caleb James DeLisle 2026-05-13 22:06 ` Bjorn Helgaas 2026-05-13 22:17 ` Caleb James DeLisle
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox