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

Re: [PATCH v2 07/10] net: pcs: xpcs: add Rockchip RK3568 platform glue driver

From: Andrew Lunn <andrew@lunn.ch>
Date: 2026-08-02 14:40:16
Also in: linux-arm-kernel, linux-devicetree, linux-phy, linux-renesas-soc, linux-rockchip, lkml

On Sun, Aug 02, 2026 at 11:20:27AM +0800, Coia Prant wrote:
quoted
On Sat, Aug 01, 2026 at 10:22:31PM +0800, Coia Prant wrote:
quoted
The XPCS block contains four MII ports (0..3), each of which can be
routed to GMAC0 or GMAC1 via the pcs-handle property in the MAC node.
The hardware maps these ports to different MMDs:
  - port 0: MMD 7 (ROCKCHIP_MMD_MII)
  - port 1: MMD 2 (ROCKCHIP_MMD_MII1)
  - port 2: MMD 3 (ROCKCHIP_MMD_MII2)
  - port 3: MMD 4 (ROCKCHIP_MMD_MII3)
Why is port 0 called ROCKCHIP_MMD_MII not ROCKCHIP_MMD_MII0 ?
Hi Andrew,

The naming follows the Rockchip TRM. The hardware documentation refers to
the MMD for the first port as simply "MII" without a numeric suffix, while
the other ports are named "MII1", "MII2", "MII3". I kept the naming
consistent with the TRM to make it easier to cross-reference.

As I understand it, this is probably because the MII controls not only
Port 0, but
also the entire PCS (these registers are read-only in Ports 1-3 and reflected
back to the MII).

If you prefer, I can rename it to ROCKCHIP_MMD_MII0 for consistency. Let me
know and I'll update it in v3.
If the TRM gives it this name, then O.K. It just makes the code look
odd, unbalanced.
quoted
quoted
+static int xpcs_rk_read_c22(struct mii_bus *bus, int addr, int reg)
+{
+     struct dw_xpcs_rk *pxpcs = bus->priv;
+     int dev;
+
+     if (!xpcs_rk_mdio_addr_validate(addr))
+             return -ENODEV;
+
+     dev = xpcs_rk_mdio_read_remapping(addr, MDIO_MMD_VEND2, reg);
Does this mean C22 registers are mapped into the first 32 of C45
MDIO_MMD_VEND2?
Yes, exactly. The C22 register space (reg 0-31) is mapped into the first
32 registers of the VEND2 MMD (MMD 7). This is how the hardware is designed
and matches the standard C22 to C45 address mapping.
Does the xpcs code actually perform any C22 access? A quick look
suggests it is C45 only. xpcs_read() calls mdiodev_c45_read(). If C22
is not needed, i would not provide these functions.
quoted
quoted
+static int xpcs_rk_read_c45(struct mii_bus *bus, int addr, int dev, int reg)
+{
+     struct dw_xpcs_rk *pxpcs = bus->priv;
+
+     if (!xpcs_rk_mdio_addr_validate(addr))
+             return -ENODEV;
+
+     dev = xpcs_rk_mdio_read_remapping(addr, dev, reg);
Should it be returning an error for dev == MDIO_MMD_VEND2? Or at least
if reg < 32?
No, we cannot simply return an error here.
Thanks for the explanation.

       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