From: "Benno Lossin" <lossin@kernel.org>
To: "FUJITA Tomonori" <fujita.tomonori@gmail.com>
Cc: <ansuelsmth@gmail.com>, <andrew+netdev@lunn.ch>,
<davem@davemloft.net>, <edumazet@google.com>, <kuba@kernel.org>,
<pabeni@redhat.com>, <robh@kernel.org>, <krzk+dt@kernel.org>,
<conor+dt@kernel.org>, <hkallweit1@gmail.com>,
<linux@armlinux.org.uk>, <florian.fainelli@broadcom.com>,
<bcm-kernel-feedback-list@broadcom.com>, <kabel@kernel.org>,
<andrei.botila@oss.nxp.com>, <tmgross@umich.edu>,
<ojeda@kernel.org>, <alex.gaynor@gmail.com>,
<boqun.feng@gmail.com>, <gary@garyguo.net>,
<bjorn3_gh@protonmail.com>, <benno.lossin@proton.me>,
<a.hindborg@kernel.org>, <aliceryhl@google.com>,
<dakr@kernel.org>, <sd@queasysnail.net>, <michael@fossekall.de>,
<daniel@makrotopia.org>, <netdev@vger.kernel.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<rust-for-linux@vger.kernel.org>
Subject: Re: [net-next PATCH v10 7/7] rust: net::phy sync with match_phy_device C changes
Date: Mon, 19 May 2025 14:32:44 +0200 [thread overview]
Message-ID: <DA051LGPX0NX.20CQCK4V3B6PF@kernel.org> (raw)
In-Reply-To: <20250519.210059.2097701450976383427.fujita.tomonori@gmail.com>
On Mon May 19, 2025 at 2:00 PM CEST, FUJITA Tomonori wrote:
> On Sat, 17 May 2025 21:02:51 +0200
> "Benno Lossin" <lossin@kernel.org> wrote:
>>>> I think that's wrong, nothing stops me from implementing `Driver` for an
>>>> empty enum and that can't be instantiated. The reason that one wants to
>>>> have this in C is because the same `match` function is used for
>>>> different drivers (or maybe devices? I'm not too familiar with the
>>>> terminology). In Rust, you must implement the match function for a
>>>> single PHY_DEVICE_ID only, so maybe we don't need to change the
>>>> signature at all?
>>>
>>> I'm not sure I understand the last sentence. The Rust PHY abstraction
>>> allows one module to support multiple drivers. So we can could the
>>> similar trick that the second patch in this patchset does.
>>>
>>> fn match_device_id(dev: &mut phy::Device, drv: &phy::DriverVTable) -> bool {
>>> // do comparison workking for three drivers
>>> }
>>
>> I wouldn't do it like this in Rust, instead this would be a "rustier"
>> function signature:
>>
>> fn match_device_id<T: Driver>(dev: &mut phy::Device) -> bool {
>> // do the comparison with T::PHY_DEVICE_ID
>> dev.id() == T::PHY_DEVICE_ID
>> }
>>
>> And then in the impls for Phy{A,B,C,D} do this:
>>
>> impl Driver for PhyA {
>> fn match_phy_device(dev: &mut phy::Device) -> bool {
>> match_device_id::<Self>(dev)
>> }
>> }
>
> Ah, yes, this works well.
>
>
>>> The other use case, as mentioned above, is when using the generic helper
>>> function inside match_phy_device() callback. For example, the 4th
>>> patch in this patchset adds genphy_match_phy_device():
>>>
>>> int genphy_match_phy_device(struct phy_device *phydev,
>>> const struct phy_driver *phydrv)
>>>
>>> We could add a wrapper for this function as phy::Device's method like
>>>
>>> impl Device {
>>> ...
>>> pub fn genphy_match_phy_device(&self, drv: &phy::DriverVTable) -> i32
>>
>> Not sure why this returns an `i32`, but we probably could have such a
>
> Maybe a bool would be more appropriate here because the C's comment
> says:
>
> Return: 1 if the PHY device matches the driver, 0 otherwise.
>
>> function as well (though I wouldn't use the vtable for that).
>
> What would you use instead?
The concept that I sketched above:
impl Device {
fn genphy_match_phy_device<T: Driver>(&self) -> bool {
self.phy_id() == T::PHY_DEVICE_ID.id
}
}
---
Cheers,
Benno
next prev parent reply other threads:[~2025-05-19 12:32 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-15 11:27 [net-next PATCH v10 0/7] net: phy: Add support for new Aeonsemi PHYs Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 1/7] net: phy: pass PHY driver to .match_phy_device OP Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 2/7] net: phy: bcm87xx: simplify " Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 3/7] net: phy: nxp-c45-tja11xx: " Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 4/7] net: phy: introduce genphy_match_phy_device() Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 5/7] net: phy: Add support for Aeonsemi AS21xxx PHYs Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 6/7] dt-bindings: net: Document support for Aeonsemi PHYs Christian Marangi
2025-05-15 11:27 ` [net-next PATCH v10 7/7] rust: net::phy sync with match_phy_device C changes Christian Marangi
2025-05-15 11:49 ` Benno Lossin
2025-05-15 11:51 ` Christian Marangi
2025-05-15 12:01 ` Benno Lossin
2025-05-16 11:56 ` kernel test robot
2025-05-16 12:30 ` FUJITA Tomonori
2025-05-16 14:48 ` Benno Lossin
2025-05-16 15:12 ` Christian Marangi
2025-05-16 20:16 ` Benno Lossin
2025-05-17 6:27 ` FUJITA Tomonori
2025-05-17 8:06 ` Benno Lossin
2025-05-17 13:13 ` FUJITA Tomonori
2025-05-17 19:02 ` Benno Lossin
2025-05-17 20:09 ` Christian Marangi
2025-05-18 7:13 ` Benno Lossin
2025-05-19 12:00 ` FUJITA Tomonori
2025-05-19 12:32 ` Benno Lossin [this message]
2025-05-19 12:44 ` FUJITA Tomonori
2025-05-19 12:51 ` Benno Lossin
2025-05-19 12:58 ` FUJITA Tomonori
2025-05-16 15:10 ` Christian Marangi
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=DA051LGPX0NX.20CQCK4V3B6PF@kernel.org \
--to=lossin@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=andrei.botila@oss.nxp.com \
--cc=andrew+netdev@lunn.ch \
--cc=ansuelsmth@gmail.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=conor+dt@kernel.org \
--cc=dakr@kernel.org \
--cc=daniel@makrotopia.org \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=florian.fainelli@broadcom.com \
--cc=fujita.tomonori@gmail.com \
--cc=gary@garyguo.net \
--cc=hkallweit1@gmail.com \
--cc=kabel@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=michael@fossekall.de \
--cc=netdev@vger.kernel.org \
--cc=ojeda@kernel.org \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=sd@queasysnail.net \
--cc=tmgross@umich.edu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.