From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752223AbdBMI3f (ORCPT ); Mon, 13 Feb 2017 03:29:35 -0500 Received: from mail-eopbgr10126.outbound.protection.outlook.com ([40.107.1.126]:32944 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751712AbdBMI3a (ORCPT ); Mon, 13 Feb 2017 03:29:30 -0500 Authentication-Results: spf=pass (sender IP is 131.228.2.35) smtp.mailfrom=nokia.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=pass action=none header.from=nokia.com;nxp.com; dkim=none (message not signed) header.d=none; X-HPESVCS-Source-Ip: 10.151.73.93 Subject: Re: [PATCH v13 06/12] usb: xhci: use bus->sysdev for DMA configuration To: Peter Chen , , , , , , , , , References: <1486776443-2280-1-git-send-email-peter.chen@nxp.com> <1486776443-2280-7-git-send-email-peter.chen@nxp.com> CC: , , , , , , , , , , , , , , , , , , , , , , , , Baolin Wang , Vivek Gautam , Mathias Nyman , Sriram Dash From: Alexander Sverdlin Message-ID: <3dd29f25-5a6f-11b0-c722-5f1e4587fd4e@nokia.com> Date: Mon, 13 Feb 2017 09:25:24 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: <1486776443-2280-7-git-send-email-peter.chen@nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:131.228.2.35;IPV:NLI;CTRY:FI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(7916002)(39850400002)(39450400003)(39410400002)(39860400002)(39840400002)(2980300002)(438002)(199003)(24454002)(189002)(53546003)(6246003)(38730400002)(2171002)(5660300001)(33646002)(53936002)(50466002)(4001350100001)(189998001)(64126003)(97736004)(83506001)(65826007)(2950100002)(39060400001)(77096006)(54906002)(8656002)(229853002)(2906002)(305945005)(7416002)(7406005)(68736007)(356003)(626004)(23676002)(106466001)(4326007)(8676002)(81166006)(81156014)(8936002)(230700001)(50986999)(2201001)(92566002)(76176999)(54356999)(31696002)(86362001)(22756006)(31686004)(47776003)(36756003)(65806001)(65956001)(921003)(1121003);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0701MB1741;H:hybrid2.ext.net.nokia.com;FPR:;SPF:Pass;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;VE1EUR03FT054;1:SUGYN2E4CFi+Od+av/mCzk7SCwCHaiHOjZQ1bvPsuuyPN4W9uRGsA/c1aUxXvlzi6V33KGh/U8/Z0Z3OmklvpSv5DoxrOKIrDk2fCpe1LSIjRmjx2pGInCswAng6DR2qhbCSv+QYcPPNO50dEoBuKRhL1ozaJ5HjYGc+tZBp938veKOy70j/m4j/Xlij+NgcRURU2lmin9m60R4BwY4clJCQfcix2zB1bkuUn3xFbdvUqHdjU8TpqUjmZd5FPCL9jUZQAn8JNjL2rTYB9YhV0XDoV3TeFC2ktF+P38Bd4RnRcU22LA9tl92Nw7qxGwPTIyjVW2qlpsjPsQsdbz7SE/P1VHcKu+GOwgfq1nyC6/oHRqTSZLsGxdcBfILEoGySahYCmzBjDrLurLpj91Ns1JgwHobzv/zsErZcD1BBOluVCAXJIbT/y3xtknGcyQRQD7gttjya0aZtawYNOxH1DNWqmEevvpHlNyuZXsxJRDWk+zL8DpqRVJz5VTOARwxO X-MS-Office365-Filtering-Correlation-Id: 00e55600-3c61-4de6-6fcd-08d453ea6939 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002);SRVR:VI1PR0701MB1741; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0701MB1741;3:7JMW9zkj3mt6nHomancPCr1qafX1MwNnSw/ZeoZS/eG1IJnkcG5cDWHWnXqmFjC+szaVLdX//Z5t6vuK20rSLk0iOq8XDhH6CKGEv5b+KnZUteLIWK2nAKAZ8kw2AloRfzDE55G1KxbACGnmh/DDUaClyiIEzgzt6aSyM2VOWLA0Q3tuF+UbHgMnblSLAbWAXIk9guet4qwoYrUaZnvQ8QqocpYY1oOona1Vlqq+L6vOKOKUlXe9ZrkLrvdiiRB08mnsxlKSQ8xyA7WJXXG5dbqBRXpk3QvOICHIFiZmTGesGizhBBY0nXWxHjqtZotVmCG3fjgsRUfvEVu2jBDPI/DRuJjV1SlqVASJjdzrKSDEvRoPxTD/o9/KOduH5GE/u2KIElfntYteGb9U0TcASw==;25:oPVm0RJkBhZTTTDwgStF3yiefL2DQYx0+gKR7joV64OnjI7H7ea6df7+jwRgdJ6yWAW17/Bzwyok3QP8S00wqK8AkUK4MYR5c9HQXH3jhUoVyJFJZ7OB8WNukJG6RQlMartVIarhT8HoN7AHwc1T+11pXJaT8uL7R3jBADUGEHr/wscGKaj0nIHR4PjU7Vsjp+W7wcEU8ZfcQf4BOBqf3hPAjZDcjH5i5KFJ2YEDdAM0UNTahpT9b3hugaPnd6eEArPqNxPSjvQgaYTGzxPy5lZVMvgbzG9gVORHHHIy7XynofF8yBprKDBm5ZppqTUi16efZFRREH5BN/WgZjnLcQdxs88gITHB1u4jawVtzzKMpp+LgcVR2RKYl9otZDnR07iQA/VKa7bPLlMTdTrgEqNmchh6EdjOUFSA/Co0Zz7iPPdXHM2q6zKkWt2axIdROL05K9Z26fMqF9LYotBEKQ== X-Microsoft-Exchange-Diagnostics: 1;VI1PR0701MB1741;31:O3nhbNuR67rWk9HW+4uWku0x9ejU58m+Z99PvEvobPZmaq1hESxcef4vOqL04Oc8BJQu8buQHLCJq7iRRrvn3punTUQvlSsA9QY7L5OprJ93QSY8DMnwtMPWdzdeqQbnHgjKaigEydqm4Xq1zosjtk0DWGu5W0Q09A3NoeapvfL0tpYDe9iYxu4552Fea69JwixAsYB4x3D/zM5zZayFeaE0HiZehxUR7CCnaRXkdI2gVXvYZza724iHyjwwcwczmd1p7fPoCQGUYEZYW/40sJyVw5F3zdNNDzaqFTiUUtE=;20:mqpgRchCBh+Ht4MpGY66wT4YVEpBmJEMFHqn0cVqJheVCVZZDiSN6FlaZ76wlbYn7Yb+TkgYUsR6ZACSbx0vga+ZrqUrhAhD0ZfwJScvdRL08deiGfTkPJOz4dkqYkuG49nzwYgX4LZfJ2qeHli59P95ggbfD8wgUhAamG9ydTXMkUeSgPDcEmIm9RPU+yfN7JBdNKrIkNhFiEFVZKL8fDx84CCuiGFL3RFX59u00dLLqHIXNDF81lmAc1kJr+GPoJ5yLHOj595HKFcmFJ5V4m6+wmFTS25/QeRDMEZUN1PcZsEL8Evi7fiOwtBnPRRSBjd5ixQxydODG1290xm297f6fS3+ahBEFav2xYGkWko2JXZUHDAi5+cbSNdu6i15ecKpJxGL0xPCc0NsY3KfvYVsSj8rzHaXVBgUzOid/90ykeIThYUs8dOePAPxzU/BuKUT/llmhbk1SjaJUqPxlT5Pe8HNhk1uczh2eyc095446mYfLI4DaaUAGwcY1UXdVwF26AJjjrlRqjMub7zX5VKJMmvQevWla0wAlmBOjsiWKAgFXkVAd8REgFA9owchd8ek666NlputA70TUNBVPe4A0iQrkDxb2Vf+zXIyhkI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(82608151540597)(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(13016025)(13018025)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6041248)(20161123558025)(20161123564025)(20161123562025)(20161123555025)(20161123560025)(6072148);SRVR:VI1PR0701MB1741;BCL:0;PCL:0;RULEID:;SRVR:VI1PR0701MB1741; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0701MB1741;4:iQqhOGtwKQwz83q6NzT+p4yzNr1NukoLdw+Z7+WIyOFu2nJ2BEMwFI0WrVJrfTssYZDXu85A5j6kkyx3dt2m0MHK2a0ZCmhvN64kqI8nGdQ7JCalBzdo7atQlBApYTe9jGidB+NIp9Sm+6Yyu5BNggqGJjnREoNf4wDgTeY1sTszTMP9dl9lp1rTfOaPN+8p9ITuTH/WbHaGOJUxDoE9qq6Hxf6SHsdXkn2I6ABbHwYolFUsVpHvNv5rA0iNgTJ1QagKbWDy6CZJ4xTjkIC2NkjTGULxb4YQK5fGaEHNiPRB227eBC5gt44PZxogmuNEtB4qPb3n8kiur5eNb9WKGa4xmKehdcELqlbAA/REAFNU5axpt7vO4x2JmklJfJgqMKCD4jwFo+cwIJFWv6y9SD4eOlUjWY0bE8zbjTuECZS46H0+k4VGQSa6H+Z17SwoHyByvn9HiS6VGxq4F4bBsohD9WV4MLUIBIYhCTLk7OMNqYlfvEvHf1tmEsuzJyk0akVqtpd+hgLudcOIrmuPUiJ+PP8tGA+se2DGQ7snXaPYjTi1a3act2v4dgqM9vi6IaXuJQTWe8DGql7iAU+U4vRskA5DUK1AXXCv1XkfpoXys1OR3D+7GCY3lpRrRMjmMhwEvpNb2wN9tlw8uFUsDSdKlX/NQAVZfmkcyF646M6MRvLCvn0U7WdJVLX9TBsxXaXaZM5LoKqgzei6KVki61FpRANL7ct4/QgUXblyvz+yWzeoDdXJohp+1gGpssSzOw8hRbtjoT4icKCF1dQu/A== X-Forefront-PRVS: 02176E2458 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA3MDFNQjE3NDE7MjM6S2dpOFRoT2tyZXcxK0VhdnVIMm8zUEJR?= =?utf-8?B?NTlRQ29ndlFvbWZBbHZEOEVSR3R0TnlzaFBXZC9nMmVsaVpDbXAyV2pTRG5Y?= =?utf-8?B?M29HZ3hFZzREa1IvOUpyekRZWDV6cDNYdEtMZWh4M0RPMHhsaHlVVkE3Njhh?= =?utf-8?B?ZTRLN2JqUXhyOCszY3BjYStZOXFlN1Avc2g3NG9MbkhqZmVNYzNneExLRlBy?= =?utf-8?B?YU5wMXZXcVNJMkxFN3pScnBVVkZWRllzd2RjbHBDV3VMUDhVLzJLS3o3ZVg2?= =?utf-8?B?NXJOb0FLRWIwbzJEbjExNE8zL0N4WHFFTzhQZ3ExMk5nZlBjeklPNSttQmFj?= =?utf-8?B?dUptYWt6Q3Q3anU4VDBNMXFxWkdpZ3RXQ1Mrb0tlZHlzNGdvS1hPL1FWZm5K?= =?utf-8?B?VWhZYzA4aUNhMnhCZ0JHTkV4bVhXQlFJWWkvWnk0dTBIRGdLVU4zL3JKa0Fa?= =?utf-8?B?aHR1bXJxclRiUm5OcUFvZUdMR29pTkVnWXlXUlZsODlVSnVyWjRlbHFDUDhy?= =?utf-8?B?ckxtRDBsZVM0bGJKTmhJRHRobXppK0NFa0JnMjVNVm81SzNlWkVzeTdPSGRn?= =?utf-8?B?VS9GenNaZW8xWVp0V3RQaEZpWURxUEljbzJhRlg3TWJuUlhGMFdibWZPOXZ4?= =?utf-8?B?bDBId28yZU5xb0lJZWlxTktFMlVvYWJtUXBnZzI5Rm40UmxjeXJXWm5KSWpS?= =?utf-8?B?L0djcFVyS1NVM0ZxU3FmVmNsNUhaRDZsdDIzN2VUenNtQTBBN0dLM1dNNUlu?= =?utf-8?B?bGpMS1ZuZTJ2YlUzZnlFVFpIdmRGcm5nbWp3cytKUE9XQmVRcEhPeWJRT3h3?= =?utf-8?B?ZllMcXBmeFJpM2FTQWFHSS9kVzlSV2xGQUFjMjNxVTZQdEFRWkF0L01XVXZq?= =?utf-8?B?em1JTitKd0VCcDNlQktFVzZoU2RQSWduZ1NSbUpha3RGVFhaL1B4UlFyOGEr?= =?utf-8?B?VDZDV1Myd09rOHU2aG15aDdiTk43a2RFMklqQk5xR1dBRmhRb3BseGZCWEt2?= =?utf-8?B?Y253b2VEVUVFQjdJa1NWd0VmcGtQeUJCeS9sc1FmUStkTXBnTVJVYlZtWUVt?= =?utf-8?B?WTJRcldaY0hLWmJ3U0ltR1pjMnVyVnNia2pDcktGcHFxV1oxT0xNVHdxSWRY?= =?utf-8?B?T0huQUQ1UXM5MERLM3FlY2NIamlMT1BQYittQ2tVendOY1lQemJhUkIxdEtU?= =?utf-8?B?RFh4ZnNzR3Z5THM4U2p1dmtnMXlnMzdVTUVML2RBUEJJenFEMkhqcU5mbjdZ?= =?utf-8?B?bXBxc21UUXpIWnQ0dk05Znd6TGZtYS90SW9pYmJRTlVLQXhuRndaMkIvSEt4?= =?utf-8?B?dlA0VEoxbXhVWkcrc2doTlkxK29kYUxNaXNERCtRVW5pOG1PTitGZmlSZzh0?= =?utf-8?B?RlVoUnlXcXM3M0VQTWVLekZTNGlQK0JtYjhQVkNaVjBiK3hFNTVSRkJPYUdY?= =?utf-8?B?TDhKNzVnN09pK3YzZ0dTaGxyRXRJc2RiZnhLaUpibFd1bmh0Uk5zZXErUE5H?= =?utf-8?B?M1lKR0dQNmx0akcyZXZEd3hsbmZsa1F2VjVnc0JSZzhmK21kZy9GL2czYVJz?= =?utf-8?B?V1ErcWVFUGJXZTRtT0pYc3NwcW5LT09HMkZtTUlOcTdQRW1Vc1JOOGtKNkFj?= =?utf-8?B?ZjlYOGVmV0lTeFlmS3FWYklYQUVlYlk2dStLRE5TOWMyOFFuUFp1QlNPMjZr?= =?utf-8?B?TDZFdmdoT0YyVTZkcWNyemFSaVIxZklVNFQ1TkhKN3ZHdjFJQmhXNTFLc21I?= =?utf-8?B?M2w4SHE5T203VWpLbHBYYm1yQ054YUxxclZtYm1Ga2l0aVpNSkozWDBna3NO?= =?utf-8?B?alQ5R1lhR0lnNUVYNGwxT0hDeWxobW1IbWp1OWF4WXlhT1pTOU12SDdZZ1FD?= =?utf-8?B?WG4wVzIrOVV6LzNkRUFUZE5zTklMaEU0d2xjc0NYU01XR21JdUl3dmpWcVp0?= =?utf-8?B?ZXZpVDVOVmN4eEQ3VnhHRjc0aHFlazRIb1h0cVdzWEtrbFJRcTRsSW5seVp5?= =?utf-8?Q?v+uNFndH?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0701MB1741;6:coNmd4kcWrgNPe4/bnCz9hQaSsVDO4YSUgoA+LqMCg8bZGR3Yo4DcIrfKy2EMhN77/AGCXGbPCs0tHHYNeROh3NbkajQ15STDlQrvED5XivXjiiGgPlFrKLbk50vdGEh65Bjx7VDCmjaAsGWBCcZ9buqbB2QWxifizeQ73lLC0O0VGqNRI69waNcYFEiuzEyM0SxSO6LpWx/9b3YVaSddjKs5d+6/NOsQ22MAQJFrfTmopoWt9qEnsZPPxw0+DB72W8meWoHp2xmRXwPKBmkvIbX6YgBLZNElYhSoEUg/QRZTUx6Db+Swt4SYtHd1dR7L3B7EJvdzokmzInxGbfz3U4CdMY5FSe1m973CTx80W7QNXOBiaVnVfBQ8lTqao7vDpRcoueVcE02leoLqxc0lWtIkvibn4UatREN3cfARqo=;5:yZZOyQvZYjWsoK2KW6SrypBR/zecocJT1Y+KF71JXoTjsRl+kI9kZeawBdUgFm1At/Ws6lyDn22NZb8XcI3s1cE2UnDAH+EiBhrfxSVW+Y8v1MK2u9y4o49mOLCORixjgPubKeFm+kDJjmw7tgBFMA==;24:s+lzS5s1l6CAcSmNUN+gA/1HCf3zmcefibXVV605iUNQYCtFlffVMbWpgraW2cmvYrVprbwTQ3xxmo6/7z3fmuLlFglxk+Bvdwn2voY/pBY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0701MB1741;7:oi/l8S2KeY7km0Zwq6SXjCBiiZoEPRk1APubbhdcduDwPXtefXvRGmwNQB3mMKnZFkhfKrR1THas9CzC76itggwpJXjwqpsDLGgpGsvheDFUD+pZIbqcJD80QeniaYLBeQ5t31Ra3DMY2vn+q32uTMFmb9vyOIRTcxR++Jn7FHo/xUwMymi8DPGeQnvIi90z/wmPUBfG8m6pjnOijqgdPihUSBQEX8Q4Qha85CHwgOGIQTZeYKUzbEOkOe5fXTntE6zq0UVvWvHFlPgtrLwVoQ71HtuyzcBS5Moc1WLyLhD215komPL8KhGRqCUbKno5Zlza3J7g/dsbmYo+gwNXJnP+Oi8ob9GF+jxLQacGX9khhu2bp3u7WM49ZfEcRgD3gPFKC/IYRmVhyb3hgxEQraFiWRu+k/3IPna5L5eL+EtGYboape29HwW2WD4x9+m0th9X+or08sULxJ8lo1J9tLgC9HnRhmAeKmAQjIb1zGYA/4pUZ6ANSe2h9kNDFmssF2Gqo3wB9oN+rRzqmYKmrg== X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Feb 2017 08:29:20.9375 (UTC) X-MS-Exchange-CrossTenant-Id: 5d471751-9675-428d-917b-70f44f9630b0 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5d471751-9675-428d-917b-70f44f9630b0;Ip=[131.228.2.35];Helo=[hybrid2.ext.net.nokia.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0701MB1741 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi! On 11/02/17 02:27, Peter Chen wrote: > For xhci-hcd platform device, all the DMA parameters are not > configured properly, notably dma ops for dwc3 devices. So, set > the dma for xhci from sysdev. sysdev is pointing to device that > is known to the system firmware or hardware. > > Cc: Baolin Wang > Cc: Vivek Gautam > Cc: Alexander Sverdlin > Cc: Mathias Nyman > > Signed-off-by: Arnd Bergmann > Signed-off-by: Sriram Dash > --- > Hi, Baolin, Vivek and Alexander, > I removed your tested-by tag due to add one change that adding sysdev > for shared hcd too, if your test shows this change works for you or > has no effect for you, please consider adding tested-by tag again, > thanks. This was exactly the missing/requiring part in your patch for my case. I had to add it extra for the first test. So, again, here is my Tested-by: Alexander Sverdlin > drivers/usb/host/xhci-mem.c | 12 ++++++------ > drivers/usb/host/xhci-plat.c | 35 +++++++++++++++++++++++++++-------- > drivers/usb/host/xhci.c | 15 +++++++++++---- > 3 files changed, 44 insertions(+), 18 deletions(-) > > diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c > index ba1853f4..032a702 100644 > --- a/drivers/usb/host/xhci-mem.c > +++ b/drivers/usb/host/xhci-mem.c > @@ -586,7 +586,7 @@ static void xhci_free_stream_ctx(struct xhci_hcd *xhci, > unsigned int num_stream_ctxs, > struct xhci_stream_ctx *stream_ctx, dma_addr_t dma) > { > - struct device *dev = xhci_to_hcd(xhci)->self.controller; > + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; > size_t size = sizeof(struct xhci_stream_ctx) * num_stream_ctxs; > > if (size > MEDIUM_STREAM_ARRAY_SIZE) > @@ -614,7 +614,7 @@ static struct xhci_stream_ctx *xhci_alloc_stream_ctx(struct xhci_hcd *xhci, > unsigned int num_stream_ctxs, dma_addr_t *dma, > gfp_t mem_flags) > { > - struct device *dev = xhci_to_hcd(xhci)->self.controller; > + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; > size_t size = sizeof(struct xhci_stream_ctx) * num_stream_ctxs; > > if (size > MEDIUM_STREAM_ARRAY_SIZE) > @@ -1686,7 +1686,7 @@ void xhci_slot_copy(struct xhci_hcd *xhci, > static int scratchpad_alloc(struct xhci_hcd *xhci, gfp_t flags) > { > int i; > - struct device *dev = xhci_to_hcd(xhci)->self.controller; > + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; > int num_sp = HCS_MAX_SCRATCHPAD(xhci->hcs_params2); > > xhci_dbg_trace(xhci, trace_xhci_dbg_init, > @@ -1758,7 +1758,7 @@ static void scratchpad_free(struct xhci_hcd *xhci) > { > int num_sp; > int i; > - struct device *dev = xhci_to_hcd(xhci)->self.controller; > + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; > > if (!xhci->scratchpad) > return; > @@ -1831,7 +1831,7 @@ void xhci_free_command(struct xhci_hcd *xhci, > > void xhci_mem_cleanup(struct xhci_hcd *xhci) > { > - struct device *dev = xhci_to_hcd(xhci)->self.controller; > + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; > int size; > int i, j, num_ports; > > @@ -2373,7 +2373,7 @@ static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags) > int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags) > { > dma_addr_t dma; > - struct device *dev = xhci_to_hcd(xhci)->self.controller; > + struct device *dev = xhci_to_hcd(xhci)->self.sysdev; > unsigned int val, val2; > u64 val_64; > struct xhci_segment *seg; > diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c > index 6d33b42..4ecb3fd 100644 > --- a/drivers/usb/host/xhci-plat.c > +++ b/drivers/usb/host/xhci-plat.c > @@ -14,6 +14,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -148,6 +149,7 @@ static int xhci_plat_probe(struct platform_device *pdev) > { > const struct of_device_id *match; > const struct hc_driver *driver; > + struct device *sysdev; > struct xhci_hcd *xhci; > struct resource *res; > struct usb_hcd *hcd; > @@ -164,22 +166,39 @@ static int xhci_plat_probe(struct platform_device *pdev) > if (irq < 0) > return -ENODEV; > > + /* > + * sysdev must point to a device that is known to the system firmware > + * or PCI hardware. We handle these three cases here: > + * 1. xhci_plat comes from firmware > + * 2. xhci_plat is child of a device from firmware (dwc3-plat) > + * 3. xhci_plat is grandchild of a pci device (dwc3-pci) > + */ > + sysdev = &pdev->dev; > + if (sysdev->parent && !sysdev->of_node && sysdev->parent->of_node) > + sysdev = sysdev->parent; > +#ifdef CONFIG_PCI > + else if (sysdev->parent && sysdev->parent->parent && > + sysdev->parent->parent->bus == &pci_bus_type) > + sysdev = sysdev->parent->parent; > +#endif > + > /* Try to set 64-bit DMA first */ > - if (!pdev->dev.dma_mask) > + if (WARN_ON(!sysdev->dma_mask)) > /* Platform did not initialize dma_mask */ > - ret = dma_coerce_mask_and_coherent(&pdev->dev, > + ret = dma_coerce_mask_and_coherent(sysdev, > DMA_BIT_MASK(64)); > else > - ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64)); > + ret = dma_set_mask_and_coherent(sysdev, DMA_BIT_MASK(64)); > > /* If seting 64-bit DMA mask fails, fall back to 32-bit DMA mask */ > if (ret) { > - ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); > + ret = dma_set_mask_and_coherent(sysdev, DMA_BIT_MASK(32)); > if (ret) > return ret; > } > > - hcd = usb_create_hcd(driver, &pdev->dev, dev_name(&pdev->dev)); > + hcd = __usb_create_hcd(driver, sysdev, &pdev->dev, > + dev_name(&pdev->dev), NULL); > if (!hcd) > return -ENOMEM; > > @@ -222,20 +241,20 @@ static int xhci_plat_probe(struct platform_device *pdev) > > xhci->clk = clk; > xhci->main_hcd = hcd; > - xhci->shared_hcd = usb_create_shared_hcd(driver, &pdev->dev, > + xhci->shared_hcd = __usb_create_hcd(driver, sysdev, &pdev->dev, > dev_name(&pdev->dev), hcd); > if (!xhci->shared_hcd) { > ret = -ENOMEM; > goto disable_clk; > } > > - if (device_property_read_bool(&pdev->dev, "usb3-lpm-capable")) > + if (device_property_read_bool(sysdev, "usb3-lpm-capable")) > xhci->quirks |= XHCI_LPM_SUPPORT; > > if (device_property_read_bool(&pdev->dev, "quirk-broken-port-ped")) > xhci->quirks |= XHCI_BROKEN_PORT_PED; > > - hcd->usb_phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0); > + hcd->usb_phy = devm_usb_get_phy_by_phandle(sysdev, "usb-phy", 0); > if (IS_ERR(hcd->usb_phy)) { > ret = PTR_ERR(hcd->usb_phy); > if (ret == -EPROBE_DEFER) > diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c > index 6d6c460..ab0839c 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -237,6 +237,9 @@ static int xhci_free_msi(struct xhci_hcd *xhci) > static int xhci_setup_msi(struct xhci_hcd *xhci) > { > int ret; > + /* > + * TODO:Check with MSI Soc for sysdev > + */ > struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); > > ret = pci_enable_msi(pdev); > @@ -263,7 +266,7 @@ static int xhci_setup_msi(struct xhci_hcd *xhci) > */ > static void xhci_free_irq(struct xhci_hcd *xhci) > { > - struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.controller); > + struct pci_dev *pdev = to_pci_dev(xhci_to_hcd(xhci)->self.sysdev); > int ret; > > /* return if using legacy interrupt */ > @@ -748,7 +751,7 @@ void xhci_shutdown(struct usb_hcd *hcd) > struct xhci_hcd *xhci = hcd_to_xhci(hcd); > > if (xhci->quirks & XHCI_SPURIOUS_REBOOT) > - usb_disable_xhci_ports(to_pci_dev(hcd->self.controller)); > + usb_disable_xhci_ports(to_pci_dev(hcd->self.sysdev)); > > spin_lock_irq(&xhci->lock); > xhci_halt(xhci); > @@ -765,7 +768,7 @@ void xhci_shutdown(struct usb_hcd *hcd) > > /* Yet another workaround for spurious wakeups at shutdown with HSW */ > if (xhci->quirks & XHCI_SPURIOUS_WAKEUP) > - pci_set_power_state(to_pci_dev(hcd->self.controller), PCI_D3hot); > + pci_set_power_state(to_pci_dev(hcd->self.sysdev), PCI_D3hot); > } > > #ifdef CONFIG_PM > @@ -4801,7 +4804,11 @@ int xhci_get_frame(struct usb_hcd *hcd) > int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks) > { > struct xhci_hcd *xhci; > - struct device *dev = hcd->self.controller; > + /* > + * TODO: Check with DWC3 clients for sysdev according to > + * quirks > + */ > + struct device *dev = hcd->self.sysdev; > int retval; > > /* Accept arbitrarily long scatter-gather lists */ -- Best regards, Alexander Sverdlin.