The LS1043-S has two SFP slots:
- One 10G SFP+ slot (can also host 1G and 2.5G SFP's).
- A 1G SFP slot, supporting 1000BASE-X modes.
The 10G SFP slot is connected to the LS1043A SoC via a retimer (TI DS110/DS125), which performs the clock recovery functions required for SFP+ modules.
The 1G slot is connected to an AR8035 on the LS1043-S, which is connected to the CPU on the RGMII/EC2 port.
PLL and SerDes protocols for 10G
- Running a 10G SFP requires SerDes protocol 0x1455 to be specified in the RCW, and a 156.25MHz clock to be provided to SerDes PLL#1.
- Running a 1G SFP requires SerDes protocol 0x3455 to be specified in the RCW, and a 100MHz clock to be provided to SerDes PLL#1.
The board has a clock mux (U16) which switches the input to SerDes PLL#1, the select line is connected to the on-board microcontroller, which stores the setting in the EEPROM. User code can change the setting by communicating with the on-board microcontroller over I2C.
Note that some multi-bit rate SFP's (such as Mikrotik's S+RJ10 10GBase-T) will always present a 10G bitstream, so there is no need to change the SerDes protocol for them.
By default, TX_DISABLE is pulled up on the SFP, so userspace will need to control the GPIO to activate the module. Note that direct connect SFP's may ignore any TX_DISABLE.
Under OpenWrt this is acheived by a gpio_switch setting:
# cat /etc/config/system config gpio_switch 'tensfp_txdisable' option name 'SFP+ TX Disable' option gpio_pin '378' option value '0' config gpio_switch 'gigsfp_txdisable' option name 'SFP TX Disable' option gpio_pin '381' option value '0'
These settings are added on first boot by /etc/board.d/03_gpio_switches
The I2C bus for SFP's are connected through a PCA9540BD I2C multiplexer, the 1G SFP is channel 0 and 10G SFP is channel 1. Our device tree has the required setup for this.