From nobody Wed Apr 8 03:06:10 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA66C3D47D9 for ; Tue, 10 Mar 2026 17:38:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773164337; cv=none; b=HLvf/8JpLSVYhTwYlYtxxQUTmRKmo3sH1K7GNFBMjIMa+EhwLhc0GXF9MZZdD1tdv5rinYJnfoAkMVFgnrXWIwjLETXkr7JgNqXlPDQYql/TBaKkBWCK0LSU/Iu7tJ3pNF17+Bafs/gnz/VZUiLfM0Qka7bfxBuqRCwbI+zCOHo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773164337; c=relaxed/simple; bh=i6Ts41fXLRb5swardCZUkTCJ3f2AD6uWbw7o0btGsW8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K/XAf01t5GgM/+rVMs5cPqYYlM/OT+ywdcC8JjPWuIOhXJ8FHttYMLWFoH/ZUoeZ+5YwYZbNQ05IxngVsRqDXhkTLkUPhonCaBq9yMmCYNtSdkqZ/MITIJCQsEPNFbz8/8Glh17bFVvkhH+MJD+r2kF6gO/L988jcWvpr3VCbwg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=REPaTk+6; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="REPaTk+6" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-48535a0ef86so23851655e9.1 for ; Tue, 10 Mar 2026 10:38:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773164334; x=1773769134; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=98rPC4PTu7tCmBtkzzBMDz6PWd5qa76zGSirl2GTGes=; b=REPaTk+6KZ3HNkdiYzZUhFgPaX+ALaMPnt+fdvHYLY/ZInCXAOoMFXxZNTEj0t6O+1 WlBRWVvpLwYxwy7+UCqkDHp394iZOK1GPA0UVNVF1Vqi5SlJJIQXg+wHzihgNZwlb36Q kEa6s0Uu5r/HPJGPK2GOecmys3CS/tlUNtQuBMTmDVLkR+3P+P+TkKGCCkfJhjiXa0PR Ft7Iy7X+P6AWy9U2c2BySHhc7Ny1melQ/+hLfk3WMtgfhVSUApwTBjM7gE90ORZ38mGA RZaB6DCt5PWBdAXM8TRjPGCLx/pH1mWDhmdHAwhBIjd1VI5cTX9G+slqoKtd9O2z5gDM 8TPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773164334; x=1773769134; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=98rPC4PTu7tCmBtkzzBMDz6PWd5qa76zGSirl2GTGes=; b=nip/D05GOjBI8pajT0G+pZzIvbBWHz2MqJHdOr6SQZMtLGxX4omuOjPVyWqmjkefvW 9JOcs0K9lKU+/wS7QWguSMT0XVB3Dy7AxNiM5NsO3IdBfr4N3Qv1VySHyIKAEgUjVRXc aHB5PK/i71ddQYnzIt4o8xi0/OpPwG8Q9XIvlkC053Fp3qpCcF3ERPzy3EKcbRiJ17gq 4gjO1KtMOjEmz2gQnFgD45jaJT7QFe98W4QvJf9M0ztNa9nNZVqno3H3l0vh2vWR6TEx 68HdrL/hU2sPLpNd5Q8FwcWFbtfYcBDLAbX3XLIqlZJlhhAe1wxaTb92hUoB+QTHTaZg feAA== X-Forwarded-Encrypted: i=1; AJvYcCWo1EIP7Sp+KQr2y0BBumC6zfJGbzEyPW1xwJcJ2UO76JRxosGyDFYYsQEjUslM59/eez1bGjDtzUsSToA=@vger.kernel.org X-Gm-Message-State: AOJu0YyTyDb0X/gaJJSzY+bnkkauoe0hm1Nh9JmMUUY6c2V5SFX635SP 6J24BRu3GWW2SnZ1AVs4G9GWoN2EnBCLoLxeJAAzZG8Pb9H7UlfN+wGc X-Gm-Gg: ATEYQzzKgi7Aa1TxWEWPalUEPq2tQPCgGK8QLFpWCXuTtfzjR/aDYA9MN9GkBM/Y8yk ipbBfJim/9TFdikLFe2U8dJoGbWu3Mbq4TWXY7FrsWBZ1bkVR9nDXF7xFr4Wi4af6RDCZq0Tw4S y1+RkGo+Uxje2ixUHXF+1VUNeofnThk/tSHpN8qA0Ys2NV84riW0bhK079/ytlLYN1wL4EnzTsB 8U9TXAU0jLkxBxP9wxqrO19S4pPrL5GcDRkrVqZwMBa9pXg8lDpTGFQW5ZxYisCGwyJnTDANTd8 eRJLLPdg6E+RCbaNUvEPN05ifMG5Nlpe7LJMqpjhRbGg2HuOq7T3D7Dd1lvy4DR1d/yJ2O+PYMm KStKUoaubl9i4GEsm8RukNEetsLRlJZYRN8KgahVAzf/zIqEsK8gQ3di3YsXrRm2TNvHvpIFZ3R X2k0EC+bKvX0774T7sCcNlh5g= X-Received: by 2002:a05:600c:c173:b0:485:3812:36dc with SMTP id 5b1f17b1804b1-485381238b3mr164800125e9.9.1773164333895; Tue, 10 Mar 2026 10:38:53 -0700 (PDT) Received: from nas.local ([2001:912:1ac0:1e00:c662:37ff:fe09:93df]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48541a900easm103239295e9.9.2026.03.10.10.38.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 10:38:53 -0700 (PDT) From: Damien Dejean To: andrew@lunn.ch, krzk+dt@kernel.org, robh@kernel.org, kuba@kernel.org, maxime.chevallier@bootlin.com, pabeni@redhat.com Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, edumazet@google.com, davem@davemloft.net, hkallweit1@gmail.com, Damien Dejean Subject: [PATCH net-next v7 1/4] dt-bindings: net: ethernet-phy: add property enet-phy-pair-order Date: Tue, 10 Mar 2026 18:38:43 +0100 Message-ID: <20260310173846.230923-2-dam.dejean@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260310173846.230923-1-dam.dejean@gmail.com> References: <20260310173846.230923-1-dam.dejean@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add property enet-phy-pair-order to the device tree bindings to define the pair order of the PHY. To simplify PCB design some manufacturers allow to wire the pairs in a reverse order, and change the order in software. The property can be set to 0 to force the normal pair order (ABCD), or 1 to force the reverse pair order (DCBA). Signed-off-by: Damien Dejean Reviewed-by: Rob Herring (Arm) --- Documentation/devicetree/bindings/net/ethernet-phy.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/net/ethernet-phy.yaml b/Docu= mentation/devicetree/bindings/net/ethernet-phy.yaml index 58634fee9fc4..4a27547f7d7a 100644 --- a/Documentation/devicetree/bindings/net/ethernet-phy.yaml +++ b/Documentation/devicetree/bindings/net/ethernet-phy.yaml @@ -126,6 +126,12 @@ properties: e.g. wrong bootstrap configuration caused by issues in PCB layout design. =20 + enet-phy-pair-order: + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1] + description: + For normal (0) or reverse (1) order of the pairs (ABCD -> DCBA). + eee-broken-100tx: $ref: /schemas/types.yaml#/definitions/flag description: --=20 2.47.3 From nobody Wed Apr 8 03:06:10 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BF6A3D5255 for ; Tue, 10 Mar 2026 17:38:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773164339; cv=none; b=LuGr/SKyqZMvsTyS6v5DQWLz1n/D4C4ULGkTA1i0PlNaMga8HnzUE1y6DWFCy8Hq8cR9hr4IAaTGrI+mTGoTMPD2Y9Lr5GlI/eYcsUXODQ6mORMrUoWckkkzq9NIZrC6heAgVKL2SwcEnkbmbzkKlq6KF+hh0GFmtLAwV1QZqt4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773164339; c=relaxed/simple; bh=S9MVxUdttG8o05atQZl0YpqlKZSWRqYDbcQVO9DdmqI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NtxgVAGINiopJmmgwnbwCxQur2PEW2ORr9/xobiJMXfFK570HVngBqMIjD/lEtZdzE/3DdwpbVJk3j3tP/figbOVQCiaRIdn859eFasNTe8b79pyloxRnvSDNnz/GZU00zJKG6gq+mzOyG5ly2dKORpBSXPgqkUdfHxDH5byjrk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ewLvNoc0; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ewLvNoc0" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-485392de558so15210155e9.1 for ; Tue, 10 Mar 2026 10:38:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773164336; x=1773769136; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=oS709NAGhf0disYguyiNmVG2M10QAbrxgrjPR1Vq2C0=; b=ewLvNoc0BThiNen9C9AyQgb1gg5Om0ZAeF3VMLDfV0aRqXZMguH83n2MW3AG0RFZLX jOnVERQ03zRqPkFEMLYrPK9at5BUQdrzREQ7s+RBlSgLIASXF5qXib6xpNHxMG9EV0vp 1GMQ+Pr1cqO+/+rRCHPVfSzzO0hXa9H8Yh2xhV8iHSUVB953jqGVqdmacmarGAxY2GEa BFalMKDzazmzF29Fp6KGFnaRxirBc9IN5Qe5ecIETNcCawbKbqIwzgBEa9K7Vls9tYfi fD4xzgCFKW2qObmZwHPY8Rk7JT4mKEYx/qPGigJCR3zY3uD3WCCgtfio3L54KySq4OPg 1Ybg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773164336; x=1773769136; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=oS709NAGhf0disYguyiNmVG2M10QAbrxgrjPR1Vq2C0=; b=NDNDquvbs1NYOGx4saHC/JZ6fpPMBsTTIefRvzAJk4OBW68RJdfb5gAy25Xb6Iv/4d jH7KpViosAAoR3UWD9KoxSqi+aZfH/7TaIa0Yhz2+9GItDEnGAY+myFSpKJrMIFY+JrI uw5V1d1LANm/VwHmwVemeLkVB0kIWiVX8z7wGpmjb7BbxH9XwZo/vaV41b4Ndvorbyqh Uj+9vKr+kMwotqIDcVYlDMmWHNWIXXRTX694WIeinrvP6Q0UW7y5iIOxMXTUhiWnUiME 2/QaQo1DW7oD300d9FVQdp4/AMJv9J7LQ/IRoNL0IFL7y3lAlx1wE573FEczwB/vjvp5 c8Iw== X-Forwarded-Encrypted: i=1; AJvYcCWt842A1oficRfCSN1Z5bIrtOcYZD0iZEzWwdtP2Kg0vmAKw5/6/dTtC0ySmUyReAIMGY9Wxn6KvtMHhdI=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0dYVGOmUP6j8YZPn26j74L5Deal2q09iNE0diBFSiDrGyb/dp vhbFWARVQYRwsUTEOcfOReWoaONO09MZ1B9QvX8ScNEshXJDRU+OsYr6 X-Gm-Gg: ATEYQzx70b4fhu9u5cWspjGk3QzYHnM1ZqyS4UC5ncknR6XoiDWY55OMxG7TrxvAQ6M aUoLDGWV5TTZTGfSJlSjjwpPO8qAWrZnJlyupSAIXz1Hclrl/1irzJZXwBerd60tY8cfkT7dK6u pbzBOalk/RAsdSRYxly/EosUpuhd8YbUkaFqeWlzY8PrJkmEN8ZdsuwQwPS6/TXXEVzWIbdKdWS MPpAci3Bn7K1vtOneqxrwJrLguyHTM/0tYHAuIP3E9SqT6c586+oKdCi/eDwgmtgIx/+1dYl6t8 WaAoDz8RfmtRAipo+YBGfdB/Q9u1dDxHESGXHVyiHPbz0ExSNaF6dF0NUF32izrMOcNGWdCDKc3 7Doqf1Ze/Cs0lukIfVEYCl6WXsCQdVVMhq33B++LH/CU2dFHbDFzuug0a40fvvhDsUtQvWxNkrs GS1FqK88+/Wl5XSxmysaUlMdo= X-Received: by 2002:a05:600c:46cc:b0:485:41c4:e2e4 with SMTP id 5b1f17b1804b1-48541c4e46fmr71576715e9.23.1773164336195; Tue, 10 Mar 2026 10:38:56 -0700 (PDT) Received: from nas.local ([2001:912:1ac0:1e00:c662:37ff:fe09:93df]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48541a900easm103239295e9.9.2026.03.10.10.38.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 10:38:55 -0700 (PDT) From: Damien Dejean To: andrew@lunn.ch, krzk+dt@kernel.org, robh@kernel.org, kuba@kernel.org, maxime.chevallier@bootlin.com, pabeni@redhat.com Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, edumazet@google.com, davem@davemloft.net, hkallweit1@gmail.com, Damien Dejean Subject: [PATCH net-next v7 2/4] net: phy: realtek: add RTL8224 pair order support Date: Tue, 10 Mar 2026 18:38:44 +0100 Message-ID: <20260310173846.230923-3-dam.dejean@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260310173846.230923-1-dam.dejean@gmail.com> References: <20260310173846.230923-1-dam.dejean@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The RTL8224 has a register to configure a pair swap (from ABCD order to DCBA) providing PCB designers more flexbility when wiring the chip. The swap parameter has to be set correctly for each of the 4 ports before the chip can detect a link. After a reset, this register is (unfortunately) left in a random state, thus it has to be initialized. On most of the devices the bootloader does it once for all and we can rely on the value set, on some other it is not and the kernel has to do it. The MDI pair swap can be set in the device tree using the property enet-phy-pair-order. The property is set to 0 to keep the default order (ABCD), or 1 to reverse the pairs (DCBA). Signed-off-by: Damien Dejean --- drivers/net/phy/realtek/Kconfig | 1 + drivers/net/phy/realtek/realtek_main.c | 55 ++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/drivers/net/phy/realtek/Kconfig b/drivers/net/phy/realtek/Kcon= fig index b05c2a1e9024..a741b34d193e 100644 --- a/drivers/net/phy/realtek/Kconfig +++ b/drivers/net/phy/realtek/Kconfig @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config REALTEK_PHY tristate "Realtek PHYs" + select PHY_PACKAGE help Currently supports RTL821x/RTL822x and fast ethernet PHYs =20 diff --git a/drivers/net/phy/realtek/realtek_main.c b/drivers/net/phy/realt= ek/realtek_main.c index 530b4e26d16e..ee3f7318e933 100644 --- a/drivers/net/phy/realtek/realtek_main.c +++ b/drivers/net/phy/realtek/realtek_main.c @@ -171,6 +171,8 @@ =20 #define RTL8224_SRAM_RTCT_LEN(pair) (0x8028 + (pair) * 4) =20 +#define RTL8224_VND1_MDI_PAIR_SWAP 0xa90 + #define RTL8366RB_POWER_SAVE 0x15 #define RTL8366RB_POWER_SAVE_ON BIT(12) =20 @@ -1820,6 +1822,57 @@ static int rtl8224_cable_test_get_status(struct phy_= device *phydev, bool *finish return rtl8224_cable_test_report(phydev, finished); } =20 +static int rtl8224_mdi_config_order(struct phy_device *phydev) +{ + struct device_node *np =3D phydev->mdio.dev.of_node; + u8 port_offset =3D phydev->mdio.addr & 3; + u32 order =3D 0; + int ret, val; + + ret =3D of_property_read_u32(np, "enet-phy-pair-order", &order); + + /* Do nothing in case the property is not present */ + if (ret =3D=3D -EINVAL) + return 0; + + if (ret) + return ret; + + if (order & ~1) + return -EINVAL; + + phy_lock_mdio_bus(phydev); + val =3D __phy_package_read_mmd(phydev, 0, MDIO_MMD_VEND1, + RTL8224_VND1_MDI_PAIR_SWAP); + if (val < 0) { + ret =3D val; + goto exit; + } + + if (order) + val |=3D (1 << port_offset); + else + val &=3D ~(1 << port_offset); + + ret =3D __phy_package_write_mmd(phydev, 0, MDIO_MMD_VEND1, + RTL8224_VND1_MDI_PAIR_SWAP, val); +exit: + phy_unlock_mdio_bus(phydev); + return ret; +} + +static int rtl8224_config_init(struct phy_device *phydev) +{ + return rtl8224_mdi_config_order(phydev); +} + +static int rtl8224_probe(struct phy_device *phydev) +{ + /* Chip exposes 4 ports, join all of them in the same package */ + return devm_phy_package_join(&phydev->mdio.dev, phydev, + phydev->mdio.addr & ~3, 0); +} + static bool rtlgen_supports_2_5gbps(struct phy_device *phydev) { int val; @@ -2395,6 +2448,8 @@ static struct phy_driver realtek_drvs[] =3D { PHY_ID_MATCH_EXACT(0x001ccad0), .name =3D "RTL8224 2.5Gbps PHY", .flags =3D PHY_POLL_CABLE_TEST, + .probe =3D rtl8224_probe, + .config_init =3D rtl8224_config_init, .get_features =3D rtl822x_c45_get_features, .config_aneg =3D rtl822x_c45_config_aneg, .read_status =3D rtl822x_c45_read_status, --=20 2.47.3 From nobody Wed Apr 8 03:06:10 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F1AC43D8124 for ; Tue, 10 Mar 2026 17:39:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773164344; cv=none; b=H5mHuEuwZEA8Cjt1RR55DQA5c8Ed4NeNtafXo2nBbEpmqLPtQaohcAU9cuF3bCpRZWQMsaHe8S6Po0bKkeIxhG6MmUN0NaXxz9RDC0qVR2xyUMQWew8fEyevy2kbldS8GhZd6DZYo21JnOUrE+0Quga++eT6fqUfpHCZgNfEIvE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773164344; c=relaxed/simple; bh=NcV7Y8rF5EsCyaO+fQzMv4yYadXViOfLjUAI/+Np8mI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UZL837Yv5yor/IvqwE30AYBlCHunK/2S1F0q2Xg8e+Zzp6H368AE0KGzKEMFj3AyvE+AGoFbyfpxIkLB55dm2j5J+FVkbzrDHA5sx1EHgaEzua7kmZoPVwO6IlIWZ0Oj/c+zTuUxIEOP5OFHvQj8Ide1vsAW1lG9d16NNq6dIi0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZHpJfLss; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZHpJfLss" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-4852e09e23dso30510655e9.0 for ; Tue, 10 Mar 2026 10:39:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773164337; x=1773769137; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IkgvDwmYQtcd0bE08ner2utHU4QPqUbSnWFPd8ItaAU=; b=ZHpJfLssOcx54qleUpFRLOCOW6xKz19axoeVGTVB4szZliRL2kp7jQssLX8xRcNoKW Pd3j65bLkW8KgeivZc/OGW2rXppb/4dJqqhl0vTPuIr6qU4z2wzCyBrB6PniQfu0Tm6W SB78ywyuiDQ6Qyl7KOmrOilLzLzO7+6LI8aRlZu8QcGs4IePVZF6v2r3+BRUSoHcnAvw lZthRf4kLlhf4qYxOrdGv+yod1icD0wi8uwKGG7Nod0YLJa+H0Mxe/lFP8QOPAXp94So aUe4qpCUZi+NybWRDgs7WdmvbKRyQvVMTrRsEc7O14kmX53Wpfcfpl4oCvsL2RTkhNw6 dsFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773164337; x=1773769137; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=IkgvDwmYQtcd0bE08ner2utHU4QPqUbSnWFPd8ItaAU=; b=L5e10JNUT1GueT8tKkq+VJI8AOTzTGioj29zgyyk10yc4XFaCrCj+MrFXDAz71vHX5 KIqI+nVyvICfsTAWHmDclXZegUTMWcvpI//Y613GmuouohKK2PqmAIU2o69NLNOm2+UP ys8eANjM4vKANUQdwUwu0Y6srGEfGSr9qDpi4ONk67t5+W83gH/lP4BEXbma1+8AbQoc IqM9wH+yohF/6yxH6OxGpjsnIaip40WcvY4KtlViq4AJ9Wb+yZn/5wmsU1n8UK2YSaNn Qcn7X7dmhtrQZW3xXeqGoncNK5dEd1qNdZtSHCtof/fNmSHptxLOPxJSxU09KNITyXDw 2b/g== X-Forwarded-Encrypted: i=1; AJvYcCXcurxE1pVYAFL6370+MTwe4cRa/vhgC4VrxHTOOjGANu7fFLhP0F5ePO7bvypThE2sailaFMWIzH7UOTw=@vger.kernel.org X-Gm-Message-State: AOJu0YxkMYzDDQOBPWORCp/Q7bZO9M6aiRfF8CO6zk0ck7zAPOoVHvQc cb/lVCMPrmdCvk7ONKjffC5YdxVB/Q4Oq6ghgTt5nOk2fX1FULFWIx9k X-Gm-Gg: ATEYQzzrrUuh+LKrKf/y53mRtBaE/Kp6TE92FIuhaz2XqJO67ibmBBorot7kzvYGifl GWJ3J9GlI539P2wz7nAIoVELxU0U4FCiHoYO3jPOk7xYFap5r0Sn4VqIAPp/iiHFwymy4SCqwjR 1z9O9+36p4vWuvTnLxCq4PBevTIF3zuuql7+d8f9QSXHaL4mbcto7+mw3b/4E84ZlkNAHArVgb4 Py8Goz9uSy4/jP4786QQNgGADnmO6dLeHcYIcMWOvf5l9CTL/nAV+8KfvizM1Y5iKAZ5T6XNCZP 6cTDIGI35lw3Q4fVzoWk+tWVhlPSs9jyHnIw12Q/2vciBUROTPbIqqwpMwN5c7ymgW2O8zYqAQj WsXo7sRevAt9ykkNvbARUJJ466A/o1cyXnnUr/8iS6Vu47L5kOygrk0B1SIjmubRm9wneugvD9r vrXHy6Vl5LgY7n4aJk0L/zyl8= X-Received: by 2002:a05:600d:108:10b0:485:4552:8fbb with SMTP id 5b1f17b1804b1-4854552922dmr35522675e9.22.1773164337294; Tue, 10 Mar 2026 10:38:57 -0700 (PDT) Received: from nas.local ([2001:912:1ac0:1e00:c662:37ff:fe09:93df]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48541a900easm103239295e9.9.2026.03.10.10.38.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 10:38:56 -0700 (PDT) From: Damien Dejean To: andrew@lunn.ch, krzk+dt@kernel.org, robh@kernel.org, kuba@kernel.org, maxime.chevallier@bootlin.com, pabeni@redhat.com Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, edumazet@google.com, davem@davemloft.net, hkallweit1@gmail.com, Damien Dejean Subject: [PATCH net-next v7 3/4] dt-bindings: net: ethernet-phy: add property enet-phy-pair-polarity Date: Tue, 10 Mar 2026 18:38:45 +0100 Message-ID: <20260310173846.230923-4-dam.dejean@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260310173846.230923-1-dam.dejean@gmail.com> References: <20260310173846.230923-1-dam.dejean@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add the property enet-phy-pair-polarity to describe the polarity of the PHY pairs. To ease PCB designs some manufacturers allow to wire the pairs with a reverse polarity and provide a way to configure it. The property 'enet-phy-pair-polarity' sets the polarity of each pair. Bit 0 to 3 configure the polarity or pairs A to D, if set to 1 the polarity is reversed for this pair. Signed-off-by: Damien Dejean Reviewed-by: Rob Herring (Arm) --- Documentation/devicetree/bindings/net/ethernet-phy.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/devicetree/bindings/net/ethernet-phy.yaml b/Docu= mentation/devicetree/bindings/net/ethernet-phy.yaml index 4a27547f7d7a..21a1a63506f0 100644 --- a/Documentation/devicetree/bindings/net/ethernet-phy.yaml +++ b/Documentation/devicetree/bindings/net/ethernet-phy.yaml @@ -132,6 +132,14 @@ properties: description: For normal (0) or reverse (1) order of the pairs (ABCD -> DCBA). =20 + enet-phy-pair-polarity: + $ref: /schemas/types.yaml#/definitions/uint32 + maximum: 0xf + description: + A bitmap to describe pair polarity swap. Bit 0 to swap polarity of p= air A, + bit 1 to swap polarity of pair B, bit 2 to swap polarity of pair C a= nd bit + 3 to swap polarity of pair D. + eee-broken-100tx: $ref: /schemas/types.yaml#/definitions/flag description: --=20 2.47.3 From nobody Wed Apr 8 03:06:10 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F16ED3D47C3 for ; Tue, 10 Mar 2026 17:38:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773164345; cv=none; b=G5RK353gp5Y+iZnqNgKCtHZeVlFDJanDJhY+JVkXik5azIaDKLcdV9zBdgTWMZYMIISpzXR/zlPy+7Nw6rTqSKuk9TemejGhC+tyXAbqcrwfy5eFPuQLhqHtipBqnf+ArCW2SfWrDA5o/tnvcs/yRZ8lzlFLYAoGnf91GKleGDo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773164345; c=relaxed/simple; bh=6nh8hser+whvA1PfR1iGtoLj1pfTFR51/unCHyuL39U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X2lMziZdeSmwo0JSYug2/5699t1TAcxKl4j5vSXsPpCEof0pKAwCN+WzoMPFFs/aEjKWiHP1ZngDiLn7dLExVCzZaIpZNRlGLeQ2OONoVaKDQNyOZcxZjVdfvvZntz/aSYWETlqNnuruTd22pD8/a8T7oiZeqnhWvTNToETq25M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jJphveOm; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jJphveOm" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4852ff06541so34595465e9.2 for ; Tue, 10 Mar 2026 10:38:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773164338; x=1773769138; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=K5kecdfbWVFCpvWANmeDGj+7c6bf15MwYHY69kbw3bw=; b=jJphveOmcZXg3YcEj4YNym7kkl38U68mgse3zolN6zCvkmgjDD4elBa2DJqQP2P3uO xZ3EKSrHNiYZ7HAAxwwnFLpK7U82WCJ4SEHyzmzeNEJmTKO3Z5O6FPBET8tA7C5AAkp3 ZZJPcQgjaAL0gHgZoHx94fss9jCzHRFvb7umouqiZje78H1vh5B4qQvfgRXEJ4kkWBOJ rlTracDFR+WK5SugtrFUaWuPKUDMf+yGUFeIQ2EFmjD52+JpgxLu5zwa2Fve6T2QPJYM zIImulIvla0noQvAWD01mCAKDLu5CVWvkGRcRFvhJfuag2GHP7PmmrTUE6Wuj9yi8aYL DnBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773164338; x=1773769138; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=K5kecdfbWVFCpvWANmeDGj+7c6bf15MwYHY69kbw3bw=; b=BUoMAUzQ55+QNwP+RarFU9yjdvBwUKBWRNk1+KR02LjJ5kDx3A+TMCWYcj+q7EGDhF zpBJPOtTP86CWxAhLr1s3GYD1jf+2tBgSj87l78LDVhc4sEtwQdiD9O12OwoJZwwOKbB oTWw5g/cHBQMgh44t3cStCotyqBzH7GpadoY5Y/TJbFsIwQuq7d2lkb42VV2b1vDul+5 c5zYo4jdqKraoA6FyhS2WLDu/g/h/JfRDzya7PXyjcO+bF4JlvORf3SDJlfaU+SYO0jN HVW1C1sAUIGLYnZfCyZX/t5YmTiqtgimBikQHzL4TXJ42BkKEfgPle2dcvSLOkSqsZnN vmXQ== X-Forwarded-Encrypted: i=1; AJvYcCVtKVD7XvtdyTryBSKwoNtauNF+iH5EsqfJOjx9pXC2qQGykXR2N67hTjOIFJKVE/oaFsRQ5/1mSvi4Mp0=@vger.kernel.org X-Gm-Message-State: AOJu0Yytz5kAYLICcHtoO0gBfkM/9si1uc11ybuM7xnqJ9zxJnZhS7fT lRRbIv8WizV/FxZkYRL9xu26di0gfiiLOxN8VK1L3sA+NPQBV8rBzeMo X-Gm-Gg: ATEYQzwF6OkznAzHdfZt1F8qccho6HwojedWKyg46gOGF4sCdYn1bmTcF5DNgpXxax8 vjtabFLRrBrZTB+FoPI1MzExImLEPCO+aZuF1BIyId1Pg5W86XnQlIqYGckUIpUgXkdwNesqyzg YV1gBUToCf8ynG8ydjvsN/YnHOAt/QWmelXpCLknbbJZ3AsL6S9LaP/s9kdJFTOmD4brMTGHQtO PLtu5e8eHj86cuimJYZs1UN1A7XNfEgtuwf1kKfVvqIwS9w6T6hasAy9nHwsl27AvRx32rXDqnN gSsIziJ5KiyPtYkQvNtnieXG/1Kb2O/Mw66ZtvwA9vdScc3RwgceW06lVB+r7j0jkAJ26FR6faR 9/Pd3qIChUvD+9J/Rxdg5VhseqbOI25U/zJNHo1s0RBh9svvry8nSamvsFgrj769z2ng5TVER8F UILbTaVX5nzAsre9SiTlCYgdg= X-Received: by 2002:a05:600c:1e2a:b0:47e:e57d:404 with SMTP id 5b1f17b1804b1-485269582efmr255465235e9.16.1773164338375; Tue, 10 Mar 2026 10:38:58 -0700 (PDT) Received: from nas.local ([2001:912:1ac0:1e00:c662:37ff:fe09:93df]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48541a900easm103239295e9.9.2026.03.10.10.38.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 10:38:58 -0700 (PDT) From: Damien Dejean To: andrew@lunn.ch, krzk+dt@kernel.org, robh@kernel.org, kuba@kernel.org, maxime.chevallier@bootlin.com, pabeni@redhat.com Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, edumazet@google.com, davem@davemloft.net, hkallweit1@gmail.com, Damien Dejean Subject: [PATCH net-next v7 4/4] net: phy: realtek: add RTL8224 polarity support Date: Tue, 10 Mar 2026 18:38:46 +0100 Message-ID: <20260310173846.230923-5-dam.dejean@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260310173846.230923-1-dam.dejean@gmail.com> References: <20260310173846.230923-1-dam.dejean@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The RTL8224 has a register to configure the polarity of every pair of each port. It provides device designers more flexbility when wiring the chip. Unfortunately, the register is left in an unknown state after a reset. Thus on devices where the bootloader don't initialize it, the driver has to do it to detect and use a link. The MDI polarity swap can be set in the device tree using the property enet-phy-pair-polarity. The u32 value is a bitfield where bit[0..3] control the polarity of pairs A..D. Signed-off-by: Damien Dejean --- drivers/net/phy/realtek/realtek_main.c | 77 ++++++++++++++++++++------ 1 file changed, 59 insertions(+), 18 deletions(-) diff --git a/drivers/net/phy/realtek/realtek_main.c b/drivers/net/phy/realt= ek/realtek_main.c index ee3f7318e933..a3691f9c19a5 100644 --- a/drivers/net/phy/realtek/realtek_main.c +++ b/drivers/net/phy/realtek/realtek_main.c @@ -172,6 +172,7 @@ #define RTL8224_SRAM_RTCT_LEN(pair) (0x8028 + (pair) * 4) =20 #define RTL8224_VND1_MDI_PAIR_SWAP 0xa90 +#define RTL8224_VND1_MDI_POLARITY_SWAP 0xa94 =20 #define RTL8366RB_POWER_SAVE 0x15 #define RTL8366RB_POWER_SAVE_ON BIT(12) @@ -1822,12 +1823,35 @@ static int rtl8224_cable_test_get_status(struct phy= _device *phydev, bool *finish return rtl8224_cable_test_report(phydev, finished); } =20 +static int rtl8224_package_modify_mmd(struct phy_device *phydev, int devad, + u32 regnum, u16 mask, u16 set) +{ + int val, ret; + + phy_lock_mdio_bus(phydev); + + val =3D __phy_package_read_mmd(phydev, 0, devad, regnum); + if (val < 0) { + ret =3D val; + goto exit; + } + + val &=3D ~mask; + val |=3D set; + + ret =3D __phy_package_write_mmd(phydev, 0, devad, regnum, val); + +exit: + phy_unlock_mdio_bus(phydev); + return ret; +} + static int rtl8224_mdi_config_order(struct phy_device *phydev) { struct device_node *np =3D phydev->mdio.dev.of_node; u8 port_offset =3D phydev->mdio.addr & 3; u32 order =3D 0; - int ret, val; + int ret; =20 ret =3D of_property_read_u32(np, "enet-phy-pair-order", &order); =20 @@ -1841,29 +1865,46 @@ static int rtl8224_mdi_config_order(struct phy_devi= ce *phydev) if (order & ~1) return -EINVAL; =20 - phy_lock_mdio_bus(phydev); - val =3D __phy_package_read_mmd(phydev, 0, MDIO_MMD_VEND1, - RTL8224_VND1_MDI_PAIR_SWAP); - if (val < 0) { - ret =3D val; - goto exit; - } + return rtl8224_package_modify_mmd(phydev, MDIO_MMD_VEND1, + RTL8224_VND1_MDI_PAIR_SWAP, + BIT(port_offset), + order ? BIT(port_offset) : 0); +} =20 - if (order) - val |=3D (1 << port_offset); - else - val &=3D ~(1 << port_offset); +static int rtl8224_mdi_config_polarity(struct phy_device *phydev) +{ + struct device_node *np =3D phydev->mdio.dev.of_node; + u8 offset =3D (phydev->mdio.addr & 3) * 4; + u32 polarity =3D 0; + int ret; =20 - ret =3D __phy_package_write_mmd(phydev, 0, MDIO_MMD_VEND1, - RTL8224_VND1_MDI_PAIR_SWAP, val); -exit: - phy_unlock_mdio_bus(phydev); - return ret; + ret =3D of_property_read_u32(np, "enet-phy-pair-polarity", &polarity); + + /* Do nothing if the property is not present */ + if (ret =3D=3D -EINVAL) + return 0; + + if (ret) + return ret; + + if (polarity & ~0xf) + return -EINVAL; + + return rtl8224_package_modify_mmd(phydev, MDIO_MMD_VEND1, + RTL8224_VND1_MDI_POLARITY_SWAP, + 0xf << offset, + polarity << offset); } =20 static int rtl8224_config_init(struct phy_device *phydev) { - return rtl8224_mdi_config_order(phydev); + int ret; + + ret =3D rtl8224_mdi_config_order(phydev); + if (ret) + return ret; + + return rtl8224_mdi_config_polarity(phydev); } =20 static int rtl8224_probe(struct phy_device *phydev) --=20 2.47.3