mirror of
https://github.com/openwrt/openwrt.git
synced 2026-06-17 12:40:16 +04:00
generic: net: phy: realtek: add 5G and 10G PHY support
The functionality/support for 5G and 10G PHYs was extracted from the realtek-phy driver and ported to the upstream Linux realtek PHY driver. These PHY chips need a sequence of register writes (and similar operations) for initialization. These sequences are provided as firmware files which are interpreted/applied by a new register patch engine. By switching to the upstream driver, it should be possible to get rid of a large chunk of (from OpenWrt perspective) unmaintained code from Realtek. The actual Linux phy-core infrastructure from Linux can be mostly used and only the Realtek specific quirks need to be handled. The files which need to be provided are depending on the PHY: * rtl8261n.bin (package "rtl8261n-firmware" or "rtl8261n-lp-firmware") - RTL8251L 5Gbps PHY - RTL8261BE 10Gbps PHY - RTL8261N 10Gbps PHY * rtl8264b.bin (package "rtl8264b-firmware") - RTL8254B 5Gbps PHY - RTL8264 10Gbps PHY - RTL8264B 10Gbps PHY Files which are affected by this change (DEVICE_PACKAGES dependencies, hwmon paths, default kernel configurations, refresh of patches, ...) are updated at the same times. Signed-off-by: Balázs Triszka <info@balika011.hu> Co-authored-by: Semih Baskan <strst.gs@gmail.com> Co-authored-by: Jonas Jelonek <jelonek.jonas@gmail.com> Co-authored-by: Gilly1970 <gilroyscott@hotmail.com> Co-authored-by: Aleksander Jan Bajkowski <olek2@wp.pl> Co-authored-by: Carlo Szelinsky <github@szelinsky.de> [sven: rebase, integrate suggestions from PR, add device packages, split] Signed-off-by: Sven Eckelmann <sven@narfation.org> [daniel: stripped to Linux 6.18 only, dropped unrelated changes] Signed-off-by: Daniel Golle <daniel@makrotopia.org>
This commit is contained in:
committed by
Daniel Golle
parent
a3395c60ba
commit
6369c9e5c7
+1219
File diff suppressed because it is too large
Load Diff
@@ -471,7 +471,6 @@ CONFIG_RPS=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_MT7622=y
|
||||
CONFIG_RTC_I2C_AND_SPI=y
|
||||
CONFIG_RTL8261N_PHY=y
|
||||
# CONFIG_RTL8367S_GSW is not set
|
||||
CONFIG_RWSEM_SPIN_ON_OWNER=y
|
||||
CONFIG_SCHED_MC=y
|
||||
|
||||
@@ -2073,7 +2073,8 @@ TARGET_DEVICES += keenetic_kap-630
|
||||
define Device/keenetic_kn-1812-common
|
||||
DEVICE_DTS_DIR := ../dts
|
||||
DEVICE_PACKAGES := kmod-mt7992-firmware kmod-usb3 \
|
||||
mt7988-2p5g-phy-firmware mt7988-wo-firmware
|
||||
mt7988-2p5g-phy-firmware mt7988-wo-firmware \
|
||||
kmod-phy-realtek rtl8261n-firmware
|
||||
UBINIZE_OPTS := -E 5
|
||||
BLOCKSIZE := 128k
|
||||
PAGESIZE := 2048
|
||||
@@ -3049,7 +3050,8 @@ define Device/tplink_be450
|
||||
DEVICE_DTS := mt7988d-tplink-be450
|
||||
DEVICE_DTS_DIR := ../dts
|
||||
DEVICE_PACKAGES := kmod-mt7992-firmware kmod-usb3 \
|
||||
mt7988-2p5g-phy-firmware mt7988-wo-firmware
|
||||
mt7988-2p5g-phy-firmware mt7988-wo-firmware \
|
||||
kmod-phy-realtek rtl8261n-firmware
|
||||
UBINIZE_OPTS := -E 5
|
||||
BLOCKSIZE := 128k
|
||||
PAGESIZE := 2048
|
||||
|
||||
@@ -17,6 +17,7 @@ define Device/hasivo_s1100w-8xgt-se
|
||||
DEVICE_VENDOR := Hasivo
|
||||
DEVICE_MODEL := S1100W-8XGT-SE
|
||||
IMAGE_SIZE := 12288k
|
||||
DEVICE_PACKAGES := rtl8264b-firmware
|
||||
$(Device/kernel-lzma)
|
||||
endef
|
||||
TARGET_DEVICES += hasivo_s1100w-8xgt-se
|
||||
@@ -126,7 +127,7 @@ define Device/xikestor_sks8300-8t
|
||||
UIMAGE_MAGIC := 0x93000000
|
||||
DEVICE_VENDOR := XikeStor
|
||||
DEVICE_MODEL := SKS8300-8T
|
||||
DEVICE_PACKAGES := kmod-hwmon-lm75
|
||||
DEVICE_PACKAGES := kmod-hwmon-lm75 rtl8261n-firmware
|
||||
IMAGE_SIZE := 20480k
|
||||
$(Device/kernel-lzma)
|
||||
IMAGE/sysupgrade.bin := \
|
||||
@@ -160,6 +161,7 @@ define Device/xikestor_sks8300-12e2t2x
|
||||
UIMAGE_MAGIC := 0x93000000
|
||||
DEVICE_VENDOR := XikeStor
|
||||
DEVICE_MODEL := SKS8300-12E2T2X
|
||||
DEVICE_PACKAGES := rtl8261n-firmware
|
||||
IMAGE_SIZE := 20480k
|
||||
$(Device/kernel-lzma)
|
||||
IMAGE/sysupgrade.bin := \
|
||||
@@ -250,6 +252,7 @@ TARGET_DEVICES += zyxel_xgs1250-12-a1
|
||||
define Device/zyxel_xgs1250-12-b1
|
||||
$(Device/zyxel_xgs1250-12-common)
|
||||
DEVICE_VARIANT := B1
|
||||
DEVICE_PACKAGES += rtl8261n-firmware
|
||||
endef
|
||||
TARGET_DEVICES += zyxel_xgs1250-12-b1
|
||||
|
||||
|
||||
+6
-6
@@ -27,17 +27,17 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/phy/realtek/Kconfig
|
||||
+++ b/drivers/net/phy/realtek/Kconfig
|
||||
@@ -1,6 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
@@ -2,6 +2,7 @@
|
||||
config REALTEK_PHY
|
||||
tristate "Realtek PHYs"
|
||||
select PHY_COMMON_PROPS
|
||||
+ select PHY_PACKAGE
|
||||
help
|
||||
Currently supports RTL821x/RTL822x and fast ethernet PHYs
|
||||
|
||||
--- a/drivers/net/phy/realtek/realtek_main.c
|
||||
+++ b/drivers/net/phy/realtek/realtek_main.c
|
||||
@@ -19,6 +19,7 @@
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <linux/string_choices.h>
|
||||
#include <net/phy/realtek_phy.h>
|
||||
|
||||
@@ -45,7 +45,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
#include "realtek.h"
|
||||
|
||||
#define RTL8201F_IER 0x13
|
||||
@@ -175,6 +176,8 @@
|
||||
@@ -177,6 +178,8 @@
|
||||
#define RTL8221B_PHYCR1_ALDPS_XTAL_OFF_EN BIT(12)
|
||||
#define RTL8221B_PHYCR1_PHYAD_0_EN BIT(13)
|
||||
|
||||
@@ -54,7 +54,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
#define RTL8366RB_POWER_SAVE 0x15
|
||||
#define RTL8366RB_POWER_SAVE_ON BIT(12)
|
||||
|
||||
@@ -1871,6 +1874,66 @@ static int rtl8224_cable_test_get_status
|
||||
@@ -1889,6 +1892,66 @@ static int rtl8224_cable_test_get_status
|
||||
return rtl8224_cable_test_report(phydev, finished);
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
static bool rtlgen_supports_2_5gbps(struct phy_device *phydev)
|
||||
{
|
||||
int val;
|
||||
@@ -2472,6 +2535,8 @@ static struct phy_driver realtek_drvs[]
|
||||
@@ -3096,6 +3159,8 @@ static struct phy_driver realtek_drvs[]
|
||||
PHY_ID_MATCH_EXACT(0x001ccad0),
|
||||
.name = "RTL8224 2.5Gbps PHY",
|
||||
.flags = PHY_POLL_CABLE_TEST,
|
||||
|
||||
+2
-2
@@ -24,7 +24,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
--- a/drivers/net/phy/realtek/realtek_main.c
|
||||
+++ b/drivers/net/phy/realtek/realtek_main.c
|
||||
@@ -177,6 +177,7 @@
|
||||
@@ -179,6 +179,7 @@
|
||||
#define RTL8221B_PHYCR1_PHYAD_0_EN BIT(13)
|
||||
|
||||
#define RTL8224_VND1_MDI_PAIR_SWAP 0xa90
|
||||
@@ -32,7 +32,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
|
||||
#define RTL8366RB_POWER_SAVE 0x15
|
||||
#define RTL8366RB_POWER_SAVE_ON BIT(12)
|
||||
@@ -1922,9 +1923,40 @@ static int rtl8224_mdi_config_order(stru
|
||||
@@ -1940,9 +1941,40 @@ static int rtl8224_mdi_config_order(stru
|
||||
order ? BIT(port_offset) : 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,14 +9,14 @@ configuration option for the phy module.
|
||||
Submitted-by: Birger Koblitz <mail@birger-koblitz.de>
|
||||
--- a/drivers/net/phy/realtek/Makefile
|
||||
+++ b/drivers/net/phy/realtek/Makefile
|
||||
@@ -2,3 +2,4 @@
|
||||
realtek-y += realtek_main.o
|
||||
@@ -4,3 +4,4 @@ realtek-y += phy_patch.o
|
||||
realtek-y += phy_patch_rtl826x.o
|
||||
realtek-$(CONFIG_REALTEK_PHY_HWMON) += realtek_hwmon.o
|
||||
obj-$(CONFIG_REALTEK_PHY) += realtek.o
|
||||
+obj-$(CONFIG_REALTEK_PHY_MULTIPORT) += realtek_multiport.o
|
||||
--- a/drivers/net/phy/realtek/Kconfig
|
||||
+++ b/drivers/net/phy/realtek/Kconfig
|
||||
@@ -5,6 +5,13 @@ config REALTEK_PHY
|
||||
@@ -6,6 +6,13 @@ config REALTEK_PHY
|
||||
help
|
||||
Currently supports RTL821x/RTL822x and fast ethernet PHYs
|
||||
|
||||
|
||||
+2
-2
@@ -30,7 +30,7 @@ Signed-off-by: Jan Hoffmann <jan@3e8.eu>
|
||||
|
||||
--- a/drivers/net/phy/realtek/realtek_main.c
|
||||
+++ b/drivers/net/phy/realtek/realtek_main.c
|
||||
@@ -1496,6 +1496,148 @@ static unsigned int rtl822x_inband_caps(
|
||||
@@ -1514,6 +1514,148 @@ static unsigned int rtl822x_inband_caps(
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ Signed-off-by: Jan Hoffmann <jan@3e8.eu>
|
||||
static int rtl822xb_get_rate_matching(struct phy_device *phydev,
|
||||
phy_interface_t iface)
|
||||
{
|
||||
@@ -2459,7 +2601,7 @@ static struct phy_driver realtek_drvs[]
|
||||
@@ -3083,7 +3225,7 @@ static struct phy_driver realtek_drvs[]
|
||||
.soft_reset = rtl822x_c45_soft_reset,
|
||||
.get_features = rtl822x_c45_get_features,
|
||||
.config_aneg = rtl822x_c45_config_aneg,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/phy/realtek/realtek_main.c
|
||||
+++ b/drivers/net/phy/realtek/realtek_main.c
|
||||
@@ -171,6 +171,41 @@
|
||||
@@ -173,6 +173,41 @@
|
||||
|
||||
#define RTL8224_SRAM_RTCT_LEN(pair) (0x8028 + (pair) * 4)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#define RTL8221B_PHYCR1 0xa430
|
||||
#define RTL8221B_PHYCR1_ALDPS_EN BIT(2)
|
||||
#define RTL8221B_PHYCR1_ALDPS_XTAL_OFF_EN BIT(12)
|
||||
@@ -2040,6 +2075,147 @@ exit:
|
||||
@@ -2058,6 +2093,147 @@ exit:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
static int rtl8224_mdi_config_order(struct phy_device *phydev)
|
||||
{
|
||||
struct device_node *np = phydev->mdio.dev.of_node;
|
||||
@@ -2094,6 +2270,10 @@ static int rtl8224_config_init(struct ph
|
||||
@@ -2112,6 +2288,10 @@ static int rtl8224_config_init(struct ph
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
||||
@@ -223,7 +223,6 @@ CONFIG_REGMAP_MMIO=y
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
CONFIG_RFS_ACCEL=y
|
||||
CONFIG_RPS=y
|
||||
CONFIG_RTL8261N_PHY=y
|
||||
# CONFIG_RTL838X is not set
|
||||
# CONFIG_RTL839X is not set
|
||||
CONFIG_RTL930X=y
|
||||
|
||||
@@ -233,7 +233,6 @@ CONFIG_REGMAP_MMIO=y
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
CONFIG_RFS_ACCEL=y
|
||||
CONFIG_RPS=y
|
||||
CONFIG_RTL8261N_PHY=y
|
||||
# CONFIG_RTL838X is not set
|
||||
# CONFIG_RTL839X is not set
|
||||
CONFIG_RTL930X=y
|
||||
|
||||
Reference in New Issue
Block a user