[BPI-R4] and SFP

Have you put the mac (eth2) to admin-up? Have tried disabling auto-neg and foring speed/duplex to something the module and other side supports?

No idea else than this…maybe it needs a quirk…at least i do not see an alarm

Hi if I insert it, it will be detected but won’t come up as it will have autneg on. If I set the autneg to off(ethtool), it comes up and seems to be working with no problems - I’ve had it up for 24hrs with no issues. I got the autneg off idea from this post BPI R3 mtk_soc_eth driver shows no link-state, but SFP module does have a link-up - For Developers - OpenWrt Forum

have you checked if this commit already applied to your os?

Hi - I believe it has : https://git.openwrt.org/?p=openwrt/openwrt.git;a=commit;h=a1a9572f43776c3fed46c4545e93fbbb25d923c2

I am running : OpenWrt SNAPSHOT r26933-d40f9ad48f

Edit: before that, can you try if @frank-w ’s Debian/ubuntu image works? To make sure if that’s not openwrt’s issue: https://wiki.fw-web.de/doku.php?id=en:bpi-r4:start

That’s weird… Maybe you can send an email to Russell King to ask for some help. His email address is inside the commit information above.

Hi, thanks for the help/suggestions - I have reached out to Russel. Thanks once again

Hey Sergio! So I bought a BPI-R4 and is running latest snapshot build. I have and ODI GPON (ODI DFP-34X-2I3) for my FTTH connection. It’s working fine @ 1000BaseX but had to put a startup script to set autoneg off after boot. I see you suggest patching OWRT to try get 2.5Gbps which I believe would include adding this new ODI model to the SFP quirk. Couple question:

1- Do you know if there is any docker image already set up to build from source that I could use to try add the quirk to latest snapshot

2- Is it possible to just generate the .ko that is needed and only add that to my running build?

Thank you!

Guido

For ODI DFP-34X-2C2, no need to add quirk and upstream doesn’t accept quirk due to possible unable to connect to device if module is fixed to 1gbps mode and quirk set to 2.5G.

I’m not sure if DFP-34X-2I3 has the same design, but you can try to modify module’s eeprom like this Right SFP EEPROM config for DFP-34X-2C2 to work automatically work at 2500base-X? · Anime4000/RTL960x · Discussion #250 · GitHub to check if it could automatically switch to 2.5g mode.

1 Like

Thanks for your response. I will take a look to the link you shared. I was actually able to get it working @ 2.5Gbps by renaming sfp.ko as suggested in the threat. After that I had to force speed and duplex using ethtool and it synced. Issue with this approach is ethtool full functionality is gone.

In case it’s useful for anyone seeking to use BPI-R4 with an ODI DFP-34X-2I3 GPON, I can confirm the SFPs EEPROM arrangement is almost the same as the 2C2 and the procedure provided by @Stat_headcrabed works perfectly.

root@OpenWrt:~# ethtool eth2
Settings for eth2:
        Supported ports: [ FIBRE ]
        Supported link modes:   2500baseX/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  2500baseX/Full
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Speed: 2500Mb/s
        Duplex: Full
        Auto-negotiation: on
        Port: FIBRE
        PHYAD: 0
        Transceiver: internal
        Current message level: 0x000000ff (255)
                           drv probe link timer ifdown ifup rx_err tx_err
        Link detected: yes

Thanks again for the help!

1 Like

Hello @Jefs , did you get any reply from Russell? I’m seeing more users experiencing this.

1 Like

I did get the following from Russel :

l think you’re suggesting that S.B1312.10.XDL requires autoneg to be disabled. I don’t think that is a property of a BiDi transceiver. All that the transceiver will be doing is converting the electrical signal to an optical signal and at the other end it gets converted back to an electrical signal. There is no “protocol” handling inside the transceivers.

If you need to turn off autoneg, that will be because the remote end also has autoneg disabled.

IEEE 802.3 1000base-X (which is the protocol used over 1000base-LX, -SX, etc) requires the use of autoneg, but we provide the ability to turn it off as you have discovered.

So, disabling autoneg as a property of the SFP transceiver is the wrong thing to do, because one could be using the same SFP transceiver with a remote end that has autoneg enabled… and then having autoneg disabled at the local end will break that setup.

Therefore, I don’t see any issue, and I would say everything is working as it should.

Yes, you will need to manually disable autoneg, but that is because the remote end has autoneg also disabled and this is expected behaviour.

2 Likes

So in this case, best solution is disable autoneg in a startup script?

1 Like

This is what I have in my startup local :

/usr/sbin/ethtool -s eth2 autoneg off duplex full

1 Like

Seems it’s better to use this way to disable autoneg if you are using newest openwrt snapshot: A new dual 10G router based on Filogic 880 (Banana Pi BPi-R4) - #795 by daniel - Hardware Questions and Recommendations - OpenWrt Forum

1 Like

What options should be added to disable “autoneg” in that new way used by @dangowrt?

The above commit makes sure flow control settings are handled by netifd even for SFP devices. You should not use rc.local for this. You may instead add a device section to /etc/config/network:

config device
  option name 'eth1'
  option rxpause '1'
  option txpause '1'

Using the rxpause or txpause option disables flow control autonegotiation, while the pause or asympause control the advertised flow control support.

rxpause/txpause

More information here: Ethernet flow control - Wikipedia

1 Like

Thanks, then the same options used in that example.

I have just updated to latest snapshot (with unattended sysupgrade) to SNAPSHOT r27229-ebe7c5f1a3 LuCi Master 24.212.79282-65b8002 and those options don’t work

Have you tried setting ‘rxpause txpause pause’ all to 0?