From patchwork Sun Nov 26 23:51:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 169924 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ce62:0:b0:403:3b70:6f57 with SMTP id o2csp2746814vqx; Sun, 26 Nov 2023 15:52:30 -0800 (PST) X-Google-Smtp-Source: AGHT+IFVE5avd/qYuQ4J3lwrw5FjbYVO6xTIMu5yqU5iIoUF3MrZHgPcF4aeE+X0v70AxN1yhmQK X-Received: by 2002:a05:6830:71a2:b0:6d8:28d2:270e with SMTP id el34-20020a05683071a200b006d828d2270emr1215682otb.32.1701042750065; Sun, 26 Nov 2023 15:52:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701042750; cv=none; d=google.com; s=arc-20160816; b=pOOpJgyXoscTq482qHYgvdYfvUfoNn0hG35ESXBLNmvkXL9GSzh36WiOfNljZxtb// D148bZBJsZ1FJFkR0aAvhEzCJfCeunA9ZIAhfYJ2HRPHuUk6LlwcmJtO1hqL4UeR+G7b LZNDwl9M5InrtFDzqbJ4C+10Dts5cpzdzxj++YzJ1NYJI9Cdtdv1cfHi5c9sm0MNsoZu 6nkG3XV5RN9QOj646V0TGC0bO+8InXwH0WbIQQ6sdzLKRm4HBXBR9PcgPk2vgVU1zjCr g1CenaSVerThkoTt62O0tXtfsGjHqnGrYBl2XKsaJg7N76xbg9KbYnIcnUX1TRMPGya6 g9iw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=igZnYyFKrMpXiYvtb+6rWbbtYfx7FdvfY2mFz0zvQMQ=; fh=qVBUraGgBy8kGTTVhUjEciNSIcfnkQdrmodHaoEX+PI=; b=oWZfAAIuvguZQfuNVLx16NN2X/9U5vMJUftmACCIERD5JshSkTX+KEW88EWGx1DVPB 43zP6Pyx5eJ8569BhgwBo3e6qCXA2D5S1oIhWhi70MRVHfeqZZJz6EEz3kmDaXskfsVO kkxe4tG/285/7hEdrIl/C/SY3KOuUi5Fn37FI5XkxIKEdD4bfNpYPAA7kEdF5LIX1Do9 jelP744NlSOYUEGwrw29MgD0DHjN1iuGEMQwSzy/Fdad5Jaznaan41fuZU4SbxHlR53R fMSmfDo0HfU942jfY4UHtlPtrKZPL6rA76fwM0OCT3t6xNZJw9dLVXDpvO0Q3E00nKp9 DNOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=aqNDAG4d; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id y32-20020a631820000000b005bd85b5a76csi8369742pgl.274.2023.11.26.15.52.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Nov 2023 15:52:30 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=aqNDAG4d; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 2F5FE808D6BA; Sun, 26 Nov 2023 15:52:27 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231229AbjKZXwA (ORCPT + 99 others); Sun, 26 Nov 2023 18:52:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56592 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229472AbjKZXvx (ORCPT ); Sun, 26 Nov 2023 18:51:53 -0500 Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7EFB3113; Sun, 26 Nov 2023 15:51:59 -0800 (PST) Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-40b34563987so20146135e9.1; Sun, 26 Nov 2023 15:51:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701042718; x=1701647518; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=igZnYyFKrMpXiYvtb+6rWbbtYfx7FdvfY2mFz0zvQMQ=; b=aqNDAG4dR+GOEi6nxXyLmhVH+JQKjdL31f+4gCCI/I8HAE5FfJhcTljaqWBuaEts9e lCntGbQXiibkWsx/dISe8kjUsfU89QEw42HuS+2mCJdE4o+CME1xsSPoSINn3uUScnFP fmKYzB2giv3lsHUp81zlrbvpqPLfBQ013c08k0JtTj3l3Yh7Ad8gUn9oBPDW111JLaxD oUKK0xQIRFbUxKRlJND6ieVMnbCbISHd7VY6cVb4nZQXoXYWjZcrbX5BMVyYAdvUwjKc QreSiotRrpiOZUTCNIbIfzu1w7YgTafZ42aq5QD/5eBMMK37PbSXcpD8qGNUF36JWFRb 8V5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701042718; x=1701647518; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=igZnYyFKrMpXiYvtb+6rWbbtYfx7FdvfY2mFz0zvQMQ=; b=Jd2TTs10QBI/kjzUJkWieKEW/lznS4ytJ/5FlIo2TrKp4yxdtlBL5+kb81i/bUcCvU xv22rRwQYT9yj0IZdPc/tiNy8+xbRZ6X0ymWfwBNmJwibVG+VusBsf+v/ORAvo+MKFBD N8+1GtWggmadYdlwWb1gcYL7ucnOVrZVKotjJBb5CN08X9P7+pQ997dedZ+YdxQL5p2V zHKHFusqZy3IKCWaiNfYGplY4D+2IOVrovbNot1zZIPcOYLYdt9TsNS79Q8YQbrcA2/h Qq/jhSe8Y7yjFmBWOa9lyp/lcGotquXAPMlgfi5iaqfYg5eIFfurHaXwnkF5gJ7fS+p7 NacA== X-Gm-Message-State: AOJu0Yyr5emJO39qenHBwDAJaCAy0UhMaMfqcK0wVv1noDmnhUlPWsdR OS3c7ni8a3U4oxiv5FD1mEM= X-Received: by 2002:a05:600c:4746:b0:405:784a:d53e with SMTP id w6-20020a05600c474600b00405784ad53emr6744788wmo.20.1701042717734; Sun, 26 Nov 2023 15:51:57 -0800 (PST) Received: from localhost.localdomain (93-34-89-13.ip49.fastwebnet.it. [93.34.89.13]) by smtp.googlemail.com with ESMTPSA id m4-20020a05600c4f4400b0040b3dbb5c93sm1202151wmq.1.2023.11.26.15.51.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Nov 2023 15:51:57 -0800 (PST) From: Christian Marangi To: Florian Fainelli , Broadcom internal kernel review list , Andrew Lunn , Heiner Kallweit , Russell King , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Vladimir Oltean , David Epping , "Russell King (Oracle)" , Harini Katakam , Christian Marangi , Simon Horman , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [net-next PATCH v2 4/4] net: phy: add support for PHY package MMD read/write Date: Mon, 27 Nov 2023 00:51:41 +0100 Message-Id: <20231126235141.17996-4-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231126235141.17996-1-ansuelsmth@gmail.com> References: <20231126235141.17996-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Sun, 26 Nov 2023 15:52:27 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783672602895677401 X-GMAIL-MSGID: 1783672602895677401 Some PHY in PHY package may require to read/write MMD regs to correctly configure the PHY package. Add support for these additional required function in both lock and no lock variant. It's possible to set is_c45 bool for phy_package_read/write to true to access mmd regs for accessing C45 PHY in PHY package for global configuration. Signed-off-by: Christian Marangi --- Changes v2: - Rework to use newly introduced helper - Add common check for regnum and devad include/linux/phy.h | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/include/linux/phy.h b/include/linux/phy.h index 96f6f34be051..3e507bd2c3b4 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -2085,6 +2085,84 @@ static inline int __phy_package_write(struct phy_device *phydev, return __mdiobus_write(phydev->mdio.bus, addr, regnum, val); } +static inline int phy_package_read_mmd(struct phy_device *phydev, + unsigned int addr_offset, bool is_c45, + int devad, u32 regnum) +{ + struct phy_package_shared *shared = phydev->shared; + int addr = shared->base_addr + addr_offset; + int val; + + if (addr >= PHY_MAX_ADDR) + return -EIO; + + if (regnum > (u16)~0 || devad > 32) + return -EINVAL; + + phy_lock_mdio_bus(phydev); + val = mmd_phy_read(phydev->mdio.bus, addr, is_c45, devad, + regnum); + phy_unlock_mdio_bus(phydev); + + return val; +} + +static inline int __phy_package_read_mmd(struct phy_device *phydev, + unsigned int addr_offset, bool is_c45, + int devad, u32 regnum) +{ + struct phy_package_shared *shared = phydev->shared; + int addr = shared->base_addr + addr_offset; + + if (addr >= PHY_MAX_ADDR) + return -EIO; + + if (regnum > (u16)~0 || devad > 32) + return -EINVAL; + + return mmd_phy_read(phydev->mdio.bus, addr, is_c45, devad, + regnum); +} + +static inline int phy_package_write_mmd(struct phy_device *phydev, + unsigned int addr_offset, bool is_c45, + int devad, u32 regnum, u16 val) +{ + struct phy_package_shared *shared = phydev->shared; + int addr = shared->base_addr + addr_offset; + int ret; + + if (addr >= PHY_MAX_ADDR) + return -EIO; + + if (regnum > (u16)~0 || devad > 32) + return -EINVAL; + + phy_lock_mdio_bus(phydev); + ret = mmd_phy_write(phydev->mdio.bus, addr, is_c45, devad, + regnum, val); + phy_unlock_mdio_bus(phydev); + + return ret; +} + +static inline int __phy_package_write_mmd(struct phy_device *phydev, + unsigned int addr_offset, bool is_c45, + int devad, u32 regnum, u16 val) +{ + struct phy_package_shared *shared = phydev->shared; + int addr = shared->base_addr + addr_offset; + + if (addr >= PHY_MAX_ADDR) + return -EIO; + + if (regnum > (u16)~0 || devad > 32) + return -EINVAL; + + return mmd_phy_write(phydev->mdio.bus, addr, is_c45, devad, + regnum, val); +} + static inline bool __phy_package_set_once(struct phy_device *phydev, unsigned int b) {