On Fr, 2018-10-05 at 10:24 +0000, Igor Russkikh wrote:
> From: Dmitry Bezrukov <[email protected]>
>
> +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