From: FUJITA Tomonori <fujita.tomonori@gmail.com>
To: andrew@lunn.ch
Cc: fujita.tomonori@gmail.com, netdev@vger.kernel.org,
rust-for-linux@vger.kernel.org, tmgross@umich.edu
Subject: Re: [PATCH net-next v1 2/4] rust: net::phy support C45 helpers
Date: Tue, 16 Apr 2024 20:40:30 +0900 (JST) [thread overview]
Message-ID: <20240416.204030.1728964191738742483.fujita.tomonori@gmail.com> (raw)
In-Reply-To: <e8a440c7-d0a6-4a5e-97ff-a8bcde662583@lunn.ch>
Hi,
On Mon, 15 Apr 2024 16:20:16 +0200
Andrew Lunn <andrew@lunn.ch> wrote:
>> + /// Reads a given C45 PHY register.
>> + /// This function reads a hardware register and updates the stats so takes `&mut self`.
>> + pub fn c45_read(&mut self, devad: u8, regnum: u16) -> Result<u16> {
>> + let phydev = self.0.get();
>> + // SAFETY: `phydev` is pointing to a valid object by the type invariant of `Self`.
>> + // So it's just an FFI call.
>> + let ret = unsafe {
>> + bindings::mdiobus_c45_read(
>> + (*phydev).mdio.bus,
>> + (*phydev).mdio.addr,
>> + devad as i32,
>> + regnum.into(),
>> + )
>
> So you have wrapped the C function mdiobus_c45_read(). This is going
> to do a C45 bus protocol read. For this to work, the MDIO bus master
> needs to support C45 bus protocol, and the PHY also needs to support
> the C45 bus protocol. Not all MDIO bus masters and PHY devices
> do. Some will need to use C45 over C22.
>
> A PHY driver should know if a PHY device supports C45 bus protocol,
> and if it supports C45 over C22. However, i PHY driver has no idea
> what the bus master supports.
>
> In phylib, we have a poorly defined phydev->is_c45. Its current
> meaning is: "The device was found using the C45 bus protocol, not C22
> protocol". One of the things phylib core then uses is_c45 for it to
> direct the C functions phy_read_mmd() and phy_write_mmd() to perform a
> C45 bus protocol access if true. If it is false, C45 over C22 is
> performed instead. As a result, if a PHY is discovered using C22, C45
> register access is then performed using C45 over C22, even thought the
> PHY and bus might support C45 bus protocol. is_c45 is also used in
> other places, e.g. to trigger auto-negotiation using C45 registers,
> not C22 registers.
Thanks a lot for the details!
> In summary, the C API is a bit of a mess.
>
> For the Rust API we have two sensible choices:
>
> 1) It is the same mess as the C API, so hopefully one day we will fix
> both at the same time.
>
> 2) We define a different API which correctly separate C45 bus access
> from C45 registers.
>
> How you currently defined the Rust API is neither of these.
Which do your prefer?
If I correctly understand the original driver code, C45 bus protocol
is used. Adding functions for C45 bus protocol read/write would be
enough for this driver, I guess.
next prev parent reply other threads:[~2024-04-16 11:40 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-15 10:46 [PATCH net-next v1 0/4] net: phy: add Applied Micro QT2025 PHY driver FUJITA Tomonori
2024-04-15 10:46 ` [PATCH net-next v1 1/4] rust: net::phy support config_init driver callback FUJITA Tomonori
2024-04-15 10:46 ` [PATCH net-next v1 2/4] rust: net::phy support C45 helpers FUJITA Tomonori
2024-04-15 14:20 ` Andrew Lunn
2024-04-16 11:40 ` FUJITA Tomonori [this message]
2024-04-16 12:38 ` Andrew Lunn
2024-04-16 13:21 ` FUJITA Tomonori
2024-04-16 22:07 ` Benno Lossin
2024-04-16 22:30 ` Andrew Lunn
2024-04-17 8:20 ` Benno Lossin
2024-04-17 13:34 ` Andrew Lunn
2024-04-18 12:47 ` Benno Lossin
2024-04-18 14:32 ` Andrew Lunn
2024-04-18 13:15 ` FUJITA Tomonori
2024-04-16 3:25 ` Trevor Gross
2024-05-27 2:00 ` FUJITA Tomonori
2024-04-15 10:47 ` [PATCH net-next v1 3/4] rust: net::phy support Firmware API FUJITA Tomonori
2024-04-15 11:10 ` Greg KH
2024-04-18 12:51 ` FUJITA Tomonori
2024-04-18 13:05 ` Greg KH
2024-04-18 13:07 ` Greg KH
2024-04-18 13:35 ` FUJITA Tomonori
2024-04-15 13:30 ` Andrew Lunn
2024-04-15 15:45 ` Danilo Krummrich
2024-04-18 13:10 ` FUJITA Tomonori
2024-04-15 10:47 ` [PATCH net-next v1 4/4] net: phy: add Applied Micro QT2025 PHY driver FUJITA Tomonori
2024-04-15 11:15 ` Greg KH
2024-04-18 13:00 ` FUJITA Tomonori
2024-04-18 13:10 ` Greg KH
2024-04-18 13:22 ` FUJITA Tomonori
2024-04-18 14:42 ` Andrew Lunn
2024-04-15 13:48 ` Andrew Lunn
2024-04-15 16:53 ` Andrew Lunn
2024-04-16 4:34 ` Trevor Gross
2024-04-16 6:58 ` Benno Lossin
2024-04-16 11:16 ` FUJITA Tomonori
2024-04-16 12:08 ` Andrew Lunn
2024-05-24 1:50 ` FUJITA Tomonori
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=20240416.204030.1728964191738742483.fujita.tomonori@gmail.com \
--to=fujita.tomonori@gmail.com \
--cc=andrew@lunn.ch \
--cc=netdev@vger.kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--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 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).