Message ID | 20241114070234.116329-8-fujita.tomonori@gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | rust: Add IO polling | expand |
On Thu, Nov 14, 2024 at 04:02:34PM +0900, FUJITA Tomonori wrote: > Wait until a PHY becomes ready in the probe callback by > using read_poll_timeout function. > > Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com> > --- > drivers/net/phy/qt2025.rs | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/phy/qt2025.rs b/drivers/net/phy/qt2025.rs > index 28d8981f410b..c042f2f82bb9 100644 > --- a/drivers/net/phy/qt2025.rs > +++ b/drivers/net/phy/qt2025.rs > @@ -12,6 +12,7 @@ > use kernel::c_str; > use kernel::error::code; > use kernel::firmware::Firmware; > +use kernel::io::poll::read_poll_timeout; > use kernel::net::phy::{ > self, > reg::{Mmd, C45}, > @@ -19,6 +20,7 @@ > }; > use kernel::prelude::*; > use kernel::sizes::{SZ_16K, SZ_8K}; > +use kernel::time::Delta; > > kernel::module_phy_driver! { > drivers: [PhyQT2025], > @@ -93,7 +95,13 @@ fn probe(dev: &mut phy::Device) -> Result<()> { > // The micro-controller will start running from SRAM. > dev.write(C45::new(Mmd::PCS, 0xe854), 0x0040)?; > > - // TODO: sleep here until the hw becomes ready. > + read_poll_timeout( > + || dev.read(C45::new(Mmd::PCS, 0xd7fd)), > + |val| val != 0x00 && val != 0x10, Do we have any idea what these magic numbers mean? Can we replace the numbers with names? Apart from that, this patch looks O.K. Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
diff --git a/drivers/net/phy/qt2025.rs b/drivers/net/phy/qt2025.rs index 28d8981f410b..c042f2f82bb9 100644 --- a/drivers/net/phy/qt2025.rs +++ b/drivers/net/phy/qt2025.rs @@ -12,6 +12,7 @@ use kernel::c_str; use kernel::error::code; use kernel::firmware::Firmware; +use kernel::io::poll::read_poll_timeout; use kernel::net::phy::{ self, reg::{Mmd, C45}, @@ -19,6 +20,7 @@ }; use kernel::prelude::*; use kernel::sizes::{SZ_16K, SZ_8K}; +use kernel::time::Delta; kernel::module_phy_driver! { drivers: [PhyQT2025], @@ -93,7 +95,13 @@ fn probe(dev: &mut phy::Device) -> Result<()> { // The micro-controller will start running from SRAM. dev.write(C45::new(Mmd::PCS, 0xe854), 0x0040)?; - // TODO: sleep here until the hw becomes ready. + read_poll_timeout( + || dev.read(C45::new(Mmd::PCS, 0xd7fd)), + |val| val != 0x00 && val != 0x10, + Delta::from_millis(50), + Delta::from_secs(3), + )?; + Ok(()) }
Wait until a PHY becomes ready in the probe callback by using read_poll_timeout function. Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com> --- drivers/net/phy/qt2025.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)