Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932785AbcLMVor (ORCPT ); Tue, 13 Dec 2016 16:44:47 -0500 Received: from mail-ve1eur01on0103.outbound.protection.outlook.com ([104.47.1.103]:11485 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754012AbcLMVon (ORCPT ); Tue, 13 Dec 2016 16:44:43 -0500 X-Greylist: delayed 19169 seconds by postgrey-1.27 at vger.kernel.org; Tue, 13 Dec 2016 16:44:41 EST Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=alexander.sverdlin@nokia.com; Subject: Re: [v5,4/6] usb: xhci: use bus->sysdev for DMA configuration To: Sriram Dash , , References: <1479383028-27701-5-git-send-email-sriram.dash@nxp.com> CC: , , , , , , Arnd Bergmann From: Alexander Sverdlin Message-ID: <319e09b5-8217-fff3-819f-f2482aae07fa@nokia.com> Date: Tue, 13 Dec 2016 17:09:34 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 MIME-Version: 1.0 In-Reply-To: <1479383028-27701-5-git-send-email-sriram.dash@nxp.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [131.228.32.185] X-ClientProxiedBy: DB6PR1001CA0009.EURPRD10.PROD.OUTLOOK.COM (10.171.79.19) To VI1PR07MB1327.eurprd07.prod.outlook.com (10.164.92.141) X-MS-Office365-Filtering-Correlation-Id: e9a1d6ac-3020-4708-2b78-08d4237270e4 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:VI1PR07MB1327; X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1327;3:DcL+7OiA2Pp3wadkGJZJlacj2vaB76LCJvJNno6o5kKvPa/L6Pax/LcWBtavH5zVlmeQi0lhBQU5nayU87+Ae0aUjQJG3WslhpyOlfnSmB9nljgFkGTcjGb0ngphR8fs75vzTh8WLPYpaEvprQPRF5I4/zHs26OgkV293cAgnCc4H9Mys9qefIwmGTZrJp/CLsydVHPVSR1h0+wQLHDbiOV6eyq9O8avXMic6VB+w/04hu5PAJOX03HEVnA43uoQWUxVqpjnN+E6zp6E7wFwpA== X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1327;25:4/uuN/F+3WzXipdQ4YqTSPCo27pKN3/eYmZ76hufYsA6DfG2RqaTFSh1kF1mioMe+Pk9tXaxyrTCk0SyMNILNR+tqrrRv0KYE+GPyV3vc8JEamxloUSl7Sl5v5H/Jd+LbW6A76pGnreHtBClkpFCBAx+qPM7ylNHLJLBYao6EYDLkvE3Kut9WocYS4fqRyMHde/rH9wuGHngzNW6ylNfIkOa3l76VTwLMUvX1MklsxpHz5kaylt8Tmg/Bbp7KdeAi94ta6bdzMD64LzeXv+Vjdj9aDXxMxYlwqeS/Bku+Hob2HSursq0utZTwXizEu1xiaKp1Wpes1TpLuv/FXuGgBYGcVMcgMJ4Nd0xMNDNQlbZNwMym8OVuSU0adhnfDEMv5h53RQ2Br268zwIuVuwJ0fbz1Z8G6AnwlQw4GroEgQlVumR3T1+QN5axNwrw2H0Y/bqF0RCl1FUk3+CGLaidPEeYh9rphpTGq2csZKc3lYUJgsBlXFblVIkHMhrpsYn2zQqQrAiAWEH6NnxfeMJsibYJXbCAwO/YgS4EN6TQ3NdIewomfuzF128F8PSvaxl9M5RPsXNBylxheG0s1TQq0P76tpMA4VfyW1BXzaXfwDLnj7zSxi0I2VLSDjeJbM2GrcZVAAMm1f11R2NnbIy4l5DqEoOM0COV0dv5HExuBd+fCaaMQXSyi9YsLwHFrpOLneH1+Vqk/66Ve/18tHHEF1TXeoCPzCXBbWhAXdR/QiUp+nO5vwOewXuJRhXToqICMylYoEfTgYK8EkXZEcvvchuVcHY6l48HpSDMR0C0Cowqu0oFLQni9blMGPwGjSi X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1327;31:YRSFUwujr3FAlBiiSOmCsOH/R+GwfSWoiEYlbXG9my4tVAavsI9TXc01znxeyBQsmX22Lbpts+3ivaz+BUK40kRm+c8+cvRiEiH66xRR81FowHpcsU7hO7Tj5XwdkD0RlKVv7pkLyhmHqxWP9lQCaE7BUeA9OZ4WHB8VEfWQsojuXKzElLsm1v2lVkAU/wb4yIN48IGOOH6XscFzATdrhvDNXh1sauLNyM2TTZoQrYXm2If5JWM9xg2TOiD3ToL2/o0Yg0Oyc364JpwFbvg8Ug==;20:S5szpET+K3dcjOTNJgEUDW/f/kjJpqvRQW0Ax+lW9aFjzrsqNHVwA0QFrKdEc6ltoI3BWN3nlCJ3TSj52Zj+Z4R0a3Wkrzc6RoS1eW3L63Oo62OJLpR8T+Cykk+vTg/yQBx/MfEotLGlcrx2ZWhFlHgpYm3eoE4Xo7auxY6IQ7A4PzhGmWMVV3bmm63N2w3UtcbOVRfFmU3C0dHP48ohvEyRLc/3zmdh1u5Nb9C+o90+n50QIkqpDenjGuNIjOyCjxf++ZYJO5q70EaevHfGX/bXShfCYLgeVQUrPdOAj1uDK+Kmx0agtERYtFE50WtCCLmhT9uaSzuQizpk5aH7Sz5oqQ5BSt6UFnNOKGet5Cjxc6YLB05rrYlL0HX5Jt3JFCTFIfIgG7DPQXpYiW2Hip287ocjfXbgqQeeu3mQzcg3823gQ2sXv1HApdwQKWZ5yJikw069eHAzHQ0MPOx8nBHb4IZ0wAy+zpixsCOhUjt46KH1i3WigfVmR416Blc1 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(82608151540597); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6041248)(20161123560025)(20161123564025)(20161123562025)(20161123555025)(6072148);SRVR:VI1PR07MB1327;BCL:0;PCL:0;RULEID:;SRVR:VI1PR07MB1327; X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1327;4:t5a+U4yzbIqjTn8GTj9y9XTe6JQf2ORwR3wP5xonqZQQFhQwsZ8LX84EnD72kQp7atAr6yHnBJSVWhklXOvqOOORiYxEAD8So+kF6bLc3EwjWJWVbJVMqEqlDhGMn0e2yNGOMSugQZWMR6rg7O1PaPbGmjxMrCjnEwOkTF5M3J126Q9cWS6C3Fj6J691bh0AyeRzYEhZI83E2DqbIy4UnofyALrnK8Z5pkKpzLs9hcdZIA6DGnuDlSVrcIsmSalZ5CT4snEF8YI5EOvj8H7u30YlSHEzpNQvsPTj6oJ3wMg+Vd+xaMtAU/vfMRA+RmpRWhkW7fJrHJzkZlURLM9StxxsRgU9jvFkhEzUwxMdggNIw8GE5BNnCwbnDgrzAkX9dqRWlihxYeI9P8CEsIQdva8XkgzYF+UaCGcK6XZPXYd4FIjYOEPAEDD0DNGUaEJAoXSr4iRoMrXErZgwS9F3JzyeuTKm+2OpPa1wdv33EduoJSD3Id/MqcqkVcC/y/NSDm+0uV+P446CFu4HrtJe5dyr/uC30oQVakTAzOuBWdMyrVDDYQqUh8qTT3gGuWVCi7c3ghdZjpbAm+ypRcN/fyIA8QatYkbW4AcrMPfUuEpTB39nLMBlevsYW0H6fgcUsbRIY9to8U4RCRKFW4teXHILVoCYbqTQLH4jcok9fc0= X-Forefront-PRVS: 01559F388D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(7916002)(39450400003)(39860400002)(39410400002)(39850400002)(39840400002)(24454002)(199003)(189002)(8666005)(305945005)(97736004)(7736002)(36756003)(4326007)(90366009)(33646002)(83506001)(5001770100001)(77096006)(2201001)(6486002)(86362001)(7416002)(64126003)(4001350100001)(2950100002)(6666003)(6116002)(106356001)(31696002)(38730400001)(66066001)(8676002)(65956001)(101416001)(65806001)(3846002)(229853002)(68736007)(81166006)(39060400001)(81156014)(50466002)(2906002)(105586002)(31686004)(23676002)(5660300001)(50986999)(42186005)(189998001)(76176999)(65826007)(230700001)(54356999)(92566002)(47776003)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR07MB1327;H:[10.151.15.185];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA3TUIxMzI3OzIzOk95aDZWalBVQ0ZSM3hWWEZjNmtOd1JEejRL?= =?utf-8?B?bkNpTzl4eGlRZTlXV0xvay95R2w4Wk44emdhTGhaMXhEaVhyZGFTYXNRcm10?= =?utf-8?B?TEVsNU42WlAxemJ0cFRIOGN3ejl1bXhoZkN3ZmFiM01LZ0ZuMnNMK2JlaU5n?= =?utf-8?B?MFJMSWNPRUNhRlpYWkc0bWUvTWh6RllZNk1TQ1dKaCsyckxYL0g3RStFU1Uy?= =?utf-8?B?SnQ4NFJtZEh0MTlhZDlKdUN2MHEwT2VCck96T2tiTllpKytDTVdCTmRxYi9V?= =?utf-8?B?R2tqNHd1QmozOUd1V3VZQWlVNndhSVUvNXUyYnliOWJJck1jY0wrYjdSeTFC?= =?utf-8?B?S0tNZkNTU3k0ZzBxcTdQeWRWSEtETmFzdzBkZzVzbzlaY2w2YmhVS3pXMVRP?= =?utf-8?B?OWVzTVNqMTdqTmVyN3l2TmxTa0F5L0VtUUFLVXh5Y2FVRmZIeXBUVmpDejdH?= =?utf-8?B?WDBCN1dhV0xhOENVamhFRmUyRS9pZEdncFJVU2ltak9vdDlCcStYWnZvVVh6?= =?utf-8?B?WE8vS2NWeFdyaHFHemtLTGRkckhSSUdoMGErMllwMHgzYm9vdmRmcVZDZk9h?= =?utf-8?B?ZnJTazhUa1kyUXhUem1oV1p6NHVHM3hxUzY4M28yeC9oUkFjUVZ4M3d1eU4w?= =?utf-8?B?SGFqUUszWCtzV3JBM09KRDFRU2hFeDNxRzNPbitCejV0VEdPc0Iza2tyL0Q1?= =?utf-8?B?R28zdjV2eXI1azd5aDlqUUIvZStLeGE2VEFJSTRjc1QrTDA1cG9mOThVamk2?= =?utf-8?B?SXNjSUM1ZWZZdmNYWHhVSDVpcEljdWl0YkZkTmxsMk8zSXJVcFpNN3YxRFE0?= =?utf-8?B?a1N6ZXdpRHkwallGZ254SW9TSEN3b3UzeFNWWjRDTkxQWGpFbFRoOVRIVUJz?= =?utf-8?B?RndVRGZMdkx5RDFOTlZ0U2FKNmt1aHVXZU1nYkJINUcrUjZCRVNkWkVwQ2FJ?= =?utf-8?B?MGFHLzArZ1Buck1ibHo2bmVpK1pyc0JPZEcxRzFmYkZBOFo3Y0FQZFBjSmdk?= =?utf-8?B?eEMvQ3FGMkExRmRCbDRRRnlYZlNLaHI4SzNOeEViTmpMenp2ZG9qYnlFcWFT?= =?utf-8?B?TXhCWGhCU0J6bFRhcWNZVnhHZ2ZZMDVUazZkV0NGS21JNktZeEh1MmJtdC9K?= =?utf-8?B?NDJFZU5YanRrRCt5TGpVOFFpYWxEWFpkRkVmMzVrbjVkSHVCVmc3bEQyTXl3?= =?utf-8?B?T1ZzcFRkdFN4QmRERXMzaEsrNnFlYnp5Y0dDL0VBSnN5NEhaVzRZQjhDc3Ux?= =?utf-8?B?blVkM1F0cm1nTDZyS3RPcHAyKzBjWUpnSVdUNHR6U05XTllHK3NQTTB2N1B2?= =?utf-8?B?czJpTDBGQ0tJU01jeWlqWmxtVVJzTEJabHNuQ3dFSnJlVjdyODBCTE5VRzdH?= =?utf-8?B?RW8xcDA0NUlBVjBoY2ZiZmh1eTd2N0RtaWhnVmhyV3pUZEVoVENDaG80VU0r?= =?utf-8?B?YVB1OXhuWVY5OUI1OWErWFJ2S05vWEIwdm1xZXNvd0Jzd1dVN3ZZcU0wNkgx?= =?utf-8?B?ZTJGL0k3eU00VFBqQ1ZJcVJyMFM0ZEZDbGNmenBucWZ4YjZ6RWtFaXd4ZktD?= =?utf-8?B?SmloU2Q5UkJKYVVNYkF1NFdNNVZBK2p2OXd6cWd2aUhuSkNmRXB1TFJVa3N4?= =?utf-8?B?U3A2c2lmYXFCbWdBbm02SjVwYzQzYnhJVjdtRjZDZm1aNGltbEZ3L2NsUytE?= =?utf-8?B?REZ0VWdPVVBXNDlObDFkeXEwRmMwaGR6NFhhdEZ2SVd5QzlKeVRlbndUV3Uw?= =?utf-8?B?TGVZWWF5dHROVFc2UnJSRnIzSE52eDBjSGdkRElPUXo0VUdHL0NNcDcwQi8x?= =?utf-8?B?ZW12NDBtdEZoTXU0ZGdQMHBxUXFDZG5NNkNub1hES201NDRTcmRwcFJLL0hu?= =?utf-8?B?RC9lR293WHNKdmh6Qy90cDk1L1hCSFkyQWRaR1AxblI0ZHA1QUordEpWWGZ4?= =?utf-8?B?aEJvY0VYUTJnU05Lem9pelFQcjhYaUx5VUsxOVNNZTdla2JlVG1QSHRTcmNF?= =?utf-8?B?MFFtemUzY1N1dFMxRHA5Wko5dFErQ3V4SzJsNXFUZDExcS9WOHIrQ2w2NGF2?= =?utf-8?Q?ifFE=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1327;6:BRz4ZYria/bf9H7TQZVHhMOSk3x2pAuux/jTV59/zIAYfjfBH8Ig4eqSx1CtbUqBQwaIa9+OanK5om9KZ+EmxFZK1LL9s8V6/ZKp+5Th2TTL1TfN5Jeqy+R7IKpn3o502mXaMrw9HARg+eSPhhatY/rwgMeF7VgrANQITcBqoPullywLWN3Ud2mu+LPtmca5PreRL00qtaXgmPLZPRu9Iveh+cyCIRtUGUC9SCY8njrNHeUxi+6nNH94/fHLdq/O0IYsHUkVA5KpdFEYgjt1j8eF5SwRB61fzq4kB2TJz5DaC4fi1tiZpT6dJWroUwdYeaYxv+jXpz4QA85p9smO1eHfQDnR3RgpYEw4v6wGUc9utNJh+GpOtSB2fhMcc/ktkX1RmV7ceEywCyHoBPy5szgf0ncSLr01pheAl7fhBi/YsgiOXYnaXGuvBu+1kxKfYhxU2C2R1COb0qWOgPNYrA==;5:azYlGRs0IgrxbnVBK/vZJPln0MMQZYIfHmh3BGmwW+meOAQuhoEvxFaBn5Pq4I99KeHVD1gP4RMNBPvAI4GFQJ0fU0Yc3wU08yuIU2DpaMIPxTLJVdLJCK2g57TMpY+uiBt7B6h3WDQbGh9xXyoEow==;24:L2jke8CleDxoPndUWyn8FNm449fjygor8vVzkSRPPRp3UVGxEajpKcvPUfNdfLOLFoV/Betedh9bwjed8icFt3SmU/qChMq+QhCrYbUg64w= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR07MB1327;7:cUL1D4cHm0VRJr/t5lEBR3puaR5982VAQjid8J7PrROtHIJrb8ztkicinsAjTRb1FiNgTICjLnxDU/hK8qvZa9Hgp6coIDcqtJbtiXa500wqVopU/ESC+vWqn0QJ1xleNh+tak49rerQoA3vkhqLWh5g2ZHCYAuUBcQbsr0bWMnvACdp6DebIL5XRh5uKwtWlQByGbrfQqTAA/WvVBRb61ermYb0z3btBcCaZ4EuW/vUrfKfILaH3DYfzCxjZg5DARWE9ff1czOVolZTDNNjm7Kb2A7H9tzMX5JelrNyN5zropbJChePZ9J8FJ9oyY1JavxvzW/nFdUiImdkvRQcz4w7UjTtMLM+dlC31CzSijiBDomZqQA9EDBHLO/FNoHC+ZOf20IXW1Y8V5utTKn5gJwVO6f5JlgddPiicqI69CLyvh09uiOnOaAnXU7fRQ+b30QgKkFpGavGs3UhCuqYAQ== X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2016 16:09:38.3029 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR07MB1327 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 8272 Lines: 235 Hi! On 17/11/16 12:43, Sriram Dash wrote: > From: Arnd Bergmann > > 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. > > Signed-off-by: Arnd Bergmann > Signed-off-by: Sriram Dash > Tested-by: Baolin Wang Successfully tested on arm64/axxia with DWC3 USB host, XHCIs properly inherit DMA configuration. Therefore: Tested-by: Alexander Sverdlin > --- > Changes in v5: > - No update > > Changes in v4: > - No update > > Changes in v3: > - No update > > Changes in v2: > - Separate out xhci driver changes apart > > drivers/usb/host/xhci-mem.c | 12 ++++++------ > drivers/usb/host/xhci-plat.c | 33 ++++++++++++++++++++++++++------- > drivers/usb/host/xhci.c | 15 +++++++++++---- > 3 files changed, 43 insertions(+), 17 deletions(-) > > diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c > index 48a26d378..eb32de9 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) > @@ -1644,7 +1644,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, > @@ -1716,7 +1716,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; > @@ -1792,7 +1792,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; > > @@ -2334,7 +2334,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 ed56bf9..beb95c8 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 > @@ -139,6 +140,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; > @@ -155,22 +157,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 (WARN_ON(!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; > > @@ -220,13 +239,13 @@ static int xhci_plat_probe(struct platform_device *pdev) > 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 (HCC_MAX_PSA(xhci->hcc_params) >= 4) > xhci->shared_hcd->can_do_streams = 1; > > - 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 cf30cb6..fc76671 100644 > --- a/drivers/usb/host/xhci.c > +++ b/drivers/usb/host/xhci.c > @@ -231,6 +231,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); > @@ -257,7 +260,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 */ > @@ -743,7 +746,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); > @@ -760,7 +763,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 > @@ -4832,7 +4835,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.