Thread (15 messages) flat view 15 messages, 3 authors, 5d ago

Re: [PATCH net-next v6 6/6] net: dsa: motorcomm: Add support for Motorcomm YT922x

From: Andrew Lunn <andrew@lunn.ch>
Date: 2026-09-09 17:33:12
Also in: lkml

quoted
+/**
+ * Initialize serdes configuration based on interface mode.
+ */
+static int yt922x_sds_init(struct yt921x_priv *priv, int port,
+                          phy_interface_t interface)
+{
+       int addr;
+       u16 data;
+       int res;
+
+       addr = yt922x_sds_phyaddr_get
+               (port, YT922X_PHY_REG_TYPE_SDS_COMMON_EXT,
+                YT922X_PHY_REG_SPACE_SGMII);
+       if (addr < 0)
+               return -EINVAL;
+       /* write protect */
+       res = yt921x_intif_ext_write(priv, addr, 0x4be, 0xd);
+       if (res)
+               return res;
+       /* CDR */
+       if (interface == PHY_INTERFACE_MODE_100BASEX) {
+               res = yt921x_intif_ext_write(priv, addr, 0x406, 0x0);
+               if (res)
+                       return res;
+               res = yt921x_intif_ext_write(priv, addr, 0x416, 0x3458);
+               if (res)
+                       return res;
+       } else {
+               res = yt921x_intif_ext_write(priv, addr, 0x406, 0x800);
+               if (res)
+                       return res;
+               res = yt921x_intif_ext_write(priv, addr, 0x416, 0x4558);
+               if (res)
+                       return res;
+       }
+       /* PLL */
+       if (interface == PHY_INTERFACE_MODE_USXGMII) {
+               res = yt921x_intif_ext_write(priv, addr, 0x43a, 0x1006);
+               if (res)
+                       return res;
+               res = yt921x_intif_ext_write(priv, addr, 0x43f, 0x3029);
+               if (res)
+                       return res;
+               res = yt921x_intif_ext_write(priv, addr, 0x42a, 0xf070);
+               if (res)
+                       return res;
+       } else {
+               res = yt921x_intif_ext_write(priv, addr, 0x43d, 0x207d);
+               if (res)
+                       return res;
+               res = yt921x_intif_ext_write(priv, addr, 0x43c, 0x207d);
+               if (res)
+                       return res;
+               res = yt921x_intif_ext_write(priv, addr, 0x43f, 0x3032);
+               if (res)
+                       return res;
+               res = yt921x_intif_ext_write(priv, addr, 0x43a, 0x6);
+               if (res)
+                       return res;
+               res = yt921x_intif_ext_write(priv, addr, 0x42a, 0xf070);
+               if (res)
+                       return res;
+       }
+       /* VCO */
+       res = yt921x_intif_ext_write(priv, addr, 0x439, 0xC0);
+       if (res)
+               return res;
+       /* Vdac */
+       res = yt921x_intif_ext_write(priv, addr, 0x492, 0x7f7f);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x491, 0x7f);
+       if (res)
+               return res;
+       /* Eye */
+       res = yt921x_intif_ext_write(priv, addr, 0x454, 0xf14);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x497, 0xa44);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x4cd, 0x0);
+       if (res)
+               return res;
+
+       res = yt921x_intif_ext_write(priv, addr, 0x4af, 0x45e3);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x48a, 0xfff);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x408, 0x7c00);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x4d6, 0x7f);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x44f, 0xff08);
+       if (res)
+               return res;
+       /* FFE */
+       res = yt921x_intif_ext_write(priv, addr, 0x48e, 0x7d00);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0xd, 0x60f);
+       if (res)
+               return res;
+       /* CTLE */
+       res = yt921x_intif_ext_write(priv, addr, 0x4b0, 0x804);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x4b1, 0x7774);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x4af, 0x45e7);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x3, 0x5603);
+       if (res)
+               return res;
+
+       msleep(20);
+       res = yt921x_intif_ext_write(priv, addr, 0x492, 0x7fff);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x492, 0x7f7f);
+       if (res)
+               return res;
+       /* CTLE */
+       res = yt921x_intif_ext_write(priv, addr, 0x2000, 0x40);
+       if (res)
+               return res;
+       res = yt921x_intif_ext_write(priv, addr, 0x2000, 0x0);
+       if (res)
+               return res;
+
+       if (interface == PHY_INTERFACE_MODE_SGMII) {
+               res = yt921x_intif_ext_write(priv, addr, 0x1042, 0x48c);
+               if (res)
+                       return res;
+       }
+       /* soft reset */
+       addr = yt922x_sds_phyaddr_get(port, YT922X_PHY_REG_TYPE_MII,
+                                     YT922X_PHY_REG_SPACE_SGMII);
+       if (addr < 0)
+               return res;
+       res = yt921x_intif_read(priv, addr, 0x0, &data);
+       if (res)
+               return res;
+       data &= ~(1 << 15);
+       res = yt921x_intif_write(priv, addr, 0x0, data);
+       if (res)
+               return res;
+       addr = yt922x_sds_phyaddr_get(port, YT922X_PHY_REG_TYPE_MII,
+                                     YT922X_PHY_REG_SPACE_USXGMII);
+       if (addr < 0)
+               return res;
+       res = yt921x_intif_read(priv, addr, 0x0, &data);
+       if (res)
+               return res;
+       data |= 1 << 15;
+       res = yt921x_intif_write(priv, addr, 0x0, data);
+       if (res)
+               return res;
+
+       return 0;
+}
No one else, except you, can maintain this stuff. Drop it for now and
discuss it later.
There also appears to be similar magic in the PHY driver. Can this be
consolidated?

	Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help