Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp3610938pxb; Mon, 30 Aug 2021 06:35:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxg2z1St2heiTisp6wbGZkez2JoVBiIq5tLNChFxVM2Bqa11kEQTsIXrt6FQ7w0SJsr0N/m X-Received: by 2002:a92:cb0f:: with SMTP id s15mr16117463ilo.59.1630330516137; Mon, 30 Aug 2021 06:35:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630330516; cv=none; d=google.com; s=arc-20160816; b=rFQmHu60GdgDmIeLuT5L3YjrQnhltcO25zyqVCPHc6RdZ+pOsAYboWD+T4UqyfsQHi DTey5FDJSBqTlPr9ZXkob4yH9ffpDudJ5nDUTTCzhWxX7IYWwYLy4mEGZjjJOzJATCg1 l9ArE8nL4Lz/Q6/LBr11NQ+V4wDNqlentF3FAROOqql4YbkH9roERSlBomXopgAJGxXJ UrRC5b/GhcrJsGXuLGlrLjQfNn3bBwgGYF6wap1NC/uR1/jWTm6e2Y2caRZCqhVAip5f +CnXFlq5wFDZQmQUnfnfloDgd2W0J1O3NlGtf4e6DnkS8bM8ckMv99XwhNayr1NqLvf3 Ai6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=WWoMPuly9JjasrmMAELtnD9xCnZoOqZNrh1kbiw2GMg=; b=iucHTOY7bDvEm3yAm2AGqir85sHbzf7VHoLZx2L6beUVP4FSuP+FzAGH7aGM1UVnPk 1kiH80YzhsJhFIk9i47McWmOoDC2btIf6aNcF7S6xQayZWYJ1NMH2a374AVJffqeoyEa TUUtHRvfUK2vdnsfAucoEemx5VLUPBCYdKuoFUl9LVdeAGfK6Ls1O2MZ5aLl9ioItcjs C+T5OmTel3ITiMrXxsBR3oMpgeZHWbLN8k6NfWvClj9w4BHyLFiAv2n2jpfW3rovuVHT X847QzIHICZXKklWuTahlhzYarNJc64e/IpiiD5mjMETczBufCxW1CoVqArEwvwf51e6 OHpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lunn.ch header.s=20171124 header.b=gadLj+IY; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k11si15339407ili.81.2021.08.30.06.35.01; Mon, 30 Aug 2021 06:35:16 -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=pass header.i=@lunn.ch header.s=20171124 header.b=gadLj+IY; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236749AbhH3Nds (ORCPT + 99 others); Mon, 30 Aug 2021 09:33:48 -0400 Received: from vps0.lunn.ch ([185.16.172.187]:48438 "EHLO vps0.lunn.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235904AbhH3Ndr (ORCPT ); Mon, 30 Aug 2021 09:33:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lunn.ch; s=20171124; h=In-Reply-To:Content-Disposition:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:From:Sender:Reply-To:Subject: Date:Message-ID:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding: Content-ID:Content-Description:Content-Disposition:In-Reply-To:References; bh=WWoMPuly9JjasrmMAELtnD9xCnZoOqZNrh1kbiw2GMg=; b=gadLj+IYXsId0pedWIi13rMucB 2YVu28H9RTBKahrWOu8MH5UQbEUIliM9nuiZA+Q0ZiW4bOBf1PUjIbrYWAelg1PDvPCaVLyElYq/r 6vnzg2+HIbtzNl4E2tXtebnx116lCdje+NhcO88khrrPvwgy8yJ7Vs9WR+TLk/GtbsUo=; Received: from andrew by vps0.lunn.ch with local (Exim 4.94.2) (envelope-from ) id 1mKhP2-004Z5J-Ik; Mon, 30 Aug 2021 15:32:44 +0200 Date: Mon, 30 Aug 2021 15:32:44 +0200 From: Andrew Lunn To: Luo Jie Cc: hkallweit1@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, kuba@kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, sricharan@codeaurora.org Subject: Re: [PATCH v1 1/3] net: phy: improve the wol feature of at803x Message-ID: References: <20210830110733.8964-1-luoj@codeaurora.org> <20210830110733.8964-2-luoj@codeaurora.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210830110733.8964-2-luoj@codeaurora.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Aug 30, 2021 at 07:07:31PM +0800, Luo Jie wrote: > wol is controlled by bit 5 of reg 3.8012, which should be > configured by set_wol of phy_driver. > > Signed-off-by: Luo Jie > --- > drivers/net/phy/at803x.c | 50 +++++++++++++++++++++++----------------- > 1 file changed, 29 insertions(+), 21 deletions(-) > > diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c > index 5d62b85a4024..ecae26f11aa4 100644 > --- a/drivers/net/phy/at803x.c > +++ b/drivers/net/phy/at803x.c > @@ -70,10 +70,14 @@ > #define AT803X_CDT_STATUS_DELTA_TIME_MASK GENMASK(7, 0) > #define AT803X_LED_CONTROL 0x18 > > -#define AT803X_DEVICE_ADDR 0x03 > +/* WOL control */ > +#define AT803X_PHY_MMD3_WOL_CTRL 0x8012 > +#define AT803X_WOL_EN BIT(5) > + > #define AT803X_LOC_MAC_ADDR_0_15_OFFSET 0x804C > #define AT803X_LOC_MAC_ADDR_16_31_OFFSET 0x804B > #define AT803X_LOC_MAC_ADDR_32_47_OFFSET 0x804A > + > #define AT803X_REG_CHIP_CONFIG 0x1f > #define AT803X_BT_BX_REG_SEL 0x8000 > > @@ -328,12 +332,6 @@ static int at803x_set_wol(struct phy_device *phydev, > struct net_device *ndev = phydev->attached_dev; > const u8 *mac; > int ret; > - u32 value; > - unsigned int i, offsets[] = { > - AT803X_LOC_MAC_ADDR_32_47_OFFSET, > - AT803X_LOC_MAC_ADDR_16_31_OFFSET, > - AT803X_LOC_MAC_ADDR_0_15_OFFSET, > - }; > > if (!ndev) > return -ENODEV; > @@ -344,23 +342,30 @@ static int at803x_set_wol(struct phy_device *phydev, > if (!is_valid_ether_addr(mac)) > return -EINVAL; > > - for (i = 0; i < 3; i++) > - phy_write_mmd(phydev, AT803X_DEVICE_ADDR, offsets[i], > - mac[(i * 2) + 1] | (mac[(i * 2)] << 8)); > + phy_write_mmd(phydev, MDIO_MMD_PCS, AT803X_LOC_MAC_ADDR_32_47_OFFSET, > + mac[1] | (mac[0] << 8)); > + phy_write_mmd(phydev, MDIO_MMD_PCS, AT803X_LOC_MAC_ADDR_16_31_OFFSET, > + mac[3] | (mac[2] << 8)); > + phy_write_mmd(phydev, MDIO_MMD_PCS, AT803X_LOC_MAC_ADDR_0_15_OFFSET, > + mac[5] | (mac[4] << 8)); Please try to keep your changes minimal. It looks like all you really need is to replace AT803X_DEVICE_ADDR with MDIO_MMD_PCS. Everything else is O.K. Maybe make offset a const? Making the change more complex than it needs to be makes it harder to review. > > - value = phy_read(phydev, AT803X_INTR_ENABLE); > - value |= AT803X_INTR_ENABLE_WOL; > - ret = phy_write(phydev, AT803X_INTR_ENABLE, value); So that it be replaced with a phy_modify(). > + /* clear the pending interrupt */ > + phy_read(phydev, AT803X_INTR_STATUS); But where did this come from? > + > + ret = phy_modify(phydev, AT803X_INTR_ENABLE, 0, AT803X_INTR_ENABLE_WOL); > if (ret) > return ret; > - value = phy_read(phydev, AT803X_INTR_STATUS); > + > + ret = phy_modify_mmd(phydev, MDIO_MMD_PCS, AT803X_PHY_MMD3_WOL_CTRL, > + 0, AT803X_WOL_EN); > + > } else { > - value = phy_read(phydev, AT803X_INTR_ENABLE); > - value &= (~AT803X_INTR_ENABLE_WOL); > - ret = phy_write(phydev, AT803X_INTR_ENABLE, value); > + ret = phy_modify(phydev, AT803X_INTR_ENABLE, AT803X_INTR_ENABLE_WOL, 0); This makes sense > if (ret) > return ret; > - value = phy_read(phydev, AT803X_INTR_STATUS); > + > + ret = phy_modify_mmd(phydev, MDIO_MMD_PCS, AT803X_PHY_MMD3_WOL_CTRL, > + AT803X_WOL_EN, 0); But where did this come from? I could be wrong, but i get the feeling you just replaced the code with what you have in your new driver, rather than step by step improve this code. Please break this patch up into a number of patches: AT803X_DEVICE_ADDR with MDIO_MMD_PCS read/write to modify. Other patches for the remaining changes, if actually required, with a good explanation of why they are needed. Andrew