From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f182.google.com (mail-qk1-f182.google.com [209.85.222.182]) (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 0E0673DE422 for ; Mon, 4 May 2026 13:58:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777903105; cv=none; b=RofB0jHokFaNX325z06cIqkjikBzULHLnQu6rsiG8z2wgU6aeFktgkRqUjRBoScOkNLzh/gyB3dgEy35W0wICAw1x+zRGy8D9et2Z+3gSXOGkyHnCzsK4QgooZQzVBZUJNHBzjoyY2/x0eYOWHU4N+0TmOhg28L/lNJdXj1Y0UE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777903105; c=relaxed/simple; bh=5MH+eiieYN8/gZNZRVkYIpI14qODtezNFPLW5Q9sLK8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RvZQdyBsl/+j0hZVhqLiuYfZVSiZtXnu0zAZ/A5Q6ZQjaJ9uuSQTc67o1tgFOf6IdAx+njyCZgsA9FF/1VZ1V1kxfocduI3bKQ/TikZh6a9IitmUFH6fJbNSqCdKx35jYJmLrE2c524lVF3syNV0nv2b69Na9jjBK1fvkrnfgCY= 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=W55+T4x1; arc=none smtp.client-ip=209.85.222.182 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="W55+T4x1" Received: by mail-qk1-f182.google.com with SMTP id af79cd13be357-8c70b5594f4so438306585a.1 for ; Mon, 04 May 2026 06:58:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777903102; x=1778507902; 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=DhxLbT8/zsSgwq5f8w11BHu+0+FsfNH5LorDR212ejI=; b=W55+T4x164nVgHVpBJOHAHkGM5RIwYarNMo4i9/RpEsPwfYhAwRxzf2zs/n6OVeWl3 6Fjg4Cd60LQvE4yk6bl8goW333hvkmedNzd5NZ3cmFeHIUX2jMKLv4itpUni1U8O84SS BWj6/kM1c0m7VxmxQ6FXB0FZlGV+L/1n5w2wWlm1rdW8JeOIbcMqy1q/nnUJ2jq1wjKM 16rZMXgHOShwuNohTNYdZEnwWdBCIhwGf2Xtyb87JHoGXs+OByqVsUn5Yg80dg8Mvu61 mdRwAM5iU0tkfQEIKzFeq+Emoc8e0v2X1rKHQ5Wz/ch4mDavZD/7alaOtn9g0vaiZYNn 3hoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777903102; x=1778507902; 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=DhxLbT8/zsSgwq5f8w11BHu+0+FsfNH5LorDR212ejI=; b=OCEy/iH9nbqk9NaWP0yDjIhU5SH4a4QYbzVbX+z4CEaZ4rDxY/DrSf9Uww/eu5IkPr 7hD/3b0+pXjN/SuqkzvUP5JoIMBE596tg3G4uRF7PiVk3wJUmGgUam0PHOQpa6aSg/py 8SxgSkBmBh36tYUNtMJJd67h8fY4WzujPvCpLcJpUrvZmXt5J172Tm4lDdQMrStph5U8 QalWEIhw9MTQxzhgRFwHDfQJOyt6gEp6NQviZ3o/OpeuneLJsICNXYGGqAgWHIXz5WEb rfSV7HrkNTObkP1wYY/3nynP3+f+6WZnyLOJrTn0btCVoMdnmDQIsgRX6H+d4rntWf0m CYWw== X-Forwarded-Encrypted: i=1; AFNElJ9ZITYjBkJ+lKhDRybGBr0vO60OeagzWsZE1By8pogRYJZ9OJiGRiYiL72FMhyOMLiRF7p7Qs/Kv3ZrGGU=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8e32/9PbGqYRRj/l8zqG08hsA/L2WOSDvSnQRlDNt4XqQ+meo GMII4ratNjrC3ZOoK24JUJ2GYIrQN5jun5DmRHsMCJ89bZ4OLwj2/N8Q X-Gm-Gg: AeBDietG95+9y2e5UzHUXCu3DuQZqeO9zyhQxxSAbHcmYeKXJEQBd8+QdnrXUOQakSJ T1lwK5hcY3qAwMQP+xI7bkBoOv8fKv+9Fi+qeos/q2HebOWLfzyJr649uILzax3mD2hq5g89z0c XmZNoEX2+MNK9j1aHx0iB6b5mmMFPASmnJkoFEJrZUSlA4aueCRFmhvb4KxM3OLYMmpq1EUp8sL ywkpne/Msj9/EJcvpKeTSn7qWwrhdpqOOo2G3XIy5lsZyhcpdidLjXwIQg4CMRy0hjxHgBOR9ia Fy9EBwPSJ4JGzwJs5X7a0VViQztNNX/HsFTCTVc8qHkPWf/B756TlHYoxuBPcr22/mENpyX6YdR 7yrtWh1saZ3AmQ24pCpVx//K2+20nOwi7Zo9hkhXh3CTJkiSfJ/TySd56g2BLjjU/K84nqSjZVh MSYHRHmDrtMMlg8oyR7XpjjO0iyVQ/hJ17OzNxJLxMcBiEh2y4ZexwtUaWu0lockKGbQY= X-Received: by 2002:a05:620a:7113:b0:8ee:3715:212b with SMTP id af79cd13be357-8fabb1f5b74mr2183987885a.29.1777903101870; Mon, 04 May 2026 06:58:21 -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.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 06:58:21 -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 3/4] net: eth: fbnic: Consolidate register reads for ids and devs Date: Mon, 4 May 2026 09:58:14 -0400 Message-ID: <20260504135815.44226-4-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)" Consolidate the register reads for boiler plate registers to reduce LOC and cleanup pcs reads for DEVS1 to fetch overrides for reserved bits that the hardware does not return. Signed-off-by: Mike Marciniszyn (Meta) --- v3: - no changes v2: https://lore.kernel.org/all/20260430150802.3521-3-mike.marciniszyn@gmail.com/ - Restore pcs register read for DEVS2 - read pcs DEVS1 overrides and or into return v1: https://lore.kernel.org/all/20260428172810.175077-4-mike.marciniszyn@gmail.com/ drivers/net/ethernet/meta/fbnic/fbnic_mdio.c | 64 ++++++++++++-------- 1 file changed, 40 insertions(+), 24 deletions(-) diff --git a/drivers/net/ethernet/meta/fbnic/fbnic_mdio.c b/drivers/net/ethernet/meta/fbnic/fbnic_mdio.c index d6a124889f52..d794f5d8d84f 100644 --- a/drivers/net/ethernet/meta/fbnic/fbnic_mdio.c +++ b/drivers/net/ethernet/meta/fbnic/fbnic_mdio.c @@ -11,6 +11,26 @@ #define FBNIC_PCS_VENDOR BIT(9) #define FBNIC_PCS_ZERO_MASK (DW_VENDOR - FBNIC_PCS_VENDOR) +static int +fbnic_mdio_ids(int id, int regnum) +{ + /* return correct IDs */ + switch (regnum) { + case MDIO_DEVID1: + return id >> 16; + case MDIO_DEVID2: + return id & 0xffff; + case MDIO_DEVS1: + return MDIO_DEVS_SEP_PMA1 | MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS; + case MDIO_DEVS2: + return 0; + case MDIO_STAT2: + return MDIO_STAT2_DEVPRST_VAL; + } + + return 0; +} + static int fbnic_mdio_read_pmd(struct fbnic_dev *fbd, int addr, int regnum) { @@ -29,18 +49,6 @@ fbnic_mdio_read_pmd(struct fbnic_dev *fbd, int addr, int regnum) } switch (regnum) { - case MDIO_DEVID1: - ret = MP_FBNIC_XPCS_PMA_100G_ID >> 16; - break; - case MDIO_DEVID2: - ret = MP_FBNIC_XPCS_PMA_100G_ID & 0xffff; - break; - case MDIO_DEVS1: - ret = MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS; - break; - case MDIO_STAT2: - ret = MDIO_STAT2_DEVPRST_VAL; - break; case MDIO_PMA_RXDET: /* If training isn't complete default to 0 */ if (fbd->pmd_state != FBNIC_PMD_SEND_DATA) @@ -51,6 +59,7 @@ fbnic_mdio_read_pmd(struct fbnic_dev *fbd, int addr, int regnum) (MDIO_PMD_RXDET_1 / FBNIC_AUI_MODE_R2)); break; default: + ret = fbnic_mdio_ids(MP_FBNIC_XPCS_PMA_100G_ID, regnum); break; } @@ -64,7 +73,7 @@ fbnic_mdio_read_pmd(struct fbnic_dev *fbd, int addr, int regnum) static int fbnic_mdio_read_pcs(struct fbnic_dev *fbd, int addr, int regnum) { - int ret, offset = 0; + int ret, offset = 0, overrides = 0; /* We will need access to both PCS instances to get config info */ if (addr >= 2) @@ -75,18 +84,25 @@ fbnic_mdio_read_pcs(struct fbnic_dev *fbd, int addr, int regnum) return 0; /* Intercept and return correct ID for PCS */ - if (regnum == MDIO_DEVID1) - return DW_XPCS_ID >> 16; - if (regnum == MDIO_DEVID2) - return DW_XPCS_ID & 0xffff; - if (regnum == MDIO_DEVS1) - return MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS; - - /* Swap vendor page bit for FBNIC PCS vendor page bit */ - if (regnum & DW_VENDOR) - offset ^= DW_VENDOR | FBNIC_PCS_VENDOR; + switch (regnum) { + case MDIO_DEVID1 ... MDIO_DEVID2: + ret = fbnic_mdio_ids(DW_XPCS_ID, regnum); + break; + case MDIO_DEVS1: + /* DW IP returns MDIO_DEVS_SEP_PMA1, MDIO_DEVS_PMAPMD, + * and MDIO_DEVS_PCS as 0 + */ + overrides = fbnic_mdio_ids(DW_XPCS_ID, regnum); + fallthrough; + default: + /* Swap vendor page bit for FBNIC PCS vendor page bit */ + if (regnum & DW_VENDOR) + offset ^= DW_VENDOR | FBNIC_PCS_VENDOR; - ret = fbnic_rd32(fbd, FBNIC_PCS_PAGE(addr) + (regnum ^ offset)); + ret = fbnic_rd32(fbd, FBNIC_PCS_PAGE(addr) + (regnum ^ offset)); + ret |= overrides; + break; + } dev_dbg(fbd->dev, "SWMII PCS Rd: Addr: %d RegNum: %d Value: 0x%04x\n", -- 2.43.0