From patchwork Thu Aug 27 11:00:50 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 511230 X-Patchwork-Delegate: l.majewski@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 213FC1401C7 for ; Thu, 27 Aug 2015 21:01:32 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 375A04B6AD; Thu, 27 Aug 2015 13:01:28 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WJ0u77Kb3t57; Thu, 27 Aug 2015 13:01:27 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 57E544B69A; Thu, 27 Aug 2015 13:01:27 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 5606F4B69A for ; Thu, 27 Aug 2015 13:01:21 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0nN6JbM5QFpX for ; Thu, 27 Aug 2015 13:01:21 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1on0142.outbound.protection.outlook.com [157.56.110.142]) by theia.denx.de (Postfix) with ESMTPS id 8A08A4B662 for ; Thu, 27 Aug 2015 13:01:16 +0200 (CEST) Received: from BY2PR0301MB0679.namprd03.prod.outlook.com (10.160.63.146) by BY2PR0301MB1621.namprd03.prod.outlook.com (10.163.28.27) with Microsoft SMTP Server (TLS) id 15.1.243.23; Thu, 27 Aug 2015 11:01:14 +0000 Received: from BLUPR0301CA0003.namprd03.prod.outlook.com (10.162.113.141) by BY2PR0301MB0679.namprd03.prod.outlook.com (10.160.63.146) with Microsoft SMTP Server (TLS) id 15.1.243.23; Thu, 27 Aug 2015 11:01:13 +0000 Received: from BL2FFO11FD023.protection.gbl (2a01:111:f400:7c09::139) by BLUPR0301CA0003.outlook.office365.com (2a01:111:e400:5259::13) with Microsoft SMTP Server (TLS) id 15.1.256.15 via Frontend Transport; Thu, 27 Aug 2015 11:01:13 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; denx.de; dkim=none (message not signed) header.d=none;denx.de; dmarc=none action=none header.from=freescale.com;denx.de; dkim=none (message not signed) header.d=none; denx.de; dmarc=none action=none header.from=freescale.com; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD023.mail.protection.outlook.com (10.173.161.102) with Microsoft SMTP Server (TLS) id 15.1.256.10 via Frontend Transport; Thu, 27 Aug 2015 11:01:12 +0000 Received: from linux-jyl1.ap.freescale.net (b51431-11.ap.freescale.net [10.193.102.108]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id t7RB0pdF032291; Thu, 27 Aug 2015 04:01:10 -0700 From: Peng Fan To: Date: Thu, 27 Aug 2015 19:00:50 +0800 Message-ID: <1440673250-17589-1-git-send-email-Peng.Fan@freescale.com> X-Mailer: git-send-email 1.8.4 MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD023; 1:FS8/rSG0w7LauQaKijxC/ufE315tFCP7YFmWPJV/BEUTU2u84WlN0bPRZLIR02/lOILHBUHUkgXfcjc/EgJKf7bBTnD3CI+RritYyIz/t6BaBT1ItnUjLzuV81S4R66yBZx5eUv4MuSUQO8xHbek84dUEcgC7pn4lSufnX2BIFQks6a0rAiZpGyXNlW+bKKNq1fGPDEBpSSGbXpS06SXID0WkDMHZBiPShqneRrb6aCnxDeyRdoxhMt4rW/8HL+UyekTqr6w+5jv0fL4y4G03XxAD/iDfkyBEdhB42V12Y6piDa1bFKVqwtSNV/TNZk9f7spEho0CvX/zn2i5IIJzbW18uk1MqCb8lMjgKYQDAD9FVTpJ6YPFYySpgU3lNLonJ2+WLrgEwoFFBeloGDTcMIhMiW9hQQj6bddhwr0yR8= X-Forefront-Antispam-Report: CIP:192.88.158.2; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(339900001)(3050300001)(199003)(189002)(5007970100001)(5001830100001)(50986999)(105606002)(87936001)(64706001)(23676002)(46102003)(189998001)(5001960100002)(97736004)(36756003)(5820100001)(4001540100001)(110136002)(5001860100001)(47776003)(81156007)(92566002)(19580395003)(85426001)(50226001)(6806004)(229853001)(86362001)(77156002)(104016003)(62966003)(2351001)(68736005)(69596002)(50466002)(106466001)(77096005)(19580405001); DIR:OUT; SFP:1102; SCL:1; SRVR:BY2PR0301MB0679; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0679; 2:ClFysynniwwWbWTGcb8Salnxc1T0+b4UYfHgIJ/AlkG0PvO7hqwFxw4K1cDwLBZiQh0PlEeSJ8rVPHufRdDNkMe6qizGelNOR8kPurszGqPbdkr6ILwWHqzyrrjBCazoMC3pCPaqnIzoIx8BRilZHUVtbL+99QVdHm2QtkZxAmI=; 3:m0VupE+E5qfC7kd5kq5b9fkKgUqCFcqgozQBu6W8fBqcu0HirByyeEzUOPgtnhlcocCg0RVTGic6s7a6GZytQbM0cWxx/ynDhaXIG7HPyk32gblEDpJelNPPp+Srhxtwy6PLVF9qBX5SM2srzHrkTXJJtNZgq6DrqqVeGYX+s5BdqGgksQbhWnaLrIGX6KoymZr79loHmQrYjWMKqefAC6fEQmqUUaH651sms1kJz/I=; 25:RfgY/cu0xqpvwmVJksUme/vxM4QZ//FuX5iy/Y82qvmmo9Our/JjQjpULx5ioyfOC3D5BV9sAwOhN2vI4SDBnxYyD7rawZ6utUjJkRgo9M3iROIbwKeXgm+qD6c+9G++bxyPg69IYbFFOMRAyIxraHCeLykVT3mqpItMfd7dASFL17B0m/CBiTInxM3kgWyLTLQAdpnMGPlMRwd3sfYf7UUkHRq5pjAH8N4NXr9b+Cyebc0xXn4ZggF65qv558AY+IJQBHqwN7SYoPJgTKOkJA== X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:; SRVR:BY2PR0301MB0679; UriScan:; BCL:0; PCL:0; RULEID:; SRVR:BY2PR0301MB1621; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0679; 20:JNIsJLky4DxjP0UrEXokcCYAJPvJNdqTPR3WnLlzEgMV639ciCWOqzP9rSCnnjSwVQaYmf+mN/PAL7KIJxa24l1dGZ4sVCLXJ5hyuXLmnn/1hHypnFaaJN9RlnYvsbrbCOttftPiZD4+FloCxEFT2WHdpJj5VZDZMkKyPxSS9CEKsNLejO23RPmeeOe1ijVfpytxAvDMgMUvEI1E71hAx3e72+NTXkuu8iohB7P/XrVbPUcRJoxpMEY+0K8Qwq9+3GM+o+DxwVZp9x4ZYwu56/Dbqr/XjequlvJhwVlnuhMvnycKNyMWUUtms8Z4gihjKfmi2+FIBAV0yuuUYHfL3fjqVAAUIvxzP+BEgnOAZGE=; 4:aGOM7L2d1ByZPy64NnILrXede6gtqBQ2jRtLrDhzzoSlHgMq5TA6S7O9mF9ggsJdpBqJQb5s40hLk3YcEJNmQzPEvhhE49Ua678ssXmUMsjLhd78O9Lb+GZJtV7UEotr9hwupDXhYhYzRj7rCuqP5MuBtjY038KqHnApegbkNdbGrJXEoGzMyVW0kFnwI7BBRk7v8fNhssoxKj48P9kCVpKr2dLglxmDHxeFY2qo68/Rz3sCqYnj1eB6t+TsdlIfihXA+4V1oFfVvYfHIS00EPYX2iBQH2m3QtORs5wm0eUBflvdHw71qAFFtIGCfUhv X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(5005006)(8121501046)(3002001); SRVR:BY2PR0301MB0679; BCL:0; PCL:0; RULEID:; SRVR:BY2PR0301MB0679; X-Forefront-PRVS: 06818431B9 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjAzMDFNQjA2Nzk7MjM6ckRtQlF2aWR4T2NaRDhkUXRjSDBIekRM?= =?utf-8?B?S25aSGt2Uy9hbXdOOXcxMEtNMlgrekVmVjZjclczakhiYlZ0MEJqOEhEbGt6?= =?utf-8?B?bWdSK25JTWYvZ0cwbG1oNEdHSUFZcVBGNFpxQU9DdmdsL3VuWFpCVmQwL0t2?= =?utf-8?B?NVlla3Y0aUl3R3E2OW5tUFNjZjBWN25jYXBjWUdSdnVBU0lVakNEVS9PcndV?= =?utf-8?B?WWphTjF3OWdjc3krN2ZpYXV1UkdoWk9ScWhjdHM4L3c3WkRoL25Vem1nMFRz?= =?utf-8?B?U1I1WUVsN0dIQTJPZjBDUlJVN2IwalZtUUxpTmNWZ0pPY2tXUDdjK2ZOeTBq?= =?utf-8?B?aTVXM3NUaEErTys3TmZkVE1LN2FNWnVjdFVMMHo2cFNXYytCNURmU1lidE92?= =?utf-8?B?Z3dyMTBkemM4Q2VWMFVqZlpmUC9wbHBEd3RWYzY5QkxqNzRaVkdZczdpOFlE?= =?utf-8?B?a3daUTM1YllUcWx6MXpsN1d0NTJsN2hyQXhteUxpWW1UclVDMFQ4TG1LTDJo?= =?utf-8?B?R0MvdTIzVmdmZmZ4NzFiWFFtM3JQNUYxRmZWNzM3c3NFWTVBMEFrVmNlVGkv?= =?utf-8?B?ekpvNzhhZi9nT1krekQ2U0YxWkhJT3BRaUJmOHJNNGxuUGdYQnhBbDhXM2xV?= =?utf-8?B?eFFwN1JGWmJGQ3ZTREtiMlduOHhmY1RNZXJPQWl0RWZOdWhhN0pWR3NpcDB0?= =?utf-8?B?bmxZVzVDOGVTRDhJd00xQkk1U1Y1K2w5NXdxNlZaNCs2OWlLcER3YThlbHhx?= =?utf-8?B?SVYvN0owSGpONGNBcDZXekRQTDRkbzJvbHFJem11V2xmbjMzcjZlUFl6emI1?= =?utf-8?B?QktCQ1E4aGdoTkNTdTduUnpUZ3BJbXNTNXd1WTlVSFZyTG5iYkNOZnpYQkRx?= =?utf-8?B?NktsZ1E3NlVHTUJPSHd4VGtoN1ZNREd6djFRaVkyM0FRMnVPaXpMV0xDRWpz?= =?utf-8?B?Vi9KVHAxMkZ4eG1IY3g3K3Q0akx4TmM0UHBaS0hUQXI1V0FTRDgxZEljLzNh?= =?utf-8?B?RHB2THA3YTVZZ0FZMlJjdDdPaVl3cDJXNlI1cHRlanl5T3ZPdWE1dGRENDl1?= =?utf-8?B?NHFrTjY3WUR5WUxIVmsza0w4ZUpSai92dW5aK1J6eTBBZTQ4RlVJRStaVnB4?= =?utf-8?B?TFFqQWU2Y2krd0g4WmVKS3QrQ2dYZEhBTHVOd05sbEYwdXhRdVh0UjdENjlt?= =?utf-8?B?YVgvQ0ZCWUhXbVllSEF6UktDTXNwTFR3OUV4ZE9qdzB2V0cwWVJWTWFYMHFy?= =?utf-8?B?dkF2MnRhTTZrUkM1STBpMGlEOTJXZENjZE1YNlNSam92SjFwOHpXVGsyL2RT?= =?utf-8?B?VFNPbXYvTlpZOWJ1RFpVWlRLdEFTZkVZK1B6cHJ5ekRSTlNxK2FiRHJVWWR6?= =?utf-8?B?c2E0TlFCQmxHaGhzeFRpdlZHcU1Vd1gvVEJpY04vaCs2di9TZGhhS1NxZmZI?= =?utf-8?B?S25YWEprNHpsZ2dZYitWRE9iOGpHYXd1bmVUUGo3Ynp2ZUpxMlR1ajdiL1Y3?= =?utf-8?Q?I8iMWIu6CYKjye8jB0TJK7ANiR0=3D?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB0679; 5:K8mruwlZBuWaE8/SlchPYJv/qN2P9oTbT25BdQ1gTHFZmWxOg94hGHLkPj/899ZGR1MJVHGc/9J8Rxd7a2Q1P8TBLfDhbBsenye3eInapYvWgDe0+0UErlZLulB7Yzj1vDWfiSCIjre79G4m5xB5Yw==; 24:cMHgtkG8BQpw9YXH33LccMcC7RGFiFJnTuGG/sE1hdIYW3ThyYw1wRCLRkMx1uV0fzBuhgNU8iiPwxcm0a8/rGeo+rLmcYOldL2QPXgrDsA=; 20:M8xqtzGTg8m1aiXGbIQh3w2tbyyZY2ks3ev1tvIyEFqBX//vuBhqEIN0rXupIsBaVXOJSK70HYyrQxWdrDHfPg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2015 11:01:12.4197 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR0301MB0679 X-Microsoft-Exchange-Diagnostics: 1; BY2PR0301MB1621; 2:SPXTgqlkEH74d/KH9P9h8No++pZEpbsoXfeDkYZxfjIuu4Q1+FT4idz5hk4zCUtl5qBfOu5U0SAcrmxJ2hdfQstueRiaV4XMKWrU6hD0dYeKX5vRJIKmMCWZI0+ePN79yU+lhw/yw5kthKu7ynxP/9ZqL3pxlk2AWWMnRGh+J/k=; 3:kOITKvwDXWRX5g00i4XX0jPTjV+Vnuk46oFUUuStpFm9Qj/s8c3K3qenOWy0JHs4OIMvDyIUTyXRUmtHjh4L7/HSFXMus+yx1G8gqmMPgcO5Ew7eCFxJjb8wg5g1Ibl1leonbcy+DHe65jTS8LZ/5sFkR4Wp1rDQkM2yH5T/N3bULnLSsnbVL0H339+o8OuR6yrt4a0T/I/uX1+HT2ZoCXDICplwOXbMJx/iErp8rCM=; 25:a4Ip2j755emUdVtLV3frPYXTMwW8usNJaxiK8jACxOrJdYU9Pn/E9qt5XCd+xF2aBai0NqewGjJTA5GOYs9kNf5p2ygvbs9U6HU/OEtc4bHyA5L23vd7b/meBLTtaf+sLC6X6j9VxZUt+WiOKKe/cqZgcD4TEvWuEFxF8ps0AsWBUhMpoi6enExWZx/IPC0P2NKBMl/x3qpquQ0jio/TShEJg/daVZqPt9HMuEluqXtmJ4tJRmJvQTdUgI44kzwSsg1GBBeoOv9Fzf0GOtxt7Q==; 23:DulSnGmddY+oSotJO/mwoVpN4P4ye9EWNzuyVGuBvypbxy8oTT3YzeEBTeDcuhj09Ie0cTXlfN0z36iGazotD5vVJRcNiLI4txpSS9l9GZEyjshcoPRVIvZGw3y3J9u2Vjs6AKY/SbE3VeLT34BzrpVqfAKG5EqsqWt634IByp+rgsENdx9XOPx0RXmJGDED X-OriginatorOrg: freescale.com Cc: Marek Vasut Subject: [U-Boot] [PATCH] usb: gadget: ci_udc: implement usb_ep_ops dequeue callback X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Implement endpoint dequeue callback function. Without this function, uboot will hang when executing fastboot comamnd. See following flow: "fastboot_tx_write_str->fastboot_tx_write->usb_ep_dequeue->ep->ops->dequeue" without implement ci_udc dequeue function, ep->ops->dequeue is NULL, then uboot will hang. Tested on mx6qsabresd board with fastboot enabled. Signed-off-by: Peng Fan Cc: "Ɓukasz Majewski" Cc: Marek Vasut Reviewed-by: Marek Vasut --- drivers/usb/gadget/ci_udc.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/usb/gadget/ci_udc.c b/drivers/usb/gadget/ci_udc.c index 3e8eb87..f9374b3 100644 --- a/drivers/usb/gadget/ci_udc.c +++ b/drivers/usb/gadget/ci_udc.c @@ -87,6 +87,7 @@ static int ci_ep_enable(struct usb_ep *ep, static int ci_ep_disable(struct usb_ep *ep); static int ci_ep_queue(struct usb_ep *ep, struct usb_request *req, gfp_t gfp_flags); +static int ci_ep_dequeue(struct usb_ep *ep, struct usb_request *req); static struct usb_request * ci_ep_alloc_request(struct usb_ep *ep, unsigned int gfp_flags); static void ci_ep_free_request(struct usb_ep *ep, struct usb_request *_req); @@ -99,6 +100,7 @@ static struct usb_ep_ops ci_ep_ops = { .enable = ci_ep_enable, .disable = ci_ep_disable, .queue = ci_ep_queue, + .dequeue = ci_ep_dequeue, .alloc_request = ci_ep_alloc_request, .free_request = ci_ep_free_request, }; @@ -525,6 +527,32 @@ static void ci_ep_submit_next_request(struct ci_ep *ci_ep) writel(bit, &udc->epprime); } +static int ci_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req) +{ + struct ci_ep *ci_ep = container_of(_ep, struct ci_ep, ep); + struct ci_req *ci_req; + + list_for_each_entry(ci_req, &ci_ep->queue, queue) { + if (&ci_req->req == _req) + break; + } + + if (&ci_req->req != _req) + return -EINVAL; + + list_del_init(&ci_req->queue); + + if (ci_req->req.status == -EINPROGRESS) { + ci_req->req.status = -ECONNRESET; + if (ci_req->req.complete) + ci_req->req.complete(_ep, _req); + } + + debug("callback completed\n"); + + return 0; +} + static int ci_ep_queue(struct usb_ep *ep, struct usb_request *req, gfp_t gfp_flags) {