[Cbe-oss-dev] spidernet: dynamic phy setup code
Ishizaki Kou
kou.ishizaki at toshiba.co.jp
Thu Feb 1 19:05:01 EST 2007
I apologize if you received this mail many times.
Jens-san
> This patch modifies the patch submitted by Kou Ishizaki to make it
work on the
> blade
(http://marc.theaimsgroup.com/?l=linux-netdev&m=116593424505539&w=2).
> Unfortunately I dont have access to a Celleb so I cannot test it
there.
Thanks for arranging our patch to work on Cell Blade.
This patch partially works on celleb but remains
following several problems.
1. It doesn't recover once an ethernet cable which is
connected to a spider_net card is unpluged.
2. It doesn't work when the spider_net card is connected to
a 100Mbps ethernet switch.
To solve these problems, we need to restore some codes
you removed from your patch.
(1)
>- if (card->aneg_count > 10) {
>- /* timeout */
>- card->aneg_count = 0;
>- is1000 = !is1000;
>- goto re_setup;
>- if (phy->speed == 1000 && !is1000) {
>- is1000 = 1;
>- goto re_setup;
>- } else if(phy->speed != 1000 && is1000) {
>- is1000 = 0;
>- goto re_setup;
>- }
We need to use different auto-neg initial settings between
for 10/100Mbps ethernet switches and for Gbps ethernet switches.
Driver don't know which type of network switch is connected to
network card, so we try both settings alternately in auto negtiation
sequences by using a variable "is1000".
Furthermore, we have a problem that poll_link() may succeed even when
the auto-neg initial setting is for different network switch type,
and the network card does not work on this case. We retry auto-neg
with the another initial setting on this case.
#We are commented that "is1000" should be in spider_net_card.
#We fixed it in another patch. Please refer the following.
#http://ozlabs.org/pipermail/linuxppc-dev/2007-January/030203.html
But we don't think this is the best solution, and we are still
developing
our spidernet driver. If you have a good alternative idea, please tell
us.
(2)
>- spider_net_write_reg(card, SPIDER_NET_GMACST,
>- spider_net_read_reg(card, SPIDER_NET_GMACST));
>- spider_net_write_reg(card, SPIDER_NET_GMACINTEN, 0x4);
These codes are enabling LINK status interrupt which is disabled
at the beginning of auto-neg.
Without this operation, auto negotiation works only when a connection
detected for the first time, and auto negotiation will not work
when an ethernet cable is unpluged or pluged.
(3)
>- mii_phy_probe(phy, phy->mii_id);
It seems that PHY reset is necessary before auto negotiation,
after a link once went down.
We can't call directly reset routine from driver, so we call
mii_phy_probe().
We are still developping the patch as we noted, and we are considering
to call mii_phy_probe() from spider_net_setup_aneg(), or to call
reset_one_mii_phy() from bcm54xx_setup_aneg().
We think these (1)-(3) are necessary, but we are afraid that you removed
them
by a reason that they causes some trouble in Cell Blade. If so please
tell us.
Best regards,
Kou Ishizaki
More information about the Linuxppc-dev
mailing list