rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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.

  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).