On Fri, 16 Apr 2021 16:04:35 +0800 Hayes Wang wrote: > Support RTL8153C, RTL8153D, RTL8156A, and RTL8156B. The RTL8156A > and RTL8156B are the 2.5G ethernet. > > Signed-off-by: Hayes Wang <hayeswang@xxxxxxxxxxx> > + switch (tp->version) { > + case RTL_VER_10: > + data = ocp_reg_read(tp, 0xad40); > + data &= ~0x3ff; > + data |= BIT(7) | BIT(2); > + ocp_reg_write(tp, 0xad40, data); > + > + data = ocp_reg_read(tp, 0xad4e); > + data |= BIT(4); > + ocp_reg_write(tp, 0xad4e, data); > + data = ocp_reg_read(tp, 0xad16); > + data &= ~0x3ff; > + data |= 0x6; > + ocp_reg_write(tp, 0xad16, data); > + data = ocp_reg_read(tp, 0xad32); > + data &= ~0x3f; > + data |= 6; > + ocp_reg_write(tp, 0xad32, data); > + data = ocp_reg_read(tp, 0xac08); > + data &= ~(BIT(12) | BIT(8)); > + ocp_reg_write(tp, 0xac08, data); > + data = ocp_reg_read(tp, 0xac8a); > + data |= BIT(12) | BIT(13) | BIT(14); > + data &= ~BIT(15); > + ocp_reg_write(tp, 0xac8a, data); > + data = ocp_reg_read(tp, 0xad18); > + data |= BIT(10); > + ocp_reg_write(tp, 0xad18, data); > + data = ocp_reg_read(tp, 0xad1a); > + data |= 0x3ff; > + ocp_reg_write(tp, 0xad1a, data); > + data = ocp_reg_read(tp, 0xad1c); > + data |= 0x3ff; > + ocp_reg_write(tp, 0xad1c, data); > + > + data = sram_read(tp, 0x80ea); > + data &= ~0xff00; > + data |= 0xc400; > + sram_write(tp, 0x80ea, data); > + data = sram_read(tp, 0x80eb); > + data &= ~0x0700; > + data |= 0x0300; > + sram_write(tp, 0x80eb, data); > + data = sram_read(tp, 0x80f8); > + data &= ~0xff00; > + data |= 0x1c00; > + sram_write(tp, 0x80f8, data); > + data = sram_read(tp, 0x80f1); > + data &= ~0xff00; > + data |= 0x3000; > + sram_write(tp, 0x80f1, data); > + switch (tp->version) { > + case RTL_VER_12: > + ocp_reg_write(tp, 0xbf86, 0x9000); > + data = ocp_reg_read(tp, 0xc402); > + data |= BIT(10); > + ocp_reg_write(tp, 0xc402, data); > + data &= ~BIT(10); > + ocp_reg_write(tp, 0xc402, data); > + ocp_reg_write(tp, 0xbd86, 0x1010); > + ocp_reg_write(tp, 0xbd88, 0x1010); > + data = ocp_reg_read(tp, 0xbd4e); > + data &= ~(BIT(10) | BIT(11)); > + data |= BIT(11); > + ocp_reg_write(tp, 0xbd4e, data); > + data = ocp_reg_read(tp, 0xbf46); > + data &= ~0xf00; > + data |= 0x700; > + ocp_reg_write(tp, 0xbf46, data); > + data = r8153_phy_status(tp, 0); > + switch (data) { > + case PHY_STAT_EXT_INIT: > + rtl8152_apply_firmware(tp, true); > + > + data = ocp_reg_read(tp, 0xa466); > + data &= ~BIT(0); > + ocp_reg_write(tp, 0xa466, data); What are all these magic constants? :( > @@ -6878,7 +8942,11 @@ static int rtl8152_probe(struct usb_interface *intf, > set_ethernet_addr(tp); > > usb_set_intfdata(intf, tp); > - netif_napi_add(netdev, &tp->napi, r8152_poll, RTL8152_NAPI_WEIGHT); > + > + if (tp->support_2500full) > + netif_napi_add(netdev, &tp->napi, r8152_poll, 256); why 256? We have 100G+ drivers all using 64 what's special here? > + else > + netif_napi_add(netdev, &tp->napi, r8152_poll, 64);