From: Andrew Lunn <andrew@lunn.ch>
To: Daniel Golle <daniel@makrotopia.org>
Cc: Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Simon Horman <horms@kernel.org>,
Russell King <linux@armlinux.org.uk>,
netdev@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, Frank Wunderlich <frankwu@gmx.de>,
Avinash Jayaraman <ajayaraman@maxlinear.com>,
Bing tao Xu <bxu@maxlinear.com>, Liang Xu <lxu@maxlinear.com>,
Juraj Povazanec <jpovazanec@maxlinear.com>,
"Fanni (Fang-Yi) Chan" <fchan@maxlinear.com>,
"Benny (Ying-Tsan) Weng" <yweng@maxlinear.com>,
"Livia M. Rosu" <lrosu@maxlinear.com>,
John Crispin <john@phrozen.org>
Subject: Re: [PATCH RFC net-next 3/3] net: dsa: add basic initial driver for MxL862xx switches
Date: Wed, 10 Dec 2025 19:56:13 +0100 [thread overview]
Message-ID: <d5ea5bee-40c5-43f5-9238-ced5ca1904b7@lunn.ch> (raw)
In-Reply-To: <aTmPjw83jFQXgWQt@makrotopia.org>
> Imho it would be nice to introduce unlock __mdiodev_c45_* helpers in
> include/linux/mdio.h, ie.
>
> static inline int __mdiodev_c45_read(struct mdio_device *mdiodev, int devad,
> u16 regnum)
> {
> return __mdiobus_c45_read(mdiodev->bus, mdiodev->addr, devad, regnum);
> }
>
> static inline int __mdiodev_c45_write(struct mdio_device *mdiodev, u32 devad,
> u16 regnum, u16 val)
> {
> return __mdiobus_c45_write(mdiodev->bus, mdiodev->addr, devad, regnum,
> val);
> }
https://elixir.bootlin.com/linux/v6.18/source/drivers/net/phy/mdio_bus.c#L531
> static int mxl862xx_reg_read(struct mxl862xx_priv *priv, u32 addr)
> {
> return __mdiodev_c45_read(priv->mdiodev, MDIO_MMD_VEND1, addr);
> }
>
> static int mxl862xx_reg_write(struct mxl862xx_priv *priv, u32 addr, u16 data)
> {
> return __mdiodev_c45_write(priv->mdiodev, MDIO_MMD_VEND1, addr, data);
> }
>
> static int mxl862xx_ctrl_read(struct mxl862xx_priv *priv)
> {
> return mxl862xx_reg_read(priv, MXL862XX_MMD_REG_CTRL);
> }
>
> static int mxl862xx_busy_wait(struct mxl862xx_priv *priv)
> {
> int val;
>
> return readx_poll_timeout(mxl862xx_ctrl_read, priv, val,
> !(val & CTRL_BUSY_MASK), 15, 10000);
> }
>
> Do you agree?
This part, yes.
> > > + if (result < 0) {
> > > + ret = result;
> > > + goto out;
> > > + }
> >
> > If i'm reading mxl862xx_send_cmd() correct, result is the value of a
> > register. It seems unlikely this is a Linux error code?
>
> Only someone with insights into the use of error codes by the uC
> firmware can really answer that. However, as also Russell pointed out,
> the whole use of s16 here with negative values being interpreted as
> errors is fishy here, because in the end this is also used to read
> registers from external MDIO connected PHYs which may return arbitrary
> 16-bit values...
> Someone in MaxLinear will need to clarify here.
It looks wrong, and since different architectures use different error
code values, it is hard to get right. I would suggest you just return
EPROTO or EIO and add a netdev_err() to print the value of result.
> > > +#define MXL862XX_API_WRITE(dev, cmd, data) \
> > > + mxl862xx_api_wrap(dev, cmd, &(data), sizeof((data)), false)
> > > +#define MXL862XX_API_READ(dev, cmd, data) \
> > > + mxl862xx_api_wrap(dev, cmd, &(data), sizeof((data)), true)
> >
> > > +/* PHY access via firmware relay */
> > > +static int mxl862xx_phy_read_mmd(struct mxl862xx_priv *priv, int port,
> > > + int devadd, int reg)
> > > +{
> > > + struct mdio_relay_data param = {
> > > + .phy = port,
> > > + .mmd = devadd,
> > > + .reg = reg & 0xffff,
> > > + };
> > > + int ret;
> > > +
> > > + ret = MXL862XX_API_READ(priv, INT_GPHY_READ, param);
> >
> > That looks a bit ugly, using a macro as a function name. I would
> > suggest tiny functions rather than macros. The compiler should do the
> > right thing.
>
> The thing is that the macro way allows to use MXL862XX_API_* on
> arbitrary types, such as the packed structs. Using a function would
> require the type of the parameter to be defined, which would result
> in a lot of code duplication in this case.
How many different invocations of these macros are there? For MDIO you
need two. How many more are there?
Andrew
next prev parent reply other threads:[~2025-12-10 18:56 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-02 23:37 [PATCH RFC net-next 0/3] net: dsa: initial support for MaxLinear MxL862xx switches Daniel Golle
2025-12-02 23:37 ` [PATCH RFC net-next 1/3] dt-bindings: net: dsa: add bindings for MaxLinear MxL862xx Daniel Golle
2025-12-02 23:37 ` [PATCH RFC net-next 2/3] net: dsa: add tag formats for MxL862xx switches Daniel Golle
2025-12-03 1:15 ` Andrew Lunn
2025-12-02 23:38 ` [PATCH RFC net-next 3/3] net: dsa: add basic initial driver " Daniel Golle
2025-12-03 2:07 ` Andrew Lunn
2025-12-03 9:29 ` Russell King (Oracle)
2025-12-10 15:19 ` Daniel Golle
2025-12-10 18:56 ` Andrew Lunn [this message]
2025-12-10 19:05 ` Daniel Golle
2025-12-12 16:49 ` Daniel Golle
2025-12-12 17:02 ` Andrew Lunn
2025-12-04 0:59 ` Russell King (Oracle)
2025-12-03 20:26 ` [PATCH RFC net-next 0/3] net: dsa: initial support for MaxLinear " Vladimir Oltean
2025-12-03 23:23 ` Daniel Golle
2025-12-04 1:02 ` Russell King (Oracle)
2025-12-04 13:08 ` Daniel Golle
2025-12-04 14:05 ` Russell King (Oracle)
2025-12-04 8:46 ` Vladimir Oltean
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=d5ea5bee-40c5-43f5-9238-ced5ca1904b7@lunn.ch \
--to=andrew@lunn.ch \
--cc=ajayaraman@maxlinear.com \
--cc=bxu@maxlinear.com \
--cc=conor+dt@kernel.org \
--cc=daniel@makrotopia.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=fchan@maxlinear.com \
--cc=frankwu@gmx.de \
--cc=horms@kernel.org \
--cc=john@phrozen.org \
--cc=jpovazanec@maxlinear.com \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=lrosu@maxlinear.com \
--cc=lxu@maxlinear.com \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--cc=yweng@maxlinear.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;
as well as URLs for NNTP newsgroup(s).