All of lore.kernel.org
 help / color / mirror / Atom feed
* PHY VSC8531 MDIO data not reflected in ethernet/ sub-module
@ 2023-05-11  1:05 Ron Eggler
  2023-05-11 15:34 ` Andrew Lunn
  0 siblings, 1 reply; 6+ messages in thread
From: Ron Eggler @ 2023-05-11  1:05 UTC (permalink / raw)
  To: netdev

Hi, Everybody,

I've posted here previously about the bring up of two network interfaces 
on an embedded platform that is using two the Microsemi VSC8531 PHYs. 
(two previous threads: "issues to bring up two VSC8531 PHYs" & "Unable 
to TX data on VSC8531". Thanks to Heiner Kallweit, Andrew Lunn, Horatiu 
Vultur & everybody else who might be following along)!

A quick summary of the previous threads is: No matter what speed the PHY 
negotiates to 10/100 or 1G, the RGMII TX_CLK always remains at 2.5MHz 
(which would be frequency for 10baseT). I'm starting yet another thread 
as I have realized that the MDIO information does not seem to propagate 
through to the drivers/net/ethernet/renesas/ravb_main.c which utilizes 
the function *ravb_set_rate_gbeth() to set the MPU's registers correctly 
(which is needed to get the correct frequency on the RGMII bus). **
I have not found a potential reason for this, the MDIO comms appear to 
work properly as I can retrieve information with the mdio and the 
mii-tool utility properly.
**I've added printk debug logs with to ravb_main.c and found out that 
the link state nor the speed do not appear to be propagated through 
properly (when compared with mii-tool).*
***The logs generated look like:*
***
# dmesg | grep DEBUG*
***[ 6.728165] DEBUG: in ravb_emac_init_gbeth(), calling 
ravb_set_rate_gbeth(), priv->duplex: 0, priv->speed: 0*
***[ 6.751973] DEBUG: in ravb_set_rate_gbeth() - priv->speed 0*
***[ 6.831153] DEBUG: in ravb_adjust_link(), phydev->speed -1, 
priv->speed 0*
***[ 6.839952] DEBUG: in ravb_adjust_link(), priv->no_avb_link 0, 
phydev->link 0*
***[ 6.847093] DEBUG: in ravb_adjust_link(), phydev->autoneg_complete: 0*
***[ 6.853514] DEBUG: in ravb_adjust_link(),phydev->link 0*
***[ 6.883683] DEBUG: in ravb_emac_init_gbeth(), calling 
ravb_set_rate_gbeth(), priv->duplex: 0, priv->speed: 0*
***[ 6.898551] DEBUG: in ravb_set_rate_gbeth() - priv->speed 0*
***[ 6.963742] DEBUG: in ravb_adjust_link(), phydev->speed -1, 
priv->speed 0*
***[ 6.973404] DEBUG: in ravb_adjust_link(), priv->no_avb_link 0, 
phydev->link 0*
***[ 6.981869] DEBUG: in ravb_adjust_link(), phydev->autoneg_complete: 0*
***[ 6.989645] DEBUG: in ravb_adjust_link(),phydev->link 0
*

**


Which has been generated by application of the following patch file: 
https://github.com/MistySOM/meta-mistysom/blob/phy-enable/recipes-kernel/linux/smarc-rzg2l/0002-add-phy_debug_logs.patch

While I also receive the following using the mii-tool utility:
# mii-tool -vv eth0
Using SIOCGMIIPHY=0x8947
eth0: negotiated 1000baseT-FD flow-control, link ok
   registers for MII PHY 0:
     1040 796d 0007 0572 01e1 cde1 000f 2001
     4006 0300 7800 0000 0000 4002 0000 3000
     0000 f000 0088 0000 0000 0001 3200 1000
     0000 0000 0000 0000 a035 0054 0400 0000
   product info: vendor 00:01:c1, model 23 rev 2
   basic mode:   autonegotiation enabled
   basic status: autonegotiation complete, link ok
   capabilities: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD 
10baseT-FD 10baseT-HD
   advertising:  1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 
10baseT-HD
   link partner: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD 
10baseT-FD 10baseT-HD flow-control

# mii-tool -vv eth1
Using SIOCGMIIPHY=0x8947
eth1: no link
   registers for MII PHY 0:
     1040 7949 0007 0572 01e1 0000 0004 2001
     0000 0300 4000 0000 0000 4002 0000 3000
     0000 0000 0088 0000 0000 0000 3200 1000
     0000 0000 0000 0000 0404 0054 0400 0000
   product info: vendor 00:01:c1, model 23 rev 2
   basic mode:   autonegotiation enabled
   basic status: no link
   capabilities: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD 
10baseT-FD 10baseT-HD
   advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

Also one oditty I just realize now is that eth1 only appears to 
advertise 100Mbits until I connect it to the 1G line, then it looks just 
like eth0 above but that's something for another day
Can sdomeone help me to find out why the MDIO info doesn't appear to 
pass through to the ravb driver properly?

Thanks,
-- 
Ron


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PHY VSC8531 MDIO data not reflected in ethernet/ sub-module
  2023-05-11  1:05 PHY VSC8531 MDIO data not reflected in ethernet/ sub-module Ron Eggler
@ 2023-05-11 15:34 ` Andrew Lunn
  2023-05-11 23:21   ` Ron Eggler
  0 siblings, 1 reply; 6+ messages in thread
From: Andrew Lunn @ 2023-05-11 15:34 UTC (permalink / raw)
  To: Ron Eggler; +Cc: netdev

> ***[ 6.728165] DEBUG: in ravb_emac_init_gbeth(), calling
> ravb_set_rate_gbeth(), priv->duplex: 0, priv->speed: 0*
> ***[ 6.751973] DEBUG: in ravb_set_rate_gbeth() - priv->speed 0*
> ***[ 6.831153] DEBUG: in ravb_adjust_link(), phydev->speed -1, priv->speed
> 0*
> ***[ 6.839952] DEBUG: in ravb_adjust_link(), priv->no_avb_link 0,
> phydev->link 0*

If there is no link, everything else is meaningless. You cannot have
speed without link.

> While I also receive the following using the mii-tool utility:
> # mii-tool -vv eth0
> Using SIOCGMIIPHY=0x8947
> eth0: negotiated 1000baseT-FD flow-control, link ok
>   registers for MII PHY 0:
>     1040 796d 0007 0572 01e1 cde1 000f 2001
>     4006 0300 7800 0000 0000 4002 0000 3000
>     0000 f000 0088 0000 0000 0001 3200 1000
>     0000 0000 0000 0000 a035 0054 0400 0000
>   product info: vendor 00:01:c1, model 23 rev 2
>   basic mode:   autonegotiation enabled
>   basic status: autonegotiation complete, link ok
>   capabilities: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD
> 10baseT-FD 10baseT-HD
>   advertising:  1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
>   link partner: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD
> 10baseT-FD 10baseT-HD flow-control

Assuming you are not using interrupts, phylib will poll the PHY once a
second, calling
phy_check_link_status()->
  phy_read_status()->
    phydev->drv->read_status()
or
    genphy_read_status()

Check what these are doing, why do they think the link is down.

      Andrew

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PHY VSC8531 MDIO data not reflected in ethernet/ sub-module
  2023-05-11 15:34 ` Andrew Lunn
