Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753136AbcKATPO (ORCPT ); Tue, 1 Nov 2016 15:15:14 -0400 Received: from mail-bn3nam01on0079.outbound.protection.outlook.com ([104.47.33.79]:11392 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750708AbcKATPL (ORCPT ); Tue, 1 Nov 2016 15:15:11 -0400 Authentication-Results: spf=fail (sender IP is 66.35.236.227) smtp.mailfrom=opensource.altera.com; ettus.com; dkim=pass (signature was verified) header.d=altera.onmicrosoft.com;ettus.com; dmarc=none action=none header.from=opensource.altera.com; Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=atull@opensource.altera.com; From: Alan Tull To: Greg Kroah-Hartman CC: Rob Herring , , "Moritz Fischer" , Dinh Nguyen , , Alan Tull Subject: [[PATCH repost v21] 02/11] fpga: add method to get fpga manager from device Date: Tue, 1 Nov 2016 14:14:23 -0500 Message-ID: <1478027672-4857-3-git-send-email-atull@opensource.altera.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1478027672-4857-1-git-send-email-atull@opensource.altera.com> References: <1478027672-4857-1-git-send-email-atull@opensource.altera.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [67.164.136.211] X-ClientProxiedBy: CO2PR06CA030.namprd06.prod.outlook.com (10.141.242.30) To CY1PR03MB1519.namprd03.prod.outlook.com (10.163.17.25) X-MS-Office365-Filtering-Correlation-Id: e341c042-af9e-45db-ab94-08d4028b63df X-Microsoft-Exchange-Diagnostics-untrusted: 1;CY1PR03MB1519;2:32JHix1HWhEsn3LerZfJ5eneYAMnlYOrUDyo49oE/fO1p3HLjIAZeSrRpVnkOFI+gT47HijOoZUNOFXFXenMEieNrUsZTqFbPn9eLkO9AdpnD4p1zwMTPikmXyvaCsV04Q+qYQKwebGxkgDzr3FhyV9M8RAm/mIZxNXN3A0QOYLNMqcAIm2CPbNJWBMVeUy9O/IAoIVLBkXMALdP5MLcsw==;3:0G3KtWVsBe86zAbE1u5aRRJFCWGjBlR6HppBSItKUV1qdTfVRmXplB6+ezSejnAOcEhgq2wAjmDUx7pq47Aa5jx+k1Qr6dwgzQ1ssmEmvNlDrpLu2HYoaXSKbCrdVCB6p0XECpLUfATLCM+jDU5VBQ== X-Microsoft-Antispam-Untrusted: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1519; X-Microsoft-Exchange-Diagnostics-untrusted: 1;CY1PR03MB1519;25:yl2qg/IB5JNXSkuwbeIIIS6cahsqkj03qjNPCxnSBYothyw3MOY5ORs9lk4kmWXxGwwovZeYoTk3PGU8VWxyyZO7FfogKDlzEGZ16JzTHrIdGBIJsx8Ju1WmAoYY6Wy0EfGrJVMWSbY3R0VhSPqD74LF73FzcCRVhamWSv/F8BQGg/P7D/7WN7zT/TNtl2ezfgdsKjNXtfs4zF6XoL+nnyTwPe989e7Yo5zEgt/zXFqIHWC72WIQHXzwSMRFNNWgAlhs+8xwcchAM/Vjj+JuKy3YayoEk+sjufn1lQ9pgFeFE3pRLssDys2zEoXo8goWMcRMQ3iWJT2+TFgj4XpvhKHnizi0p5adSX81fbNhGc2eo52yTSGeDfMZX6VFJ8xHooe934ExDBHQnlkOQVHotfYsP3H3RPd6/vZKGzmSU/+GEtBKQsur6/jHqXbufDOIbq56ofiOQQjSblmaAxKyFqZg9Mq7YqYvRAzy4uDRQaiCe1yYVxirOK1lRwz1sE/OxQix5cG5Tt/pM456izO/o+siNA/LsOWrPV5dn0AcwjeeFToebzFWvSt5usyV723/wXCGhDKzi6bN9VPnOMpI2B8ehvOdtH5sse+Uri8C5WOIFk19IhpKn0DgnQNMKsxylL89Vjx2pSDdo5Bk1BJrxshTMZh0EQt+agDEfl8kN19fl7wsFXOQNlMRq+Z+cMpfNVlLED43ztXOYVFmT+o7cTspDvnY5LOhO+3jJZSUHqO/ICw+a5M9pujzPPuwo8Wp/PLoZRS13cqD1oNeSG+JiA== X-Microsoft-Exchange-Diagnostics-untrusted: 1;CY1PR03MB1519;31:qCY50kNcU+kKWeibPOYgJZny4Tn7485lLab1Pzy/VCsxpypsy3/Fohm3l2d8uqoXmgxcKBcoQBQ8MZRXEr6WRrMDijWiWhpyYaXesPpPShUPswDEofSwLPaAlkcK8q/6zPMULb8b1npNPE/Qtk5vZRHeo9crUnSVXA0Mmo78XYDMtmEe5BE3t6y6npdcgRh6vvh7VcosD+SZjlrqYVnDJVa3SlpTr2bGri2hGtpf9u/Dm/GwnGm2BMdsW3xFOMwgQkWSjdP+lR0L3VyGmdJhHw==;20:lprg5MxVdsxWOyoYGwo7tj/8VquVlJURHtuPVuHsDf2h/tS3VFH4gNw8N0IMFpgzlA7QQFIec14hn1YFzW7E03Knj1Dz0T5TsPz1mRRM34r18QnrJZxBZlMysKlsBvNrGBLtWZRtZPw4dgQCJ4t0/7sIGl9wyJXHNXIl0uylAPw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(80048183373757);UriScan:(80048183373757); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(6045074)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6055026)(6046074)(6072074);SRVR:CY1PR03MB1519;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1519;BCL:0;PCL:0;RULEID:(6040176)(6045074)(601004)(2401047)(13015025)(13023025)(13024025)(13018025)(13017025)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6046074)(6072074);SRVR:BLUPR03MB278;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB278; X-Microsoft-Exchange-Diagnostics-untrusted: 1;CY1PR03MB1519;4:vpTcMSokXIoVNJPlM7/OrXO6DUVEaFGIS/a4oxJXLyd8rHxWe99D+jrBnLxrsEX7xG30axWPPzPH/7Js/TxhC12Lo5Y3CejY1tAXeRAxzp9U7m/CBymbPu9iuk22ZxOOUtiGuc4ol6zIh6WrYeA8dhFcfiTv3ifHSlHD4sBpz3q3utch9abg3NztR74haIBLDB6J8ZXERRF/2qZv6Kz3nsuqjGO0zkcmGit6Y2Lq1AnGEVUO5vvm30x58Gpw3zM7rUGANfJUQSSOkiW+Y6n2+10vB1BQ75aIJtmpeS5AsrO3TDWKEojSFmqqJ3v+/jUSBvZsYQnMS/pnS/uCNyATIvLJB3Ebw9J7UvjTTULlqHinti5w/cxydVpqyYFsoDn2QV8VIVRVX/9t8z9lHEcFGpxxP/Jl68ICGup/gft1075NboRfT/MFcrGZzO8P7ZtpegMKvgSIg4hNe63B/clOJ8OB02W0TRVgGR7TjU/ohkOviiH5J71UBjHVLMp4pktZSgIQmNcumasjCEDiqXZ0YQ== X-Forefront-PRVS: 01136D2D90 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(189002)(199003)(92566002)(3846002)(77096005)(7846002)(19580395003)(19580405001)(6666003)(68736007)(81156014)(81166006)(4001430100002)(101416001)(86362001)(8676002)(5660300001)(76176999)(6116002)(305945005)(50986999)(2906002)(7736002)(33646002)(110136003)(66066001)(42882006)(42186005)(105586002)(47776003)(107886002)(5003940100001)(2950100002)(586003)(6916009)(229853001)(4326007)(48376002)(106356001)(50466002)(189998001)(50226002)(97736004);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR03MB1519;H:atull-VirtualBox.hsd1.nm.comcast.net;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:0;LANG:en; X-Microsoft-Exchange-Diagnostics-untrusted: =?us-ascii?Q?1;CY1PR03MB1519;23:LxlOD8Yef7ME/TvXVPx+YO+Z9Rvhf/lRN2pucWgMw?= =?us-ascii?Q?B/yFFE7sis9oHjQmA+4JJk2VIX2SrtBDmPT8zTrJEfZVeOEfV/PwhNpCGU1f?= =?us-ascii?Q?12y3/EGMRq0AKsI98DZIUXJ8xP+4vpXlWxPAxB86htD6xh6txoS9JTU2TFB7?= =?us-ascii?Q?4J8OEg+19opRjilNPO42Lb7qzSJgiap+mTHU6G56y5dF/gjvxtSNAzpDDGHe?= =?us-ascii?Q?ffUfOEp05lrWUyy6WtL4ccDequ3tZb0zcCcROcY4OFgFZAUa5enIzjByVGU7?= =?us-ascii?Q?7EMBUOWt65uvElBQgLQ7byQV9y4bfw2c2xb4WEgo9zs3xlUC4y3PJXrHdIAY?= =?us-ascii?Q?PSpdjC6rnc1rY0vhvvsds+QbI31A57tyep5pfsjAA4GBQmM6KE0BGm1J2kFf?= =?us-ascii?Q?RnS3m/kV8eHQrZVe0IlnGxvLNHeaFanuxoyz/7Gt/5u29geaVEGYsoaS9olA?= =?us-ascii?Q?mbVGl2OI8HfE7ZgJSDaxwUaAgRUUeDmjwuGnW0QCWnFctOg7QyNrxM8yBLSZ?= =?us-ascii?Q?HEIy/FyiF+TrMjs11xwc5zmBeRn+gaF/V3Rcy4ZECUPIfGnZg80f2547D3hY?= =?us-ascii?Q?Qr0bsOaRB+btv//zhhHB52Q3MA8udO3AEaf/3dGe4Sr9dQGornDpBRTuhVRo?= =?us-ascii?Q?c7RMS9LJcvTmWiR5HzFb1fCt3fGJneKvpHMrVgoRykaSIQoF7gEjRQEANYLz?= =?us-ascii?Q?DxMGREJYSaLyY3mbiJ/3nV3hiShS1c/0ALnsEZBKyv32i9BPvys3WDs8Ohva?= =?us-ascii?Q?0JupGDNwwzy2M1xi9+XZpoClzcbhLfKmPVWSt6ZLdXId7k1p4fXUx6pWAUm7?= =?us-ascii?Q?vAVY3NNxxthLHbNDWs2L2wyQ5EDDaN6xMRE+C2gtN8nWQ8P8hfTrn7s8IGcc?= =?us-ascii?Q?/rOvrHT4+RtYZuzmZkeQLRXGSRPXs2B/aXWpoBIXriAhzMWNyX3GdOVEITaD?= =?us-ascii?Q?mC7aIgA6ozldSmW+bdcwGe59qES0Vr2hCxQYpvtUpgtQ7hbxaotIUHFLxKt0?= =?us-ascii?Q?P7ari9DRORB3zVE2prvlQX7A4eoKaPomyExIH8sEu3d67BO/Be2g7e9ikVay?= =?us-ascii?Q?XsRirXRf3gjmVYOSkxXyh/TatO4S5QnFMmfuw6a0OgB2h0JVpxu2wD3ylNqZ?= =?us-ascii?Q?AeeGpTeInY=3D?= X-Microsoft-Exchange-Diagnostics-untrusted: 1;CY1PR03MB1519;6:7NRedHr+56K8bhvLj3YokpLuEKCg75azK/xSXW8dM40Q3CgbZ0QC5kF9rvWRylxJTctRctA7jcPoMwx9P6ld+BP45Man52ANBhvPFfMo3rffRRi5pU8C7bGu+t54b8Uymo37p7SkWIdaQi+PUghFCKWvYYBlGr1OSVfApNK3oqY0n3q/CWNBGp9PVXzjFC2uYErehkaaIcznKPj0X5+DhM8ClIVzZzyFN3a6pxWs1nD9QZy6zNVX3y8u6UkiZgWC7huRHJXvbjTafN2/5Mrgz/YV5z7ROkAR48cGy8gqC/ic0ge2bLFbrDthEvkb+NiiYin8qQgBt0NLTB5bEPFpS/eoZmXohESMCkuToQyEVa3KCtKj+l9FqU+vLfJqTQ7Q;5:Dvm9NVH8drGjKQOgrmrOcrWivIwOzklxHaA21Tq9Rnba4iAs8iLnFeLJd9HCls8eVJoAQdQSRn43l2X4oUXnkepaxVSRIXUD1yq2RnW+SqS+vKdSoNGczvql2AarhFLg6J+o8y3ULTibeqcsO86Jsg==;24:W+hdu5Mn+6xTaolU27/X6qXNGMFwf1dq3ymrS1tHPLYdO1NZwDPSs9h3hehAQ9eCuHZu1ruQhXz7rknDxDEsZR5uKAGlILj8Xzhg6yFJr1I= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics-untrusted: 1;CY1PR03MB1519;7:lVCF/OQrJiGW1iVlLSIoDqzXFFt1dciCOlDeuT5T9+3m+w7nuwAz4NTHlFtHYMW5hJmJDJZplwjjsboaJieTdHgCbQC0faUkcYgP2XwuyZBGdGdVeV/KACLiMUEy05p173AnN4dtFdyACWnpI0asP+kTfmdeyCYnvCXWFUwlS5/fXIREUtKHX1HNG0mawE2Q3nUHtEqTxrB2L9FuYWHn9Zwk3BgbBt/RBkJnIm9ycYp+qJv/bizOkPsjzzGs3UGLtxsXFpZyyHgV5QIieil+n9KAn2HI63ivc5oEcZg5xgFrMVvo2BMA8uYoGUT+R8dPwyoo16zgsmUAH3KTGcZ/FhKk6QJ20LuufSBpIoOwb5g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR03MB1519 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: BY2FFO11FD001.protection.gbl X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:66.35.236.227;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(305945005)(42882006)(85426001)(97736004)(6916009)(50466002)(81156014)(110136003)(81166006)(92566002)(5003940100001)(19580405001)(189998001)(19580395003)(336002)(106466001)(48376002)(586003)(8676002)(2950100002)(107886002)(6666003)(6116002)(86362001)(3720700001)(105606002)(956001)(229853001)(50986999)(3846002)(6070500001)(47776003)(5660300001)(33646002)(77096005)(4326007)(4001430100002)(87936001)(626004)(2906002)(76176999)(50226002)(66066001)(7846002)(8936002)(356003)(7736002)(7099028);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR03MB278;H:sj-itexedge03.altera.priv.altera.com;FPR:;SPF:Fail;PTR:ErrorRetry;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD001;1:/VjJgARAEuq/3fOU9IjiTGu4o2yza6zxDY/2GPxPeV6vljd5Cb95ApFnrmPYTHnn1rgSTNHD1JGyN6Pg71Yv3CA9V92F01xh1eVQ9yq2gcmVnx767ka19Xnq/+WCo0ux5ytn3Nk37g8sf0tbN+WHJmxlYpgRTOg9d5O4A7hdQhWOTcYFepZbLccPejKAlfA6B6+Mfml3of/QhNmVVnlrqiPdNcEg39fcfVC4UciH7UXKePJP8YsQ8qUJukD/r3jah5JhBRu+VLs1xeY2LAga7QLoKUPZjQ4voFCzvwFpeWXdhYMYgXPXR/Mz8RRbStAgBfap6BjpEP2I36Kw1lVfaOpGNir/eJEzTPsVQLQQEtyE72dXGlrSBzlCYlq6rRFISiZJbVVbohS9AWGz0BWtUBXN9MnEW/9y5uDvIOtwa+oQzLYSFWHPLG0R1E4vpW9Ywf+5hN0gYtBwZm1JWxvFRDiD5QVZo3K671dxSJWtHyFn2p3Z3E738RYg7Yf2736pvuQIGu+jG7RGPRhiVAu8//wWL3sACsNjPj+43R3qhMaF42CJLX7Y05mD/xXVDWvZpHeAwWiLT1gaFcacDjgFTrenSBJBgVhOnZRNlviR+Bc= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB278;2:FrHD6EpM7CktDHG7nPRD1phU8ecZtTtRUKXjFtWchN6T8e/BK61kFqngo2e2iSGVaWx2plA5DgozGqU3owyRPaW6Ctfnf12COZtUyYuqnQwv3Fqtg9a5A0mCVrOtioSRAC2BJ7+D6HomHPHHYxKNm9lq8tdwOjZiUKUNfZKe+snfb5g9VJArmDvH9f9QjC5BW/17fi1HUQ9KfZ0h7FUv4w==;3:IrhDRmuwwBFcCephVEqU5Ce9VxmGQCJH//0SHesoOd16RW1TwGs/Nkm/wVc15AaOIxXv44gxt81GFYzbC/iETze//NsxK5CweT4CoDxcvyVnTgvn1Jxo+Zv0fIpx21eegDgUUVI4vRufdLMdvw6SCtbQ9nHQQIP1ZHZXy04OOv/4NYBmMUnZbpOuGmILZKntTWELV4zUP86EaEZMaleAX0xjDFJ74E1SH1QCvJcaJL35+Y9hNcUC2rk9iYrMXj+53sNwMOcG+sZakhxOOevadw==;25:BwaM4+Av4b2FxRx0t846gIXzOLDCUZm0P3mtW0oLlYV/iLOukvBXoLYl76NP9N23WuP1GKIvpKw3SR2SBdcrKwb2Yz/n8l148Iifax7u4zCWc4CeHqELmqsNkq2vm4rpwG0WcnqHYqXHD+WExLMkYA+SRhvmqD7qaXaElABjBoiqujoHyL5W8AfK8sLgQdAiTjEz+CCIMohQFZ15uVHAuxPXiu4H9bYshqA0oUJtjMMBWT/s174u6cYDe+jmjceZyTXQ/rHe2JJHgWSEQJH/tv+SOzFI7ErSVYeBYTgRaeP932rjgpLHibViU8XYzQZZ8Kbti/pHARSdcQp49fETea3wEMB2hUBZlbc6vsmyXevL2uUfvBkWh3mDSujAZq/gElOLa8+r/eYSjsBB3yFRdRP7/roaheL0bIB1StlCioj0zUtyhrqCF0ANf9QjF1XW16bMX3k7l7PpkG1db26x2Q== X-DkimResult-Test: Passed X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(3001016);SRVR:BLUPR03MB278; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB278;31:rWvBipdeonzB5KYRdtgz8PnBdKqLAPTC5kXaImLXqtamzIMNZE6K5MRtBQi5Ioz3akFK/Kk3d9z8jfmb9lkphk/1+St/SwyJ/XTmcLd49rmGoBms1TyUxy4a6NKP5rLJTPiW5SPKQQEVoDP4+4kWOe9yZevGek1KjCuQkCyiXn7Kj1wja5LAgyLoZgJK7ZKXK+tPJ9Q4uYPoj8sITRLRxR6lMuDP6ovumJgAnAtiMeo1rPXOv1PSAqMoRcLfcAb4aXtCYe0o2Hy9kP0MrHbQNWmZy9ZFJu+YMzQTUCLPqBE=;20:2V/qRYSoiqTeRhq1rpfgdysEJ3JjhNwbiFO0SQd0m3munHbDRtfuA60lMe4RFXf8LvkQfX9N/u5MjV+n+N5mRitvmPLvFEPzVBOCij9iZX2iolz0dYuft6UXfWjTnwWRBK5qUScB5Zf+oV372Hp5UzurRHyGydpAWxdrvya42QY= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB278;4:DnMbByBTQ45kTVddY3Mat7O+MvhBYBKXEgLmpNmylHDTEtGdy150Em41y7g9pTdUQyL2xOFdi6MOfS+tPKO4tFunIrNj2nOdXQlQ/DB99imMUEKdhqGslMHSaFlQs7EX+/vAX401geBpo+JmzFIXGZx4wy4llG4GgxASIgnUjwfF4dnSS7MpsWg2fyKQGbOYiU4cCaX2BlbqkqejAHt37XEj4T9N8C8+W5gK6Ll9AfDVyhuVLKifj0LVzNwzMlvsyL4OdbL1T6q3YSFJ3toOcf2N+vSKW+2KAm3pim06zEVinwOO2LXf3anHiCEk9utJ1SgP+kNoDMSV97A+ebnryE0uaCXFvUM9dxKQ0X51pwWvwrM4O4uS7X/tAoQPjbrV8vsp0ItWPlc3zqomigQOt86EYJagvG+0U6GAqZLW5+5YY3w9hulmZLyUtls5bzMKy9vuvfaCGjFWlwLEDtIQn3Ra2dH884jANl4ZC0546+Z3CFcQTg2eUO1YBEj4+K2E+ju02kHSECysJeedYobHqVTNPHs/8sHxEWlPT6yra0ksgFECgkIjcvj/HzblB2t2Wm7V+dlvSEmptIjw/Qu7S+uitX4y7k1qRn6clOb2YTM= X-Forefront-PRVS: 01136D2D90 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR03MB278;23:uMNmOAXc5s+aWOfE/Kpg556j9nY6uhHgcZ+K4eeYhO?= =?us-ascii?Q?TyyAa0Yl/iRT4QAYli8htrK6humV/p8NQo5OGRo9xS5cFBK9G1NfvMjMfmei?= =?us-ascii?Q?nH9axMm4GuapXAzh+zc0QAAEkM7V3qTyaiP6R01POeXlc8Hn7hu+AC/Ccsrr?= =?us-ascii?Q?COIPdMQiqQV0PUKxgZguFhjOEdK2zt7GX3corN0Ufp0xaorj14ilFmsXNcLi?= =?us-ascii?Q?sNFOqDPgLi+9M55hgvn4gJro4rm4QnN7CWi1fMTB6LVrIOPwsH82BJNGRoN+?= =?us-ascii?Q?XpDjU95y0LARtJxL3fq4RNSEHv4shDwrox+semq/Rq8ltg9fDpfKS+CgQ8E4?= =?us-ascii?Q?ohGcSdaeaJWp86kcUl3NL/l9A1NNmpTk32tufIrTNxSi/9jKV+wvVpTulvvB?= =?us-ascii?Q?RQta24t0Vskvfl2Be22rTWurHwqTgN/Idc7AROcUZJXzwSTsNSyoJAqlNPEi?= =?us-ascii?Q?3qezeTR63GD1/CEYXS8MtCIpSj8YgnJUjROZ22JeD6k+mtppUcA7EjQAfOv0?= =?us-ascii?Q?NN0GZf5F1b5YtN476aMQahtDAbsY9IZWFtLhmhHFcuGYPaqEEWfPzondgmTa?= =?us-ascii?Q?V2GmVxpnW4mIOCNXI/9my2KNuL3JsHMOQX0C8DY7Beos25VGS65t3RAej2l8?= =?us-ascii?Q?lGiME5IKjNMZTfj5NykUhxwNIbi9AtdlxWtLmWFiwBnGGbFw5sjGdFdtwgh7?= =?us-ascii?Q?acRXiLsdZ7eAS6GqQoBbPsts+mCUtiaKX4DMf2OaQl6mrSA/xjgfmKRfp2Ro?= =?us-ascii?Q?tJYVr6ye5LgRQY3F6Yf3y6XuMmmSNE+IA2PVea7HhNmcnJ0LZme9eUtLKMKw?= =?us-ascii?Q?wvcMtTel0ENGXq8xRRH1eYR1udUb13zROAQMBxdDmcoCGzFi804nO1xDCJqA?= =?us-ascii?Q?JM+ucpWGksDyPYYWD2w4rU7VfFnf0GralYCfQcD+B1DGwGAGOhGTS5wOf4mD?= =?us-ascii?Q?tpA7HNqX34V1vTL3OYJaYDx9XwhPvHavepcMiV9bPlMO7PGn2jX71b43J6lD?= =?us-ascii?Q?Bjjr7je5u+Bc4KHjBEjXd3G400yyLgqdGtmzqO8a/nCi4uh4pxMCvvshziyJ?= =?us-ascii?Q?WQTsjHrUZiLD12vUXwUVX7PeYjkoWeWL1/2J7CF/pFJQ6vvMUZMMz2DqXvVW?= =?us-ascii?Q?R0pTF4+JffwYgyC24fBZRmeQOljij0HN7H9ENr69bP5LFwpFlxru/BU1SSWC?= =?us-ascii?Q?aaQmRYbYi+4LaWlZ8XOMDsQG/mW1TH3rNKcBc1ROp4zsavKgIkVIwoQe+i7L?= =?us-ascii?Q?S8aQZw7Ng10/FUSFgd6YTjKr5uZpkm6i3ox2XxfUr+6NCONenVWmnVe/HJ6E?= =?us-ascii?Q?v83YD+vdOEZnLx9Zv66CI=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB278;6:7mKyrq/Il8nlGklUbf9xYk30zZuhJV+ondOMmhBOV27XivYR8h/7CKYIaU6lMTOTLYiaPoSJwP12H6gHPiZIP/KpXJoOiAgRgtU6bKvrKcG5oGY6L8P/SbdliB2zqLwb4qdBezTmefe+VOp7JY+l3yBHwNdsmzLj8ok0wTw9Tk166KJVEor7zb1TzYA72bYR5DO70qVY7/3SyPQcMGaXcfORZLDZNTVIJ970BKN65dx4meQraspUF8e40TYUq5+123uWXS4yAEcF2l9ZByZuSq7J2K+nkcTdLGsQdfxb9R1JO9fJx2cITUJ5Qvfc+j3AoKeui/XP9ftqpnGKO7is8L8AR8+H16gXsEi4ZgSgXRgOQUMFn1BfrJry4B1eUQf+;5:++/DDCapCqghzdx7zNj1auaaFVOStyQyftjmy1HLehBnrNQ4FMkyXPdjXPUHGf10y5tEReXKt2GHv/VcAwuxd1LzhtXbU1l9xPs46cbHt+CmKmfGbh5jISACGYUlT6DIyGBfBCjJBNAxiM+hlA18Kw==;24:jdDLW+98myE5voZQzTouj8CPuKdhaCzlDGlQbgvzhRyiiBcs/GcNFp9z6oReqkvYbNjnGty9ofiSVbu3rXnwt3mCMmvgzNTRYfB9GjLfm5U= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB278;7:OQbu3q7xqrcuNDWilDcEIDdXq8KjZNaDtfQ6QKT1Gx+aRotXbS6SImaQnG+DjUsUqK0UxWLtDjcD38yfvSC4/yNG4uqPLvvMZZrBaGFwVmExcgzMbLjUryc0aAnNIUASbvApYtqKzRJgH5zqJA2j5dHRl8VqeIiNuSY5WtmbgSYis+adBVW6SDcnwh3RCm7ERCFZUPXOyKDChTjGpMz/uvh95oNp3b3HsSihkiqPgIyasObVBfJP2mFUQrcGjqFFZ15M8zQrLmPwELcEC5Anaz8fAg0M8a9DaOpsFKZz/DOizQLdhFqMzsZsc/SEaOJh4GVyNvoXJjl5jO9Bju43SQ== X-OriginatorOrg: opensource.altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Nov 2016 19:15:06.1027 (UTC) X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fbd72e03-d4a5-4110-adce-614d51f2077a;Ip=[66.35.236.227];Helo=[sj-itexedge03.altera.priv.altera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB278 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5347 Lines: 162 The intent is to provide a non-DT method of getting ahold of a FPGA manager to do some FPGA programming. This patch refactors of_fpga_mgr_get() to reuse most of it while adding a new method fpga_mgr_get() for getting a pointer to a fpga manager struct, given the device. Signed-off-by: Alan Tull Signed-off-by: Greg Kroah-Hartman --- Documentation/fpga/fpga-mgr.txt | 6 ++-- drivers/fpga/fpga-mgr.c | 76 +++++++++++++++++++++++++++++------------ include/linux/fpga/fpga-mgr.h | 2 ++ 3 files changed, 60 insertions(+), 24 deletions(-) diff --git a/Documentation/fpga/fpga-mgr.txt b/Documentation/fpga/fpga-mgr.txt index ce3e84f..d056d69 100644 --- a/Documentation/fpga/fpga-mgr.txt +++ b/Documentation/fpga/fpga-mgr.txt @@ -38,11 +38,13 @@ To get/put a reference to a FPGA manager: ----------------------------------------- struct fpga_manager *of_fpga_mgr_get(struct device_node *node); + struct fpga_manager *fpga_mgr_get(struct device *dev); + +Given a DT node or device, get an exclusive reference to a FPGA manager. void fpga_mgr_put(struct fpga_manager *mgr); -Given a DT node, get an exclusive reference to a FPGA manager or release -the reference. +Release the reference. To register or unregister the low level FPGA-specific driver: diff --git a/drivers/fpga/fpga-mgr.c b/drivers/fpga/fpga-mgr.c index 953dc91..b690e65 100644 --- a/drivers/fpga/fpga-mgr.c +++ b/drivers/fpga/fpga-mgr.c @@ -39,7 +39,8 @@ * Step the low level fpga manager through the device-specific steps of getting * an FPGA ready to be configured, writing the image to it, then doing whatever * post-configuration steps necessary. This code assumes the caller got the - * mgr pointer from of_fpga_mgr_get() and checked that it is not an error code. + * mgr pointer from of_fpga_mgr_get() or fpga_mgr_get() and checked that it is + * not an error code. * * Return: 0 on success, negative error code otherwise. */ @@ -99,7 +100,8 @@ int fpga_mgr_buf_load(struct fpga_manager *mgr, u32 flags, const char *buf, * Request an FPGA image using the firmware class, then write out to the FPGA. * Update the state before each step to provide info on what step failed if * there is a failure. This code assumes the caller got the mgr pointer - * from of_fpga_mgr_get() and checked that it is not an error code. + * from of_fpga_mgr_get() or fpga_mgr_get() and checked that it is not an error + * code. * * Return: 0 on success, negative error code otherwise. */ @@ -181,30 +183,11 @@ static ssize_t state_show(struct device *dev, }; ATTRIBUTE_GROUPS(fpga_mgr); -static int fpga_mgr_of_node_match(struct device *dev, const void *data) -{ - return dev->of_node == data; -} - -/** - * of_fpga_mgr_get - get an exclusive reference to a fpga mgr - * @node: device node - * - * Given a device node, get an exclusive reference to a fpga mgr. - * - * Return: fpga manager struct or IS_ERR() condition containing error code. - */ -struct fpga_manager *of_fpga_mgr_get(struct device_node *node) +struct fpga_manager *__fpga_mgr_get(struct device *dev) { struct fpga_manager *mgr; - struct device *dev; int ret = -ENODEV; - dev = class_find_device(fpga_mgr_class, NULL, node, - fpga_mgr_of_node_match); - if (!dev) - return ERR_PTR(-ENODEV); - mgr = to_fpga_manager(dev); if (!mgr) goto err_dev; @@ -226,6 +209,55 @@ struct fpga_manager *of_fpga_mgr_get(struct device_node *node) put_device(dev); return ERR_PTR(ret); } + +static int fpga_mgr_dev_match(struct device *dev, const void *data) +{ + return dev->parent == data; +} + +/** + * fpga_mgr_get - get an exclusive reference to a fpga mgr + * @dev: parent device that fpga mgr was registered with + * + * Given a device, get an exclusive reference to a fpga mgr. + * + * Return: fpga manager struct or IS_ERR() condition containing error code. + */ +struct fpga_manager *fpga_mgr_get(struct device *dev) +{ + struct device *mgr_dev = class_find_device(fpga_mgr_class, NULL, dev, + fpga_mgr_dev_match); + if (!mgr_dev) + return ERR_PTR(-ENODEV); + + return __fpga_mgr_get(mgr_dev); +} +EXPORT_SYMBOL_GPL(fpga_mgr_get); + +static int fpga_mgr_of_node_match(struct device *dev, const void *data) +{ + return dev->of_node == data; +} + +/** + * of_fpga_mgr_get - get an exclusive reference to a fpga mgr + * @node: device node + * + * Given a device node, get an exclusive reference to a fpga mgr. + * + * Return: fpga manager struct or IS_ERR() condition containing error code. + */ +struct fpga_manager *of_fpga_mgr_get(struct device_node *node) +{ + struct device *dev; + + dev = class_find_device(fpga_mgr_class, NULL, node, + fpga_mgr_of_node_match); + if (!dev) + return ERR_PTR(-ENODEV); + + return __fpga_mgr_get(dev); +} EXPORT_SYMBOL_GPL(of_fpga_mgr_get); /** diff --git a/include/linux/fpga/fpga-mgr.h b/include/linux/fpga/fpga-mgr.h index 0940bf4..957b5ac 100644 --- a/include/linux/fpga/fpga-mgr.h +++ b/include/linux/fpga/fpga-mgr.h @@ -117,6 +117,8 @@ int fpga_mgr_firmware_load(struct fpga_manager *mgr, u32 flags, struct fpga_manager *of_fpga_mgr_get(struct device_node *node); +struct fpga_manager *fpga_mgr_get(struct device *dev); + void fpga_mgr_put(struct fpga_manager *mgr); int fpga_mgr_register(struct device *dev, const char *name, -- 1.9.1