From patchwork Mon Apr 18 07:53:39 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshihiro Shimoda X-Patchwork-Id: 8868521 X-Patchwork-Delegate: geert@linux-m68k.org Return-Path: X-Original-To: patchwork-linux-renesas-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 998B99F441 for ; Mon, 18 Apr 2016 07:54:17 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id E27122026C for ; Mon, 18 Apr 2016 07:54:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B24D620035 for ; Mon, 18 Apr 2016 07:54:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752027AbcDRHyM (ORCPT ); Mon, 18 Apr 2016 03:54:12 -0400 Received: from relmlor3.renesas.com ([210.160.252.173]:23556 "EHLO relmlie2.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751174AbcDRHyK (ORCPT ); Mon, 18 Apr 2016 03:54:10 -0400 Received: from unknown (HELO relmlir3.idc.renesas.com) ([10.200.68.153]) by relmlie2.idc.renesas.com with ESMTP; 18 Apr 2016 16:54:08 +0900 Received: from relmlac3.idc.renesas.com (relmlac3.idc.renesas.com [10.200.69.23]) by relmlir3.idc.renesas.com (Postfix) with ESMTP id 2EDE14C22D; Mon, 18 Apr 2016 16:54:08 +0900 (JST) Received: by relmlac3.idc.renesas.com (Postfix, from userid 0) id 107931806F; Mon, 18 Apr 2016 16:54:08 +0900 (JST) Received: from relmlac3.idc.renesas.com (localhost [127.0.0.1]) by relmlac3.idc.renesas.com (Postfix) with ESMTP id 05F141800A; Mon, 18 Apr 2016 16:54:08 +0900 (JST) Received: from relmlii2.idc.renesas.com [10.200.68.66] by relmlac3.idc.renesas.com with ESMTP id SAH14624; Mon, 18 Apr 2016 16:54:07 +0900 X-IronPort-AV: E=Sophos;i="5.22,559,1449500400"; d="scan'";a="209568563" Received: from mail-sg2apc01lp0242.outbound.protection.outlook.com (HELO APC01-SG2-obe.outbound.protection.outlook.com) ([65.55.88.242]) by relmlii2.idc.renesas.com with ESMTP/TLS/AES256-SHA; 18 Apr 2016 16:54:07 +0900 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=VYiM2H3zrCjSIwaoPF1gcDW+eim44GSfnikcDFKHb04=; b=O4BS48qtB782w3zP69ImbzC401h4wNJI0pqonN4SljP5umwmZsgQ1d1ftPvwUc0b/6WUhhG5/LH5U45UWwTHyzB7dXmOs01F31x0Nju3P//7iT8fCsfn9eA+Q64poeTub2OIs+3cLBhiqO6H6aGGrGRvwOH7AUEISPEfvORFyBE= Authentication-Results: kernel.org; dkim=none (message not signed) header.d=none; kernel.org; dmarc=none action=none header.from=renesas.com; Received: from localhost (211.11.155.141) by SIXPR06MB0922.apcprd06.prod.outlook.com (10.162.173.157) with Microsoft SMTP Server (TLS) id 15.1.466.19; Mon, 18 Apr 2016 07:54:01 +0000 From: Yoshihiro Shimoda To: CC: , , , Yoshihiro Shimoda Subject: [PATCH 2/5] usb: gadget: udc: core: add usb_gadget_{un}map_request_by_dev() Date: Mon, 18 Apr 2016 16:53:39 +0900 Message-ID: <1460966022-3444-3-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.4.msysgit.1 In-Reply-To: <1460966022-3444-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> References: <1460966022-3444-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> MIME-Version: 1.0 X-Originating-IP: [211.11.155.141] X-ClientProxiedBy: OS2PR01CA0038.jpnprd01.prod.outlook.com (10.164.161.148) To SIXPR06MB0922.apcprd06.prod.outlook.com (10.162.173.157) X-MS-Office365-Filtering-Correlation-Id: 2af7939d-47b6-496a-6856-08d3675e9b7e X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0922; 2:CcQu6RxyC3g3fxcUGXAgpGwba0rKJoxjUeOOx//Fb5pO/sBMFAeAqToREolZUOyEeAP9VI9L//s0hm06nUW7Ku+9StK1RdDv1FR0tuM2dM5JyXnvkjniWDF18E+ffyAqBbT+Vtu5aRdtnIE9Ni2c6k5QZicPfxhYeYUrxROEQVdxfDBMYpZICgpJVwIKu356; 3:dS8vDxYdcDQScdrd4iVfDpV+eJV4vjHHaF+Y6ZhZzqX4QgE42Irf01NMd0t6RBJG9zherI5qyRfQnRjKdz91EAHUMJiVcaNGVOZjdkLQKgfKVMJ3GyJ9IIqCY8bCg4k4 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SIXPR06MB0922; X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0922; 25:2HVwpjYQfgiSqJ8grxcNHwEQw4sm33qcMkWbXlmWt8Oeh3yRmWXOnY28rnvb8B58hoAU1pChHvQSDKIMGrjoscD9DxE7E00K+JexGKXnQceB2WgcWHfDodjJrvpf8w1oyAcpQ6YZmHLOv3psKXnMKlviw3RKzlSRzFi7G36uTtnocvAhjSbi6KvIahckn6JZJL9I7M88zo411opSBLBsB22TjIu++9YogFlHwTi5/7psfnl5rTE6qXLEXDA4V+GzMgRQGOJFgPTFErls/E+edSz5vRaeBGAV1NKcywOphzZWi/hxIakNH3+SEUFqKgYau7wOwavyTG+/0/yiDlBUcX/ctvyfM7Ho6+YEhG68W33rSyC1hQALSjxOv8HkUZxW2eraWXrJEloyr+oBviNY02vehNjoACFfuWqI7mw/yol4nS9KEkOfyxAccs5GQAGaVR9BY37KIyRZQFok5Q2YLGy2pX297f4WznjM7qLTqwi+7mmkHmYTAXppG3CoHHeZ/DM1oUVRwaibJrqIW8bVUR9TyiwUV0MZw0YYOwsyHQL8BGeaGEzrjF5v6JnXHzIyEFtPTZtD9RUwCqomnuZd8naWDc6UIxMXLGDLQa85pK58m8JJTrb4ip6Gr5l8sRFU4F72S8wUS/NZ5MZVt+fO8D0YmqTnvxslzx8H7ZVuA33k/EC5t70CIssk8+HsIHDh X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0922; 20:8cepSENAIhHootMjTdoLXuTyPTUfwRAWwJNxmu5D6p0oaQjKHPsTMznIxV6VB1GTDCq6+7Y0xTJe4PJCaizmrVW+i9DbygZhhUC/ivox1Ra3YjxgLnsGsLVrb8w79uBaI9MStLDu1MixOL74G++VRUjMrd5FwxdRjPRkSZgP0DdNd2TqAJZJtNUFHgfRzbijhkOuXmhNxH8j/6cNORfSEJ5HLlmnKrbY2E22feB/KTq3bWN5lKvzAjDsSTTkxWPrpol7+g/VOGuZN91Yi/G9VM87xfY5a86kc2Utz9ODHUgygCKOcfzFoRiI9M7lpI6aVTJ3IZa+SglbUZQ3RPtz+6UW2fquM29l2D4YPM9K2TLq6rO7om0OPlYPWKxcvCkr7LjCId/zpCYpUTRMTKj9RmvN9dn8i7jZ2BP+1UMGlqw6tNWTXkbyZor1Hfx3/T6kmHsLXdVE+6cfWKlrx0oicPigdEWwceS6Z3/D1nOmEWnboSYmpAzUAOkomwqfRHpA; 4:9zsOErecSieLgCvPj0RDXe+foBeKpFwFxjNYrvQI7kGkNsA+MvGeKSX6KdSsmqTD6y9h73lGFlsQhgwoiTqfA6cGWKhMvhUyqcI6I8ElWypeEZyRY8JT2nHXVCcF8wXCeVGBxlO53HMdR2THdBVkdWFEmKgjBkT0u1HsbntQclm258DvGlp4WVXv0T0LYpVM8gZTuaB6oY/W3+7eQ4ybVdYXnjijUIJPouoeQhxuc5DnMN+cAlju2UUXHvSkh+j8RO4Uk5KEUMRCm4FrExxm0SFlOBn9Uj1OXfurHpEq48P1UiPRLvbPJxF4qV2X1My12EBlSoNu2QEoIT4hmyAXrQ3MEQ/qvzGKa7ECOX43wuuY7RdKc8lUnW8JmPZpxnwAr3ycC9Co6HySw1f3wIaPuQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026); SRVR:SIXPR06MB0922; BCL:0; PCL:0; RULEID:; SRVR:SIXPR06MB0922; X-Forefront-PRVS: 0916FC3A18 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(6009001)(6069001)(4326007)(81166005)(19580405001)(42186005)(76176999)(76506005)(4001430100002)(19580395003)(42382002)(50986999)(47776003)(92566002)(66066001)(5004730100002)(48376002)(110136002)(3846002)(189998001)(2950100001)(5008740100001)(107886002)(1096002)(78352003)(50466002)(586003)(6116002)(36756003)(2351001)(77096005)(229853001)(33646002)(5003940100001)(2906002)(50226001); DIR:OUT; SFP:1102; SCL:1; SRVR:SIXPR06MB0922; H:localhost; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SIXPR06MB0922; 23:HfndmqL1okj0UbVgT2/koiHT+2H6VDozRvUrAk2ul?= =?us-ascii?Q?hGOBvntoKMrFAGAVGBKkg+2cde/TYf1JOkTDvsRv0hT71Ege94gpqqyyIrcL?= =?us-ascii?Q?myi9g02Bz7tyhe2wIQSy4Wx74udZ8MNh37iGV094CgmbZd0+LgjBDV9tVyWi?= =?us-ascii?Q?Ks41fkAFLIEuLm6OY4ejW1zbSXnke6doVXOnlYHGklPqVie41iBPBunbjTq9?= =?us-ascii?Q?pkmn0Rmyyo6iXxgdMWBqPxy5gpMN42RGqA8O5kUlpwYTBExMrZ2TtMXHv9J+?= =?us-ascii?Q?BdvGKR87rjClA0xSzDAWq1beLEb2EOzHySIWx5uIxY+dJhAdyNworJGhgCL5?= =?us-ascii?Q?r30dOgzfDQ5rkVNqNFVg5scU5kUPsi8Fs13dK95XQ69+3HD+PvhtC2/i6MrM?= =?us-ascii?Q?qsULGrTM75fKQLDkwyDBKSi+aGYVYuSz48dEN4E6EIUygLqFoHtKELLrFpgs?= =?us-ascii?Q?9wtTuYJEF87KTRFM1ckUsXaBMB1EHzim2GClQRHLQ8UoBaet9150IX0/cn2Q?= =?us-ascii?Q?Vo46lcKiSrI7hlZHnqHoZfsYSKrgkrW64Za1zQ2U6A4dX78O40N5Tquu/Ubz?= =?us-ascii?Q?VhXN1F4mG2EI4BpRsvYuZtvnGreBx5QYJIIT4K0IxkKmSsBH0hU8Mv/WSHcc?= =?us-ascii?Q?YDiUr2lVbZ6Big/vy1jkPvgaCMidoNTO+4ZzuK5InDc+S1Jbbxn32CdUn5M6?= =?us-ascii?Q?iGjEP9Yd0kSnqdRVtyJubLQ24xIeUwUseX8b0h/vlvAJIvLK/csZJIrhsgHf?= =?us-ascii?Q?HjLLzeq4QqhGsHlRStAGl1ttkW2crX+Z2sdG+HUD1dpy4IcovZLeoiWQvxkb?= =?us-ascii?Q?LhPH/Fvhw53vvF2PiVEM0qPejPnCgzwQftAZ22PU7pOzjpU1qyDkGyoI0ayt?= =?us-ascii?Q?4VNZbVf5atBFCiCLO04kTkJugce+ymRwjikBQ2frVhdioVXdZoyA/4+FUWAn?= =?us-ascii?Q?b7MXIl014Undrp+KVjM+/IYEVQq0/AlzTBNGMKx6Q=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0922; 5:TlIomYHmy2ZYRe/mfHqWBEe3reNF1Fcxq17UzqFfe5WFcOAbcBpR8h+eBiRTHag8dUaMz68x6KgHow8bDD0VpSVoEGy1OkIM/YGQwX1x+NT4M8ffbWr22rti5GRcOmqecTQywKsOhHPc21uwyLam7gCDuvzfuxfzzf80+yElvd9Ut9rt1DiLocoyG8K9XQF1; 24:Tl9JqrT7Q7sxwd1I7rXPpwOGMksICCvSZny9Szk+bxx3TfyfX46DDMZK/qkYtDpY3gwMEM85DtvWMj6E4GJK5NGXGrpuqZYITYhDBb7gFK0=; 7:Gwo4PhBXYMm0RNmNztHum6xP/FjPz8CtfwvWLauyCpGiwJzaHImABPUdolUmJj+85W5OJjkCIcC3b2/gM0FzqP106t6VWNSsv8nBhZALUj1xsikKBfl+vHpQa1fKsU5CARXAzz612GyhS4yuRfjUfhEaVOSsJLq34S21fAszw3PC95HdoYz6UnjlPJBHsNgea7PBOtl6ACLpFYihjyotMYU12SHw0RKj/QILdoQKDXc=; 20:+UFvczzLyzLaVwCadkeKHyAF4l8qJt6GG+XcUFfuK1wzYB6Nj14j8TTCIEdWFA4YeEIQRFpk8XkhYrFUHQzAwFOwZ3ykQLLxNdVMmuRy6rjl8YwaizIrcNuqR7DE42g1aFUR0qk+6CrmPE3Gx9hMlyu/xL86pUqLdlNBskJvTKY= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2016 07:54:01.8804 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SIXPR06MB0922 Sender: linux-renesas-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-renesas-soc@vger.kernel.org X-Spam-Status: No, score=-7.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP If the following environment, the first argument of DMA API should be set to a DMAC's device structure, not a udc controller's one. - A udc controller needs an external DMAC device (like a DMA Engine). - The external DMAC enables IOMMU. So, this patch add usb_gadget_{un}map_request_by_dev() API to set a DMAC's device structure by a udc controller driver. Signed-off-by: Yoshihiro Shimoda --- drivers/usb/gadget/udc/udc-core.c | 24 ++++++++++++++++++------ include/linux/usb/gadget.h | 4 ++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/usb/gadget/udc/udc-core.c b/drivers/usb/gadget/udc/udc-core.c index c6e7646..6e8300d 100644 --- a/drivers/usb/gadget/udc/udc-core.c +++ b/drivers/usb/gadget/udc/udc-core.c @@ -61,11 +61,9 @@ static int udc_bind_to_driver(struct usb_udc *udc, #ifdef CONFIG_HAS_DMA -int usb_gadget_map_request(struct usb_gadget *gadget, +int usb_gadget_map_request_by_dev(struct device *dev, struct usb_request *req, int is_in) { - struct device *dev = gadget->dev.parent; - if (req->length == 0) return 0; @@ -92,24 +90,38 @@ int usb_gadget_map_request(struct usb_gadget *gadget, return 0; } +EXPORT_SYMBOL_GPL(usb_gadget_map_request_by_dev); + +int usb_gadget_map_request(struct usb_gadget *gadget, + struct usb_request *req, int is_in) +{ + return usb_gadget_map_request_by_dev(gadget->dev.parent, req, is_in); +} EXPORT_SYMBOL_GPL(usb_gadget_map_request); -void usb_gadget_unmap_request(struct usb_gadget *gadget, +void usb_gadget_unmap_request_by_dev(struct device *dev, struct usb_request *req, int is_in) { if (req->length == 0) return; if (req->num_mapped_sgs) { - dma_unmap_sg(gadget->dev.parent, req->sg, req->num_mapped_sgs, + dma_unmap_sg(dev, req->sg, req->num_mapped_sgs, is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); req->num_mapped_sgs = 0; } else { - dma_unmap_single(gadget->dev.parent, req->dma, req->length, + dma_unmap_single(dev, req->dma, req->length, is_in ? DMA_TO_DEVICE : DMA_FROM_DEVICE); } } +EXPORT_SYMBOL_GPL(usb_gadget_unmap_request_by_dev); + +void usb_gadget_unmap_request(struct usb_gadget *gadget, + struct usb_request *req, int is_in) +{ + usb_gadget_unmap_request_by_dev(gadget->dev.parent, req, is_in); +} EXPORT_SYMBOL_GPL(usb_gadget_unmap_request); #endif /* CONFIG_HAS_DMA */ diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 5d4e151..457651b 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -1223,9 +1223,13 @@ int usb_otg_descriptor_init(struct usb_gadget *gadget, /* utility to simplify map/unmap of usb_requests to/from DMA */ +extern int usb_gadget_map_request_by_dev(struct device *dev, + struct usb_request *req, int is_in); extern int usb_gadget_map_request(struct usb_gadget *gadget, struct usb_request *req, int is_in); +extern void usb_gadget_unmap_request_by_dev(struct device *dev, + struct usb_request *req, int is_in); extern void usb_gadget_unmap_request(struct usb_gadget *gadget, struct usb_request *req, int is_in);