public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Swapnil Kashinath Jakhade <sjakhade@cadence.com>
Cc: "vkoul@kernel.org" <vkoul@kernel.org>,
	"kishon@ti.com" <kishon@ti.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"maxime@cerno.tech" <maxime@cerno.tech>,
	Milind Parab <mparab@cadence.com>,
	Yuti Suresh Amonkar <yamonkar@cadence.com>,
	"nsekhar@ti.com" <nsekhar@ti.com>,
	"tomi.valkeinen@ti.com" <tomi.valkeinen@ti.com>,
	"jsarha@ti.com" <jsarha@ti.com>,
	"praneeth@ti.com" <praneeth@ti.com>
Subject: Re: [PATCH v5 2/2] phy: cadence-torrent: Use kernel PHY API to set PHY attributes
Date: Wed, 2 Sep 2020 15:17:22 +0300	[thread overview]
Message-ID: <20200902121722.GA16811@pendragon.ideasonboard.com> (raw)
In-Reply-To: <DM6PR07MB6154CC4A67BC3568A7339CC9C52F0@DM6PR07MB6154.namprd07.prod.outlook.com>

Hi Swapnil,

On Wed, Sep 02, 2020 at 07:09:21AM +0000, Swapnil Kashinath Jakhade wrote:
> On Wednesday, September 2, 2020 6:00 AM Laurent Pinchart wrote:
> > On Mon, Aug 24, 2020 at 08:28:31PM +0200, Swapnil Jakhade wrote:
> > > Use generic PHY framework function phy_set_attrs() to set number of
> > > lanes and maximum link rate supported by PHY.
> > >
> > > Signed-off-by: Swapnil Jakhade <sjakhade@cadence.com>
> > > Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
> > > ---
> > >  drivers/phy/cadence/phy-cadence-torrent.c | 7 +++++++
> > >  1 file changed, 7 insertions(+)
> > >
> > > diff --git a/drivers/phy/cadence/phy-cadence-torrent.c
> > > b/drivers/phy/cadence/phy-cadence-torrent.c
> > > index 7116127358ee..eca71467c4a8 100644
> > > --- a/drivers/phy/cadence/phy-cadence-torrent.c
> > > +++ b/drivers/phy/cadence/phy-cadence-torrent.c
> > > @@ -1710,6 +1710,7 @@ static int cdns_torrent_phy_probe(struct platform_device *pdev)
> > >  	struct cdns_torrent_phy *cdns_phy;
> > >  	struct device *dev = &pdev->dev;
> > >  	struct phy_provider *phy_provider;
> > > +	struct phy_attrs torrent_attr;
> > >  	const struct of_device_id *match;
> > >  	struct cdns_torrent_data *data;
> > >  	struct device_node *child;
> > > @@ -1852,6 +1853,12 @@ static int cdns_torrent_phy_probe(struct platform_device *pdev)
> > >  				 cdns_phy->phys[node].num_lanes,
> > >  				 cdns_phy->max_bit_rate / 1000,
> > >  				 cdns_phy->max_bit_rate % 1000);
> > > +
> > > +			torrent_attr.bus_width = cdns_phy- >phys[node].num_lanes;
> > > +			torrent_attr.max_link_rate = cdns_phy->max_bit_rate;
> > > +			torrent_attr.mode = PHY_MODE_DP;
> > > +
> > > +			phy_set_attrs(gphy, &torrent_attr);
> > 
> > Why is this better than accessing the attributes manually as follows ?
> > 
> > 			gphy->attrs.bus_width = cdns_phy->phys[node].num_lanes;
> > 			gphy->attrs.max_link_rate = cdns_phy->max_bit_rate;
> > 			gphy->attrs.mode = PHY_MODE_DP;
> > 
> > This is called in cdns_torrent_phy_probe(), before the PHY provider is
> > registered, so nothing can access the PHY yet. What race condition are you
> > trying to protect against with usage of phy_set_attrs() ?
> 
> I agree that for Cadence DP bridge driver and Torrent PHY driver use case, it
> would not matter even if we set the attributes in Torrent PHY driver in a way
> you suggested above.
> But as per the discussion in [1], phy_set_attrs/phy_get_attrs APIs in future could
> maybe used by other drivers replacing existing individual functions for attributes
> bus_width and mode which are phy_set_bus_width/phy_get_bus_width and
> phy_set_mode/phy_get_mode. So this usage in Torrent PHY driver is an example
> implementation of the API.
> 
> [1] https://lkml.org/lkml/2020/5/18/472

This doesn't seem a very good API to me :-S It will require callers to
always call phy_get_attrs() first, modify the attributes they want to
set, and then call phy_set_attrs(). Not only will be copy the whole
phy_attrs structure needlessly, it will also not be an atomic operation
as someone else could modify attributes between the get and set calls.
The lack of atomicity may not be an issue in practice if there's a
single user of the PHY at all times, but in that case no mutex is
needed.

I think this series tries to fix a problem that doesn't exist.

> > >  		} else {
> > >  			dev_err(dev, "Driver supports only PHY_TYPE_DP\n");
> > >  			ret = -ENOTSUPP;

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2020-09-02 12:18 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-24 18:28 [PATCH v5 0/2] Add new PHY APIs to framework to get/set PHY attributes Swapnil Jakhade
2020-08-24 18:28 ` [PATCH v5 1/2] phy: Add new PHY attribute max_link_rate and APIs " Swapnil Jakhade
2020-09-02  0:26   ` Laurent Pinchart
2020-09-02  6:52     ` Swapnil Kashinath Jakhade
2020-08-24 18:28 ` [PATCH v5 2/2] phy: cadence-torrent: Use kernel PHY API to set " Swapnil Jakhade
2020-09-02  0:29   ` Laurent Pinchart
2020-09-02  7:09     ` Swapnil Kashinath Jakhade
2020-09-02 12:17       ` Laurent Pinchart [this message]
2020-09-03 10:59         ` Swapnil Kashinath Jakhade
2020-09-03 11:30           ` Kishon Vijay Abraham I
2020-09-03 15:29             ` Laurent Pinchart
2020-09-08 14:15               ` Milind Parab
2020-09-10  6:15                 ` Kishon Vijay Abraham I
2020-09-11 10:54                   ` Vinod Koul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200902121722.GA16811@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=jsarha@ti.com \
    --cc=kishon@ti.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maxime@cerno.tech \
    --cc=mparab@cadence.com \
    --cc=nsekhar@ti.com \
    --cc=praneeth@ti.com \
    --cc=sjakhade@cadence.com \
    --cc=tomi.valkeinen@ti.com \
    --cc=vkoul@kernel.org \
    --cc=yamonkar@cadence.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox