From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f172.google.com (mail-qk1-f172.google.com [209.85.222.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9D9DF3DEAFA for ; Mon, 4 May 2026 13:58:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777903110; cv=none; b=jx9RoJolPAeAho+vNVPCXnd3ni47Y2pVRXe+mjlbTrWFLw0zdMOPaST1+q4Ln/8rgwbplOEWR5sfQYPdICBgjEXbCy8nuthmysl/W+sSLjwjuIaIbxmrC2jOPtOik0CobzQpV8iNK9shWZ+QIP7Mg7s6AK424gi8BlI90ezKew0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777903110; c=relaxed/simple; bh=3pFnDC0mCujMX012oSF4vMSTWQu20p02Xga6M+J1OmA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P0zSoDIgCVDRWiYCBKZvII3xIC6x5yAgAhyGbChWW5If8AKl7lZJuZbyJtRIk1HzYHZxQS+hp385Tk9Vv0HmctQnpdSrwrJQXsP18h1p+2B3Fcb8OMIcPX65G36WFCkZFl77RD7QLB8jVr9kGpZRT2QNPYcdfLA7UktJWF6HlcA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lt6IIFhT; arc=none smtp.client-ip=209.85.222.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lt6IIFhT" Received: by mail-qk1-f172.google.com with SMTP id af79cd13be357-8ee62a19730so448465185a.3 for ; Mon, 04 May 2026 06:58:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777903103; x=1778507903; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=L+t4PaXqbMYHZCpeonJmlbU+PizLvuoOJyIOEFPFoGA=; b=lt6IIFhTWtXLNE8HTU5KXAyZWSL5B9AlMwOpmurBBLGzMxJkBgvBvK3AvoHLEqKyWU wRwKjj1VnQA5itlaE3hRtoaiekNOGOoxwQIvLxYk7ueCW/0LIgmlVC4P7JZJ4gN2Duag uSpZ3GtWYI/QyEkB0XkCcPK+DxeSxrj+lj2xWJjC31j/CbJ9aP+XOyeoKnZlPeL/Nw5L sJH6Yw5nNvh9aY34yfawkuWWYGQNp24qIqpxgdWICYO8JqHC2bVHlTIposBc+6cZOTvP Z8kWDSi/1CMoeAmZ+GhXt9iZum92CFuPRDCfkTvoNstmhc0JiyPF33F1YuymdYGZJRLb r/FQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777903103; x=1778507903; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=L+t4PaXqbMYHZCpeonJmlbU+PizLvuoOJyIOEFPFoGA=; b=oBD6bMQPB7fTMaxM+FEtKYyBOc3ifwT3rKwLRcxSrK0hUI1D9j/B8Sb92xS9RISaOg RQaH6L1euUfdd5hE2cwxYQ68+0uDJoajk6mwwfUnYkmUWZ+3mCzhTcC9t8e50MxuBzOw YaHnbaTcdzhuhQBzF3ErKtQmc0JMHiUPsGDbyqxWtULA9zmEacc3gP2+L8sQDCL6ZHNI Y518mz5DHoI2dPrFsTHWNYbs2G0al2SkIPiYgTHADBmzC+hF1t5IJSmX7tZWypL2lWnk Q6z0vZ+2tWUH+cpNaJlyXH0NUnvia/TogQcXTwCNciiL2WLa3+0g6L/fmP8H5qHsLQb/ IQJg== X-Forwarded-Encrypted: i=1; AFNElJ8tD+EsET8ZFTL6ty+GmqnYbkV8mrW+swKjm2ZpTYjVJZjkCd3A7fqARuuNwnt5piqCeXg2GedlkJj4kzU=@vger.kernel.org X-Gm-Message-State: AOJu0YwrLi8/5qVK69hrV0z1+22mNd2QdxFrg8gfs7Jnx45v7SHFauo8 Zr9gQtfebnb+tBThqf8BTalQhhBCHoSxpc4gAGKvBTqwXWVLOvU+bVLC X-Gm-Gg: AeBDiesA12F2iqSnrArzQt3R3/m2AAGar2JMg3McZyNS1+HnSAhu8UqVCIijEIlU53n RjInm8BhTxuIfMbVs8qlUhRGDLLyfrOt0ZIKHWy1+mlIgZfJSBEvgGdwtzohAaIzUKpN5yX3ZJh U1vbYGiuXjV+rBqycy4CxXsvQOGOlB/MhWAcAm6wmEUuiUtSw0UI+WDS7fjgIZBC2IK3kxfwXm/ /HWBFKOe1MWWQuvrLR/FrxEiE6sSv7c4cFcqrqbQ15T3ID50F0IzXEOLVxeuaEOKSiQp6lQlLud /CFZIf8wqE5mMJ07y4+hGip0cd8+mM7nGy9aR+DCJ0/fRSg9pXN73Gj0DxAn1+Dm9eknu5oQo3K wHLlhAG6CqfoWTsHVidsBqU9rPza0bFjQCTL242BV9IWU/Aa2WJyDEUsdSz+q1EJbHOSM2IKBH+ vnaeMq4TctU6qkELuh3337e3d+mNKQo2SksEfsyIUpSu/61kdRS+ORJUwleL+w+G+JL14= X-Received: by 2002:a05:620a:4706:b0:8f8:8860:fb8b with SMTP id af79cd13be357-8fd18633adfmr1527413985a.52.1777903103463; Mon, 04 May 2026 06:58:23 -0700 (PDT) Received: from PF5YBGDS.localdomain ([163.114.130.7]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8fc2c91cd89sm1062878585a.35.2026.05.04.06.58.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 06:58:22 -0700 (PDT) From: mike.marciniszyn@gmail.com To: Alexander Duyck , Jakub Kicinski , kernel-team@meta.com, Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , Heiner Kallweit , Russell King , Jacob Keller , Mohsin Bashir , Simon Horman , Lee Trager , Andrew Lunn Cc: mike.marciniszyn@gmail.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v3 4/4] net: eth: fbnic: Add pma read and write access Date: Mon, 4 May 2026 09:58:15 -0400 Message-ID: <20260504135815.44226-5-mike.marciniszyn@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260504135815.44226-1-mike.marciniszyn@gmail.com> References: <20260504135815.44226-1-mike.marciniszyn@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: "Mike Marciniszyn (Meta)" Document the MDIO interface topology with an ASCII diagram showing the MAC, PCS (MMD 3), FEC, Separated PMA (MMD 8), and PMD (MMD 1) blocks and their interconnects. The diagram illustrates how 4 lanes connect the MAC through PCS, FEC, and PMA, then narrow to 2 lanes at the PMD. The c45 read and write routines are enhanced to support read and write of the separated PMA for the fbnic. Co-developed-by: Alexander Duyck Signed-off-by: Alexander Duyck Signed-off-by: Mike Marciniszyn (Meta) --- v2: https://lore.kernel.org/all/20260430150802.3521-4-mike.marciniszyn@gmail.com/ - no changes v1: https://lore.kernel.org/all/20260428172810.175077-5-mike.marciniszyn@gmail.com/ drivers/net/ethernet/meta/fbnic/fbnic_csr.h | 1 + drivers/net/ethernet/meta/fbnic/fbnic_mdio.c | 71 ++++++++++++++++++++ 2 files changed, 72 insertions(+) diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_csr.h b/drivers/net/ethernet/meta/fbnic/fbnic_csr.h index 81794bd326e1..64b958df7774 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_csr.h +++ b/drivers/net/ethernet/meta/fbnic/fbnic_csr.h @@ -805,6 +805,7 @@ enum { #define FBNIC_CSR_END_PCS 0x10668 /* CSR section delimiter */ #define FBNIC_CSR_START_RSFEC 0x10800 /* CSR section delimiter */ +#define FBNIC_RSFEC_CONTROL(n) (0x10800 + 8 * (n)) /* 0x42000 + 32*n */ /* We have 4 RSFEC engines present in our part, however we are only using 1. * As such only CCW(0) and NCCW(0) will never be non-zero and the other diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_mdio.c b/drivers/net/ethernet/meta/fbnic/fbnic_mdio.c index d794f5d8d84f..fe3a4ce88413 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_mdio.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_mdio.c @@ -7,6 +7,25 @@ #include "fbnic.h" #include "fbnic_netdev.h" +/* fbnic MDIO Interface Layout + * + * +-------------------+ + * | MAC | + * +-------------------+ + * | | | | <-- 25GMII, 50GMII, or CGMII + * +-------------------+ + * MMD 3 | PCS | + * +-------------------+ + * | FEC | + * +-------------------+ + * MMD 8 | Separated PMA | + * +-------------------+ + * | | <-- PMD Service Interface + * +-------------------+ + * MMD 1 | PMD | + * +-------------------+ + */ + #define DW_VENDOR BIT(15) #define FBNIC_PCS_VENDOR BIT(9) #define FBNIC_PCS_ZERO_MASK (DW_VENDOR - FBNIC_PCS_VENDOR) @@ -111,6 +130,32 @@ fbnic_mdio_read_pcs(struct fbnic_dev *fbd, int addr, int regnum) return ret; } +static int +fbnic_mdio_read_pma(struct fbnic_dev *fbd, int addr, int regnum) +{ + int ret = 0; + + /* We will need access to both PMA instances to get config info */ + if (addr >= 2) + return 0; + + switch (regnum) { + case MDIO_PMA_RSFEC_CTRL ... MDIO_PMA_RSFEC_LANE_MAP: + ret = fbnic_rd32(fbd, FBNIC_RSFEC_CONTROL(addr) + + regnum - MDIO_PMA_RSFEC_CTRL); + break; + default: + ret = fbnic_mdio_ids(MP_FBNIC_XPCS_PMA_100G_ID, regnum); + break; + } + + dev_dbg(fbd->dev, + "SWMII PMA Rd: Addr: %d RegNum: %d Value: 0x%04x\n", + addr, regnum, ret); + + return ret; +} + static int fbnic_mdio_read_c45(struct mii_bus *bus, int addr, int devnum, int regnum) { @@ -122,6 +167,9 @@ fbnic_mdio_read_c45(struct mii_bus *bus, int addr, int devnum, int regnum) if (devnum == MDIO_MMD_PCS) return fbnic_mdio_read_pcs(fbd, addr, regnum); + if (devnum == MDIO_MMD_SEP_PMA1) + return fbnic_mdio_read_pma(fbd, addr, regnum); + return 0; } @@ -155,6 +203,26 @@ fbnic_mdio_write_pcs(struct fbnic_dev *fbd, int addr, int regnum, u16 val) fbnic_wr32(fbd, FBNIC_PCS_PAGE(addr) + regnum, val); } +static void +fbnic_mdio_write_pma(struct fbnic_dev *fbd, int addr, int regnum, u16 val) +{ + dev_dbg(fbd->dev, + "SWMII PMA Wr: Addr: %d RegNum: %d Value: 0x%04x\n", + addr, regnum, val); + + if (addr >= 2) + return; + + switch (regnum) { + case MDIO_PMA_RSFEC_CTRL ... MDIO_PMA_RSFEC_LANE_MAP: + fbnic_wr32(fbd, FBNIC_RSFEC_CONTROL(addr) + + regnum - MDIO_PMA_RSFEC_CTRL, val); + break; + default: + break; + } +} + static int fbnic_mdio_write_c45(struct mii_bus *bus, int addr, int devnum, int regnum, u16 val) @@ -167,6 +235,9 @@ fbnic_mdio_write_c45(struct mii_bus *bus, int addr, int devnum, if (devnum == MDIO_MMD_PCS) fbnic_mdio_write_pcs(fbd, addr, regnum, val); + if (devnum == MDIO_MMD_SEP_PMA1) + fbnic_mdio_write_pma(fbd, addr, regnum, val); + return 0; } -- 2.43.0