Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp20937pxa; Mon, 10 Aug 2020 17:23:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyVRyA7sZgX4rra+Prh3k9HgIBPt39ozr9qOpN0oQnzk0AYSzZ42FMD5r6aEyZMvhBzJM3U X-Received: by 2002:a17:906:7715:: with SMTP id q21mr23745755ejm.251.1597105432005; Mon, 10 Aug 2020 17:23:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597105431; cv=none; d=google.com; s=arc-20160816; b=kFfukOFPhIetjmvVr7GPeap7OEEY5QPd9r5MeoIcdIQqp9vK+2AvrQXNWKIhVb4NEX ERTyaR2Zsk+wvRHEjpZ9bQjLsRGPlYGVcHbjs3J8ZZ4Wp5N6n1/+InopwwIkZQ9Z7FuO fiEm0FOapAVDCZ85Ejdq2LZFwOGbGqLKHGVyl8ykB7/2cJaxmrmmHCatBDAugeuMor5x ZD3tWoekoZD8B3V+J8CIF4WA2/+nrKD6Uy6ni48uTojIFZCtSykCmhN9RaLHNxyvnE1z 2Nw4IsMWORkGDASPiKqCvDLA0m8jb/p6xf+ououRd2oDksXvF68ikXxYDgCz2cykGnAa N1mg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=A79xJ6+iLD84z5jiWfUplDoJZZkaQ9OgfLwPpnGagYE=; b=QAWYYPuaIJmbi37B2AKTNoSeGAn+3TbFqaLmntwWAIPKxqIdAbbHFFxwBZ6ONK4Fn5 f+WFKOy5ObcLT1P77Hcbf26x0/ZgvsMLl1i7gqxp4Pp1EKBPsVVz2GarWv+4YDLypp6o WfwkUPY5LEEydGHo1Z8z5S+CLoorZ5352W1TBhusrbhkOzTltRJ2ixEHD+qi51RIucZJ 4wgxUTAEOXM8qyzskmvs0sY/3+nKGwM5GA+OjS6a6+Xzc6hSgFFbzTtHUkAiEd0G799m 5ZPRDR34jo/I4StB1cLPlzFOe1VKmiCgzlIW/dxB15XikGmBp8Ix82zM8FohAAD2Be4F Psjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=Cut0rtNt; 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 ov32si12772344ejb.218.2020.08.10.17.23.29; Mon, 10 Aug 2020 17:23:51 -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 (test mode) header.i=@ideasonboard.com header.s=mail header.b=Cut0rtNt; 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 S1727077AbgHKAUd (ORCPT + 99 others); Mon, 10 Aug 2020 20:20:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33306 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726733AbgHKAUc (ORCPT ); Mon, 10 Aug 2020 20:20:32 -0400 Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 807AFC06174A for ; Mon, 10 Aug 2020 17:20:32 -0700 (PDT) Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id B21A158; Tue, 11 Aug 2020 02:20:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1597105230; bh=keX5QvlxidUvTCX6mbkM8E28WiUaAlc2f2K8eUfsH9o=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Cut0rtNtcxP6H+KUsa1VHoQftdsMyeidFBWG0CQeBZzcsicFH0jVxZY2TNQmWg31n x3RGj28QbVzPW2ptmrKQLPXfonFRtyEpjl5ZhbL8R49/oaFi23LYjc24UQ5KPGsKUI IIbFrISoCIc7ONOQ/6o9EK36htE44B3qqQ4okc/Y= Date: Tue, 11 Aug 2020 03:20:17 +0300 From: Laurent Pinchart To: Swapnil Jakhade Cc: vkoul@kernel.org, kishon@ti.com, linux-kernel@vger.kernel.org, maxime@cerno.tech, mparab@cadence.com, yamonkar@cadence.com, nsekhar@ti.com, tomi.valkeinen@ti.com, jsarha@ti.com, praneeth@ti.com Subject: Re: [PATCH v4 1/2] phy: Add new PHY attribute max_link_rate and APIs to get/set PHY attributes Message-ID: <20200811002017.GA6845@pendragon.ideasonboard.com> References: <1594968633-12535-1-git-send-email-sjakhade@cadence.com> <1594968633-12535-2-git-send-email-sjakhade@cadence.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <1594968633-12535-2-git-send-email-sjakhade@cadence.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Swapnil, Thank you for the patch. On Fri, Jul 17, 2020 at 08:50:32AM +0200, Swapnil Jakhade wrote: > Add new PHY attribute max_link_rate to struct phy_attrs. > Add a pair of PHY APIs to get/set all the PHY attributes. > Use phy_get_attrs() to get attribute values and phy_set_attrs() > to set attribute values. > > Signed-off-by: Yuti Amonkar > Signed-off-by: Swapnil Jakhade > --- > include/linux/phy/phy.h | 26 ++++++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h > index bcee8eba62b3..5d8ebb056c1d 100644 > --- a/include/linux/phy/phy.h > +++ b/include/linux/phy/phy.h > @@ -115,10 +115,12 @@ struct phy_ops { > /** > * struct phy_attrs - represents phy attributes > * @bus_width: Data path width implemented by PHY > + * @max_link_rate: Maximum link rate supported by PHY (in Mbps) > * @mode: PHY mode > */ > struct phy_attrs { > u32 bus_width; > + u32 max_link_rate; > enum phy_mode mode; > }; > > @@ -231,6 +233,20 @@ static inline void phy_set_bus_width(struct phy *phy, int bus_width) > { > phy->attrs.bus_width = bus_width; > } > + > +static inline void phy_get_attrs(struct phy *phy, struct phy_attrs *attrs) > +{ > + mutex_lock(&phy->mutex); > + memcpy(attrs, &phy->attrs, sizeof(struct phy_attrs)); > + mutex_unlock(&phy->mutex); > +} > + > +static inline void phy_set_attrs(struct phy *phy, struct phy_attrs attrs) Passing the second argument by (const) pointer would be more efficient. > +{ > + mutex_lock(&phy->mutex); > + memcpy(&phy->attrs, &attrs, sizeof(struct phy_attrs)); > + mutex_unlock(&phy->mutex); > +} These two functions should be documented. I'm a but puzzled by the need to protect the data with phy->mutex. Isn't phy->attrs static, initialized at driver probe time, and then never changed ? If so I think we can just access it directly, both in the PHY provider and consumer. If the data can change at runtime, then the documentation of these functions need to explain what can change, and when. > struct phy *phy_get(struct device *dev, const char *string); > struct phy *phy_optional_get(struct device *dev, const char *string); > struct phy *devm_phy_get(struct device *dev, const char *string); > @@ -389,6 +405,16 @@ static inline void phy_set_bus_width(struct phy *phy, int bus_width) > return; > } > > +static inline void phy_get_attrs(struct phy *phy, struct phy_attrs *attrs) > +{ > + return; > +} > + > +static inline void phy_set_attrs(struct phy *phy, struct phy_attrs attrs) > +{ > + return; > +} > + > static inline struct phy *phy_get(struct device *dev, const char *string) > { > return ERR_PTR(-ENOSYS); -- Regards, Laurent Pinchart