From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qt1-f182.google.com (mail-qt1-f182.google.com [209.85.160.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 2E8E7375ACF for ; Thu, 30 Apr 2026 15:08:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777561693; cv=none; b=b6CceJyhfN0e+Wk7sJSWrMHD3aGSmOZLY0SGIdNPqU3o7dv+Y2wUJK04sBXbdbDyIqe3fkKFJ3QW+EnLxnt01zuZrL0ZHK/gCn3Vxf/FwH15m8w8NRW6kRn+yP16ZABqqIz3OHzxkZdEG6RUawn6FFyQInSntWMWNFTZJUXsndQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777561693; c=relaxed/simple; bh=aHwhNUgUunEsuCx5PWSlpnspb7dCR3q1nJ8+AeBsZI8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AnaI1c/Zatx0+w3Ym0WXjmbz0whscrEdnu1LVcbK6HYGB7KYvkK2qOFfI/Mz4KFL1wTyVL+AqNj8k88CPfH6M4MhE1WmW4qR0/JEC/qNIbb8yM+FkyyPNeAykdJJ1wzCtyBnlGe3RtCzcGk3zobjbSRG7anXzwg/65iYNDY1te4= 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=J8cKgCvk; arc=none smtp.client-ip=209.85.160.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="J8cKgCvk" Received: by mail-qt1-f182.google.com with SMTP id d75a77b69052e-506a6cf8242so6460551cf.1 for ; Thu, 30 Apr 2026 08:08:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777561689; x=1778166489; 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=exOWp3uV0NKcyfspEwFa1OV17okj3o/cEeqBYuta5Ho=; b=J8cKgCvksINmscyqdaHwbmuPrlbVne9SWfhrySc1P5e0VBGBnyaUzHkHvBmxdGGJzz l52lCWhDHQVF1ZjshP3nSTBlTdw6zdowiD3xprQfGf4zxb+cVts/u0RRDqz4axZjwKZh zRh7RKTQ6LKXwCmfbtkp4xoKlXmG8L8ilNSSuGHkgPBiOVwsDTeXF9TfyZtMTz4q3KZd 68s8rKeLOd5EVyJxUsXJbVBUQgLu+6lEvQQxTH8qdJs/eNviXp9mAUdltNJGc83hToVK cXlZNqW5O2Ubj4vlyeRJ6xfLXrY+IapLiZa/oUurgb3kyMc1RvVP9+OPIenX5B3PWstY 86IA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777561689; x=1778166489; 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=exOWp3uV0NKcyfspEwFa1OV17okj3o/cEeqBYuta5Ho=; b=l9X823dOKdMDlL8njj/jL6UaFfTBK1dYsi8oCxHDILAyvheAfGj8CrhLExRyFxQcJG 7rkc7JL7QmzJn1dlMFaaWktNJ18UVcBEwIFA1DmVrp311K9d/tE7DF4SRMvybYciYR5B TaNX3YjukN1/YHYqE61HZ/95ydS1dabYpmlF2DLAjtcu5FLE1rc0HGvSfgMWLsABLCSv TcH3Z70D07T3y/adOWORMe97keq7nvNWmXTIlu/rLqLcGkLuj6Rmmj5I0Sdk0f7fPSXc sTD/zpWS5F265a6dBlAsFK4hgOBk3cIDemVheF3TG9NYF8al32nKT9CoiQqOI+AgDO0L iEMA== X-Forwarded-Encrypted: i=1; AFNElJ8B4ERgL4sDbGiKu0QyaNh3oxjZnUmnbBaqovxFPmi4ykBAIOJSHqd6zBRQtFuxiEiqfXE6chv54nLRySw=@vger.kernel.org X-Gm-Message-State: AOJu0YxYJJ5YnqVfRRspVLAqmpbx8W57rrsBO3bvkjKpjZ2Rj7cTi2Ao GDmkYPHQ+2L96gm8CpbFDnOV1jLuEJl5eBOUy7CbTCuZTJcLJYB2/J51 X-Gm-Gg: AeBDietY1zcujPZPYWPeclKGEBFzdMIHDMgxaGf15i/GfQgEOmh79JQW00HM/UkgW1z 1Dj5dk5qK8naXMLp9/79tnwMhULmY13R4+s7uIrW0DixJfLfKVTtsS/zXDgU22BVfNX1wIxRrrN Hft8HV++E2TZ1EVUnHhsD4coP9mFCx6EltoJ1QprvfETZwi9TG7ZkuJInZ8a+ci8VgzfvJFJhue LO2wUGh1gsi1nsMcZQxBBo3yGkgrK2w25wqkrJred9QpwH+9HnfueKGAsYKCD/LsZF5qWf8XUy4 Fi72Mg+Tp66wOIEvxnnII/zctwLmWHPbgx8hA6Xp9/yUvB0n/qr1ZYe7Nue8OL0TmrcA4fWTno4 Ta67oZVkvl1HWqY9QGmF7SXzwjHOrd4toN5Yywy/RnOZyFnnPgVjYwUlZ7X/HyH09xB8aAF5LKe k8h0L724Fmes09CwBf/z+UAIzW8SA5oikt2xu+R8c1GSgINW4j1Ma6kukXH8sizfXcnSxrPQa/U 4iFhg== X-Received: by 2002:ac8:5a0e:0:b0:510:1b61:d103 with SMTP id d75a77b69052e-5102adbeb71mr44488361cf.36.1777561689349; Thu, 30 Apr 2026 08:08:09 -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.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Apr 2026 08:08:07 -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 2/3] net: eth: fbnic: Consolidate register reads for ids and devs Date: Thu, 30 Apr 2026 11:08:01 -0400 Message-ID: <20260430150802.3521-3-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)" 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) --- v2: - 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 709041f7fc43..a3a072597a2c 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