[PATCH net-next v3 0/4] net: phy: add X-Powers AC200/AC300 EPHY support
James Hilliard <[email protected]> Wed, 05 Aug 2026 19:24:17 -0600
| Newsgroups | dev.linux.lists.mfd,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
The AC200 and AC300 contain compatible Fast Ethernet link PHYs which report the same Clause 22 identifier and use the same link-side register layout. The link endpoint is inaccessible until package-specific control registers have powered and configured it. Version 2 represented those control ranges as separate devices. Following review, this revision instead models each variant as a standard Ethernet PHY package with one forced-ID link-PHY child. The package reg value is the link address. AC300's control range is a fixed package-relative offset of 16 and is accessed with the PHY package helpers; it has no separate DT node or MDIO driver. AC200 references its I2C MFD because the corresponding control registers reside in that multi-function device. Fixed hardware uses an AC200- or AC300-specific package compatible. Systems which can contain either package use the ACx00 package compatible and one packed SID configuration field. Bits 3 through 0 carry the analog calibration, bit 8 selects AC300, and bit 9 selects its low-calibration tuning. The driver chooses the backend before acquiring any backend-specific resource, so an AC300 system does not instantiate or access the AC200 I2C device. One xpowers-acx00 PHY module binds the link child, joins the parent package and runs the selected AC200 or AC300 backend. Only the link PHY registers a driver. The backend source files are linked into the same module and merely keep the I2C and MDIO implementations separate. Thus the PHY driver owns the complete Ethernet PHY while the AC200 MFD continues to own the shared mixed-signal chip and its regmap. The series contains no generic MDIO reconfiguration. It has no hard CONFIG_OF_DYNAMIC dependency: fixed descriptions work when their provider path is already enabled. When CONFIG_OF_DYNAMIC is available, the AC200 backend can activate an explicitly marked fail-needs-probe I2C/MFD path after the packed field selects AC200. The AC300 path leaves that candidate disabled. The common link implementation performs the vendor analog initialization, supports MII and RMII, preserves automatic MDI/MDI-X, and restores package state across suspend and resume. It preserves standard MAC-managed EEE advertisement while disabling only the vendor PHY-autonomous Intelligent EEE mode. The four patches add the minimal AC200 MFD binding and regmap provider, then the AC200/AC300 PHY-package binding and combined PHY driver. Board Device Trees and optional PHY features remain outside this initial series. The AC200 portions build on earlier work by Jernej Skrabec and Andre Przywara: https://github.com/jernejsk/linux-1/commits/ac200-v4 Public AC200 and AC300 documentation is linked from: https://linux-sunxi.org/AC200 Validation completed for this revision: - arm64 defconfig vmlinux and module builds with W=1; - x86_64 allmodconfig object builds with W=1; - a built-in AC300-only configuration with I2C disabled; - dt_binding_check for both new schemas; and - strict checkpatch checks for all new source files. Hardware-tested on an H616 board containing AC300. The generic package driver read the packed SID field as 0x106, selected AC300 without enabling the AC200 I2C path, accessed the control range at package base plus 16, bound the link PHY at address 0, applied RMII mode and negotiated a 100 Mbps full-duplex link. Bidirectional network traffic and cold-boot testing passed. The AC200 backend is build-tested but was not runtime-tested in this revision. Assisted-by: OpenAI Codex (gpt-5.6-sol, max) Signed-off-by: James Hilliard <[email protected]> --- Changes v2 -> v3: - model AC200 and AC300 as standard Ethernet PHY packages - remove the standalone AC200 and AC300 control bindings and drivers - put the common link implementation and both private backends in one xpowers-acx00 module - access the AC300 control range at package base plus 16 with PHY package helpers - access AC200 package registers through its referenced MFD regmap and a managed device link - add an ACx00 package compatible which selects the backend from one packed SID configuration field - combine calibration, package selection and AC300 tuning into that field - optionally activate only a selected fail-needs-probe AC200 path when CONFIG_OF_DYNAMIC is available - preserve standard MAC-managed EEE advertisement and disable only the PHY-autonomous Intelligent EEE mode - reduce the series from eight patches to four - Link to v2: https://patch.msgid.link/[email protected] --- James Hilliard (4): dt-bindings: mfd: x-powers: add AC200 mfd: add X-Powers AC200 support dt-bindings: net: x-powers: add AC200/AC300 EPHY packages net: phy: add X-Powers AC200/AC300 EPHY driver .../devicetree/bindings/mfd/x-powers,ac200.yaml | 69 +++ .../bindings/net/x-powers,acx00-ephy-package.yaml | 208 ++++++++ drivers/mfd/Kconfig | 11 + drivers/mfd/Makefile | 1 + drivers/mfd/ac200.c | 184 +++++++ drivers/net/phy/Kconfig | 11 + drivers/net/phy/Makefile | 3 + drivers/net/phy/xpowers-acx00-ac200.c | 374 ++++++++++++++ drivers/net/phy/xpowers-acx00-ac300.c | 415 ++++++++++++++++ drivers/net/phy/xpowers-acx00-main.c | 536 +++++++++++++++++++++ drivers/net/phy/xpowers-acx00.h | 28 ++ 11 files changed, 1840 insertions(+) --- base-commit: a23b36233d4103def55dc8cf65698106d0bd1e62 change-id: 20260802-submit-acx00-of-dynamic-v1-94a0dc15f282 Best regards, -- James Hilliard <[email protected]>