>From: Stas Sergeev <s...@list.ru>
>
>23.03.2017 14:30, Maxime Morin пишет:
>> Hi,
>> Thank you very much for your help and your reactivity! See my answer bellow:
>>
>>> 22.03.2017 16:23, Maxime Morin пишет:
>>>> Hi all,
>>>>
>>>> I work on an embedded platform based on the Marvell Armada 88F6707, that 
>>>> is connected to a Marvell Alaska 88E1512 ethernet transceiver. A defect 
>>>> has appeared recently, and it turns out to be a regression on the network 
>>>> part. There is a complete lost of the network when following these steps:
>>>>       1) boot the board with the network cable disconnected
>>>>       2) run the following commands (or equivalent):
>>>>           ip link set eth0 up
>>>>           ip addr add 10.0.0.80/24 dev eth0
>>>>           ethtool -s eth0 autoneg on #this is the command that really 
>>>> breaks the network
>>> Why do you call it a regression, if previously
>>> this command did nothing at all?
>> I called that a regression because we still pass through the function 
>> phy_ethtool_sset(), which I though was also doing something about the 
>> auto-negotiation. But apparently not.
>It does, but with mdio.
>But in the MAC driver we have another autoneg
>now, which is a great confusion. mvneta_set_autoneg()
>could have been named mvneta_set_inband_autoneg(),
>which would already help a lot. If you prepare the patch-set,
>you can include such renaming
>
>>>> I did a "git bisect" to find when the regression was introduced, because 
>>>> it previously worked with kernel 4.4, but not with the recent ones. The 
>>>> commit that made appear the issue is this one: 
>>>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0c0744fc1dd5b
>>>> If I remove on mvneta.c the part that was added on this commit on the 
>>>> function mvneta_ethtool_set_link_ksettings (mvneta_ethtool_set_settings at 
>>>> that time), I do not have the issue, but I can't call that a fix...
>>>> So, could it be a driver issue, or maybe a wrong configuration somewhere? 
>>>> If you need additional information to reproduce the problem please ask me, 
>>>> I will be as responsive as possible.
>>> It seems mvneta_set_autoneg() does some non-symmetric
>>> things. It clears
>>> MVNETA_GMAC_FORCE_LINK_PASS |
>>> MVNETA_GMAC_FORCE_LINK_DOWN |
>>> MVNETA_GMAC_AN_FLOW_CTRL_EN
>>> when enabling autoneg, and does not restore these flags
>>> when disabling it. Try to make it to set or to restore these
>>> flags and see if that makes "ethtool -s eth0 autoneg off" to
>>> get the network back alive> .
>> As you suggested, I just set these three flags when the function is called 
>> with "enable" set to 0. And it works!
>Am I right that it works only when you set autoneg
>to "off", while "on" still does not give you any link detect?
>So this is a partial fix, right?
No. It actually works for both modes in this case.

>> Actually, I did not even have to set autoneg to off. When the module is 
>> probed, the default param are applied (mvneta_defaults_set()), and 
>> mvneta_set_autoneg() is called with "enable" to 0, and it seems to fix 
>> everything.
>It turns off SGMII-specific autoned and starts using
>mdio autoneg instead... a great confusion.
>
>> I tested it then, by setting autoneg to off/on, booting with or without the 
>> cable plugged, and I failed to break it. It seems to be fixed. Should I 
>> submit a patch? (would be the first time...)
>After looking up my other patches to this driver, I
>can see that
>
>MVNETA_GMAC_FORCE_LINK_PASS |
>MVNETA_GMAC_FORCE_LINK_DOWN
>
>are left cleared willingly. I suspect that MVNETA_GMAC_AN_FLOW_CTRL_EN
>breaks things for you. Could you please try with setting
>back only this flag?
I tested it, but not only this case. There are three flags, so 8 possibilities 
(and already 2 tested), so I tested all of them one by one.
And it shows that:
- when MVNETA_GMAC_FORCE_LINK_PASS is not set,
no matter the values of MVNETA_GMAC_FORCE_LINK_{PASS,DOWN}, the issue is 
reproduced
- when MVNETA_GMAC_FORCE_LINK_PASS is set,
no matter the values of MVNETA_GMAC_FORCE_LINK_{PASS,DOWN}, the network works 
(autoneg set off/on, booting with cable plugged/unplugged, etc)

Reply via email to