Files
BPI-M2C/rtl8111hcg-ethernet-uis7885.patch
2026-09-22 09:38:26 +08:00

370 lines
16 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Codex <codex@local>
Date: Fri, 26 Jun 2026 00:00:00 +0800
Subject: [PATCH] uis7885: enable RTL8111HCG PCIe ethernet
Enable the in-kernel r8169/Realtek PHY drivers, keep the RTL8111 3.3V
enable GPIO high, extend the cold-boot PCIe REFCLK/PERST# delay to satisfy
the RTL8111H power sequencing requirement, and bring eth0 up with DHCP during
system network initialization. Add SELinux policy for ethernet debug tools so
udhcpc, ping, and iperf3 can run in enforcing mode from local login shells.
diff --git a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/sprd_uis7885_defconfig b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/sprd_uis7885_defconfig
--- a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/sprd_uis7885_defconfig
+++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/sprd_uis7885_defconfig
@@ -1942,7 +1942,9 @@ CONFIG_VETH=y
#
# end of Distributed Switch Architecture drivers
-# CONFIG_ETHERNET is not set
+CONFIG_ETHERNET=y
+CONFIG_NET_VENDOR_REALTEK=y
+CONFIG_R8169=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_MDIO_DEVICE=y
@@ -1991,7 +1993,7 @@ CONFIG_FIXED_PHY=y
# CONFIG_MICROSEMI_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_QSEMI_PHY is not set
-# CONFIG_REALTEK_PHY is not set
+CONFIG_REALTEK_PHY=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_ROCKCHIP_PHY is not set
# CONFIG_SMSC_PHY is not set
diff --git a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery_uis7885_defconfig b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery_uis7885_defconfig
--- a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery_uis7885_defconfig
+++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery_uis7885_defconfig
@@ -1942,7 +1942,9 @@ CONFIG_VETH=y
#
# end of Distributed Switch Architecture drivers
-# CONFIG_ETHERNET is not set
+CONFIG_ETHERNET=y
+CONFIG_NET_VENDOR_REALTEK=y
+CONFIG_R8169=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_MDIO_DEVICE=y
@@ -1991,7 +1993,7 @@ CONFIG_FIXED_PHY=y
# CONFIG_MICROSEMI_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_QSEMI_PHY is not set
-# CONFIG_REALTEK_PHY is not set
+CONFIG_REALTEK_PHY=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_ROCKCHIP_PHY is not set
# CONFIG_SMSC_PHY is not set
diff --git a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/product/wifionly/sprd_uis7885_defconfig b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/product/wifionly/sprd_uis7885_defconfig
--- a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/product/wifionly/sprd_uis7885_defconfig
+++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/product/wifionly/sprd_uis7885_defconfig
@@ -1942,7 +1942,9 @@ CONFIG_VETH=y
#
# end of Distributed Switch Architecture drivers
-# CONFIG_ETHERNET is not set
+CONFIG_ETHERNET=y
+CONFIG_NET_VENDOR_REALTEK=y
+CONFIG_R8169=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_MDIO_DEVICE=y
@@ -1991,7 +1993,7 @@ CONFIG_FIXED_PHY=y
# CONFIG_MICROSEMI_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_QSEMI_PHY is not set
-# CONFIG_REALTEK_PHY is not set
+CONFIG_REALTEK_PHY=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_ROCKCHIP_PHY is not set
# CONFIG_SMSC_PHY is not set
diff --git a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/uis7885-2h10-overlay.dts b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/uis7885-2h10-overlay.dts
--- a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/uis7885-2h10-overlay.dts
+++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/uis7885-2h10-overlay.dts
@@ -476,6 +476,15 @@ &usb {
status = "okay";
};
+&ap_gpio {
+ rtl8111_3v3_en {
+ gpio-hog;
+ gpios = <147 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "rtl8111-3v3-en";
+ };
+};
+
&ssphy {
vdd-supply = <&vddusb33>;
extcon = <&extcon_gpio>;
diff --git a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery-uis7885-2h10.dts b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery-uis7885-2h10.dts
--- a/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery-uis7885-2h10.dts
+++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-kernel/linux/linux-unisoc-5.4/uis7885/recovery-uis7885-2h10.dts
@@ -486,6 +486,15 @@ &usb {
status = "okay";
};
+&ap_gpio {
+ rtl8111_3v3_en {
+ gpio-hog;
+ gpios = <147 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "rtl8111-3v3-en";
+ };
+};
+
&ion {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_uis7885_defconfig b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_uis7885_defconfig
--- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_uis7885_defconfig
+++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_uis7885_defconfig
@@ -1942,7 +1942,9 @@ CONFIG_VETH=y
#
# end of Distributed Switch Architecture drivers
-# CONFIG_ETHERNET is not set
+CONFIG_ETHERNET=y
+CONFIG_NET_VENDOR_REALTEK=y
+CONFIG_R8169=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_MDIO_DEVICE=y
@@ -1991,7 +1993,7 @@ CONFIG_FIXED_PHY=y
# CONFIG_MICROSEMI_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_QSEMI_PHY is not set
-# CONFIG_REALTEK_PHY is not set
+CONFIG_REALTEK_PHY=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_ROCKCHIP_PHY is not set
# CONFIG_SMSC_PHY is not set
diff --git a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/recovery_uis7885_defconfig b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/recovery_uis7885_defconfig
--- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/recovery_uis7885_defconfig
+++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/recovery_uis7885_defconfig
@@ -1942,7 +1942,9 @@ CONFIG_VETH=y
#
# end of Distributed Switch Architecture drivers
-# CONFIG_ETHERNET is not set
+CONFIG_ETHERNET=y
+CONFIG_NET_VENDOR_REALTEK=y
+CONFIG_R8169=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_MDIO_DEVICE=y
@@ -1991,7 +1993,7 @@ CONFIG_FIXED_PHY=y
# CONFIG_MICROSEMI_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_QSEMI_PHY is not set
-# CONFIG_REALTEK_PHY is not set
+CONFIG_REALTEK_PHY=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_ROCKCHIP_PHY is not set
# CONFIG_SMSC_PHY is not set
diff --git a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_debian_defconfig b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_debian_defconfig
--- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_debian_defconfig
+++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/configs/sprd_debian_defconfig
@@ -1901,7 +1901,9 @@ CONFIG_VETH=y
#
# end of Distributed Switch Architecture drivers
-# CONFIG_ETHERNET is not set
+CONFIG_ETHERNET=y
+CONFIG_NET_VENDOR_REALTEK=y
+CONFIG_R8169=y
# CONFIG_FDDI is not set
# CONFIG_HIPPI is not set
CONFIG_MDIO_DEVICE=y
@@ -1950,7 +1952,7 @@ CONFIG_FIXED_PHY=y
# CONFIG_MICROSEMI_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_QSEMI_PHY is not set
-# CONFIG_REALTEK_PHY is not set
+CONFIG_REALTEK_PHY=y
# CONFIG_RENESAS_PHY is not set
# CONFIG_ROCKCHIP_PHY is not set
# CONFIG_SMSC_PHY is not set
diff --git a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-2h10-overlay.dts b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-2h10-overlay.dts
--- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-2h10-overlay.dts
+++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-2h10-overlay.dts
@@ -476,6 +476,15 @@ &usb {
status = "okay";
};
+&ap_gpio {
+ rtl8111_3v3_en {
+ gpio-hog;
+ gpios = <147 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "rtl8111-3v3-en";
+ };
+};
+
&ssphy {
vdd-supply = <&vddusb33>;
extcon = <&extcon_gpio>;
diff --git a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/recovery-uis7885-2h10.dts b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/recovery-uis7885-2h10.dts
--- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/recovery-uis7885-2h10.dts
+++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/recovery-uis7885-2h10.dts
@@ -486,6 +486,15 @@ &usb {
status = "okay";
};
+&ap_gpio {
+ rtl8111_3v3_en {
+ gpio-hog;
+ gpios = <147 GPIO_ACTIVE_HIGH>;
+ output-high;
+ line-name = "rtl8111-3v3-en";
+ };
+};
+
&ion {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-mach.dtsi b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-mach.dtsi
--- a/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-mach.dtsi
+++ b/source_sync_rls_25c/source/kernel/kernel5.4/arch/arm64/boot/dts/sprd/uis7885-mach.dtsi
@@ -1138,10 +1138,10 @@ &pcie1 {
MASK_PMU_APB_PD_PCIE_STATE
0x0>,
/*
- * Remain 100M reference clock to active at least 200us to make
- * sure that it's stable before pulling high perst#.
+ * Keep REFCLK and power stable before releasing PERST#.
+ * RTL8111H requires at least 100ms from 3.3V stable to PERST# inactive.
*/
- <&pmu_apb_regs 0 200
+ <&pmu_apb_regs 0 100000
REG_PMU_APB_PCIEPLLV_REL_CFG
MASK_PMU_APB_PCIEPLLV_FRC_ON
0x1>,
@@ -1149,7 +1149,7 @@ &pcie1 {
REG_AON_APB_IPA_ACCESS_CFG
MASK_AON_APB_AON_ACCESS_PCIE_EN
0x2>,
- /* perst assert */
+ /* release PERST# */
<&pmu_apb_regs 0 2000
REG_PMU_APB_SNPS_PCIE3_SLP_CTRL
MASK_PMU_APB_REG_PERST_N_ASSERT
diff --git a/source_sync_rls_25c/layers/meta-unisoc/recipes-core/init-ifupdown/init-ifupdown/init_networking b/source_sync_rls_25c/layers/meta-unisoc/recipes-core/init-ifupdown/init-ifupdown/init_networking
--- a/source_sync_rls_25c/layers/meta-unisoc/recipes-core/init-ifupdown/init-ifupdown/init_networking
+++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-core/init-ifupdown/init-ifupdown/init_networking
@@ -55,11 +55,29 @@ check_network_swap() {
exec 0<&9 9<&-
}
+start_eth0_dhcp() {
+ local retry=0
+
+ while [ ! -d /sys/class/net/eth0 ] && [ $retry -lt 10 ]; do
+ sleep 1
+ retry=$((retry + 1))
+ done
+
+ [ -d /sys/class/net/eth0 ] || return 0
+
+ ip link set eth0 up 2>/dev/null || ifconfig eth0 up 2>/dev/null || true
+
+ if command -v udhcpc >/dev/null 2>&1 &&
+ ! ps | grep "[u]dhcpc .*eth0" >/dev/null 2>&1; then
+ udhcpc -i eth0 -b -R >/dev/null 2>&1 &
+ fi
+}
+
case "$1" in
start)
echo -n "Configuring network interfaces... "
sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1
- #ifup -a
+ start_eth0_dhcp
echo "done."
;;
diff --git a/source_sync_rls_25c/layers/meta-unisoc/recipes-connectivity/netcon/files/npd6.conf.backups b/source_sync_rls_25c/layers/meta-unisoc/recipes-connectivity/netcon/files/npd6.conf.backups
new file mode 100644
--- /dev/null
+++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-connectivity/netcon/files/npd6.conf.backups
@@ -0,0 +1,2 @@
+prefix =
+interface =
diff --git a/source_sync_rls_25c/layers/meta-unisoc/recipes-connectivity/netcon/netcon_0.0.1.bb b/source_sync_rls_25c/layers/meta-unisoc/recipes-connectivity/netcon/netcon_0.0.1.bb
--- a/source_sync_rls_25c/layers/meta-unisoc/recipes-connectivity/netcon/netcon_0.0.1.bb
+++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-connectivity/netcon/netcon_0.0.1.bb
@@ -26,6 +26,7 @@ SRC_URI = " \
file://netcon_dbus.conf \
file://hostapd.conf \
file://netcon.conf \
+ file://npd6.conf.backups \
"
require netcon.inc
@@ -58,6 +59,9 @@ do_install () {
install -d ${D}/etc/netcon/
install -m 0644 ${THISDIR}/files/netcon.conf ${D}/etc/netcon/
+
+ install -d ${D}/etc/netcon/npd6/
+ install -m 0644 ${WORKDIR}/npd6.conf.backups ${D}/etc/netcon/npd6/
}
TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/source_sync_rls_25c/layers/meta-unisoc/recipes-core/busybox-initramfs/files/simple.script b/source_sync_rls_25c/layers/meta-unisoc/recipes-core/busybox-initramfs/files/simple.script
--- a/source_sync_rls_25c/layers/meta-unisoc/recipes-core/busybox-initramfs/files/simple.script
+++ b/source_sync_rls_25c/layers/meta-unisoc/recipes-core/busybox-initramfs/files/simple.script
@@ -38,7 +38,7 @@ case "$1" in
renew|bound)
if [ $have_bin_ip -eq 1 ]; then
- /SBIN_DIR/ip addr add dev $interface local $ip/$mask $BROADCAST
+ /SBIN_DIR/ip addr replace dev $interface local $ip/$mask $BROADCAST
else
/SBIN_DIR/ifconfig $interface $ip $BROADCAST $NETMASK
fi
@@ -59,7 +59,7 @@ case "$1" in
metric=10
for i in $router ; do
if [ $have_bin_ip -eq 1 ]; then
- /SBIN_DIR/ip route add default via $i metric $metric dev $interface
+ /SBIN_DIR/ip route replace default via $i metric $metric dev $interface
else
/SBIN_DIR/route add default gw $i dev $interface metric $metric 2>/dev/null
fi
diff --git a/source_sync_rls_25c/source/unisoc/selinux/kirkstone/files/0097-Bug-rtl8111-ethernet-tools-selinux.patch b/source_sync_rls_25c/source/unisoc/selinux/kirkstone/files/0097-Bug-rtl8111-ethernet-tools-selinux.patch
new file mode 100644
--- /dev/null
+++ b/source_sync_rls_25c/source/unisoc/selinux/kirkstone/files/0097-Bug-rtl8111-ethernet-tools-selinux.patch
@@ -0,0 +1,28 @@
+diff --git a/policy/modules/system/locallogin.te b/policy/modules/system/locallogin.te
+index ef2716aac..3a7d4d2ab 100644
+--- a/policy/modules/system/locallogin.te
++++ b/policy/modules/system/locallogin.te
+@@ -484,3 +484,23 @@ allow local_login_t tracefs_t:file { rw_file_perms getattr execute unlink map cr
+ allow local_login_t tracefs_t:filesystem { mount remount unmount getattr relabelfrom relabelto };
+ allow local_login_t user_home_dir_t:dir { search_dir_perms create_dir_perms rw_dir_perms rmdir };
+ allow local_login_t user_home_dir_t:file { rw_file_perms getattr execute unlink map create rename setattr execute_no_trans };
++
++gen_require(`
++ type node_t;
++ type ping_exec_t;
++ type unreserved_port_t;
++')
++
++# Allow ethernet debug tools to run from local login shells in enforcing mode.
++allow local_login_t ping_exec_t:file { getattr open read execute execute_no_trans map };
++
++allow local_login_t self:tcp_socket { create ioctl read write getattr getopt setopt bind connect listen accept shutdown };
++allow local_login_t unreserved_port_t:tcp_socket { name_connect name_bind };
++allow local_login_t node_t:tcp_socket node_bind;
++
++allow local_login_t self:udp_socket { create ioctl read write getattr getopt setopt bind connect };
++allow local_login_t node_t:udp_socket node_bind;
++
++allow local_login_t self:packet_socket { create ioctl read write getattr getopt setopt bind };
++allow local_login_t self:rawip_socket { create ioctl read write getattr getopt setopt };
++allow local_login_t self:netlink_route_socket { create ioctl read write getattr bind connect getopt setopt nlmsg_read nlmsg_write };
--
2.34.1