@ 2023-05-11 23:21   ` Ron Eggler
  2023-05-12  2:47     ` Andrew Lunn
  2023-05-12  5:15     ` Ron Eggler
  0 siblings, 2 replies; 6+ messages in thread
From: Ron Eggler @ 2023-05-11 23:21 UTC (permalink / raw)
  To: Andrew Lunn; +Cc: netdev

Hi Andrew,

Thanks for your response:

On 2023-05-11 8:34 a.m., Andrew Lunn wrote:
>> ***[ 6.728165] DEBUG: in ravb_emac_init_gbeth(), calling
>> ravb_set_rate_gbeth(), priv->duplex: 0, priv->speed: 0*
>> ***[ 6.751973] DEBUG: in ravb_set_rate_gbeth() - priv->speed 0*
>> ***[ 6.831153] DEBUG: in ravb_adjust_link(), phydev->speed -1, priv->speed
>> 0*
>> ***[ 6.839952] DEBUG: in ravb_adjust_link(), priv->no_avb_link 0,
>> phydev->link 0*
> If there is no link, everything else is meaningless. You cannot have
> speed without link.
Makes sense!
>> While I also receive the following using the mii-tool utility:
>> # mii-tool -vv eth0
>> Using SIOCGMIIPHY=0x8947
>> eth0: negotiated 1000baseT-FD flow-control, link ok
>>    registers for MII PHY 0:
>>      1040 796d 0007 0572 01e1 cde1 000f 2001
>>      4006 0300 7800 0000 0000 4002 0000 3000
>>      0000 f000 0088 0000 0000 0001 3200 1000
>>      0000 0000 0000 0000 a035 0054 0400 0000
>>    product info: vendor 00:01:c1, model 23 rev 2
>>    basic mode:   autonegotiation enabled
>>    basic status: autonegotiation complete, link ok
>>    capabilities: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD
>> 10baseT-FD 10baseT-HD
>>    advertising:  1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
>>    link partner: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD
>> 10baseT-FD 10baseT-HD flow-control
> Assuming you are not using interrupts, phylib will poll the PHY once a
> second, calling
> phy_check_link_status()->

I don't see it being invoked every Seconds but it gets invoked on boot, 
I added debug logs and see the following:

[    6.669425] DEBUG: in phy_check_link_status(), phy_read_status() ret 
err 0, phydev->loopback_enabled 0,
[    6.696237] DEBUG: in phy_check_link_status(), phydev->link 0, 
phydev->state UP

state = UP which means it's ready to start auto negotiation(in 
phy_state_machine())  but instead in phy_check_link_status(), 
phydev->state should be set to  PHY_RUNNING but it only can get set to 
PHY_RUNNING when phydev->link is 1 (in phy_check_link_status()):

>    phy_read_status()->
>      phydev->drv->read_status()
> or
>      genphy_read_status()
>
> Check what these are doing, why do they think the link is down.

Yes, so in phy_read_status, phydev->drv->read_status appears to be set 
but I cannot figure out where it gets set. (I obviously need to find the 
function to find why the link isn't read correctly).
I temporarily set phydev->drv->read_status to 0 to force invocation of 
genphy_read_status() function to see how that would work.

genphy_update_link(0 is called from genphy_read_status() and I get the 
below data:

[    6.795480] DEBUG: in genphy_update_link(), after phy_read() bmcr 4160
[    6.805225] DEBUG: in genphy_update_link(), bmcr 0x1040 & 0x200
[    6.815730] DEBUG: in genphy_read_status(), genphy_update_link() 0 
phydev->autoneg 1, phydev->link 0


Could it be that the link needs a second to come up when when the 
network drivers get started and hence I should make sure that the 
polling once a second works (which currently doesn't appear to be the 
case)? Am I missing a configuration option?

Thanks!

-- 
Ron

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PHY VSC8531 MDIO data not reflected in ethernet/ sub-module
  2023-05-11 23:21   ` Ron Eggler
