Pārlūkot izejas kodu

usb: gadget: u_ether: conditionally align transfer size

Unless HW sets quirk_ep_out_aligned_size, gadget driver shouldn't make
any efforts towards aligning transfers. If the UDC needs, it *must*
set the quirk flag.

Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Felipe Balbi 8 gadi atpakaļ
vecāks
revīzija
387f869d25
1 mainītis faili ar 6 papildinājumiem un 2 dzēšanām
  1. 6 2
      drivers/usb/gadget/function/u_ether.c

+ 6 - 2
drivers/usb/gadget/function/u_ether.c

@@ -178,6 +178,7 @@ static void rx_complete(struct usb_ep *ep, struct usb_request *req);
 static int
 static int
 rx_submit(struct eth_dev *dev, struct usb_request *req, gfp_t gfp_flags)
 rx_submit(struct eth_dev *dev, struct usb_request *req, gfp_t gfp_flags)
 {
 {
+	struct usb_gadget *g = dev->gadget;
 	struct sk_buff	*skb;
 	struct sk_buff	*skb;
 	int		retval = -ENOMEM;
 	int		retval = -ENOMEM;
 	size_t		size = 0;
 	size_t		size = 0;
@@ -209,8 +210,11 @@ rx_submit(struct eth_dev *dev, struct usb_request *req, gfp_t gfp_flags)
 	 */
 	 */
 	size += sizeof(struct ethhdr) + dev->net->mtu + RX_EXTRA;
 	size += sizeof(struct ethhdr) + dev->net->mtu + RX_EXTRA;
 	size += dev->port_usb->header_len;
 	size += dev->port_usb->header_len;
-	size += out->maxpacket - 1;
-	size -= size % out->maxpacket;
+
+	if (g->quirk_ep_out_aligned_size) {
+		size += out->maxpacket - 1;
+		size -= size % out->maxpacket;
+	}
 
 
 	if (dev->port_usb->is_fixed)
 	if (dev->port_usb->is_fixed)
 		size = max_t(size_t, size, dev->port_usb->fixed_out_len);
 		size = max_t(size_t, size, dev->port_usb->fixed_out_len);