On Fr, 2018-10-05 at 10:24 +0000, Igor Russkikh wrote: > From: Dmitry Bezrukov <dmitry.bezrukov@xxxxxxxxxxxx> > > +static void aqc111_configure_rx(struct usbnet *dev, > + struct aqc111_data *aqc111_data) > +{ > + u8 reg8 = 0; > + u8 queue_num = 0; > + u16 reg16 = 0; > + u16 link_speed = 0, usb_host = 0; > + u8 buf[5] = { 0 }; DMA on stack. > + enum usb_device_speed usb_speed = dev->udev->speed; > + > + buf[0] = 0x00; > + buf[1] = 0xF8; > + buf[2] = 0x07; > + switch (aqc111_data->link_speed) { > + case AQ_INT_SPEED_5G: > + { > + link_speed = 5000; > + reg8 = 0x05; > + reg16 = 0x001F; > + break; > + } > + case AQ_INT_SPEED_2_5G: > + { > + link_speed = 2500; > + reg16 = 0x003F; > + break; > + } > + case AQ_INT_SPEED_1G: > + { > + link_speed = 1000; > + reg16 = 0x009F; > + break; > + } > + case AQ_INT_SPEED_100M: > + { > + link_speed = 100; > + queue_num = 1; > + reg16 = 0x063F; > + buf[1] = 0xFB; > + buf[2] = 0x4; > + break; > + } > + } > + > + if (aqc111_data->dpa) { > + /* Set Phy Flow control */ > + aq_mdio_write_cmd(dev, AQ_GLB_ING_PAUSE_CTRL_REG, > + AQ_PHY_AUTONEG_ADDR, 2, ®16); > + aq_mdio_write_cmd(dev, AQ_GLB_EGR_PAUSE_CTRL_REG, > + AQ_PHY_AUTONEG_ADDR, 2, ®16); > + } > + > + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_INTER_PACKET_GAP_0, > + 1, 1, ®8); > + > + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TX_PAUSE_RESEND_T, 3, 3, buf); > + > + switch (usb_speed) { Needs to handle all speeds. And please add a comment explaining the rationale. > + case USB_SPEED_SUPER: > + { > + usb_host = 3; > + break; > + } > + case USB_SPEED_HIGH: > + { > + usb_host = 2; > + break; > + } > + case USB_SPEED_FULL: > + case USB_SPEED_LOW: > + { > + usb_host = 1; > + queue_num = 0; > + break; > + } > + default: > + { > + usb_host = 0; > + break; > + } > + } > + > + memcpy(buf, &AQC111_BULKIN_SIZE[queue_num], 5); > + /* RX bulk configuration */ > + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QCTRL, 5, 5, buf); > + > + /* Set high low water level */ > + reg16 = 0x0810; > + > + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, > + 2, 2, ®16); > + netdev_info(dev->net, "Link Speed %d, USB %d", link_speed, usb_host); > +} Regards Oliver