Port-arm archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Problem with Orange Pi 5 ethernet PHY on NetBSD 11
On 23/11/2025 17:23, John Klos wrote:
Hi, all,
So far NetBSD 11 on my various Arm systems has been quite happy.
I did notice an issue with ethernet on my Orange Pi 5 running UEFI v1.1
(edk2-rk3588). Ethernet works fine in NetBSD 10, but with NetBSD 11 the
interface can be configured and shows link, but it doesn't communicate.
[snip]
whereas in NetBSD 11, we get mcommphy* PHYs:
[ 1.000004] mcommphy0 at eqos0 phy 0: Motorcomm YT8531 GbE PHY
[ 1.000004] mcommphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-
FDX, 1000baseT-FDX, auto
[ 1.000004] mcommphy1 at eqos0 phy 1: Motorcomm YT8531 GbE PHY
[ 1.000004] mcommphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-
FDX, 1000baseT-FDX, auto
Compiling a GENERIC64 kernel with mcommphy* commented results in working
ethernet.
Ideas?
Does this patch help?
Nick
diff --git a/sys/dev/mii/mcommphy.c b/sys/dev/mii/mcommphy.c
index e7e986c3f179..21d5d104b6d2 100644
--- a/sys/dev/mii/mcommphy.c
+++ b/sys/dev/mii/mcommphy.c
@@ -97,6 +97,7 @@ __KERNEL_RCSID(0, "$NetBSD: mcommphy.c,v 1.3 2024/10/23 05:55:45 skrll Exp $");
#define YT8521_EXT_PAD_DRIVE_STRENGTH 0xa010
#define YT8531_RGMII_RXC_DS_MASK __BITS(15, 13)
#define YT8531_RGMII_RXD_DS_HIMASK __BIT(12)
+#define YT8531_RGMII_RX_DS_DEFAULT 0x3
#define YT8531_RGMII_RXD_DS_LOMASK __BITS(5, 4)
#define YT8531_RGMII_RXD_DS_MASK \
(YT8531_RGMII_RXD_DS_HIMASK | YT8531_RGMII_RXD_DS_LOMASK)
@@ -482,15 +483,18 @@ mcomm_yt8531_init(struct mcomm_softc *msc)
PHY_WRITE(sc, YTPHY_EXT_REG_ADDR, YT8521_EXT_SYNCE_CFG);
PHY_READ(sc, YTPHY_EXT_REG_DATA, &data);
- data &= ~(YT8531_EN_SYNC_E | YT8531_CLK_SRC_SEL_MASK);
-
switch (msc->sc_clk_out_frequency_hz) {
+ case 0:
+ data &= ~YT8531_EN_SYNC_E;
+ break;
case 125000000:
+ data &= ~(YT8531_EN_SYNC_E | YT8531_CLK_SRC_SEL_MASK);
data |= YT8531_EN_SYNC_E;
data |= YT8531_CLK_FRE_SEL_125M;
data |= __SHIFTIN(YT8531_CLK_SRC_SEL_PLL_125M, YT8531_CLK_SRC_SEL_MASK);
break;
case 25000000:
+ data &= ~(YT8531_EN_SYNC_E | YT8531_CLK_SRC_SEL_MASK);
data |= YT8531_EN_SYNC_E;
data |= __SHIFTIN(YT8531_CLK_SRC_SEL_REF_25M, YT8531_CLK_SRC_SEL_MASK);
break;
@@ -562,6 +566,8 @@ mcommphyattach(device_t parent, device_t self, void *aux)
case YT8521:
case YT8531:
/* Default values */
+ msc->sc_rx_clk_drv_microamp = YT8531_RGMII_RX_DS_DEFAULT;
+ msc->sc_rx_data_drv_microamp = YT8531_RGMII_RX_DS_DEFAULT;
msc->sc_rx_internal_delay_ps = YT8521_DELAY_DEFAULT;
msc->sc_tx_internal_delay_ps = YT8521_DELAY_DEFAULT;
Home |
Main Index |
Thread Index |
Old Index