@ 2023-05-12  2:47     ` Andrew Lunn
  2023-05-20 21:52       ` Ron Eggler
  2023-05-12  5:15     ` Ron Eggler
  1 sibling, 1 reply; 6+ messages in thread
From: Andrew Lunn @ 2023-05-12  2:47 UTC (permalink / raw)
  To: Ron Eggler; +Cc: netdev

> I don't see it being invoked every Seconds but it gets invoked on boot, I
> added debug logs and see the following:

What should happen is when the MAC driver call phy_start(), it either
starts polling the PHY or it enabled interrupts. If it is not polling,
then is sounds like you have interrupts setup for the PHY. Scatter
some more debug prints around and about and see which is true.

> state = UP which means it's ready to start auto negotiation(in
> phy_state_machine())  but instead in phy_check_link_status(), phydev->state
> should be set to  PHY_RUNNING but it only can get set to PHY_RUNNING when
> phydev->link is 1 (in phy_check_link_status()):

Yep. Either via polling, or interrupts, the state machine will change
to state RUNNING.

> 
> >    phy_read_status()->
> >      phydev->drv->read_status()
> > or
> >      genphy_read_status()
> > 
> > Check what these are doing, why do they think the link is down.
> 
> Yes, so in phy_read_status, phydev->drv->read_status appears to be set but I
> cannot figure out where it gets set. (I obviously need to find the function
> to find why the link isn't read correctly).

Since this is a microchip PHY, i would expect vsc85xx_read_status().

> I temporarily set phydev->drv->read_status to 0 to force invocation of
> genphy_read_status() function to see how that would work.
> 
> genphy_update_link(0 is called from genphy_read_status() and I get the below
> data:
> 
> [    6.795480] DEBUG: in genphy_update_link(), after phy_read() bmcr 4160
> [    6.805225] DEBUG: in genphy_update_link(), bmcr 0x1040 & 0x200
> [    6.815730] DEBUG: in genphy_read_status(), genphy_update_link() 0
> phydev->autoneg 1, phydev->link 0
> 
> 
> Could it be that the link needs a second to come up when when the network
> drivers get started and hence I should make sure that the polling once a
> second works (which currently doesn't appear to be the case)? Am I missing a
> configuration option?

auto-neg takes a little over 1 second. Polling does not care, if it is
not up this time, it might be the next. If you are using interrupts,
then you need to ensure the interrupt actually fires when auto-neg is
complete.

	Andrew

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PHY VSC8531 MDIO data not reflected in ethernet/ sub-module
  2023-05-11 23:21   ` Ron Eggler
  2023-05-12  2:47     ` Andrew Lunn
@ 2023-05-12  5:15     ` Ron Eggler
  1 sibling, 0 replies; 6+ messages in thread
