* [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
@ 2026-10-08 11:28 ` Jacky Chou
0 siblings, 0 replies; 26+ messages in thread
From: Jacky Chou @ 2026-10-08 11:28 UTC (permalink / raw)
To: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Joel Stanley, Andrew Jeffery, Manivannan Sadhasivam,
Ryan Chen, Billy Tsai
Cc: linux-aspeed, linux-phy, devicetree, linux-arm-kernel,
linux-kernel, Jacky Chou
Introduce support for Aspeed PCIe PHY controller available in
AST2600/2700.
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/phy/aspeed/Kconfig | 12 +-
drivers/phy/aspeed/Makefile | 1 +
drivers/phy/aspeed/phy-aspeed-pcie.c | 237 +++++++++++++++++++++++++++++++++++
3 files changed, 249 insertions(+), 1 deletion(-)
diff --git a/drivers/phy/aspeed/Kconfig b/drivers/phy/aspeed/Kconfig
index 7b5f48db2be8..b5903cf06268 100644
--- a/drivers/phy/aspeed/Kconfig
+++ b/drivers/phy/aspeed/Kconfig
@@ -1,9 +1,19 @@
# SPDX-License-Identifier: GPL-2.0-only
-
#
# PHY drivers for ASPEED
#
+config PHY_ASPEED_PCIE
+ tristate "ASPEED PCIe PHY driver"
+ select GENERIC_PHY
+ depends on (ARCH_ASPEED || COMPILE_TEST)
+ help
+ This option enables support for the ASPEED PCIe PHY driver.
+ The driver provides the necessary interface to control and
+ configure the PCIe PHY hardware found on ASPEED SoCs.
+ It is required for proper operation of PCIe devices on
+ platforms using ASPEED chips.
+
config PHY_ASPEED_USB3
tristate "ASPEED USB3 PHY driver"
select GENERIC_PHY
diff --git a/drivers/phy/aspeed/Makefile b/drivers/phy/aspeed/Makefile
index d96d9d73a009..9d43790fdda8 100644
--- a/drivers/phy/aspeed/Makefile
+++ b/drivers/phy/aspeed/Makefile
@@ -1,2 +1,3 @@
# SPDX-License-Identifier: GPL-2.0
+obj-$(CONFIG_PHY_ASPEED_PCIE) += phy-aspeed-pcie.o
obj-$(CONFIG_PHY_ASPEED_USB3) += phy-aspeed-usb3.o
diff --git a/drivers/phy/aspeed/phy-aspeed-pcie.c b/drivers/phy/aspeed/phy-aspeed-pcie.c
new file mode 100644
index 000000000000..eb300887b644
--- /dev/null
+++ b/drivers/phy/aspeed/phy-aspeed-pcie.c
@@ -0,0 +1,237 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2025 Aspeed Technology Inc.
+ */
+
+#include <linux/clk.h>
+#include <linux/err.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/phy/pcie.h>
+#include <linux/phy/phy.h>
+
+/* AST2600 PCIe Host Controller Registers */
+#define PEHR_GLOBAL 0x30
+#define AST2600_PORT_TYPE_MASK GENMASK(5, 4)
+#define AST2600_PORT_TYPE(x) FIELD_PREP(AST2600_PORT_TYPE_MASK, x)
+#define PEHR_LOCK 0x7c
+#define PCIE_UNLOCK 0xa8
+
+/* AST2700 PEHR */
+#define PEHR_MISC_58 0x58
+#define LOCAL_SCALE_SUP BIT(0)
+#define PEHR_MISC_5C 0x5c
+#define CONFIG_RC_DEVICE BIT(30)
+#define PEHR_MISC_60 0x60
+#define AST2700_PORT_TYPE_MASK GENMASK(7, 4)
+#define PORT_TYPE_ROOT 0x4
+#define PEHR_MISC_70 0x70
+#define POSTED_DATA_CREDITS(x) FIELD_PREP(GENMASK(15, 0), x)
+#define POSTED_HEADER_CREDITS(x) FIELD_PREP(GENMASK(27, 16), x)
+#define PEHR_MISC_78 0x78
+#define COMPLETION_DATA_CREDITS(x) FIELD_PREP(GENMASK(15, 0), x)
+#define COMPLETION_HEADER_CREDITS(x) FIELD_PREP(GENMASK(27, 16), x)
+#define PEHR_MISC_278 0x278
+#define SET_TO_DOWNSTREAM BIT(22)
+#define ASSERT_INTERNAL_RESET BIT(31)
+#define PEHR_MISC_280 0x280
+#define SEL_INTERNAL_RESET BIT(0)
+
+/**
+ * struct aspeed_pcie_phy - PCIe PHY information
+ * @dev: pointer to device structure
+ * @reg: PCIe host register base address
+ * @clk: PCIe reference clock
+ * @phy: pointer to PHY structure
+ * @platform: platform specific information
+ */
+struct aspeed_pcie_phy {
+ struct device *dev;
+ void __iomem *reg;
+ struct clk *clk;
+ struct phy *phy;
+ const struct aspeed_pcie_phy_platform *platform;
+};
+
+/**
+ * struct aspeed_pcie_phy_platform - Platform information
+ * @phy_ops: phy operations
+ */
+struct aspeed_pcie_phy_platform {
+ const struct phy_ops *phy_ops;
+};
+
+static int ast2600_phy_init(struct phy *phy)
+{
+ struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
+ int ret;
+
+ ret = clk_prepare_enable(pcie_phy->clk);
+ if (ret)
+ return ret;
+
+ writel(PCIE_UNLOCK, pcie_phy->reg + PEHR_LOCK);
+
+ return 0;
+}
+
+static int ast2600_phy_exit(struct phy *phy)
+{
+ struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
+
+ clk_disable_unprepare(pcie_phy->clk);
+
+ return 0;
+}
+
+static int ast2600_phy_set_mode(struct phy *phy, enum phy_mode mode,
+ int submode)
+{
+ struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
+
+ switch (submode) {
+ case PHY_MODE_PCIE_RC:
+ writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
+ break;
+ default:
+ dev_err(&phy->dev, "Unsupported submode %d\n", submode);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static const struct phy_ops ast2600_phy_ops = {
+ .init = ast2600_phy_init,
+ .exit = ast2600_phy_exit,
+ .set_mode = ast2600_phy_set_mode,
+ .owner = THIS_MODULE,
+};
+
+static int ast2700_phy_init(struct phy *phy)
+{
+ struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
+
+ return clk_prepare_enable(pcie_phy->clk);
+}
+
+static int ast2700_phy_exit(struct phy *phy)
+{
+ struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
+
+ clk_disable_unprepare(pcie_phy->clk);
+
+ return 0;
+}
+
+static int ast2700_phy_set_mode(struct phy *phy, enum phy_mode mode,
+ int submode)
+{
+ struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
+ u32 cfg_val;
+
+ switch (submode) {
+ case PHY_MODE_PCIE_RC:
+ writel(0, pcie_phy->reg + PEHR_MISC_278);
+ writel(SEL_INTERNAL_RESET, pcie_phy->reg + PEHR_MISC_280);
+ writel(POSTED_DATA_CREDITS(0xc0) | POSTED_HEADER_CREDITS(0xa),
+ pcie_phy->reg + PEHR_MISC_70);
+ writel(COMPLETION_DATA_CREDITS(0x30) | COMPLETION_HEADER_CREDITS(0x8),
+ pcie_phy->reg + PEHR_MISC_78);
+ writel(LOCAL_SCALE_SUP, pcie_phy->reg + PEHR_MISC_58);
+ writel(CONFIG_RC_DEVICE, pcie_phy->reg + PEHR_MISC_5C);
+ cfg_val = readl(pcie_phy->reg + PEHR_MISC_60);
+ FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
+ PORT_TYPE_ROOT);
+ writel(cfg_val, pcie_phy->reg + PEHR_MISC_60);
+ writel(ASSERT_INTERNAL_RESET | SET_TO_DOWNSTREAM,
+ pcie_phy->reg + PEHR_MISC_278);
+ break;
+ default:
+ dev_err(&phy->dev, "Unsupported submode %d\n", submode);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static const struct phy_ops ast2700_phy_ops = {
+ .init = ast2700_phy_init,
+ .exit = ast2700_phy_exit,
+ .set_mode = ast2700_phy_set_mode,
+ .owner = THIS_MODULE,
+};
+
+static const struct aspeed_pcie_phy_platform pcie_phy_ast2600 = {
+ .phy_ops = &ast2600_phy_ops,
+};
+
+static const struct aspeed_pcie_phy_platform pcie_phy_ast2700 = {
+ .phy_ops = &ast2700_phy_ops,
+};
+
+static int aspeed_pcie_phy_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct phy_provider *phy_provider;
+ struct aspeed_pcie_phy *pcie_phy;
+ const struct aspeed_pcie_phy_platform *md;
+
+ md = of_device_get_match_data(dev);
+ if (!md)
+ return -ENODEV;
+
+ pcie_phy = devm_kzalloc(dev, sizeof(*pcie_phy), GFP_KERNEL);
+ if (!pcie_phy)
+ return -ENOMEM;
+
+ pcie_phy->reg = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(pcie_phy->reg))
+ return PTR_ERR(pcie_phy->reg);
+
+ pcie_phy->clk = devm_clk_get(dev, NULL);
+ if (IS_ERR(pcie_phy->clk))
+ return dev_err_probe(dev, PTR_ERR(pcie_phy->clk),
+ "failed to get clock\n");
+
+ pcie_phy->dev = dev;
+ pcie_phy->platform = md;
+
+ pcie_phy->phy = devm_phy_create(dev, dev->of_node,
+ pcie_phy->platform->phy_ops);
+ if (IS_ERR(pcie_phy->phy))
+ return dev_err_probe(dev, PTR_ERR(pcie_phy->phy),
+ "failed to create PHY\n");
+
+ phy_set_drvdata(pcie_phy->phy, pcie_phy);
+ phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
+
+ return PTR_ERR_OR_ZERO(phy_provider);
+}
+
+static const struct of_device_id aspeed_pcie_phy_of_match_table[] = {
+ {
+ .compatible = "aspeed,ast2600-pcie-phy",
+ .data = &pcie_phy_ast2600,
+ },
+ {
+ .compatible = "aspeed,ast2700-pcie-phy",
+ .data = &pcie_phy_ast2700,
+ },
+ { },
+};
+MODULE_DEVICE_TABLE(of, aspeed_pcie_phy_of_match_table);
+
+static struct platform_driver aspeed_pcie_driver = {
+ .probe = aspeed_pcie_phy_probe,
+ .driver = {
+ .name = "aspeed-pcie-phy",
+ .of_match_table = aspeed_pcie_phy_of_match_table,
+ },
+};
+
+module_platform_driver(aspeed_pcie_driver);
+
+MODULE_AUTHOR("Jacky Chou <jacky_chou@aspeedtech.com>");
+MODULE_DESCRIPTION("ASPEED PCIe PHY");
+MODULE_LICENSE("GPL");
--
2.34.1
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
2026-10-08 11:28 ` Jacky Chou
@ 2026-10-08 11:39 ` sashiko-bot
-1 siblings, 0 replies; 26+ messages in thread
From: sashiko-bot @ 2026-10-08 11:39 UTC (permalink / raw)
To: Jacky Chou
Cc: linux-phy, neil.armstrong, robh, conor+dt, devicetree, vkoul,
olteanv
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] phy: aspeed: Destructive overwrite of PEHR_GLOBAL and PEHR_MISC_5C registers
- [Low] build: missing <linux/bitfield.h> and <linux/io.h> causes COMPILE_TEST failures
--
commit d6c687af08f52ce8c5106883a0ada373528fe1b8
Author: Jacky Chou <jacky_chou@aspeedtech.com>
phy: aspeed: Add ASPEED PCIe PHY driver
This commit introduces the Aspeed PCIe PHY controller driver for
AST2600/2700 platforms. It adds Kconfig and Makefile changes alongside
the main driver code implementing PHY operations.
> diff --git a/drivers/phy/aspeed/phy-aspeed-pcie.c b/drivers/phy/aspeed/phy-aspeed-pcie.c
> new file mode 100644
> index 0000000000000..eb300887b6441
> --- /dev/null
> +++ b/drivers/phy/aspeed/phy-aspeed-pcie.c
> @@ -0,0 +1,237 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2025 Aspeed Technology Inc.
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/err.h>
> +#include <linux/module.h>
> +#include <linux/platform_device.h>
> +#include <linux/phy/pcie.h>
> +#include <linux/phy/phy.h>
[Severity: Low]
Can this cause build failures when COMPILE_TEST is enabled on architectures
that do not implicitly include <linux/bitfield.h> and <linux/io.h>?
The FIELD_PREP, FIELD_MODIFY, readl, and writel macros and functions are
used throughout this file, but their headers are not explicitly included.
[ ... ]
> +static int ast2600_phy_set_mode(struct phy *phy, enum phy_mode mode,
> + int submode)
> +{
> + struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
> +
> + switch (submode) {
> + case PHY_MODE_PCIE_RC:
> + writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
[Severity: Medium]
Could this write unintentionally clear other configuration bits in PEHR_GLOBAL?
It overwrites the entire register instead of performing a read-modify-write
operation.
> + break;
> + default:
> + dev_err(&phy->dev, "Unsupported submode %d\n", submode);
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
[ ... ]
> +static int ast2700_phy_set_mode(struct phy *phy, enum phy_mode mode,
> + int submode)
> +{
> + struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
> + u32 cfg_val;
> +
> + switch (submode) {
> + case PHY_MODE_PCIE_RC:
> + writel(0, pcie_phy->reg + PEHR_MISC_278);
> + writel(SEL_INTERNAL_RESET, pcie_phy->reg + PEHR_MISC_280);
> + writel(POSTED_DATA_CREDITS(0xc0) | POSTED_HEADER_CREDITS(0xa),
> + pcie_phy->reg + PEHR_MISC_70);
> + writel(COMPLETION_DATA_CREDITS(0x30) | COMPLETION_HEADER_CREDITS(0x8),
> + pcie_phy->reg + PEHR_MISC_78);
> + writel(LOCAL_SCALE_SUP, pcie_phy->reg + PEHR_MISC_58);
> + writel(CONFIG_RC_DEVICE, pcie_phy->reg + PEHR_MISC_5C);
[Severity: Medium]
Does writing CONFIG_RC_DEVICE directly to PEHR_MISC_5C risk zeroing out other
bits in this register?
A read-modify-write pattern might be needed here, similar to how PEHR_MISC_60
is handled just below this.
> + cfg_val = readl(pcie_phy->reg + PEHR_MISC_60);
> + FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
> + PORT_TYPE_ROOT);
> + writel(cfg_val, pcie_phy->reg + PEHR_MISC_60);
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261008-aspeed_pcie_phy-v1-0-96764937aef0@aspeedtech.com?part=2
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
@ 2026-10-08 11:39 ` sashiko-bot
0 siblings, 0 replies; 26+ messages in thread
From: sashiko-bot @ 2026-10-08 11:39 UTC (permalink / raw)
To: Jacky Chou
Cc: linux-phy, neil.armstrong, robh, conor+dt, devicetree, vkoul,
olteanv
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] phy: aspeed: Destructive overwrite of PEHR_GLOBAL and PEHR_MISC_5C registers
- [Low] build: missing <linux/bitfield.h> and <linux/io.h> causes COMPILE_TEST failures
--
commit d6c687af08f52ce8c5106883a0ada373528fe1b8
Author: Jacky Chou <jacky_chou@aspeedtech.com>
phy: aspeed: Add ASPEED PCIe PHY driver
This commit introduces the Aspeed PCIe PHY controller driver for
AST2600/2700 platforms. It adds Kconfig and Makefile changes alongside
the main driver code implementing PHY operations.
> diff --git a/drivers/phy/aspeed/phy-aspeed-pcie.c b/drivers/phy/aspeed/phy-aspeed-pcie.c
> new file mode 100644
> index 0000000000000..eb300887b6441
> --- /dev/null
> +++ b/drivers/phy/aspeed/phy-aspeed-pcie.c
> @@ -0,0 +1,237 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2025 Aspeed Technology Inc.
> + */
> +
> +#include <linux/clk.h>
> +#include <linux/err.h>
> +#include <linux/module.h>
> +#include <linux/platform_device.h>
> +#include <linux/phy/pcie.h>
> +#include <linux/phy/phy.h>
[Severity: Low]
Can this cause build failures when COMPILE_TEST is enabled on architectures
that do not implicitly include <linux/bitfield.h> and <linux/io.h>?
The FIELD_PREP, FIELD_MODIFY, readl, and writel macros and functions are
used throughout this file, but their headers are not explicitly included.
[ ... ]
> +static int ast2600_phy_set_mode(struct phy *phy, enum phy_mode mode,
> + int submode)
> +{
> + struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
> +
> + switch (submode) {
> + case PHY_MODE_PCIE_RC:
> + writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
[Severity: Medium]
Could this write unintentionally clear other configuration bits in PEHR_GLOBAL?
It overwrites the entire register instead of performing a read-modify-write
operation.
> + break;
> + default:
> + dev_err(&phy->dev, "Unsupported submode %d\n", submode);
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
[ ... ]
> +static int ast2700_phy_set_mode(struct phy *phy, enum phy_mode mode,
> + int submode)
> +{
> + struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
> + u32 cfg_val;
> +
> + switch (submode) {
> + case PHY_MODE_PCIE_RC:
> + writel(0, pcie_phy->reg + PEHR_MISC_278);
> + writel(SEL_INTERNAL_RESET, pcie_phy->reg + PEHR_MISC_280);
> + writel(POSTED_DATA_CREDITS(0xc0) | POSTED_HEADER_CREDITS(0xa),
> + pcie_phy->reg + PEHR_MISC_70);
> + writel(COMPLETION_DATA_CREDITS(0x30) | COMPLETION_HEADER_CREDITS(0x8),
> + pcie_phy->reg + PEHR_MISC_78);
> + writel(LOCAL_SCALE_SUP, pcie_phy->reg + PEHR_MISC_58);
> + writel(CONFIG_RC_DEVICE, pcie_phy->reg + PEHR_MISC_5C);
[Severity: Medium]
Does writing CONFIG_RC_DEVICE directly to PEHR_MISC_5C risk zeroing out other
bits in this register?
A read-modify-write pattern might be needed here, similar to how PEHR_MISC_60
is handled just below this.
> + cfg_val = readl(pcie_phy->reg + PEHR_MISC_60);
> + FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
> + PORT_TYPE_ROOT);
> + writel(cfg_val, pcie_phy->reg + PEHR_MISC_60);
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261008-aspeed_pcie_phy-v1-0-96764937aef0@aspeedtech.com?part=2
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
2026-10-08 11:28 ` Jacky Chou
@ 2026-10-08 21:40 ` kernel test robot
-1 siblings, 0 replies; 26+ messages in thread
From: kernel test robot @ 2026-10-08 21:40 UTC (permalink / raw)
To: Jacky Chou, Vinod Koul, Neil Armstrong, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Joel Stanley, Andrew Jeffery,
Manivannan Sadhasivam, Ryan Chen, Billy Tsai
Cc: oe-kbuild-all, linux-aspeed, linux-phy, devicetree,
linux-arm-kernel, linux-kernel, Jacky Chou
Hi Jacky,
kernel test robot noticed the following build errors:
[auto build test ERROR on ea01f446f0682a5e7bd7a275889a890b7e0c6e02]
url: https://github.com/intel-lab-lkp/linux/commits/Jacky-Chou/dt-bindings-phy-aspeed-Add-ASPEED-PCIe-PHY/20261008-192819
base: ea01f446f0682a5e7bd7a275889a890b7e0c6e02
patch link: https://lore.kernel.org/r/20261008-aspeed_pcie_phy-v1-2-96764937aef0%40aspeedtech.com
patch subject: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
config: csky-randconfig-1000-20261009 (https://download.01.org/0day-ci/archive/20261009/202610090555.gWYlVYEL-lkp@intel.com/config)
compiler: csky-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261009/202610090555.gWYlVYEL-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/202610090555.gWYlVYEL-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from include/linux/io.h:12,
from include/linux/irq.h:20,
from include/asm-generic/hardirq.h:17,
from ./arch/csky/include/generated/asm/hardirq.h:1,
from include/linux/hardirq.h:11,
from include/linux/interrupt.h:11,
from include/linux/kernel_stat.h:8,
from include/linux/cgroup.h:27,
from include/linux/memcontrol.h:13,
from include/linux/swap.h:9,
from include/linux/suspend.h:5,
from include/linux/regulator/consumer.h:35,
from include/linux/phy/phy.h:17,
from drivers/phy/aspeed/phy-aspeed-pcie.c:11:
drivers/phy/aspeed/phy-aspeed-pcie.c: In function 'ast2600_phy_set_mode':
>> drivers/phy/aspeed/phy-aspeed-pcie.c:16:41: error: implicit declaration of function 'FIELD_PREP' [-Wimplicit-function-declaration]
16 | #define AST2600_PORT_TYPE(x) FIELD_PREP(AST2600_PORT_TYPE_MASK, x)
| ^~~~~~~~~~
arch/csky/include/asm/io.h:31:59: note: in definition of macro 'writel'
31 | #define writel(v,c) ({ wmb(); writel_relaxed((v),(c)); mb(); })
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:94:24: note: in expansion of macro 'AST2600_PORT_TYPE'
94 | writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
| ^~~~~~~~~~~~~~~~~
drivers/phy/aspeed/phy-aspeed-pcie.c: In function 'ast2700_phy_set_mode':
>> drivers/phy/aspeed/phy-aspeed-pcie.c:144:17: error: implicit declaration of function 'FIELD_MODIFY' [-Wimplicit-function-declaration]
144 | FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
| ^~~~~~~~~~~~
vim +/FIELD_PREP +16 drivers/phy/aspeed/phy-aspeed-pcie.c
12
13 /* AST2600 PCIe Host Controller Registers */
14 #define PEHR_GLOBAL 0x30
15 #define AST2600_PORT_TYPE_MASK GENMASK(5, 4)
> 16 #define AST2600_PORT_TYPE(x) FIELD_PREP(AST2600_PORT_TYPE_MASK, x)
17 #define PEHR_LOCK 0x7c
18 #define PCIE_UNLOCK 0xa8
19
20 /* AST2700 PEHR */
21 #define PEHR_MISC_58 0x58
22 #define LOCAL_SCALE_SUP BIT(0)
23 #define PEHR_MISC_5C 0x5c
24 #define CONFIG_RC_DEVICE BIT(30)
25 #define PEHR_MISC_60 0x60
26 #define AST2700_PORT_TYPE_MASK GENMASK(7, 4)
27 #define PORT_TYPE_ROOT 0x4
28 #define PEHR_MISC_70 0x70
29 #define POSTED_DATA_CREDITS(x) FIELD_PREP(GENMASK(15, 0), x)
30 #define POSTED_HEADER_CREDITS(x) FIELD_PREP(GENMASK(27, 16), x)
31 #define PEHR_MISC_78 0x78
32 #define COMPLETION_DATA_CREDITS(x) FIELD_PREP(GENMASK(15, 0), x)
33 #define COMPLETION_HEADER_CREDITS(x) FIELD_PREP(GENMASK(27, 16), x)
34 #define PEHR_MISC_278 0x278
35 #define SET_TO_DOWNSTREAM BIT(22)
36 #define ASSERT_INTERNAL_RESET BIT(31)
37 #define PEHR_MISC_280 0x280
38 #define SEL_INTERNAL_RESET BIT(0)
39
40 /**
41 * struct aspeed_pcie_phy - PCIe PHY information
42 * @dev: pointer to device structure
43 * @reg: PCIe host register base address
44 * @clk: PCIe reference clock
45 * @phy: pointer to PHY structure
46 * @platform: platform specific information
47 */
48 struct aspeed_pcie_phy {
49 struct device *dev;
50 void __iomem *reg;
51 struct clk *clk;
52 struct phy *phy;
53 const struct aspeed_pcie_phy_platform *platform;
54 };
55
56 /**
57 * struct aspeed_pcie_phy_platform - Platform information
58 * @phy_ops: phy operations
59 */
60 struct aspeed_pcie_phy_platform {
61 const struct phy_ops *phy_ops;
62 };
63
64 static int ast2600_phy_init(struct phy *phy)
65 {
66 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
67 int ret;
68
69 ret = clk_prepare_enable(pcie_phy->clk);
70 if (ret)
71 return ret;
72
73 writel(PCIE_UNLOCK, pcie_phy->reg + PEHR_LOCK);
74
75 return 0;
76 }
77
78 static int ast2600_phy_exit(struct phy *phy)
79 {
80 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
81
82 clk_disable_unprepare(pcie_phy->clk);
83
84 return 0;
85 }
86
87 static int ast2600_phy_set_mode(struct phy *phy, enum phy_mode mode,
88 int submode)
89 {
90 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
91
92 switch (submode) {
93 case PHY_MODE_PCIE_RC:
94 writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
95 break;
96 default:
97 dev_err(&phy->dev, "Unsupported submode %d\n", submode);
98 return -EINVAL;
99 }
100
101 return 0;
102 }
103
104 static const struct phy_ops ast2600_phy_ops = {
105 .init = ast2600_phy_init,
106 .exit = ast2600_phy_exit,
107 .set_mode = ast2600_phy_set_mode,
108 .owner = THIS_MODULE,
109 };
110
111 static int ast2700_phy_init(struct phy *phy)
112 {
113 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
114
115 return clk_prepare_enable(pcie_phy->clk);
116 }
117
118 static int ast2700_phy_exit(struct phy *phy)
119 {
120 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
121
122 clk_disable_unprepare(pcie_phy->clk);
123
124 return 0;
125 }
126
127 static int ast2700_phy_set_mode(struct phy *phy, enum phy_mode mode,
128 int submode)
129 {
130 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
131 u32 cfg_val;
132
133 switch (submode) {
134 case PHY_MODE_PCIE_RC:
135 writel(0, pcie_phy->reg + PEHR_MISC_278);
136 writel(SEL_INTERNAL_RESET, pcie_phy->reg + PEHR_MISC_280);
137 writel(POSTED_DATA_CREDITS(0xc0) | POSTED_HEADER_CREDITS(0xa),
138 pcie_phy->reg + PEHR_MISC_70);
139 writel(COMPLETION_DATA_CREDITS(0x30) | COMPLETION_HEADER_CREDITS(0x8),
140 pcie_phy->reg + PEHR_MISC_78);
141 writel(LOCAL_SCALE_SUP, pcie_phy->reg + PEHR_MISC_58);
142 writel(CONFIG_RC_DEVICE, pcie_phy->reg + PEHR_MISC_5C);
143 cfg_val = readl(pcie_phy->reg + PEHR_MISC_60);
> 144 FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
145 PORT_TYPE_ROOT);
146 writel(cfg_val, pcie_phy->reg + PEHR_MISC_60);
147 writel(ASSERT_INTERNAL_RESET | SET_TO_DOWNSTREAM,
148 pcie_phy->reg + PEHR_MISC_278);
149 break;
150 default:
151 dev_err(&phy->dev, "Unsupported submode %d\n", submode);
152 return -EINVAL;
153 }
154
155 return 0;
156 }
157
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
@ 2026-10-08 21:40 ` kernel test robot
0 siblings, 0 replies; 26+ messages in thread
From: kernel test robot @ 2026-10-08 21:40 UTC (permalink / raw)
To: Jacky Chou, Vinod Koul, Neil Armstrong, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Joel Stanley, Andrew Jeffery,
Manivannan Sadhasivam, Ryan Chen, Billy Tsai
Cc: oe-kbuild-all, linux-aspeed, linux-phy, devicetree,
linux-arm-kernel, linux-kernel, Jacky Chou
Hi Jacky,
kernel test robot noticed the following build errors:
[auto build test ERROR on ea01f446f0682a5e7bd7a275889a890b7e0c6e02]
url: https://github.com/intel-lab-lkp/linux/commits/Jacky-Chou/dt-bindings-phy-aspeed-Add-ASPEED-PCIe-PHY/20261008-192819
base: ea01f446f0682a5e7bd7a275889a890b7e0c6e02
patch link: https://lore.kernel.org/r/20261008-aspeed_pcie_phy-v1-2-96764937aef0%40aspeedtech.com
patch subject: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
config: csky-randconfig-1000-20261009 (https://download.01.org/0day-ci/archive/20261009/202610090555.gWYlVYEL-lkp@intel.com/config)
compiler: csky-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261009/202610090555.gWYlVYEL-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/202610090555.gWYlVYEL-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from include/linux/io.h:12,
from include/linux/irq.h:20,
from include/asm-generic/hardirq.h:17,
from ./arch/csky/include/generated/asm/hardirq.h:1,
from include/linux/hardirq.h:11,
from include/linux/interrupt.h:11,
from include/linux/kernel_stat.h:8,
from include/linux/cgroup.h:27,
from include/linux/memcontrol.h:13,
from include/linux/swap.h:9,
from include/linux/suspend.h:5,
from include/linux/regulator/consumer.h:35,
from include/linux/phy/phy.h:17,
from drivers/phy/aspeed/phy-aspeed-pcie.c:11:
drivers/phy/aspeed/phy-aspeed-pcie.c: In function 'ast2600_phy_set_mode':
>> drivers/phy/aspeed/phy-aspeed-pcie.c:16:41: error: implicit declaration of function 'FIELD_PREP' [-Wimplicit-function-declaration]
16 | #define AST2600_PORT_TYPE(x) FIELD_PREP(AST2600_PORT_TYPE_MASK, x)
| ^~~~~~~~~~
arch/csky/include/asm/io.h:31:59: note: in definition of macro 'writel'
31 | #define writel(v,c) ({ wmb(); writel_relaxed((v),(c)); mb(); })
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:94:24: note: in expansion of macro 'AST2600_PORT_TYPE'
94 | writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
| ^~~~~~~~~~~~~~~~~
drivers/phy/aspeed/phy-aspeed-pcie.c: In function 'ast2700_phy_set_mode':
>> drivers/phy/aspeed/phy-aspeed-pcie.c:144:17: error: implicit declaration of function 'FIELD_MODIFY' [-Wimplicit-function-declaration]
144 | FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
| ^~~~~~~~~~~~
vim +/FIELD_PREP +16 drivers/phy/aspeed/phy-aspeed-pcie.c
12
13 /* AST2600 PCIe Host Controller Registers */
14 #define PEHR_GLOBAL 0x30
15 #define AST2600_PORT_TYPE_MASK GENMASK(5, 4)
> 16 #define AST2600_PORT_TYPE(x) FIELD_PREP(AST2600_PORT_TYPE_MASK, x)
17 #define PEHR_LOCK 0x7c
18 #define PCIE_UNLOCK 0xa8
19
20 /* AST2700 PEHR */
21 #define PEHR_MISC_58 0x58
22 #define LOCAL_SCALE_SUP BIT(0)
23 #define PEHR_MISC_5C 0x5c
24 #define CONFIG_RC_DEVICE BIT(30)
25 #define PEHR_MISC_60 0x60
26 #define AST2700_PORT_TYPE_MASK GENMASK(7, 4)
27 #define PORT_TYPE_ROOT 0x4
28 #define PEHR_MISC_70 0x70
29 #define POSTED_DATA_CREDITS(x) FIELD_PREP(GENMASK(15, 0), x)
30 #define POSTED_HEADER_CREDITS(x) FIELD_PREP(GENMASK(27, 16), x)
31 #define PEHR_MISC_78 0x78
32 #define COMPLETION_DATA_CREDITS(x) FIELD_PREP(GENMASK(15, 0), x)
33 #define COMPLETION_HEADER_CREDITS(x) FIELD_PREP(GENMASK(27, 16), x)
34 #define PEHR_MISC_278 0x278
35 #define SET_TO_DOWNSTREAM BIT(22)
36 #define ASSERT_INTERNAL_RESET BIT(31)
37 #define PEHR_MISC_280 0x280
38 #define SEL_INTERNAL_RESET BIT(0)
39
40 /**
41 * struct aspeed_pcie_phy - PCIe PHY information
42 * @dev: pointer to device structure
43 * @reg: PCIe host register base address
44 * @clk: PCIe reference clock
45 * @phy: pointer to PHY structure
46 * @platform: platform specific information
47 */
48 struct aspeed_pcie_phy {
49 struct device *dev;
50 void __iomem *reg;
51 struct clk *clk;
52 struct phy *phy;
53 const struct aspeed_pcie_phy_platform *platform;
54 };
55
56 /**
57 * struct aspeed_pcie_phy_platform - Platform information
58 * @phy_ops: phy operations
59 */
60 struct aspeed_pcie_phy_platform {
61 const struct phy_ops *phy_ops;
62 };
63
64 static int ast2600_phy_init(struct phy *phy)
65 {
66 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
67 int ret;
68
69 ret = clk_prepare_enable(pcie_phy->clk);
70 if (ret)
71 return ret;
72
73 writel(PCIE_UNLOCK, pcie_phy->reg + PEHR_LOCK);
74
75 return 0;
76 }
77
78 static int ast2600_phy_exit(struct phy *phy)
79 {
80 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
81
82 clk_disable_unprepare(pcie_phy->clk);
83
84 return 0;
85 }
86
87 static int ast2600_phy_set_mode(struct phy *phy, enum phy_mode mode,
88 int submode)
89 {
90 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
91
92 switch (submode) {
93 case PHY_MODE_PCIE_RC:
94 writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
95 break;
96 default:
97 dev_err(&phy->dev, "Unsupported submode %d\n", submode);
98 return -EINVAL;
99 }
100
101 return 0;
102 }
103
104 static const struct phy_ops ast2600_phy_ops = {
105 .init = ast2600_phy_init,
106 .exit = ast2600_phy_exit,
107 .set_mode = ast2600_phy_set_mode,
108 .owner = THIS_MODULE,
109 };
110
111 static int ast2700_phy_init(struct phy *phy)
112 {
113 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
114
115 return clk_prepare_enable(pcie_phy->clk);
116 }
117
118 static int ast2700_phy_exit(struct phy *phy)
119 {
120 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
121
122 clk_disable_unprepare(pcie_phy->clk);
123
124 return 0;
125 }
126
127 static int ast2700_phy_set_mode(struct phy *phy, enum phy_mode mode,
128 int submode)
129 {
130 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
131 u32 cfg_val;
132
133 switch (submode) {
134 case PHY_MODE_PCIE_RC:
135 writel(0, pcie_phy->reg + PEHR_MISC_278);
136 writel(SEL_INTERNAL_RESET, pcie_phy->reg + PEHR_MISC_280);
137 writel(POSTED_DATA_CREDITS(0xc0) | POSTED_HEADER_CREDITS(0xa),
138 pcie_phy->reg + PEHR_MISC_70);
139 writel(COMPLETION_DATA_CREDITS(0x30) | COMPLETION_HEADER_CREDITS(0x8),
140 pcie_phy->reg + PEHR_MISC_78);
141 writel(LOCAL_SCALE_SUP, pcie_phy->reg + PEHR_MISC_58);
142 writel(CONFIG_RC_DEVICE, pcie_phy->reg + PEHR_MISC_5C);
143 cfg_val = readl(pcie_phy->reg + PEHR_MISC_60);
> 144 FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
145 PORT_TYPE_ROOT);
146 writel(cfg_val, pcie_phy->reg + PEHR_MISC_60);
147 writel(ASSERT_INTERNAL_RESET | SET_TO_DOWNSTREAM,
148 pcie_phy->reg + PEHR_MISC_278);
149 break;
150 default:
151 dev_err(&phy->dev, "Unsupported submode %d\n", submode);
152 return -EINVAL;
153 }
154
155 return 0;
156 }
157
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
2026-10-08 11:28 ` Jacky Chou
@ 2026-10-09 6:52 ` kernel test robot
-1 siblings, 0 replies; 26+ messages in thread
From: kernel test robot @ 2026-10-09 6:52 UTC (permalink / raw)
To: Jacky Chou, Vinod Koul, Neil Armstrong, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Joel Stanley, Andrew Jeffery,
Manivannan Sadhasivam, Ryan Chen, Billy Tsai
Cc: llvm, oe-kbuild-all, linux-aspeed, linux-phy, devicetree,
linux-arm-kernel, linux-kernel, Jacky Chou
Hi Jacky,
kernel test robot noticed the following build errors:
[auto build test ERROR on ea01f446f0682a5e7bd7a275889a890b7e0c6e02]
url: https://github.com/intel-lab-lkp/linux/commits/Jacky-Chou/dt-bindings-phy-aspeed-Add-ASPEED-PCIe-PHY/20261008-192819
base: ea01f446f0682a5e7bd7a275889a890b7e0c6e02
patch link: https://lore.kernel.org/r/20261008-aspeed_pcie_phy-v1-2-96764937aef0%40aspeedtech.com
patch subject: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20261009/202610091411.PPpH2lr3-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 242243a5814307de825db3428662d67b064e2cbc)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261009/202610091411.PPpH2lr3-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/202610091411.PPpH2lr3-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/phy/aspeed/phy-aspeed-pcie.c:73:2: error: call to undeclared function 'writel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
73 | writel(PCIE_UNLOCK, pcie_phy->reg + PEHR_LOCK);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:94:3: error: call to undeclared function 'writel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
94 | writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:94:10: error: call to undeclared function 'FIELD_PREP'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
94 | writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:16:32: note: expanded from macro 'AST2600_PORT_TYPE'
16 | #define AST2600_PORT_TYPE(x) FIELD_PREP(AST2600_PORT_TYPE_MASK, x)
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:135:3: error: call to undeclared function 'writel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
135 | writel(0, pcie_phy->reg + PEHR_MISC_278);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:137:10: error: call to undeclared function 'FIELD_PREP'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
137 | writel(POSTED_DATA_CREDITS(0xc0) | POSTED_HEADER_CREDITS(0xa),
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:29:34: note: expanded from macro 'POSTED_DATA_CREDITS'
29 | #define POSTED_DATA_CREDITS(x) FIELD_PREP(GENMASK(15, 0), x)
| ^
>> drivers/phy/aspeed/phy-aspeed-pcie.c:143:13: error: call to undeclared function 'readl'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
143 | cfg_val = readl(pcie_phy->reg + PEHR_MISC_60);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:144:3: error: call to undeclared function 'FIELD_MODIFY'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
144 | FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
| ^
7 errors generated.
vim +/writel +73 drivers/phy/aspeed/phy-aspeed-pcie.c
63
64 static int ast2600_phy_init(struct phy *phy)
65 {
66 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
67 int ret;
68
69 ret = clk_prepare_enable(pcie_phy->clk);
70 if (ret)
71 return ret;
72
> 73 writel(PCIE_UNLOCK, pcie_phy->reg + PEHR_LOCK);
74
75 return 0;
76 }
77
78 static int ast2600_phy_exit(struct phy *phy)
79 {
80 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
81
82 clk_disable_unprepare(pcie_phy->clk);
83
84 return 0;
85 }
86
87 static int ast2600_phy_set_mode(struct phy *phy, enum phy_mode mode,
88 int submode)
89 {
90 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
91
92 switch (submode) {
93 case PHY_MODE_PCIE_RC:
94 writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
95 break;
96 default:
97 dev_err(&phy->dev, "Unsupported submode %d\n", submode);
98 return -EINVAL;
99 }
100
101 return 0;
102 }
103
104 static const struct phy_ops ast2600_phy_ops = {
105 .init = ast2600_phy_init,
106 .exit = ast2600_phy_exit,
107 .set_mode = ast2600_phy_set_mode,
108 .owner = THIS_MODULE,
109 };
110
111 static int ast2700_phy_init(struct phy *phy)
112 {
113 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
114
115 return clk_prepare_enable(pcie_phy->clk);
116 }
117
118 static int ast2700_phy_exit(struct phy *phy)
119 {
120 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
121
122 clk_disable_unprepare(pcie_phy->clk);
123
124 return 0;
125 }
126
127 static int ast2700_phy_set_mode(struct phy *phy, enum phy_mode mode,
128 int submode)
129 {
130 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
131 u32 cfg_val;
132
133 switch (submode) {
134 case PHY_MODE_PCIE_RC:
135 writel(0, pcie_phy->reg + PEHR_MISC_278);
136 writel(SEL_INTERNAL_RESET, pcie_phy->reg + PEHR_MISC_280);
137 writel(POSTED_DATA_CREDITS(0xc0) | POSTED_HEADER_CREDITS(0xa),
138 pcie_phy->reg + PEHR_MISC_70);
139 writel(COMPLETION_DATA_CREDITS(0x30) | COMPLETION_HEADER_CREDITS(0x8),
140 pcie_phy->reg + PEHR_MISC_78);
141 writel(LOCAL_SCALE_SUP, pcie_phy->reg + PEHR_MISC_58);
142 writel(CONFIG_RC_DEVICE, pcie_phy->reg + PEHR_MISC_5C);
> 143 cfg_val = readl(pcie_phy->reg + PEHR_MISC_60);
144 FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
145 PORT_TYPE_ROOT);
146 writel(cfg_val, pcie_phy->reg + PEHR_MISC_60);
147 writel(ASSERT_INTERNAL_RESET | SET_TO_DOWNSTREAM,
148 pcie_phy->reg + PEHR_MISC_278);
149 break;
150 default:
151 dev_err(&phy->dev, "Unsupported submode %d\n", submode);
152 return -EINVAL;
153 }
154
155 return 0;
156 }
157
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
@ 2026-10-09 6:52 ` kernel test robot
0 siblings, 0 replies; 26+ messages in thread
From: kernel test robot @ 2026-10-09 6:52 UTC (permalink / raw)
To: Jacky Chou, Vinod Koul, Neil Armstrong, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Joel Stanley, Andrew Jeffery,
Manivannan Sadhasivam, Ryan Chen, Billy Tsai
Cc: llvm, oe-kbuild-all, linux-aspeed, linux-phy, devicetree,
linux-arm-kernel, linux-kernel, Jacky Chou
Hi Jacky,
kernel test robot noticed the following build errors:
[auto build test ERROR on ea01f446f0682a5e7bd7a275889a890b7e0c6e02]
url: https://github.com/intel-lab-lkp/linux/commits/Jacky-Chou/dt-bindings-phy-aspeed-Add-ASPEED-PCIe-PHY/20261008-192819
base: ea01f446f0682a5e7bd7a275889a890b7e0c6e02
patch link: https://lore.kernel.org/r/20261008-aspeed_pcie_phy-v1-2-96764937aef0%40aspeedtech.com
patch subject: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20261009/202610091411.PPpH2lr3-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project 242243a5814307de825db3428662d67b064e2cbc)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261009/202610091411.PPpH2lr3-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/202610091411.PPpH2lr3-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/phy/aspeed/phy-aspeed-pcie.c:73:2: error: call to undeclared function 'writel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
73 | writel(PCIE_UNLOCK, pcie_phy->reg + PEHR_LOCK);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:94:3: error: call to undeclared function 'writel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
94 | writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:94:10: error: call to undeclared function 'FIELD_PREP'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
94 | writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:16:32: note: expanded from macro 'AST2600_PORT_TYPE'
16 | #define AST2600_PORT_TYPE(x) FIELD_PREP(AST2600_PORT_TYPE_MASK, x)
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:135:3: error: call to undeclared function 'writel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
135 | writel(0, pcie_phy->reg + PEHR_MISC_278);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:137:10: error: call to undeclared function 'FIELD_PREP'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
137 | writel(POSTED_DATA_CREDITS(0xc0) | POSTED_HEADER_CREDITS(0xa),
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:29:34: note: expanded from macro 'POSTED_DATA_CREDITS'
29 | #define POSTED_DATA_CREDITS(x) FIELD_PREP(GENMASK(15, 0), x)
| ^
>> drivers/phy/aspeed/phy-aspeed-pcie.c:143:13: error: call to undeclared function 'readl'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
143 | cfg_val = readl(pcie_phy->reg + PEHR_MISC_60);
| ^
drivers/phy/aspeed/phy-aspeed-pcie.c:144:3: error: call to undeclared function 'FIELD_MODIFY'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
144 | FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
| ^
7 errors generated.
vim +/writel +73 drivers/phy/aspeed/phy-aspeed-pcie.c
63
64 static int ast2600_phy_init(struct phy *phy)
65 {
66 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
67 int ret;
68
69 ret = clk_prepare_enable(pcie_phy->clk);
70 if (ret)
71 return ret;
72
> 73 writel(PCIE_UNLOCK, pcie_phy->reg + PEHR_LOCK);
74
75 return 0;
76 }
77
78 static int ast2600_phy_exit(struct phy *phy)
79 {
80 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
81
82 clk_disable_unprepare(pcie_phy->clk);
83
84 return 0;
85 }
86
87 static int ast2600_phy_set_mode(struct phy *phy, enum phy_mode mode,
88 int submode)
89 {
90 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
91
92 switch (submode) {
93 case PHY_MODE_PCIE_RC:
94 writel(AST2600_PORT_TYPE(0x3), pcie_phy->reg + PEHR_GLOBAL);
95 break;
96 default:
97 dev_err(&phy->dev, "Unsupported submode %d\n", submode);
98 return -EINVAL;
99 }
100
101 return 0;
102 }
103
104 static const struct phy_ops ast2600_phy_ops = {
105 .init = ast2600_phy_init,
106 .exit = ast2600_phy_exit,
107 .set_mode = ast2600_phy_set_mode,
108 .owner = THIS_MODULE,
109 };
110
111 static int ast2700_phy_init(struct phy *phy)
112 {
113 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
114
115 return clk_prepare_enable(pcie_phy->clk);
116 }
117
118 static int ast2700_phy_exit(struct phy *phy)
119 {
120 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
121
122 clk_disable_unprepare(pcie_phy->clk);
123
124 return 0;
125 }
126
127 static int ast2700_phy_set_mode(struct phy *phy, enum phy_mode mode,
128 int submode)
129 {
130 struct aspeed_pcie_phy *pcie_phy = phy_get_drvdata(phy);
131 u32 cfg_val;
132
133 switch (submode) {
134 case PHY_MODE_PCIE_RC:
135 writel(0, pcie_phy->reg + PEHR_MISC_278);
136 writel(SEL_INTERNAL_RESET, pcie_phy->reg + PEHR_MISC_280);
137 writel(POSTED_DATA_CREDITS(0xc0) | POSTED_HEADER_CREDITS(0xa),
138 pcie_phy->reg + PEHR_MISC_70);
139 writel(COMPLETION_DATA_CREDITS(0x30) | COMPLETION_HEADER_CREDITS(0x8),
140 pcie_phy->reg + PEHR_MISC_78);
141 writel(LOCAL_SCALE_SUP, pcie_phy->reg + PEHR_MISC_58);
142 writel(CONFIG_RC_DEVICE, pcie_phy->reg + PEHR_MISC_5C);
> 143 cfg_val = readl(pcie_phy->reg + PEHR_MISC_60);
144 FIELD_MODIFY(AST2700_PORT_TYPE_MASK, &cfg_val,
145 PORT_TYPE_ROOT);
146 writel(cfg_val, pcie_phy->reg + PEHR_MISC_60);
147 writel(ASSERT_INTERNAL_RESET | SET_TO_DOWNSTREAM,
148 pcie_phy->reg + PEHR_MISC_278);
149 break;
150 default:
151 dev_err(&phy->dev, "Unsupported submode %d\n", submode);
152 return -EINVAL;
153 }
154
155 return 0;
156 }
157
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
2026-10-08 11:28 ` Jacky Chou
@ 2026-10-09 10:33 ` Krzysztof Kozlowski
-1 siblings, 0 replies; 26+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-09 10:33 UTC (permalink / raw)
To: Jacky Chou
Cc: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Joel Stanley, Andrew Jeffery, Manivannan Sadhasivam,
Ryan Chen, Billy Tsai, linux-aspeed, linux-phy, devicetree,
linux-arm-kernel, linux-kernel
On Thu, Oct 08, 2026 at 07:28:20PM +0800, Jacky Chou wrote:
> Introduce support for Aspeed PCIe PHY controller available in
> AST2600/2700.
>
> Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
> ---
> drivers/phy/aspeed/Kconfig | 12 +-
> drivers/phy/aspeed/Makefile | 1 +
> drivers/phy/aspeed/phy-aspeed-pcie.c | 237 +++++++++++++++++++++++++++++++++++
And unlike 10 previous versions, this wasn't even built!
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
@ 2026-10-09 10:33 ` Krzysztof Kozlowski
0 siblings, 0 replies; 26+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-09 10:33 UTC (permalink / raw)
To: Jacky Chou
Cc: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Joel Stanley, Andrew Jeffery, Manivannan Sadhasivam,
Ryan Chen, Billy Tsai, linux-aspeed, linux-phy, devicetree,
linux-arm-kernel, linux-kernel
On Thu, Oct 08, 2026 at 07:28:20PM +0800, Jacky Chou wrote:
> Introduce support for Aspeed PCIe PHY controller available in
> AST2600/2700.
>
> Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
> ---
> drivers/phy/aspeed/Kconfig | 12 +-
> drivers/phy/aspeed/Makefile | 1 +
> drivers/phy/aspeed/phy-aspeed-pcie.c | 237 +++++++++++++++++++++++++++++++++++
And unlike 10 previous versions, this wasn't even built!
Best regards,
Krzysztof
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 26+ messages in thread
* 回覆: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
2026-10-09 10:33 ` Krzysztof Kozlowski
@ 2026-10-13 5:46 ` Jacky Chou
-1 siblings, 0 replies; 26+ messages in thread
From: Jacky Chou @ 2026-10-13 5:46 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Joel Stanley, Andrew Jeffery, Manivannan Sadhasivam,
Ryan Chen, Billy Tsai, linux-aspeed@lists.ozlabs.org,
linux-phy@lists.infradead.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Hi Krzysztof,
Thank you for your reply.
> > Introduce support for Aspeed PCIe PHY controller available in
> > AST2600/2700.
> >
> > Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
> > ---
> > drivers/phy/aspeed/Kconfig | 12 +-
> > drivers/phy/aspeed/Makefile | 1 +
> > drivers/phy/aspeed/phy-aspeed-pcie.c | 237
> > +++++++++++++++++++++++++++++++++++
>
> And unlike 10 previous versions, this wasn't even built!
>
I built this version with an ARM64 compiler and encountered no errors.
After seeing that the reported failure occurred in an x86_64 build,
I also tested an x86_64 build and reproduced the errors.
I'll check builds for both architectures in future submissions.
Thanks,
Jacky
^ permalink raw reply [flat|nested] 26+ messages in thread
* 回覆: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver
@ 2026-10-13 5:46 ` Jacky Chou
0 siblings, 0 replies; 26+ messages in thread
From: Jacky Chou @ 2026-10-13 5:46 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Vinod Koul, Neil Armstrong, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Joel Stanley, Andrew Jeffery, Manivannan Sadhasivam,
Ryan Chen, Billy Tsai, linux-aspeed@lists.ozlabs.org,
linux-phy@lists.infradead.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Hi Krzysztof,
Thank you for your reply.
> > Introduce support for Aspeed PCIe PHY controller available in
> > AST2600/2700.
> >
> > Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
> > ---
> > drivers/phy/aspeed/Kconfig | 12 +-
> > drivers/phy/aspeed/Makefile | 1 +
> > drivers/phy/aspeed/phy-aspeed-pcie.c | 237
> > +++++++++++++++++++++++++++++++++++
>
> And unlike 10 previous versions, this wasn't even built!
>
I built this version with an ARM64 compiler and encountered no errors.
After seeing that the reported failure occurred in an x86_64 build,
I also tested an x86_64 build and reproduced the errors.
I'll check builds for both architectures in future submissions.
Thanks,
Jacky
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 26+ messages in thread