Re: [Cbe-oss-dev] spidernet: dynamic phy setup code
On Thu, 2007-02-01 at 12:04 +0100, Jens Osterkamp wrote: Ishizaki-san, 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. My understanding is that you are using the LINK interrupt to detect this. For the blade this is not connected but reenabling it wont hurt, I hope. I would suggest just polling from a delayed work or a timer like sungem does. I still dont see why you need different settings for different speed switches. This is getting to a point where access to some hardware would be handy. What exact phy are using anyway ? Yeah, same question... 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. See above, could you give some more details why this is the case. Or maybe Ben knows more about this ? No, I'm surprised too. Ben. - To unsubscribe from this list: send the line unsubscribe netdev in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [Cbe-oss-dev] spidernet: dynamic phy setup code
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-netdevm=116593424505539w=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 - To unsubscribe from this list: send the line unsubscribe netdev in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [Cbe-oss-dev] spidernet: dynamic phy setup code
Ishizaki-san, 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. My understanding is that you are using the LINK interrupt to detect this. For the blade this is not connected but reenabling it wont hurt, I hope. 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. I still dont see why you need different settings for different speed switches. This is getting to a point where access to some hardware would be handy. What exact phy are using anyway ? 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. See above, could you give some more details why this is the case. Or maybe Ben knows more about this ? #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. I will reenable it and see wether it affects us. The pin is not connected so we should never enter this part of the code. (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(). IMHO using mii_phy_probe is the right way to do this. 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. I'll do some investigations and let you know of the results. Jens - To unsubscribe from this list: send the line unsubscribe netdev in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html