Merge tag 'usb-4.10-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb

Pull USB fixes from Greg KH:
"Here are a few small USB driver fixes for 4.10-rc4 to resolve some
reported issues.

The "largest" here is a number of bugs being fixed in the ch341
usb-serial driver, to hopefully resolve the mess of different devices
floating around that use this driver that have been having problems
with the 4.10-rc1 release.

There's also a tiny musb fix that I missed in the last pull request,
as well as the traditional xhci fix rounding out the batch.

All have been in linux-next with no reported issues"

* tag 'usb-4.10-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
xhci: fix deadlock at host remove by running watchdog correctly
USB: serial: ch341: fix control-message error handling
usb: musb: fix runtime PM in debugfs
wusbcore: Fix one more crypto-on-the-stack bug
USB: serial: kl5kusb105: fix line-state error handling
USB: serial: ch341: fix baud rate and line-control handling
USB: serial: ch341: fix line settings after reset-resume
USB: serial: ch341: fix resume after reset
USB: serial: ch341: fix open error handling
USB: serial: ch341: fix modem-control and B0 handling
USB: serial: ch341: fix open and resume after B0
USB: serial: ch341: fix initial modem-control state

Changed files
+98 -66
drivers
-11
drivers/usb/host/xhci-ring.c
··· 913 913 spin_lock_irqsave(&xhci->lock, flags); 914 914 915 915 ep->stop_cmds_pending--; 916 - if (xhci->xhc_state & XHCI_STATE_REMOVING) { 917 - spin_unlock_irqrestore(&xhci->lock, flags); 918 - return; 919 - } 920 - if (xhci->xhc_state & XHCI_STATE_DYING) { 921 - xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb, 922 - "Stop EP timer ran, but another timer marked " 923 - "xHCI as DYING, exiting."); 924 - spin_unlock_irqrestore(&xhci->lock, flags); 925 - return; 926 - } 927 916 if (!(ep->stop_cmds_pending == 0 && (ep->ep_state & EP_HALT_PENDING))) { 928 917 xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb, 929 918 "Stop EP timer ran, but no command pending, "
-13
drivers/usb/host/xhci.c
··· 1534 1534 xhci_urb_free_priv(urb_priv); 1535 1535 return ret; 1536 1536 } 1537 - if ((xhci->xhc_state & XHCI_STATE_DYING) || 1538 - (xhci->xhc_state & XHCI_STATE_HALTED)) { 1539 - xhci_dbg_trace(xhci, trace_xhci_dbg_cancel_urb, 1540 - "Ep 0x%x: URB %p to be canceled on " 1541 - "non-responsive xHCI host.", 1542 - urb->ep->desc.bEndpointAddress, urb); 1543 - /* Let the stop endpoint command watchdog timer (which set this 1544 - * state) finish cleaning up the endpoint TD lists. We must 1545 - * have caught it in the middle of dropping a lock and giving 1546 - * back an URB. 1547 - */ 1548 - goto done; 1549 - } 1550 1537 1551 1538 ep_index = xhci_get_endpoint_index(&urb->ep->desc); 1552 1539 ep = &xhci->devs[urb->dev->slot_id]->eps[ep_index];
+19 -1
drivers/usb/musb/musb_debugfs.c
··· 114 114 unsigned i; 115 115 116 116 seq_printf(s, "MUSB (M)HDRC Register Dump\n"); 117 + pm_runtime_get_sync(musb->controller); 117 118 118 119 for (i = 0; i < ARRAY_SIZE(musb_regmap); i++) { 119 120 switch (musb_regmap[i].size) { ··· 133 132 } 134 133 } 135 134 135 + pm_runtime_mark_last_busy(musb->controller); 136 + pm_runtime_put_autosuspend(musb->controller); 136 137 return 0; 137 138 } 138 139 ··· 148 145 struct musb *musb = s->private; 149 146 unsigned test; 150 147 148 + pm_runtime_get_sync(musb->controller); 151 149 test = musb_readb(musb->mregs, MUSB_TESTMODE); 150 + pm_runtime_mark_last_busy(musb->controller); 151 + pm_runtime_put_autosuspend(musb->controller); 152 152 153 153 if (test & MUSB_TEST_FORCE_HOST) 154 154 seq_printf(s, "force host\n"); ··· 200 194 u8 test; 201 195 char buf[18]; 202 196 197 + pm_runtime_get_sync(musb->controller); 203 198 test = musb_readb(musb->mregs, MUSB_TESTMODE); 204 199 if (test) { 205 200 dev_err(musb->controller, "Error: test mode is already set. " 206 201 "Please do USB Bus Reset to start a new test.\n"); 207 - return count; 202 + goto ret; 208 203 } 209 204 210 205 memset(buf, 0x00, sizeof(buf)); ··· 241 234 242 235 musb_writeb(musb->mregs, MUSB_TESTMODE, test); 243 236 237 + ret: 238 + pm_runtime_mark_last_busy(musb->controller); 239 + pm_runtime_put_autosuspend(musb->controller); 244 240 return count; 245 241 } 246 242 ··· 264 254 switch (musb->xceiv->otg->state) { 265 255 case OTG_STATE_A_HOST: 266 256 case OTG_STATE_A_WAIT_BCON: 257 + pm_runtime_get_sync(musb->controller); 258 + 267 259 reg = musb_readb(musb->mregs, MUSB_DEVCTL); 268 260 connect = reg & MUSB_DEVCTL_SESSION ? 1 : 0; 261 + 262 + pm_runtime_mark_last_busy(musb->controller); 263 + pm_runtime_put_autosuspend(musb->controller); 269 264 break; 270 265 default: 271 266 connect = -1; ··· 299 284 if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count))) 300 285 return -EFAULT; 301 286 287 + pm_runtime_get_sync(musb->controller); 302 288 if (!strncmp(buf, "0", 1)) { 303 289 switch (musb->xceiv->otg->state) { 304 290 case OTG_STATE_A_HOST: ··· 330 314 } 331 315 } 332 316 317 + pm_runtime_mark_last_busy(musb->controller); 318 + pm_runtime_put_autosuspend(musb->controller); 333 319 return count; 334 320 } 335 321
+73 -35
drivers/usb/serial/ch341.c
··· 95 95 unsigned baud_rate; /* set baud rate */ 96 96 u8 line_control; /* set line control value RTS/DTR */ 97 97 u8 line_status; /* active status of modem control inputs */ 98 + u8 lcr; 98 99 }; 99 100 100 101 static void ch341_set_termios(struct tty_struct *tty, ··· 113 112 r = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), request, 114 113 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, 115 114 value, index, NULL, 0, DEFAULT_TIMEOUT); 115 + if (r < 0) 116 + dev_err(&dev->dev, "failed to send control message: %d\n", r); 116 117 117 118 return r; 118 119 } ··· 132 129 r = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), request, 133 130 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, 134 131 value, index, buf, bufsize, DEFAULT_TIMEOUT); 135 - return r; 132 + if (r < bufsize) { 133 + if (r >= 0) { 134 + dev_err(&dev->dev, 135 + "short control message received (%d < %u)\n", 136 + r, bufsize); 137 + r = -EIO; 138 + } 139 + 140 + dev_err(&dev->dev, "failed to receive control message: %d\n", 141 + r); 142 + return r; 143 + } 144 + 145 + return 0; 136 146 } 137 147 138 - static int ch341_init_set_baudrate(struct usb_device *dev, 139 - struct ch341_private *priv, unsigned ctrl) 148 + static int ch341_set_baudrate_lcr(struct usb_device *dev, 149 + struct ch341_private *priv, u8 lcr) 140 150 { 141 151 short a; 142 152 int r; ··· 172 156 factor = 0x10000 - factor; 173 157 a = (factor & 0xff00) | divisor; 174 158 175 - /* 0x9c is "enable SFR_UART Control register and timer" */ 176 - r = ch341_control_out(dev, CH341_REQ_SERIAL_INIT, 177 - 0x9c | (ctrl << 8), a | 0x80); 159 + /* 160 + * CH341A buffers data until a full endpoint-size packet (32 bytes) 161 + * has been received unless bit 7 is set. 162 + */ 163 + a |= BIT(7); 164 + 165 + r = ch341_control_out(dev, CH341_REQ_WRITE_REG, 0x1312, a); 166 + if (r) 167 + return r; 168 + 169 + r = ch341_control_out(dev, CH341_REQ_WRITE_REG, 0x2518, lcr); 170 + if (r) 171 + return r; 178 172 179 173 return r; 180 174 } ··· 196 170 197 171 static int ch341_get_status(struct usb_device *dev, struct ch341_private *priv) 198 172 { 173 + const unsigned int size = 2; 199 174 char *buffer; 200 175 int r; 201 - const unsigned size = 8; 202 176 unsigned long flags; 203 177 204 178 buffer = kmalloc(size, GFP_KERNEL); ··· 209 183 if (r < 0) 210 184 goto out; 211 185 212 - /* setup the private status if available */ 213 - if (r == 2) { 214 - r = 0; 215 - spin_lock_irqsave(&priv->lock, flags); 216 - priv->line_status = (~(*buffer)) & CH341_BITS_MODEM_STAT; 217 - spin_unlock_irqrestore(&priv->lock, flags); 218 - } else 219 - r = -EPROTO; 186 + spin_lock_irqsave(&priv->lock, flags); 187 + priv->line_status = (~(*buffer)) & CH341_BITS_MODEM_STAT; 188 + spin_unlock_irqrestore(&priv->lock, flags); 220 189 221 190 out: kfree(buffer); 222 191 return r; ··· 221 200 222 201 static int ch341_configure(struct usb_device *dev, struct ch341_private *priv) 223 202 { 203 + const unsigned int size = 2; 224 204 char *buffer; 225 205 int r; 226 - const unsigned size = 8; 227 206 228 207 buffer = kmalloc(size, GFP_KERNEL); 229 208 if (!buffer) ··· 253 232 if (r < 0) 254 233 goto out; 255 234 256 - r = ch341_init_set_baudrate(dev, priv, 0); 235 + r = ch341_set_baudrate_lcr(dev, priv, priv->lcr); 257 236 if (r < 0) 258 237 goto out; 259 238 ··· 279 258 280 259 spin_lock_init(&priv->lock); 281 260 priv->baud_rate = DEFAULT_BAUD_RATE; 282 - priv->line_control = CH341_BIT_RTS | CH341_BIT_DTR; 283 261 284 262 r = ch341_configure(port->serial->dev, priv); 285 263 if (r < 0) ··· 340 320 341 321 r = ch341_configure(serial->dev, priv); 342 322 if (r) 343 - goto out; 323 + return r; 344 324 345 325 if (tty) 346 326 ch341_set_termios(tty, port, NULL); ··· 350 330 if (r) { 351 331 dev_err(&port->dev, "%s - failed to submit interrupt urb: %d\n", 352 332 __func__, r); 353 - goto out; 333 + return r; 354 334 } 355 335 356 336 r = usb_serial_generic_open(tty, port); 337 + if (r) 338 + goto err_kill_interrupt_urb; 357 339 358 - out: return r; 340 + return 0; 341 + 342 + err_kill_interrupt_urb: 343 + usb_kill_urb(port->interrupt_in_urb); 344 + 345 + return r; 359 346 } 360 347 361 348 /* Old_termios contains the original termios settings and ··· 383 356 384 357 baud_rate = tty_get_baud_rate(tty); 385 358 386 - priv->baud_rate = baud_rate; 387 359 ctrl = CH341_LCR_ENABLE_RX | CH341_LCR_ENABLE_TX; 388 360 389 361 switch (C_CSIZE(tty)) { ··· 412 386 ctrl |= CH341_LCR_STOP_BITS_2; 413 387 414 388 if (baud_rate) { 415 - spin_lock_irqsave(&priv->lock, flags); 416 - priv->line_control |= (CH341_BIT_DTR | CH341_BIT_RTS); 417 - spin_unlock_irqrestore(&priv->lock, flags); 418 - r = ch341_init_set_baudrate(port->serial->dev, priv, ctrl); 389 + priv->baud_rate = baud_rate; 390 + 391 + r = ch341_set_baudrate_lcr(port->serial->dev, priv, ctrl); 419 392 if (r < 0 && old_termios) { 420 393 priv->baud_rate = tty_termios_baud_rate(old_termios); 421 394 tty_termios_copy_hw(&tty->termios, old_termios); 395 + } else if (r == 0) { 396 + priv->lcr = ctrl; 422 397 } 423 - } else { 424 - spin_lock_irqsave(&priv->lock, flags); 425 - priv->line_control &= ~(CH341_BIT_DTR | CH341_BIT_RTS); 426 - spin_unlock_irqrestore(&priv->lock, flags); 427 398 } 428 399 429 - ch341_set_handshake(port->serial->dev, priv->line_control); 400 + spin_lock_irqsave(&priv->lock, flags); 401 + if (C_BAUD(tty) == B0) 402 + priv->line_control &= ~(CH341_BIT_DTR | CH341_BIT_RTS); 403 + else if (old_termios && (old_termios->c_cflag & CBAUD) == B0) 404 + priv->line_control |= (CH341_BIT_DTR | CH341_BIT_RTS); 405 + spin_unlock_irqrestore(&priv->lock, flags); 430 406 407 + ch341_set_handshake(port->serial->dev, priv->line_control); 431 408 } 432 409 433 410 static void ch341_break_ctl(struct tty_struct *tty, int break_state) ··· 605 576 606 577 static int ch341_reset_resume(struct usb_serial *serial) 607 578 { 608 - struct ch341_private *priv; 609 - 610 - priv = usb_get_serial_port_data(serial->port[0]); 579 + struct usb_serial_port *port = serial->port[0]; 580 + struct ch341_private *priv = usb_get_serial_port_data(port); 581 + int ret; 611 582 612 583 /* reconfigure ch341 serial port after bus-reset */ 613 584 ch341_configure(serial->dev, priv); 614 585 615 - return 0; 586 + if (tty_port_initialized(&port->port)) { 587 + ret = usb_submit_urb(port->interrupt_in_urb, GFP_NOIO); 588 + if (ret) { 589 + dev_err(&port->dev, "failed to submit interrupt urb: %d\n", 590 + ret); 591 + return ret; 592 + } 593 + } 594 + 595 + return usb_serial_generic_resume(serial); 616 596 } 617 597 618 598 static struct usb_serial_driver ch341_device = {
+5 -4
drivers/usb/serial/kl5kusb105.c
··· 192 192 status_buf, KLSI_STATUSBUF_LEN, 193 193 10000 194 194 ); 195 - if (rc < 0) 196 - dev_err(&port->dev, "Reading line status failed (error = %d)\n", 197 - rc); 198 - else { 195 + if (rc != KLSI_STATUSBUF_LEN) { 196 + dev_err(&port->dev, "reading line status failed: %d\n", rc); 197 + if (rc >= 0) 198 + rc = -EIO; 199 + } else { 199 200 status = get_unaligned_le16(status_buf); 200 201 201 202 dev_info(&port->serial->dev->dev, "read status %x %x\n",
+1 -2
drivers/usb/wusbcore/crypto.c
··· 216 216 struct scatterlist sg[4], sg_dst; 217 217 void *dst_buf; 218 218 size_t dst_size; 219 - const u8 bzero[16] = { 0 }; 220 219 u8 iv[crypto_skcipher_ivsize(tfm_cbc)]; 221 220 size_t zero_padding; 222 221 ··· 260 261 sg_set_buf(&sg[1], &scratch->b1, sizeof(scratch->b1)); 261 262 sg_set_buf(&sg[2], b, blen); 262 263 /* 0 if well behaved :) */ 263 - sg_set_buf(&sg[3], bzero, zero_padding); 264 + sg_set_page(&sg[3], ZERO_PAGE(0), zero_padding, 0); 264 265 sg_init_one(&sg_dst, dst_buf, dst_size); 265 266 266 267 skcipher_request_set_tfm(req, tfm_cbc);