Bonjour
Je reprend dans un sujet à part juste la petite partie
décrite ici. Il s'agit de builder le driver du BCM57810S supportant la vitesse 2.5Gbps retourné par le module (après avoir modifié la configuration du port).
Je le mets également à jours avec les packages pour les différentes version d'openwrt.
Voilà comment builder le driver bnx2x en incluant le supporte du 2.5Gbps pour les modules FS.com .
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrt
git checkout v22.03.2 -b v22.03.2
wget https://downloads.openwrt.org/releases/22.03.2/targets/x86/64/feeds.buildinfo -O feeds.conf.default
./scripts/feeds update -a
./scripts/feeds install -a
wget https://downloads.openwrt.org/releases/22.03.2/targets/x86/64/config.buildinfo -O .config
make menuconfig
Puis je compile tout une première fois:
make -j $(($(nproc)+1)) download world
Après, j'applique le patch. Je n'ai pas chercher à savoir sur quel version du code j'applique le patch: je l'applique partout:
find -name "bnx2x_link.c"
./build_dir/toolchain-x86_64_gcc-11.2.0_musl/linux-5.10.146/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
./build_dir/target-x86_64_musl/linux-x86_64/linux-5.10.146/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c
cd ./build_dir/toolchain-x86_64_gcc-11.2.0_musl/linux-5.10.146/
patch -p0 < ~/patch/bnx2x_warpcore+8727_2_5g_sgmii.patch
cd ./build_dir/target-x86_64_musl/linux-x86_64/linux-5.10.146/
patch -p0 < ~/patch/bnx2x_warpcore+8727_2_5g_sgmii.patch
Cela a appliqué le patch, puis je rebuild de nouveau avec un simple make world. Et HOP, un package bnx2x qui tiens les 2Gbits.
Pour le patch, il ne me reste plus que ça (je n'ai pas refais la comparaison avec 22.03.2, je laisse ce que j'avais comme diff sur 22.03.0):
diff bnx2x_link.c bnx2x_link2.c
153a154
> #define SFP_EEPROM_CON_TYPE_VAL_SC 0x1
4212a4214,4223
> /* Note that 2.5G works only when used with 1G advertisment */
> if (fiber_mode && (phy->req_line_speed == SPEED_2500) &&
> (phy->speed_cap_mask &
> (PORT_HW_CFG_SPEED_CAPABILITY_D0_1G |
> PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G))) {
> bnx2x_cl45_write(bp, phy, MDIO_WC_DEVAD,
> MDIO_WC_REG_SERDESDIGITAL_MISC1,
> 0x6010);
> }
>
4222a4234
> case SPEED_2500:
8174a8187
> case SFP_EEPROM_CON_TYPE_VAL_SC:
8185c8198,8199
< if (phy->req_line_speed != SPEED_1000) {
---
> if ((phy->req_line_speed != SPEED_1000) &&
> (phy->req_line_speed != SPEED_2500)) {
9238a9253
> (phy->req_line_speed == SPEED_2500) ||
9247a9263,9278
> if ((phy->req_line_speed == SPEED_2500) &&
> (phy->speed_cap_mask &
> (PORT_HW_CFG_SPEED_CAPABILITY_D0_1G |
> PORT_HW_CFG_SPEED_CAPABILITY_D0_2_5G))) {
> bnx2x_cl45_read_and_write(bp, phy,
> MDIO_AN_DEVAD,
> MDIO_AN_REG_8727_MISC_CTRL2,
> ~(1<<5));
> bnx2x_cl45_write(bp, phy,
> MDIO_AN_DEVAD,
> MDIO_AN_REG_8727_MISC_CTRL1, 0x0010);
> } else {
> bnx2x_cl45_write(bp, phy,
> MDIO_AN_DEVAD,
> MDIO_AN_REG_8727_MISC_CTRL1, 0x001C);
> }
9269c9300
< MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL, 0);
---
> MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL2, 0);
9277c9308
< MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL,
---
> MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL2,
9279a9311,9313
> MDIO_AN_DEVAD, MDIO_AN_REG_8727_MISC_CTRL1,
> 0x001C);
> bnx2x_cl45_write(bp, phy,
9567a9602,9606
> } else if ((link_status & (1<<1)) && (!(link_status & (1<<14)))) {
> link_up = 1;
> vars->line_speed = SPEED_2500;
> DP(NETIF_MSG_LINK, "port %x: External link up in 2.5G\n",
> params->port);
9599c9638,9639
< (phy->req_line_speed == SPEED_1000)) {
---
> ((phy->req_line_speed == SPEED_1000) ||
> (phy->req_line_speed == SPEED_2500))) {
11722a11763
> SUPPORTED_2500baseX_Full |
11908a11950
> SUPPORTED_2500baseX_Full |
12255a12298
> SUPPORTED_2500baseX_Full |
Et voilà le résultat:
$ iperf3 -R -4 -c bouygues.testdebit.info -p 9219 -C bbr
Connecting to host bouygues.testdebit.info, port 9219
Reverse mode, remote host bouygues.testdebit.info is sending
[ 5] local AAAA port 58218 connected to 89.84.1.186 port 9219
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 245 MBytes 2.06 Gbits/sec
[ 5] 1.00-2.00 sec 253 MBytes 2.13 Gbits/sec
[ 5] 2.00-3.00 sec 254 MBytes 2.13 Gbits/sec
[ 5] 3.00-4.00 sec 256 MBytes 2.15 Gbits/sec
[ 5] 4.00-5.00 sec 259 MBytes 2.17 Gbits/sec
[ 5] 5.00-6.00 sec 257 MBytes 2.16 Gbits/sec
[ 5] 6.00-7.00 sec 260 MBytes 2.18 Gbits/sec
[ 5] 7.00-8.00 sec 260 MBytes 2.18 Gbits/sec
[ 5] 8.00-9.00 sec 258 MBytes 2.16 Gbits/sec
[ 5] 9.00-10.00 sec 259 MBytes 2.17 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 2.51 GBytes 2.16 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 2.50 GBytes 2.15 Gbits/sec receiver
iperf Done.
Du coup je joins les fichier résultat.