Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp1635533pxb; Mon, 12 Apr 2021 03:03:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzbPRIBvPoxN7gygd3F/eTCad1UMMfntB4fbyKPID2TY4gVAxU5NdI5e3TxC9Eli3qq4Btg X-Received: by 2002:a17:90a:ab09:: with SMTP id m9mr29626779pjq.122.1618221797507; Mon, 12 Apr 2021 03:03:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618221797; cv=none; d=google.com; s=arc-20160816; b=CrVt7Zky3CW0V3cIOTgQH9+u/JeiibJt/BNwnUGfgiKOo5nHucXHhuW3tHOsOugO15 XcURHYIu0WMLB/PZb2fLcGLa0KhyX4V36QvQZKllXjhDP5SHuKHAAB9S88GMNra5lLTK i0CIhjbf+NUCRe2NZm4UWdmbrdSrlzXyDCh9z//V6j3uYaZ27hq00g95Mrm3/OnP/Sr2 Awy+Ep7tIpk1DF5ihT2UpxonG0OxuOxhOsYRhWTn7PPoBHBCrQgwqruPqp78Yxqj/YUo Ku5BZE3gcTp+sslwdOTsvgqxT5xW4qxV9+mNIbSWxTOs6qAh5SveQl5z6u7NX4FjrKQL dJSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=0UfDA/sQr+zdmclT4Oo7p8kfTePhSR650tmaVpnrbDI=; b=Z1MSPuqOhVT7eFo/IxovLy/NCxi3813B04Ak56CjB52nLS59+ISLoMHqrdVWzFVMKq Md3M69w2JSNTMef2vFNnzaMp9Ifr/vp+Evh86yTdqipOulhZS/C/SO+vPelfMNrXL4xb c9RvRtIvjnFgIaJOGlOB1wsI5KxBJCKE47hgOYjNfhMv+O9LjnzYOF2uBSQjUi4aQk0C 6AKTd3kTKCU6yKAPDKIPhQtYh/XBIiIfgJmKEib4g1PyemcswanMInPZnPUJTAAGIU5e fCs2zVfpgW8IiKTNgEdvYDeg/DCW2E0HvsPqXPpA8Lm2JcQ/pHXLHkSSl0Ayx6wrB+th AlBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail (test mode) header.i=@armlinux.org.uk header.s=pandora-2019 header.b=AOqjZOIo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=armlinux.org.uk Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b8si12082282pgs.240.2021.04.12.03.02.59; Mon, 12 Apr 2021 03:03:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail (test mode) header.i=@armlinux.org.uk header.s=pandora-2019 header.b=AOqjZOIo; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=armlinux.org.uk Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242988AbhDLJ5q (ORCPT + 99 others); Mon, 12 Apr 2021 05:57:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50574 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244083AbhDLJyu (ORCPT ); Mon, 12 Apr 2021 05:54:50 -0400 Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [IPv6:2001:4d48:ad52:32c8:5054:ff:fe00:142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2B9A8C06138F; Mon, 12 Apr 2021 02:50:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=0UfDA/sQr+zdmclT4Oo7p8kfTePhSR650tmaVpnrbDI=; b=AOqjZOIof8IP30HVfsW8bXXL8 nzxyKvCBKJhnEgQ9wyWD5qe2q3ipakjbGmjlReIW4Vh2YxDnxakEJbfpFkj6I/wi9P0QVKErT4jPV KaH3i+2e6izA7HLnGgYyFzAWAUeL3CX1zYeGTUZABjowWTE2uovBdjqDranMyrmATUMEqZm85pwCb /EtTc0DrX7hhZrjABT3rU8eeCUZOLaOSRh3h01TC7MqptZx4ehquIEAquGuu+oSKYvF2K5fiXNltw iMrRZT7iQkiRtb1zhkQFzEcDVmYn9oX3bATpvkDTVy8NzNV29WGwrBQIoUdO1O5r5b7QENp27iWwm E0baPHxrg==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:52330) by pandora.armlinux.org.uk with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lVtCy-0004Qr-MJ; Mon, 12 Apr 2021 10:50:17 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.92) (envelope-from ) id 1lVtCw-00079M-6r; Mon, 12 Apr 2021 10:50:14 +0100 Date: Mon, 12 Apr 2021 10:50:14 +0100 From: Russell King - ARM Linux admin To: "Radu Pirea (NXP OSS)" Cc: andrew@lunn.ch, hkallweit1@gmail.com, davem@davemloft.net, kuba@kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] phy: nxp-c45: add driver for tja1103 Message-ID: <20210412095012.GJ1463@shell.armlinux.org.uk> References: <20210409184106.264463-1-radu-nicolae.pirea@oss.nxp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210409184106.264463-1-radu-nicolae.pirea@oss.nxp.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: Russell King - ARM Linux admin Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Apr 09, 2021 at 09:41:06PM +0300, Radu Pirea (NXP OSS) wrote: > +#define B100T1_PMAPMD_CTL 0x0834 > +#define B100T1_PMAPMD_CONFIG_EN BIT(15) > +#define B100T1_PMAPMD_MASTER BIT(14) > +#define MASTER_MODE (B100T1_PMAPMD_CONFIG_EN | B100T1_PMAPMD_MASTER) > +#define SLAVE_MODE (B100T1_PMAPMD_CONFIG_EN) > + > +#define DEVICE_CONTROL 0x0040 > +#define DEVICE_CONTROL_RESET BIT(15) > +#define DEVICE_CONTROL_CONFIG_GLOBAL_EN BIT(14) > +#define DEVICE_CONTROL_CONFIG_ALL_EN BIT(13) > +#define RESET_POLL_NS (250 * NSEC_PER_MSEC) > + > +#define PHY_CONTROL 0x8100 > +#define PHY_CONFIG_EN BIT(14) > +#define PHY_START_OP BIT(0) > + > +#define PHY_CONFIG 0x8108 > +#define PHY_CONFIG_AUTO BIT(0) > + > +#define SIGNAL_QUALITY 0x8320 > +#define SQI_VALID BIT(14) > +#define SQI_MASK GENMASK(2, 0) > +#define MAX_SQI SQI_MASK > + > +#define CABLE_TEST 0x8330 > +#define CABLE_TEST_ENABLE BIT(15) > +#define CABLE_TEST_START BIT(14) > +#define CABLE_TEST_VALID BIT(13) > +#define CABLE_TEST_OK 0x00 > +#define CABLE_TEST_SHORTED 0x01 > +#define CABLE_TEST_OPEN 0x02 > +#define CABLE_TEST_UNKNOWN 0x07 > + > +#define PORT_CONTROL 0x8040 > +#define PORT_CONTROL_EN BIT(14) > + > +#define PORT_INFRA_CONTROL 0xAC00 > +#define PORT_INFRA_CONTROL_EN BIT(14) > + > +#define VND1_RXID 0xAFCC > +#define VND1_TXID 0xAFCD > +#define ID_ENABLE BIT(15) > + > +#define ABILITIES 0xAFC4 > +#define RGMII_ID_ABILITY BIT(15) > +#define RGMII_ABILITY BIT(14) > +#define RMII_ABILITY BIT(10) > +#define REVMII_ABILITY BIT(9) > +#define MII_ABILITY BIT(8) > +#define SGMII_ABILITY BIT(0) > + > +#define MII_BASIC_CONFIG 0xAFC6 > +#define MII_BASIC_CONFIG_REV BIT(8) > +#define MII_BASIC_CONFIG_SGMII 0x9 > +#define MII_BASIC_CONFIG_RGMII 0x7 > +#define MII_BASIC_CONFIG_RMII 0x5 > +#define MII_BASIC_CONFIG_MII 0x4 > + > +#define SYMBOL_ERROR_COUNTER 0x8350 > +#define LINK_DROP_COUNTER 0x8352 > +#define LINK_LOSSES_AND_FAILURES 0x8353 > +#define R_GOOD_FRAME_CNT 0xA950 > +#define R_BAD_FRAME_CNT 0xA952 > +#define R_RXER_FRAME_CNT 0xA954 > +#define RX_PREAMBLE_COUNT 0xAFCE > +#define TX_PREAMBLE_COUNT 0xAFCF > +#define RX_IPG_LENGTH 0xAFD0 > +#define TX_IPG_LENGTH 0xAFD1 > +#define COUNTERS_EN BIT(15) > + > +#define CLK_25MHZ_PS_PERIOD 40000UL > +#define PS_PER_DEGREE (CLK_25MHZ_PS_PERIOD / 360) > +#define MIN_ID_PS 8222U > +#define MAX_ID_PS 11300U Maybe include some prefix as to which MMD each of these registers is located? > +static bool nxp_c45_can_sleep(struct phy_device *phydev) > +{ > + int reg; > + > + reg = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_STAT1); > + if (reg < 0) > + return false; > + > + return !!(reg & MDIO_STAT1_LPOWERABLE); > +} This looks like it could be useful as a generic helper function - nothing in this function is specific to this PHY. > +static int nxp_c45_resume(struct phy_device *phydev) > +{ > + int reg; > + > + if (!nxp_c45_can_sleep(phydev)) > + return -EOPNOTSUPP; > + > + reg = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1); > + reg &= ~MDIO_CTRL1_LPOWER; > + phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1, reg); > + > + return 0; > +} > + > +static int nxp_c45_suspend(struct phy_device *phydev) > +{ > + int reg; > + > + if (!nxp_c45_can_sleep(phydev)) > + return -EOPNOTSUPP; > + > + reg = phy_read_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1); > + reg |= MDIO_CTRL1_LPOWER; > + phy_write_mmd(phydev, MDIO_MMD_PMAPMD, MDIO_CTRL1, reg); > + > + return 0; > +} These too look like potential generic helper functions. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!