From: Ron Eggler @ 2023-05-12  5:15 UTC (permalink / raw)
  To: Andrew Lunn; +Cc: netdev


On 2023-05-11 16:21, Ron Eggler wrote:
> Hi Andrew,
>
> Thanks for your response:
>
> On 2023-05-11 8:34 a.m., Andrew Lunn wrote:
>>> ***[ 6.728165] DEBUG: in ravb_emac_init_gbeth(), calling
>>> ravb_set_rate_gbeth(), priv->duplex: 0, priv->speed: 0*
>>> ***[ 6.751973] DEBUG: in ravb_set_rate_gbeth() - priv->speed 0*
>>> ***[ 6.831153] DEBUG: in ravb_adjust_link(), phydev->speed -1, 
>>> priv->speed
>>> 0*
>>> ***[ 6.839952] DEBUG: in ravb_adjust_link(), priv->no_avb_link 0,
>>> phydev->link 0*
>> If there is no link, everything else is meaningless. You cannot have
>> speed without link.
> Makes sense!
>>> While I also receive the following using the mii-tool utility:
>>> # mii-tool -vv eth0
>>> Using SIOCGMIIPHY=0x8947
>>> eth0: negotiated 1000baseT-FD flow-control, link ok
>>>    registers for MII PHY 0:
>>>      1040 796d 0007 0572 01e1 cde1 000f 2001
>>>      4006 0300 7800 0000 0000 4002 0000 3000
>>>      0000 f000 0088 0000 0000 0001 3200 1000
>>>      0000 0000 0000 0000 a035 0054 0400 0000
>>>    product info: vendor 00:01:c1, model 23 rev 2
>>>    basic mode:   autonegotiation enabled
>>>    basic status: autonegotiation complete, link ok
>>>    capabilities: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD
>>> 10baseT-FD 10baseT-HD
>>>    advertising:  1000baseT-FD 100baseTx-FD 100baseTx-HD 10baseT-FD 
>>> 10baseT-HD
>>>    link partner: 1000baseT-HD 1000baseT-FD 100baseTx-FD 100baseTx-HD
>>> 10baseT-FD 10baseT-HD flow-control
>> Assuming you are not using interrupts, phylib will poll the PHY once a
>> second, calling
>> phy_check_link_status()->
>
> I don't see it being invoked every Seconds but it gets invoked on 
> boot, I added debug logs and see the following:
>
> [    6.669425] DEBUG: in phy_check_link_status(), phy_read_status() 
> ret err 0, phydev->loopback_enabled 0,
> [    6.696237] DEBUG: in phy_check_link_status(), phydev->link 0, 
> phydev->state UP
>
> state = UP which means it's ready to start auto negotiation(in 
> phy_state_machine())  but instead in phy_check_link_status(), 
> phydev->state should be set to  PHY_RUNNING but it only can get set to 
> PHY_RUNNING when phydev->link is 1 (in phy_check_link_status()):
>
>>    phy_read_status()->
>>      phydev->drv->read_status()
>> or
>>      genphy_read_status()
>>
>> Check what these are doing, why do they think the link is down.
>
> Yes, so in phy_read_status, phydev->drv->read_status appears to be set 
> but I cannot figure out where it gets set. (I obviously need to find 
> the function to find why the link isn't read correctly).
> I temporarily set phydev->drv->read_status to 0 to force invocation of 
> genphy_read_status() function to see how that would work.
>
> genphy_update_link(0 is called from genphy_read_status() and I get the 
> below data:
>
> [    6.795480] DEBUG: in genphy_update_link(), after phy_read() bmcr 4160
> [    6.805225] DEBUG: in genphy_update_link(), bmcr 0x1040 & 0x200
> [    6.815730] DEBUG: in genphy_read_status(), genphy_update_link() 0 
> phydev->autoneg 1, phydev->link 0
>
>
> Could it be that the link needs a second to come up when when the 
> network drivers get started and hence I should make sure that the 
> polling once a second works (which currently doesn't appear to be the 
> case)? Am I missing a configuration option?

For now I've tried to add:
phydev->irq = PHY_POLL;
to phy_attached_info_irq() in drivers/net/phy/phy_device.c which turns 
out totally locks-up the system, i.e. I can't even type root to login 
anymore. This is after I removed the log messages now but while I still 
had them in there, they would just fill up my screen, the polling 
appears to use up all the CPU power.

A little cut-out from the logs, looked like this:

...
[  418.485394] DEBUG: in phy_check_link_status(), phy_read_status() err 
0, phydev->loopback_enabled 0,
[  418.503700] DEBUG: in phy_check_link_status(), phydev->link 1, 
phydev->state RUNNING
[  418.511463] DEBUG: in phy_state_machine(), phydev->state RUNNING, 
needs_aneg 0
[  418.518727] DEBUG: in phy_state_machine(), phy_start_aneg() 0, 
needs_aneg 826560768
[  419.361074] DEBUG: in phy_read_status(), phydev->drv->read_status 0
[  419.367474] DEBUG: in genphy_update_link(), after phy_read() bmcr 4160
[  419.375665] DEBUG: in genphy_update_link(), bmcr 0x1040 & 0x200
[  419.382324] DEBUG: in genphy_read_status(), genphy_update_link() 0 
phydev->autoneg 1, phydev->link 0
[  419.382547] DEBUG: in phy_check_link_status(), phy_read_status() err 
0, phydev->loopback_enabled 0,
[  419.400837] DEBUG: in phy_check_link_status(), phydev->link 0, 
phydev->state NOLINK
[  419.408521] DEBUG: in phy_state_machine(), phydev->state NOLINK, 
needs_aneg 0
[  419.415718] DEBUG: in phy_state_machine(), phy_start_aneg() 0, 
needs_aneg 826560768
[  419.553089] DEBUG: in phy_read_status(), phydev->drv->read_status 0
[  419.559486] DEBUG: in genphy_update_link(), after phy_read() bmcr 4160
[  419.566858] DEBUG: in genphy_update_link(), bmcr 0x1040 & 0x200
[  419.573423] DEBUG: in genphy_read_status(), genphy_update_link() 0 
phydev->autoneg 1, phydev->link 1
[  419.573432] DEBUG: in phy_check_link_status(), phy_read_status() err 
0, phydev->loopback_enabled 0,
[  419.591738] DEBUG: in phy_check_link_status(), phydev->link 1, 
phydev->state RUNNING
[  419.599505] DEBUG: in phy_state_machine(), phydev->state RUNNING, 
needs_aneg 0
[  419.606764] DEBUG: in phy_state_machine(), phy_start_aneg() 0, 
needs_aneg 826560768
...

The state toggled between RUNNING & NOLINK and the phydev->link toggeled 
between 1 and 0

The reason why I had interrupts activated is because the device tree 
that's used as a base had a PHY with the interrupt pin hooked up and 
while I override the original phy node in the device tree with 
https://github.com/MistySOM/meta-mistysom/blob/phy-enable/recipes-kernel/linux/smarc-rzg2l/0001-add-vsc8531-userspace-dts.patch 
, the interrupt attribute from the original device tree will persist. I 
will have to create a patch that removes the attrribute in the dtsi file 
where the original phy node is defined. I think that should give me the 
poll functionality

-- 

Ron


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PHY VSC8531 MDIO data not reflected in ethernet/ sub-module
  2023-05-12  2:47     ` Andrew Lunn
@ 2023-05-20 21:52       ` Ron Eggler
  0 siblings, 0 replies; 6+ messages in thread
From: Ron Eggler @ 2023-05-20 21:52 UTC (permalink / raw)
  To: Andrew Lunn; +Cc: netdev

I should follow up on this Thread and send out a Thank you for everybody 
that has pitched in. I've got the two Ethernet interfaces working fine 
now after I set "phy-mode" to "rgmii-id" and removed the "interrupts" 
and "interrupt-parent" attributes to trigger the polling of the PHY.
Both changes were made in the device tree.

Thanks again!
Ron


On 2023-05-11 19:47, Andrew Lunn wrote:
>> I don't see it being invoked every Seconds but it gets invoked on boot, I
>> added debug logs and see the following:
> What should happen is when the MAC driver call phy_start(), it either
> starts polling the PHY or it enabled interrupts. If it is not polling,
> then is sounds like you have interrupts setup for the PHY. Scatter
> some more debug prints around and about and see which is true.
>
>> state = UP which means it's ready to start auto negotiation(in
>> phy_state_machine())  but instead in phy_check_link_status(), phydev->state
>> should be set to  PHY_RUNNING but it only can get set to PHY_RUNNING when
>> phydev->link is 1 (in phy_check_link_status()):
> Yep. Either via polling, or interrupts, the state machine will change
> to state RUNNING.
>
>>>     phy_read_status()->
>>>       phydev->drv->read_status()
>>> or
>>>       genphy_read_status()
>>>
>>> Check what these are doing, why do they think the link is down.
>> Yes, so in phy_read_status, phydev->drv->read_status appears to be set but I
>> cannot figure out where it gets set. (I obviously need to find the function
>> to find why the link isn't read correctly).
> Since this is a microchip PHY, i would expect vsc85xx_read_status().
>
>> I temporarily set phydev->drv->read_status to 0 to force invocation of
>> genphy_read_status() function to see how that would work.
>>
>> genphy_update_link(0 is called from genphy_read_status() and I get the below
>> data:
>>
>> [    6.795480] DEBUG: in genphy_update_link(), after phy_read() bmcr 4160
>> [    6.805225] DEBUG: in genphy_update_link(), bmcr 0x1040 & 0x200
>> [    6.815730] DEBUG: in genphy_read_status(), genphy_update_link() 0
>> phydev->autoneg 1, phydev->link 0
>>
>>
>> Could it be that the link needs a second to come up when when the network
>> drivers get started and hence I should make sure that the polling once a
>> second works (which currently doesn't appear to be the case)? Am I missing a
>> configuration option?
> auto-neg takes a little over 1 second. Polling does not care, if it is
> not up this time, it might be the next. If you are using interrupts,
> then you need to ensure the interrupt actually fires when auto-neg is
> complete.
>
> 	Andrew
-- 
Ron -- Ron Eggler Senior Firmware Developer 778 230 9442 
www.mistywest.com __________________________________________________ 
About MistyWest We are a Research & Engineering firm composed of 
engineers and physicists with a focus on solving hard problems across a 
number of technology verticals. We specifically target projects that 
have the potential for high-impact, whether it's improving the human 
condition, impacting sustainability in a positive way, or otherwise 
moving us collectively to an inclusively abundant future.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-05-20 21:52 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-11  1:05 PHY VSC8531 MDIO data not reflected in ethernet/ sub-module Ron Eggler
2023-05-11 15:34 ` Andrew Lunn
2023-05-11 23:21   ` Ron Eggler
2023-05-12  2:47     ` Andrew Lunn
2023-05-20 21:52       ` Ron Eggler
2023-05-12  5:15     ` Ron Eggler

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.