* [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support
@ 2026-10-08 11:28 Jacky Chou
2026-10-08 11:28 ` [PATCH 1/3] dt-bindings: phy: aspeed: Add ASPEED PCIe PHY Jacky Chou
` (3 more replies)
0 siblings, 4 replies; 9+ 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
Add the ASPEED PCIe PHY binding and driver for AST2600 and AST2700
SoCs. The PHY provides the physical layer used by the PCIe controller
when it is configured to run in root complex mode.
The driver registers an ASPEED PCIe PHY provider through the generic PHY
framework and programs the SoC-specific PEHR registers from set_mode().
For AST2600 this selects the root complex port type. For AST2700 this
also configures the posted/completion credit values, local scaling,
device type, internal reset selection, and downstream port setting
needed by the controller.
This series also adds the devicetree binding for the PHY provider and a
MAINTAINERS entry for the ASPEED PCIe PHY driver.
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
Jacky Chou (3):
dt-bindings: phy: aspeed: Add ASPEED PCIe PHY
phy: aspeed: Add ASPEED PCIe PHY driver
MAINTAINERS: Add ASPEED PCIe PHY driver
.../bindings/phy/aspeed,ast2600-pcie-phy.yaml | 49 +++++
MAINTAINERS | 8 +
drivers/phy/aspeed/Kconfig | 12 +-
drivers/phy/aspeed/Makefile | 1 +
drivers/phy/aspeed/phy-aspeed-pcie.c | 237 +++++++++++++++++++++
5 files changed, 306 insertions(+), 1 deletion(-)
---
base-commit: ea01f446f0682a5e7bd7a275889a890b7e0c6e02
change-id: 20260630-aspeed_pcie_phy-34161b03863e
Best regards,
--
Jacky Chou <jacky_chou@aspeedtech.com>
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 1/3] dt-bindings: phy: aspeed: Add ASPEED PCIe PHY 2026-10-08 11:28 [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support Jacky Chou @ 2026-10-08 11:28 ` Jacky Chou 2026-10-09 10:31 ` Krzysztof Kozlowski 2026-10-08 11:28 ` [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver Jacky Chou ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ 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 device-binding for ASPEED AST2600/2700 PCIe PHY. The PHY provides the physical layer used by the PCIe controller when operating in root complex mode. Describe the compatible strings, register range, clocks and phy-cells value required by the PHY provider. Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com> --- .../bindings/phy/aspeed,ast2600-pcie-phy.yaml | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/Documentation/devicetree/bindings/phy/aspeed,ast2600-pcie-phy.yaml b/Documentation/devicetree/bindings/phy/aspeed,ast2600-pcie-phy.yaml new file mode 100644 index 000000000000..686b2e3d9457 --- /dev/null +++ b/Documentation/devicetree/bindings/phy/aspeed,ast2600-pcie-phy.yaml @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/phy/aspeed,ast2600-pcie-phy.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: ASPEED PCIe PHY + +maintainers: + - Jacky Chou <jacky_chou@aspeedtech.com> + +description: + The ASPEED PCIe PHY provides the physical layer functionality for PCIe + controllers in the SoC. + +properties: + compatible: + items: + - enum: + - aspeed,ast2600-pcie-phy + - aspeed,ast2700-pcie-phy + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + description: + Fixed 100MHz reference clock provided on the board. + + "#phy-cells": + const: 0 + +required: + - compatible + - reg + - clocks + - "#phy-cells" + +additionalProperties: false + +examples: + - | + phy@1e6ed200 { + compatible = "aspeed,ast2600-pcie-phy"; + reg = <0x1e6ed200 0x100>; + clocks = <&pcie_refclk>; + #phy-cells = <0>; + }; -- 2.34.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] dt-bindings: phy: aspeed: Add ASPEED PCIe PHY 2026-10-08 11:28 ` [PATCH 1/3] dt-bindings: phy: aspeed: Add ASPEED PCIe PHY Jacky Chou @ 2026-10-09 10:31 ` Krzysztof Kozlowski 0 siblings, 0 replies; 9+ messages in thread From: Krzysztof Kozlowski @ 2026-10-09 10:31 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:19PM +0800, Jacky Chou wrote: > Introduce device-binding for ASPEED AST2600/2700 PCIe PHY. > The PHY provides the physical layer used by the PCIe > controller when operating in root complex mode. > > Describe the compatible strings, register range, clocks and > phy-cells value required by the PHY provider. > > Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com> > --- > .../bindings/phy/aspeed,ast2600-pcie-phy.yaml | 49 ++++++++++++++++++++++ > 1 file changed, 49 insertions(+) > > diff --git a/Documentation/devicetree/bindings/phy/aspeed,ast2600-pcie-phy.yaml b/Documentation/devicetree/bindings/phy/aspeed,ast2600-pcie-phy.yaml > new file mode 100644 > index 000000000000..686b2e3d9457 > --- /dev/null > +++ b/Documentation/devicetree/bindings/phy/aspeed,ast2600-pcie-phy.yaml What? v9 here: https://lore.kernel.org/all/20260115-upstream_pcie_rc-v9-1-d6c82a1556a7@aspeedtech.com/ from the same person, reviewed, but you ask us to do the same work second time? Really? Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver 2026-10-08 11:28 [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support Jacky Chou 2026-10-08 11:28 ` [PATCH 1/3] dt-bindings: phy: aspeed: Add ASPEED PCIe PHY Jacky Chou @ 2026-10-08 11:28 ` Jacky Chou 2026-10-08 21:40 ` kernel test robot ` (2 more replies) 2026-10-08 11:28 ` [PATCH 3/3] MAINTAINERS: " Jacky Chou 2026-10-09 10:32 ` [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support Krzysztof Kozlowski 3 siblings, 3 replies; 9+ 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] 9+ messages in thread
* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver 2026-10-08 11:28 ` [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver Jacky Chou @ 2026-10-08 21:40 ` kernel test robot 2026-10-09 6:52 ` kernel test robot 2026-10-09 10:33 ` Krzysztof Kozlowski 2 siblings, 0 replies; 9+ 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] 9+ messages in thread
* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver 2026-10-08 11:28 ` [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver Jacky Chou 2026-10-08 21:40 ` kernel test robot @ 2026-10-09 6:52 ` kernel test robot 2026-10-09 10:33 ` Krzysztof Kozlowski 2 siblings, 0 replies; 9+ 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] 9+ messages in thread
* Re: [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver 2026-10-08 11:28 ` [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver Jacky Chou 2026-10-08 21:40 ` kernel test robot 2026-10-09 6:52 ` kernel test robot @ 2026-10-09 10:33 ` Krzysztof Kozlowski 2 siblings, 0 replies; 9+ 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] 9+ messages in thread
* [PATCH 3/3] MAINTAINERS: Add ASPEED PCIe PHY driver 2026-10-08 11:28 [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support Jacky Chou 2026-10-08 11:28 ` [PATCH 1/3] dt-bindings: phy: aspeed: Add ASPEED PCIe PHY Jacky Chou 2026-10-08 11:28 ` [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver Jacky Chou @ 2026-10-08 11:28 ` Jacky Chou 2026-10-09 10:32 ` [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support Krzysztof Kozlowski 3 siblings, 0 replies; 9+ 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 Add maintainer entry for ASPEED PCIe PHY driver. Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com> --- MAINTAINERS | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 0570815ee980..33a0336110a7 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4044,6 +4044,14 @@ S: Maintained F: Documentation/devicetree/bindings/crypto/aspeed,* F: drivers/crypto/aspeed/ +ASPEED PCIE PHY DRIVER +M: Jacky Chou <jacky_chou@aspeedtech.com> +L: linux-aspeed@lists.ozlabs.org (moderated for non-subscribers) +L: linux-phy@lists.infradead.org +S: Maintained +F: Documentation/devicetree/bindings/phy/aspeed,ast2600-pcie-phy.yaml +F: drivers/phy/aspeed/phy-aspeed-pcie.c + ASPEED PECI CONTROLLER M: Iwona Winiarska <iwona.winiarska@intel.com> L: linux-aspeed@lists.ozlabs.org (moderated for non-subscribers) -- 2.34.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support 2026-10-08 11:28 [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support Jacky Chou ` (2 preceding siblings ...) 2026-10-08 11:28 ` [PATCH 3/3] MAINTAINERS: " Jacky Chou @ 2026-10-09 10:32 ` Krzysztof Kozlowski 3 siblings, 0 replies; 9+ messages in thread From: Krzysztof Kozlowski @ 2026-10-09 10:32 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:18PM +0800, Jacky Chou wrote: > Add the ASPEED PCIe PHY binding and driver for AST2600 and AST2700 > SoCs. The PHY provides the physical layer used by the PCIe controller > when it is configured to run in root complex mode. > > The driver registers an ASPEED PCIe PHY provider through the generic PHY > framework and programs the SoC-specific PEHR registers from set_mode(). > For AST2600 this selects the root complex port type. For AST2700 this > also configures the posted/completion credit values, local scaling, > device type, internal reset selection, and downstream port setting > needed by the controller. > > This series also adds the devicetree binding for the PHY provider and a > MAINTAINERS entry for the ASPEED PCIe PHY driver. > > Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com> > --- > Jacky Chou (3): > dt-bindings: phy: aspeed: Add ASPEED PCIe PHY > phy: aspeed: Add ASPEED PCIe PHY driver > MAINTAINERS: Add ASPEED PCIe PHY driver And changelog plus versioning are completely missing. People sometimes wonder why maintainers are grumpy. Easy answer: you do not respect their time. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2026-10-09 10:33 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-10-08 11:28 [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support Jacky Chou 2026-10-08 11:28 ` [PATCH 1/3] dt-bindings: phy: aspeed: Add ASPEED PCIe PHY Jacky Chou 2026-10-09 10:31 ` Krzysztof Kozlowski 2026-10-08 11:28 ` [PATCH 2/3] phy: aspeed: Add ASPEED PCIe PHY driver Jacky Chou 2026-10-08 21:40 ` kernel test robot 2026-10-09 6:52 ` kernel test robot 2026-10-09 10:33 ` Krzysztof Kozlowski 2026-10-08 11:28 ` [PATCH 3/3] MAINTAINERS: " Jacky Chou 2026-10-09 10:32 ` [PATCH 0/3] phy: aspeed: Add ASPEED PCIe PHY support Krzysztof Kozlowski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox