netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Lunn <andrew@lunn.ch>
To: David Thompson <davthompson@nvidia.com>
Cc: "netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"kuba@kernel.org" <kuba@kernel.org>,
	Liming Sun <limings@nvidia.com>, Asmaa Mnebhi <asmaa@nvidia.com>
Subject: Re: [PATCH net-next v4] Add Mellanox BlueField Gigabit Ethernet driver
Date: Thu, 18 Mar 2021 02:14:43 +0100	[thread overview]
Message-ID: <YFKpg+DHZKCiP9+v@lunn.ch> (raw)
In-Reply-To: <MN2PR12MB297560E219744B3B1E2A768FC76B9@MN2PR12MB2975.namprd12.prod.outlook.com>

> > > +	if (device_property_read_u32(&pdev->dev, "version", &version)) {
> > > +		dev_err(&pdev->dev, "Version Info not found\n");
> > > +		return -EINVAL;
> > > +	}
> > 
> > Is this a device tree property? ACPI? If it is device tree property you need to
> > document the binding, Documentation/devicetree/bindinds/...
> > 
> 
> This driver gets its properties from an ACPI table, not from device tree.
> The "version" property is read from the ACPI table, and if an incompatible
> table version is found the driver does not load.  This logic allows the version
> of the driver and the version of the ACPI table to change and compatibility
> is ensured.  If there's a different/better way to do this, please let me know.

I tend to avoid ACPI. DT seems a better system. DT tries hard to not
break backwards compatibility. Hence it is not really versioned. The
fact you are versioning things and won't load if there is a version
mismatch suggests you don't think backward compatibility is that
important. I personally would not have a version, and promise to keep
backwards compatibility. The current properties you have seem simple
enough.

> 
> > > +
> > > +	if (version != (int)DRV_VERSION) {
> > > +		dev_err(&pdev->dev, "Version Mismatch. Expected %d
> > Returned %d\n",
> > > +			(int)DRV_VERSION, version);
> > > +		return -EINVAL;
> > > +	}
> > 
> > That is odd. Doubt odd. First of, why (int)1.19? Why not just set DRV_VERSION
> > to 1? This is the only place you use this, so the .19 seems pointless. Secondly,
> > what does this version in DT/ACPI actually represent? The hardware version?
> > Then you should be using a compatible string? Or read a hardware register which
> > tells you have hardware version.
> > 
> 
> The value of DRV_VERSION is 1.19 because it specifies the <major>.<minor>
> version of the driver.

Driver versions are pretty pointless. Don't you expect somebody to
back port this into a vendor kernel? Everything around it has
changed. What does this version then tell you? Nothing particularly
useful, since what you really want to know is the release tag in the
source tree, so you have the driver and everything around it you can
then debug.

> > > +
> > > +	err = device_property_read_u32(&pdev->dev, "phy-int-gpio",
> > &phy_int_gpio);
> > > +	if (err < 0)
> > > +		phy_int_gpio = MLXBF_GIGE_DEFAULT_PHY_INT_GPIO;
> > 
> > Again, this probably needs documenting. This is not how you do interrupts with
> > DT. I also don't think it is correct for ACPI, but i don't know ACPI.
> > 
> 
> Right, the "phy-int-gpio" is a property read from the ACPI table.
> Is there a convention for ACPI table use/documentation?

https://www.kernel.org/doc/html/latest/firmware-guide/acpi/gpio-properties.html

This seems to be the correct way to describe GPIOs in ACPI. But you
are using the GPIO as an interrupt sources. Either you need to get the
GPIO descriptor and then map it to an interrupt, or there might be
another way to describe interrupts in ACPI. I very much doubt
device_property_read_u32() is the correct way to do this, but as i
said, i try to avoid ACPI.
 
> > > +	phydev = phy_find_first(priv->mdiobus);
> > > +	if (!phydev) {
> > > +		mlxbf_gige_mdio_remove(priv);
> > > +		return -ENODEV;
> > > +	}
> > 
> > If you are using DT, please use a phandle to the device on the MDIO bus.
> > 
> 
> The code is not using DT.

Yes, you just have to hope the first device on the bus is the correct
device.

	Andrew

      reply	other threads:[~2021-03-18  1:15 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-10 12:46 [PATCH net-next v4] Add Mellanox BlueField Gigabit Ethernet driver David Thompson
2021-03-12  1:56 ` Andrew Lunn
2021-03-16 23:16   ` David Thompson
2021-03-12  2:19 ` Andrew Lunn
2021-03-16 23:28   ` David Thompson
2021-03-18  1:14     ` Andrew Lunn [this message]

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=YFKpg+DHZKCiP9+v@lunn.ch \
    --to=andrew@lunn.ch \
    --cc=asmaa@nvidia.com \
    --cc=davem@davemloft.net \
    --cc=davthompson@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=limings@nvidia.com \
    --cc=netdev@vger.kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).