From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f169.google.com (mail-qk1-f169.google.com [209.85.222.169]) (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 CCC6B436370 for ; Thu, 30 Apr 2026 15:08:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777561695; cv=none; b=gq0+QymAe7szVFN+1d3j1zy6h/ZcMBigt4zI9ULS3Lh2LzVUIN1iBDE8Nfh3fP1Tm3DPEXgZwPYiowZEDrO6FX/ruoln03SX33kWwh3RsAcBZNGqTzq81jPjnoml46kD4FbU05UT3KmPbXVHRUqYCiseky5veEDNZSLHhn6+HrY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777561695; c=relaxed/simple; bh=4/PXjA5wui8riVIOeSTDKTzLDfB5K2L0rU+nCg+H4co=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nAYQalf+5nBMKHqgrL5dmxz83QBrupjEczShoc18S00BIwzB9Ot/Czb9DOKF7EmS75rSyzoNQ8rDkBZ4QhBXOqFH7DznXN6tuw88B6HoElStvnM101VtL7qZ1dIKCt1vbJ+1JBOH5e5UhYCICYc2Tt1WLu7Y603mHEv/ccE97Oc= 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=Hj9fxcls; arc=none smtp.client-ip=209.85.222.169 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="Hj9fxcls" Received: by mail-qk1-f169.google.com with SMTP id af79cd13be357-8ee9ec26edaso110033485a.2 for ; Thu, 30 Apr 2026 08:08:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777561691; x=1778166491; 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=GjLCv7/Lm3Fd1vFVHO/bH+3GFNPBrRzS27c9E9pX0+I=; b=Hj9fxclsGD+xISFute/bPAgdCLVFcq+q6v0UHWT2yaRWXAwrux339P3LnTHZUW1Wnu W8CAoDHZIGmalBW8z/w98Y5EKf0xKU/MJ+wVEu4EQ1bCNp8aqU2O1jMAHoHXXldXeDOv ndog7KxiIvaMu5tIdcYi/DRlgXZpc4SMEwnquDqKboLRat7mjwtKpvfrDHhnZcyYUFMf gTG1YVSVut0hCbDlDgFDK6rqvDu6rW2Q5Ucvkxf+7xDfgcn2CExM0zbgAvZ3Ed8E/Lai 5Nq8B6UfbhZ0Ec3FPyShxQNPgkC/yt6hbA47BenPa5ciPOMQ3KT5IOfSRzJBmhtZIy8G aI/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777561691; x=1778166491; 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=GjLCv7/Lm3Fd1vFVHO/bH+3GFNPBrRzS27c9E9pX0+I=; b=eYkNnxRR0a4M0kPLbFYJ0XeIqsv0G1dJcsdyZj6KluPtPVvsT4LoaU564U7czsAxDL u1MemW0kyviFrCOTqEM2jPXnz+GjN5gxeLrkVBlosnSr8hMbBuZ1jrvDtz53y9K3GGBX 76U5reQ0RYFWL65cOBpMWUnOma/BnKW7LLhe240J1b55Uq0xwnDTwo9NjTuClSMjHHty qki423fLYRXJJxWkYJ9woI31Seawh34j/l5aErSVveCa7L3gpLokwkNSi+PxKPC9+osP wnVSBz/uCMZo9+gTdkgZzEXWz+vyF5eVqsz6c5C2UKuxmE8pmmTGJe4RsXcW1k0O/MvW puCg== X-Forwarded-Encrypted: i=1; AFNElJ+YtyAKX44eMJqYN3GJ08usQrWxcs7v+0oyHidtcpi1Xw5zEJQ9Rwh+jhoddlYq81Clj5zdmZ8LVBA9s0c=@vger.kernel.org X-Gm-Message-State: AOJu0YzEElkkgVykmbBKrZQW3KkVNJC560n3hgP32I9OTKgs97p0ikiu ogR1/y6ntEXEsasHg0Ya2IRECZifTASmg0Wgmene00o9ecTbYnVBWFkk X-Gm-Gg: AeBDiev8KyiSz1OEqdYKDKybl16Zxf9x+HlQ0XkvUmt9QHgMHeeX2Icq9PURxKgQ9fe Iy+Nh3Qd+0PhpTUJadIGG85IWphmpXs2dUImFprAEz908k9q6KZq7SBI+GSo0Qj0koVAkL23CXA nxgaUPpZeIZALJtXUcdd1aDMM6YNh7h+JbUgYk4LmFWJR/Gg4A1YpLKfE5mr0qO38XyVtaoo4A+ 3SLzcp64NVjHFUBngykE3dAtaWho3Y57gwafBBWcAYAthn3QitwVIOsOq24sffDbmFywoLWSffR 28vHImwvmMY3EmJe7nhUtMJ/unqvnh398tzP2Npj41SJrS/detg6v6DP9zxhhNxJCLgf72L6W8l yz1dMxiQnVNlRFWH1pQelSdHKvwsAYXOBwIanrQXyVEnLc0An/U2iI1o62TMhdyx4+R96CqEYLZ 34Hei124J0myZny1uBLTbegd5IOpVBKALVDAjQJtUlpICEjYjW2weCyEwoOvJbivz1xIY= X-Received: by 2002:a05:622a:250e:b0:50e:d316:fa35 with SMTP id d75a77b69052e-5102ada86c3mr45222281cf.36.1777561691282; Thu, 30 Apr 2026 08:08:11 -0700 (PDT) Received: from PF5YBGDS.localdomain ([163.114.130.4]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-5103b397c38sm450731cf.7.2026.04.30.08.08.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2026 08:08:10 -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 , Lee Trager , Andrew Lunn Cc: mike.marciniszyn@gmail.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v2 3/3] net: eth: fbnic: Add pma read and write access Date: Thu, 30 Apr 2026 11:08:02 -0400 Message-ID: <20260430150802.3521-4-mike.marciniszyn@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260430150802.3521-1-mike.marciniszyn@gmail.com> References: <20260430150802.3521-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: - 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 a3a072597a2c..7a8727e8f6f2 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