Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932252AbcKNOCe (ORCPT ); Mon, 14 Nov 2016 09:02:34 -0500 Received: from mail-sn1nam02on0050.outbound.protection.outlook.com ([104.47.36.50]:34436 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751396AbcKNOCP (ORCPT ); Mon, 14 Nov 2016 09:02:15 -0500 Authentication-Results: spf=fail (sender IP is 66.35.236.236) smtp.mailfrom=opensource.altera.com; xilinx.com; dkim=fail (signature did not verify) header.d=altera.onmicrosoft.com;xilinx.com; dmarc=none action=none header.from=opensource.altera.com;xilinx.com; dkim=fail (signature did not verify) header.d=altera.onmicrosoft.com; X-IncomingTopHeaderMarker: OriginalChecksum:;UpperCasedChecksum:;SizeAsReceived:8735;Count:39 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=atull@opensource.altera.com; Date: Mon, 14 Nov 2016 08:01:25 -0600 From: atull X-X-Sender: atull@atull-VirtualBox To: Moritz Fischer CC: , , , , , Subject: Re: [PATCH 1/4] fpga mgr: Introduce FPGA capabilities In-Reply-To: <20161107001326.7395-2-moritz.fischer@ettus.com> Message-ID: References: <20161107001326.7395-1-moritz.fischer@ettus.com> <20161107001326.7395-2-moritz.fischer@ettus.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="8323329-131224924-1479132096=:2786" X-Originating-IP: [24.206.110.125] X-ClientProxiedBy: CY1PR04CA0026.namprd04.prod.outlook.com (10.166.187.36) To BLUPR03MB1508.namprd03.prod.outlook.com (10.163.81.26) X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1508;2:Z/XtjEs5tQInSGXNUjurT/j9uDSlWtAeVHoUO1NjAE1jeg08QVRge4yOngYZX9JARx7B7CaQtWSz+l7XCYoRbI1eeJfuiCQGSlaGafecqhjXmLIn8mmgxHsOIVkUpyYr2bpsmDrSXNbWQzE5a3iTglWcz7dGBnFRH9d4U9pJ60o=;3:0t9ZMUCTYvsp4rEIg9HWkbNIEjZjqpy1NpRUAqtKlsIq/zMXTzuVf4t33D0pFCmc/CFk0XKsIRao31Aki9Vh++VLmCSWGZlG/THsqVy47IMh98tA0Azep0/kjOPgZlz4yKAmlNBnsPz6hUL4tF5lRTtdZ7xI/81Pc3Cx9wwk9Ts= X-MS-Office365-Filtering-Correlation-Id: bf19c835-69eb-48a8-0989-08d40c96c675 X-Microsoft-Antispam-Untrusted: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:BLUPR03MB1508; X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1508;25:OSJQE86kTTaVmsPWAj3W47JMunUvaA4mhDexNFRYYczjBenA/fzYHh7KYBRoIIl21fWunTh++9ra8OGBvwLxIamXvRmH/3AD6+tYWVd54s8HtbeU0M6mq80L9viTRNZsGZCBLeYIcwRQKsZuf1uXXgh428mAGBA5VqHyajFdZ8xJtwEQH7WxUwClMJK/FElzrrq1yNSm/UNpsCP/ZqfneNc0R1mQqiceb71k1WlkjTwnjap9gx6yhoQbSBGSaoh+ie7JdcpygNqeohzhzbAJ3IJPcDwEOcsneU0Jdxv8n+JnZZPW7l/wdiT5Soml5JT5d/4Om/0TN/Qmsi4Fa4rK5aYDg78/LanNfSDu8Sab4L+Dl37mBEew1bSCkh2bKUPiippb31jiZej7p/G5PDYHLidN53IboGAPvP36FlE1M9HFKSoEddFDOwo7IbDu+/lKMEE3KPMpyu2UGUT2HS3fZLz6VXkBbPw1453eP5pAAf0U+h09CxvDMRgtZy904tK4vQf9iyuzJ/ykQvmxdYnfuO98cI7ElC2C2d0/TTxt3gzi2pwJUCbeu3YfO/zj3uZaFh6S96o3ZmAFwdLlvDQUqMaTNfMz9EeGIL5KdS8lECPEnqhJYrpUO0HGhfH1dE29i2OnyaGm5B9w3TECaPEnb2DR9+bCIGuIrnJLBAczTvjCw49YgqLyHYIdOFZAAz0NrJH2ANwBv1kiiLCEAehZGsCjPLAgSUwGrA5FEIUOmpVRTYrgNZSun2mrgwbjt/Ao2h/OZ66HeOB9upCwwVwWtQpwM7gc/13JLwsx9Afq7Do= X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1508;31:g/tmBaZlukMNJddYmA+MqtB8MhHwT4OYnNgZ5AN2KBe8wysF11CBfDXFnZXPS84MZFWD67swpBfu9agJxAlz+zRTllSlx8/ieka8u1zy7W4Z3rL58vTnfrAbvixIqFJMymqaX78drixBA0SHz+Jr6SHl/9P4wsQnis7wy4F7sR3FiBM9CnQW7daLXeR3U7WC3UxLDUXcgToj1GmEn+EWJo5RTRMHsdiuvL4jXZdC+DCQ+RF3Uqg/neK6q85lthQWdPNwbarttJNigtODk7I8o+Hmv2D5sgZbqnYW9G6Bq4g=;20:vOxgQXT6es0WiJYM1t7PvSfZmH50ma7LQbVRJSFDeVqLPm1y+NYb4xe3V7BwqG9zXJvzDbbmb8wT/tY+OeQ5+gv3OGV9hHfFh450cvipjKrKNZ+F4BQRmuEZdpL++THty5NnimYakhlA9vYSP93vaZixUj62D4jhMBctxSUX/bo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(80048183373757)(258649278758335)(192813158149592);UriScan:(9452136761055)(80048183373757)(258649278758335)(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6045074)(6060326)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6046074)(6061321);SRVR:BLUPR03MB1508;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB1508;BCL:0;PCL:0;RULEID:(6060326)(6045074)(601004)(2401047)(13024025)(5005006)(13018025)(8121501046)(13017025)(13015025)(13023025)(3002001)(10201501046)(6055026)(6046074)(6061321);SRVR:CY4PR03MB2583;BCL:0;PCL:0;RULEID:;SRVR:CY4PR03MB2583; X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1508;4:vioDPIIAtrdWQUz5ynSAoUdZA9bil9p3ZWS6KS4qjvYKSNQRYFB6rTVLCgAI7wwG9NjuhpmQifJfieAS2fjhSv4s07+t3BVdxCrRPrLF+v+cY1d/XbKMNfsjka7R2xSa/QuRs8dx8WXf9tmmSe4OTgXMhR5ieNikT1Doof8HRKAUkBz7JWLhGT1vyLlYOswCJo1/4YYLAS2gz29yGjRGaA0sbGyVClIVKv54z7X2iPU+yY87BgAQitvCY24Be0ylevsQ7tLNI5zw34AjhGvYwveC1bWZUAeIZ5nLKP6qcWazOnpv4SiWPOo2ZMavBfYVOega9bdU8hVX/N2WO2fDf4T0rKANloPl5C/fyt76ujqpf/1cyQRTV9h2MnKr2N/O/Nb3zoRj3N2ix5lTAwpmeXhV5WsiIaZtlwnhO/yo89O74zIJ7+qP3jUbElEtzDSleVW3ASyJs/AH0EOw986Te85DF3+yxdb66U/JsBj89025b0IzcozgDZ6Gh5NbxlxToYuuTb3/pF8rduX1tXXAsDKq8UlDfvZkpAr36wTs2pbM10hNkgwDKfkkNOmKYukykQyj3eNXgnwbJWOcem18l7S9KTwmcsqGkY6n7avkuZKTjc1ygCOVxL6ipOS+C9pm X-Forefront-PRVS: 0126A32F74 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(7916002)(24454002)(189002)(199003)(4610100001)(77096005)(92566002)(8676002)(229853002)(305945005)(54356999)(86152002)(66066001)(76176999)(50986999)(2950100002)(42882006)(101416001)(6916009)(86362001)(83506001)(6666003)(81166006)(81156014)(586003)(105586002)(106356001)(110136003)(189998001)(8666005)(42186005)(68736007)(2906002)(6116002)(7846002)(5660300001)(33716001)(9686002)(3846002)(7736002)(4001350100001)(97736004)(7059030);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR03MB1508;H:[10.0.2.15];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:0;LANG:en; X-Microsoft-Exchange-Diagnostics-untrusted: =?us-ascii?Q?1;BLUPR03MB1508;23:YYfYqq4aPlegI0UAe9M5RxIhc7fHSYFv+Uf2j4pG6?= =?us-ascii?Q?KHOg8wqQfYFVdjo288V1IgJPrQb+/tzq9OtMPwNyeu+R/pRWuq1QEAnUVIwB?= =?us-ascii?Q?SOMhyPjxTuLjKPMMLMITnyLw5LYcVK1o/tpmmf5MpAL5fGWwd/z4Ed7KUkAF?= =?us-ascii?Q?RnOV1fm+EwkeELwdldZC0Udc2JqTFSwscIao3cH0JJAC5v73cziRFkASrjrT?= =?us-ascii?Q?iqCCg5vN9HMz+yphzUeqlnXFIdY3uWoxICEGhgmMh/0xtVRUy8Mw1bxDfYpS?= =?us-ascii?Q?p4rhWoTOO+ElcQlAifkDm7bPNmAbbGWWN4Oc7GLkXs/pSrpCP4Z7ZKFFMM2h?= =?us-ascii?Q?IimFRI+jTJtGzVnAs+mJ92uZejcrhCVGJeDE2gsACDWtrkZBfY5wFqQQCnfc?= =?us-ascii?Q?CZOFE0g/jMTmlOEjXm37V2ZDYeTwXizzn6wzU/HH1kXwLEz9MkLRKNe15jef?= =?us-ascii?Q?ys2rUmS6FiIYBQsrnyC7tj8t10BNteQEmMXPqpSQnyjtCANxvvZvgo6oNRa3?= =?us-ascii?Q?/wJu9wahjSHdrhfuUFwCgcanNYTNhdJkZX8DhmYF/kT5+lRwX+tAdoe7x+/F?= =?us-ascii?Q?0haFqa62XdtgcFYTmhEmnUQgc6Zwh9YCnBwunnEuiXb+6vFnfeWHrCxPJx4P?= =?us-ascii?Q?PO0WWd7vGpl/CYC+1/x/ztxYKOj+dZSJLcEA46A6fMTvATZh6JJCRhxuzSHh?= =?us-ascii?Q?Iy5Vvue316RigGDtn0/R9wW9UxecuLUpv24A1bFbsh/u2QPYjARzM0eQunbX?= =?us-ascii?Q?oM8Mq7fuX0/4TQptnLMosDlSC7pqeLXmBY4DNIG4LCSvSsAWhny1qthr+U2G?= =?us-ascii?Q?F732UvkvBRHdJMi8a9xpP8CBjC68DXjq/fyGe0Si3B1YYbV7GWNuWy0lDG6e?= =?us-ascii?Q?cqp161e1J9yfRO6hzC0kB/wMYSO8HEkgG2pImanhWiLYWl+rrDXKTxE3rHuq?= =?us-ascii?Q?oki+J+u4NnNfrrfanukBsJqI3ibxsYH5gL+IFoKVWpXLxNlE32ggyycc8U47?= =?us-ascii?Q?bqChDVJcRcZoOAmei/diBhMp2RUkd/s9qHBFEUR05SubTiMlADzvUUKYCkoG?= =?us-ascii?Q?0XNBG7ZpIZkm8WREFYlLA5qCwbv+n2pRWukLTu88Ppt7I6uFg=3D=3D?= X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1508;6:Or6JI+2/ham5tdfxixycEMC5CvRUhcPkUOVgb+ce1X4k+XezIdIcd7Kdbzq5Yj6DPdJUDxSYbBaym0Ay/KBMDnE96p+e6VyDw02pXMYpW+6cStpMZPPmc4uV241W3fGCHYTqBWUnhWQpgj+dzwCaqa284phwgJTTHxa2NhX11hJ/udBqqdr0CG7Z8cfxSBiixoTpHSn6Tpr6lkF3kyV/+choUcUbJbc6s2hiiPWQmZH6Z4gKbZQF/YRoOlm7yjvH9eSYEAHOHZOl1GAo24VZ1JURxeYoonFh7uS8eTZqIDgCnPpn0jw7hYid86JK20GNjeQGv7SwfbBYYK/AMijf1+GdTYVfzC/YtZ1L+hs0oehOnerW8myzmWkN45JUgq/F;5:cHxcDoMzhIBKun03xPRnGchdhBkUzEXx0yth1W8/XyF5lahX084NPhDMBMJicWXn0z+tBTeJct9qFbtC75pDlQGVG4KXv+moxLI6Wr+cPWTrsn8uw8U7RrIdU7rBi7OK5vIC7skCQk51/5eQ9qSzZrz9soq2XJ1zxXz6q+KLqLE=;24:1jwnapBRmEjuw4izGs3XKc/z4kgdA//6DxxLOM0OJBjRpwaVcnZiCt/9EVtFOZngXfJ2+KMJRSHwblvItu469jhA5T3QSoqgH56ZPKbNvVc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1508;7:qM9IivcdXnmic9+o+bemABEF9c2JMHcAdGo4ETxbw338tJjnRAn53qdk2yugf/luH7X6/Gn6tgERx7BAHvP3Ub2+Z7acNH3a8iMm2iszIe9cghDWH2sLQYGLxP4MNZbTIno7A1sfEMxl1x0S12L44XxhOssYj6ggKs6S8BxwvcxdPfb9HdSnPIYns6RqV93bK8+AswgpBmZpNs8voaqvVvRGc5Wj7phCQZHubZygMRbzLpOU/Nb7JTObHFrt9eS3H0AN8iXthTZIuW/ow2U4Wghtwj86zTmPo5yK571TzxfIzrjTsRUSWthhzmWVOC5cQzhgG8+UIILlqRnQVFg/GV7DxasVXIWwqBNuQtM5/+0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB1508 X-IncomingHeaderCount: 39 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: BL2FFO11FD044.protection.gbl X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:66.35.236.236;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(336003)(189002)(24454002)(199003)(8676002)(956001)(626004)(50986999)(5660300001)(76176999)(54356999)(81156014)(81166006)(3720700001)(4001350100001)(92616002)(97736004)(92566002)(5009310100001)(86152002)(90366008)(105606002)(106466001)(6070500001)(110136003)(42882006)(189998001)(2950100002)(6666003)(512874002)(6916009)(77096005)(4610100001)(87936001)(83506001)(66066001)(8666005)(7846002)(84326002)(229853002)(86362001)(85426001)(41446006)(2476003)(586003)(3846002)(305945005)(2906002)(68736007)(6116002)(8936002)(9686002)(60046009)(33716001)(4326007)(7736002)(356003)(7099028)(7059030);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR03MB2583;H:sj-itexedge04.altera.priv.altera.com;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:0;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD044;1:tRMbL5/cz2GF7DVROnsk3goaDPjgXjaRkKiaymfh1G8bMmoMXoO1TIWX97aRoVHocqvvJWKPjCiChww3zMVA052Gq92O2Ucu+EWWG8ZFtymQTKe97jCen/eM8gDKrn6szAFGyfn+ZOptbnQKo3Mkw2MNWmdSuWVvntiZTtNptXUrn65FlIzCzes4GCRRQRfzPLBvDolfung+KFfMb3SK+V2T/z4nBU4K7vCCULl+hvoWpNloIgVg/Aln9kwlorwboDXQQ0y9Kpm1Lsa+Ww0zWuS2HrXFpNdTP72kw2toJauyPXIwJPev7cao/vN6yIlONhzYgTIj7HegPElT0JuboHOa7g8pCUwXF9RfhN6P6LfnajgOBD6RHtH+Qv+53PowYlhGl0C8BrHNv9fyjBxGQvuiacTzgJIau63aMRvNtqt/AOnfqjY40v2JuBOyWawANL3aTWLXPzKxdSdT+Ui8ISTxvbGHKAufD8DHQTsiZaq+ChWAO2Kh6LQqiNNZ2ZdOSa/58BinZf3z4eIPApVNqiBELU1QWnh5eXgLhS3ZTehHWQw8qRcTC4JeHw4pdL+pK22+2sQ03777dnRun/9t02yLN/r65XG7i6jZdzDwhAo= X-Microsoft-Exchange-Diagnostics: 1;CY4PR03MB2583;2:cYwX2EVq6NXmAWFUMhlOa2lFfbXBF6h6AeE+8fIM5ADbPsLQm6O5eN/vRJi7zOsXisKr48DHXFzbMMlxlFQVzVHbIZpNGYkLSWkXkka6oYvohBAH3GAxC92MYlmhMxTGcf8aQ1H1cqmUnziXhaV03nPI3g7PjD8XKeDSprR3MVg=;3:csRuGXN7OEGsLkWSL24p3SpJ74H24Fba4HyA8xdANgc7HdKzhPKmcbjfrkUPpsTzjq9tf7ItUqV1LpRI/Ui4jree1M2slBuzjpXno8m3lhunqp2Q6g8BxpYEm4pFg0xQMArTBy0rYdadAFmCXiWc9lixuIWtyM0/e6EA+eR8W9o234UX4fFi6pKFUABlT1gogPTjX0zmbqA3QGCmL12DSR8LSlGrnBkDeGQmYDe/rsZuXz/U7UqUtv8qhjef/dNZ7UH0UmHHWKflROMcQ8nCV3a+1b/hpKUNt6rI6mJ8Qes= X-DkimResult-Test: Failed X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(3002016);SRVR:CY4PR03MB2583; X-Microsoft-Exchange-Diagnostics: 1;CY4PR03MB2583;25:p+Y2BZ/QnbY8JuhEYFPv95A3mqqLRmEBI8frvLgOhdHl81/hYNbm/wbBMrWk1ns90k/MOFoKzdLjRjC79182xFdiMqZ2ohpxl4q4+sn5Z8UiBRyKvnSzNvJOWcIDEwZzlEg29HRdhvUqCi2MGJKkuQK/wcPV77P5lK7sHqdRnRzoPn0bjUylz2eB+H9UPScyj8rz8kohU7Om1Z2v8Sbyilt/w20sNnZsvXbdEV0Qf8HrIUzHxb4Ubg6spGl9VYa+R31KiK3+0CAXcaedFs4Z8DBdi36HsVb5e2v3SS6k3/Sp/Obf2KVNUfooppWOKLTK+Yaxy1pvG1uGY8NRnv2lRupE08OwzNBNyKhuZPGOUqnG60IdqjJd1LjgEY6+URA/379wZL0aP8fVc0OnoEWSrpyvKvfn1rtsoEO3mbSwVJsC2QLfAI8WzWHJ2ZA9YY6juxgoQKz4uammYjd0CPM0Ew==;31:Z8RF9H1Ut785HYq4t62q7UXcPOW78hvmIA7LAJfAC1ELay/0Z4w1EyTokpyrWIGyIyiPLmDKSNIcJisUtiivVEQEhHOzZoTo7HZuyi3Pnc5EkbhNJDIDcsXouBLMzkMdgdobo/5xtQecfUE6NqxXeF9mdPxNM4MI4ubDaBmY+/2UdQDYjMeeZnidm3ncHWZ/qeKowSmTt4ZMFiU5bKaGrAB0S2rHtsHelkpv5hFjf4jMs2fJUP9FbqhF6TvqNch9qoLerlCd4p+BdGG8SGucxxR5R1e3ShRLyfurkLzFMx8= X-Microsoft-Exchange-Diagnostics: 1;CY4PR03MB2583;20:F6y6642hJTYlo4TmTV++FqxTf6y6oq0TaVwJrjqmA2Butu/TNuN9c3ObxNTgGJZiojNT/0ZR3/Zi3nkt4dFmO+50PpD7prZ9RQZWZpixoGiHmnvV4xd9VBq3zdaOJaZFtWJIqHyJZLBXVo3ENHSxJ/F8FS7g3C8AOpDdh2P8D2U=;4:oUUvv2Je7zxrrRRQWLhPrFx/6uRaF8mAqH45kCKfVaboMvweZnr0sBEutFgM5YUxEpYLTTtc3dBz33hp2I5KN17cbrfSAK+t48DNW7AtNQxLoUVGlOyif3DXqy5XmdbRmIibxlSqJPcnYZIi/Zm5Wt9WN4BDxSUkShaAbHemquniRiOgalRyKrMxwZKAkIHsxR2Rc0U2Hozg45Y4jFs8cLjjmqnozlhNkLT6x7uCdL0aDaVWnIYE46CoZDDDJsbvHaSqUS6BDGMTV/Zd6i9EGf6WQVmM5xsHQlnSh/IG6vP/A/6UiDx5KYphzYVmIHpuM9E+VpEbmL4bsgbwDsbMxNXTgA1LgRcCPVsZH0KniNS9aOEKahjRC4hiPj8sO6Ro0jOXUShu37ykh8IvxRQQfR7LSsikKTKiK+6SzEXGqTmPh16v7yzFV4ezKFvdSkMhLDBLuNb605LKBBLEBREozPvIutPX73zDgwHcyAjEb9SrHUybAh2A+vhV5u2l2dZoknKnU5JT2diyxHwp/vXguUmpBYQHzp91n7CvmLDP/52at9e3CuAM7WbzrwiGCPOXMsgLtejOHZ1pP/qAz73wEN14HdHM1y79YUknku/U5sSEgJbw8KPU3vTXp1rG+BCaOlDdR6xHPcQfj0e7mivzryxlbT1bEFtqPw9MfPL7d3mwRfCHtG1vsf+NIoA6QIFq0sCBKM/kfCsTM4Mhlia4MA== X-Forefront-PRVS: 0126A32F74 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR03MB2583;23:secS2knAu7VvJ3bBnAP+E6Bc0G5DP+/giloPs/Cky?= =?us-ascii?Q?0uAE/+vHkOOyCIEZn70q5pGMi/OE4UDXFziMnfF2XzB3PbDjkgs8kvSR/6Mx?= =?us-ascii?Q?zS/9WoKjkny0+OmI9Pe3syx/gd7mO6P69MrFjjMmN9dvfvOz3SbBorJeF4lj?= =?us-ascii?Q?lFcpld9NxjOXO6en+DL/bTOADEBKwJtXYft4hpPFyI8RyPwkttpWRoX/rEHH?= =?us-ascii?Q?6zRCBXNYxhZqL5c5gJczNCCqGCoil4Hn4q8n9pxz6eq9XX6/06w378w5CIjh?= =?us-ascii?Q?IvSIFZWnWjHORaTeKp6ruVjYBZ4BTpp6TC2K0Tx4/eSS+zJCy6XaI/gpsAqw?= =?us-ascii?Q?/80txQ549jtqL8AJ7jr2iUUrB9NtH/QfYAFcBdC/2f3RujOVytqQpdYMNlmO?= =?us-ascii?Q?q83qrsOgr78pW9c6Ap5n1oLcl1wGQd43U+VBgtlhcEKQFj9uJLLkkmIlW+v9?= =?us-ascii?Q?JDwUpKk0ftKpWPXtTFI41K820VsFS3tWlrypeYA4/l2JyLMgH87sTo/tfX6U?= =?us-ascii?Q?jW5qgxVJ2eu6e9SFP3Urni0p4bG00OuBlWvMiDSyAVKcCnQau1K7j8kAjS+U?= =?us-ascii?Q?0VXQgr4ViwToaqTVAAkO0yMFu4LuG2oMz3bGh7T5O29ERI++hMqOocBAgS9+?= =?us-ascii?Q?ks+JSA+O6exVZAleIJ9AZ9J/O4iXQzaIoJwpWaxwbeEGPLbs7wnTte1eiTdR?= =?us-ascii?Q?hN3zBCf0YdGzIzwxKQ8HXfx0oWrT7eCvLMKc99C3Hj5lM6/kjOT3rl9aq7v7?= =?us-ascii?Q?LkvlWZA9gt/9a1HilpshQ1rAe8Js+gIneSHLrW5v3boH18KN7JtzN8GUHoci?= =?us-ascii?Q?zzdYVxvCDg8LWlQPEyRNdl8KeMqQV2W+obCtf5AU5/+enCncQH/OliFrdpQA?= =?us-ascii?Q?vWDNW6AlaWChdImpA2zgHmK1pz+Mj4eOKkFS1awWMVE7pio9gMVrKcsJIX1M?= =?us-ascii?Q?S7gtbOjmhLvhumEmcI7E/dxZM0RwEyj8HmRIkv2ay+yR1osFjh4RlxYqxObs?= =?us-ascii?Q?1E/GxV4BiZ9EK5YluGJ63nUwYh2Sddd07aHv1qlFXQ7n+KWUZePO6oRC6Lj4?= =?us-ascii?Q?P/A+fgTXbJhuW89Qv3ATXJAxKly/9uCL/n+92Gnq/sdDt97Lz+qsyHIql7Ax?= =?us-ascii?Q?Q7lJDU0UOCz3/9f7r6uQZyy5nIWOLD/LefQPlrygoFbNzQOCXzQqmmeWU1RS?= =?us-ascii?Q?QUurGG7pgZZthUFe+CusYNumKrtYl/fiHIqM+YkvZzk0zzXGD0WwJyIdoxfc?= =?us-ascii?Q?dNhNZBFomlYJZnkTprkzxivWGUveEjG0Kf4rh5STCORNqTeYZZsN/UcSDO1K?= =?us-ascii?Q?9BegDdB7TZoLo8jwOVCtb/xMw4NSDoP3fOf5ZWto5zKTbO2n4BAmBEQJHfx2?= =?us-ascii?Q?pezrIjywIGjdqwouVZGnlGhhi8oL634iFvkwNMIqVSDOc6w72U1Bzd/3FT0P?= =?us-ascii?Q?1CrV+oxqupU4jc/+398V8mtN67SvWOB0meCaTlXfBnjsTWLCkxJ8dKEdLWrC?= =?us-ascii?Q?fWYGEtu4DT+CvYaGLmAMyHx3RtGqxjEMfo=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR03MB2583;6:RAdZ02b1mtjLnIgnM11gMgWnhu2YL9htEToqJhpiJGFTESvsXbjCR38uz6EoaUrZrjHa0+xMXOetOfnkRr9l1Z7iTlYIKB09YeU4mV0BjIUzE+1b9WbWvbQ+X0OaTig+ryFTUblFcZqN7TDtvH/BqMN4Iv/4Gd7dcw+HCUs/Vxl9RMbVp3smly15pRH6LSquBF9WE3NpNShrcOE1aZTntHgD8KWBua/ZHPmzNsOM2oKyjrZib8sOl8EKDI1AXfE7KOOVrpGFq67UFu7/gK2Pdy/sYqRUQB+WtgsmaldoY/ap6Th9JXQOrQAuwIpAjMGFvAytmQ4Oo+m580RdUam7K9/wWLzUfXfIGjENidBbWOh/RpJmiexG2Cinoi1fJXkd;5:g0F22YKFt/MupU2rYOcbZ4PDg1QTHGyLCDH6j+Z5WWP2vGNILokb+PnbOFShvM9rcegZiMKhG00KfhVDQjjyX54TWQZXlx8pZsJBx5SDJD96x2G3Hpk9UMuN2HqE3BH0qEPkROwVLQOA0ylWXYNFpgoLa0mFlELQ7qq31gaU5Ks=;24:MKXdflvJ8QJp5l0GcF1OiMKcBXSOS+kyGnkTWxdHZC7bCi33/H0tFi0+FeMLv+3R53iIK9/gbsS4y2p92XDPD6w6vUo5uGkq0tISQONcE8k= X-Microsoft-Exchange-Diagnostics: 1;CY4PR03MB2583;7:K7rJS1BvOCn4jYRUq8y0nuP33+AfEGFWF4PdtrxmTu22srYGVqfuldCFvNBcOQKCOalwVWSap+q/O4qBDr7fGU0ndKdvYy/ywu1zyVZ2vdtoSytN/hQyCj8h6Ty7UDgn91MoHUDJ4mqfmidBnyGahY5L80qXQK+MbbPQtvR8Mmu2qaMJDzvl2stLSYfdMd57As2/Nlbw82UDpmEkQ7bL6dOa0azEm45iWT8C2Tye4bTRQYQ+F8quuMLwEKwTZiJGOJwanU9S63zm3NT+phagYquyYvqrtjs6aP2XCfkwNzzyreqyT+uBkxDkeyS/9m57WKVtNLPLE7SIHOp2WtqtHQ== X-OriginatorOrg: opensource.altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2016 14:01:47.6993 (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.236];Helo=[sj-itexedge04.altera.priv.altera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR03MB2583 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 8013 Lines: 239 --8323329-131224924-1479132096=:2786 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8BIT On Mon, 7 Nov 2016, Moritz Fischer wrote: > Add FPGA capabilities as a way to express the capabilities > of a given FPGA manager. > > Removes code duplication by comparing the low-level driver's > capabilities at the framework level rather than having each driver > check for supported operations in the write_init() callback. > > This allows for extending with additional capabilities, similar > to the the dmaengine framework's implementation. > > Signed-off-by: Moritz Fischer > Cc: Alan Tull > Cc: Michal Simek > Cc: Sören Brinkmann > Cc: linux-kernel@vger.kernel.org > Cc: linux-arm-kernel@lists.infradead.org > --- > > Changes from RFC: > * in the RFC the caps weren't actually stored into the struct fpga_mgr > > Note: > > If people disagree on the typedef being a 'false positive' I can fix > that in a future rev of the patchset. > > Thanks, > > Moritz Hi Moritz, As I said at the Plumbers, I wasn't so sure about replacing 7 lines of code with 70 to reduce code duplication. But it looks useful to me and I guess I'm ok with it. This will need to be rebased onto the current linux-next master since my device tree overlays stuff went in last week. Alan > > --- > drivers/fpga/fpga-mgr.c | 15 ++++++++++++++ > drivers/fpga/socfpga.c | 10 +++++----- > drivers/fpga/zynq-fpga.c | 7 ++++++- > include/linux/fpga/fpga-mgr.h | 46 ++++++++++++++++++++++++++++++++++++++++++- > 4 files changed, 71 insertions(+), 7 deletions(-) > > diff --git a/drivers/fpga/fpga-mgr.c b/drivers/fpga/fpga-mgr.c > index 953dc91..ed57c17 100644 > --- a/drivers/fpga/fpga-mgr.c > +++ b/drivers/fpga/fpga-mgr.c > @@ -49,6 +49,18 @@ int fpga_mgr_buf_load(struct fpga_manager *mgr, u32 flags, const char *buf, > struct device *dev = &mgr->dev; > int ret; > > + if (flags & FPGA_MGR_PARTIAL_RECONFIG && > + !fpga_mgr_has_cap(FPGA_MGR_CAP_PARTIAL_RECONF, mgr->caps)) { > + dev_err(dev, "Partial reconfiguration not supported\n"); > + return -ENOTSUPP; > + } > + > + if (flags & FPGA_MGR_FULL_RECONFIG && > + !fpga_mgr_has_cap(FPGA_MGR_CAP_FULL_RECONF, mgr->caps)) { > + dev_err(dev, "Full reconfiguration not supported\n"); > + return -ENOTSUPP; > + } > + > /* > * Call the low level driver's write_init function. This will do the > * device-specific things to get the FPGA into the state where it is > @@ -245,12 +257,14 @@ EXPORT_SYMBOL_GPL(fpga_mgr_put); > * @dev: fpga manager device from pdev > * @name: fpga manager name > * @mops: pointer to structure of fpga manager ops > + * @caps: fpga manager capabilities > * @priv: fpga manager private data > * > * Return: 0 on success, negative error code otherwise. > */ > int fpga_mgr_register(struct device *dev, const char *name, > const struct fpga_manager_ops *mops, > + fpga_mgr_cap_mask_t caps, > void *priv) > { > struct fpga_manager *mgr; > @@ -282,6 +296,7 @@ int fpga_mgr_register(struct device *dev, const char *name, > mgr->name = name; > mgr->mops = mops; > mgr->priv = priv; > + mgr->caps = caps; > > /* > * Initialize framework state by requesting low level driver read state > diff --git a/drivers/fpga/socfpga.c b/drivers/fpga/socfpga.c > index 27d2ff2..fd9760c 100644 > --- a/drivers/fpga/socfpga.c > +++ b/drivers/fpga/socfpga.c > @@ -413,10 +413,6 @@ static int socfpga_fpga_ops_configure_init(struct fpga_manager *mgr, u32 flags, > struct socfpga_fpga_priv *priv = mgr->priv; > int ret; > > - if (flags & FPGA_MGR_PARTIAL_RECONFIG) { > - dev_err(&mgr->dev, "Partial reconfiguration not supported.\n"); > - return -EINVAL; > - } > /* Steps 1 - 5: Reset the FPGA */ > ret = socfpga_fpga_reset(mgr); > if (ret) > @@ -555,6 +551,7 @@ static int socfpga_fpga_probe(struct platform_device *pdev) > struct device *dev = &pdev->dev; > struct socfpga_fpga_priv *priv; > struct resource *res; > + fpga_mgr_cap_mask_t caps; > int ret; > > priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); > @@ -580,8 +577,11 @@ static int socfpga_fpga_probe(struct platform_device *pdev) > if (ret) > return ret; > > + fpga_mgr_cap_zero(&caps); > + fpga_mgr_cap_set(FPGA_MGR_CAP_FULL_RECONF, caps); > + > return fpga_mgr_register(dev, "Altera SOCFPGA FPGA Manager", > - &socfpga_fpga_ops, priv); > + &socfpga_fpga_ops, caps, priv); > } > > static int socfpga_fpga_remove(struct platform_device *pdev) > diff --git a/drivers/fpga/zynq-fpga.c b/drivers/fpga/zynq-fpga.c > index c2fb412..1d37ff0 100644 > --- a/drivers/fpga/zynq-fpga.c > +++ b/drivers/fpga/zynq-fpga.c > @@ -410,6 +410,7 @@ static int zynq_fpga_probe(struct platform_device *pdev) > struct device *dev = &pdev->dev; > struct zynq_fpga_priv *priv; > struct resource *res; > + fpga_mgr_cap_mask_t caps; > int err; > > priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); > @@ -461,9 +462,13 @@ static int zynq_fpga_probe(struct platform_device *pdev) > zynq_fpga_write(priv, UNLOCK_OFFSET, UNLOCK_MASK); > > clk_disable(priv->clk); > + fpga_mgr_cap_zero(&caps); > + fpga_mgr_cap_set(FPGA_MGR_CAP_FULL_RECONF, caps); > + fpga_mgr_cap_set(FPGA_MGR_CAP_PARTIAL_RECONF, caps); > + > > err = fpga_mgr_register(dev, "Xilinx Zynq FPGA Manager", > - &zynq_fpga_ops, priv); > + &zynq_fpga_ops, caps, priv); > if (err) { > dev_err(dev, "unable to register FPGA manager"); > clk_unprepare(priv->clk); > diff --git a/include/linux/fpga/fpga-mgr.h b/include/linux/fpga/fpga-mgr.h > index 0940bf4..e73429c 100644 > --- a/include/linux/fpga/fpga-mgr.h > +++ b/include/linux/fpga/fpga-mgr.h > @@ -67,6 +67,47 @@ enum fpga_mgr_states { > * FPGA_MGR_PARTIAL_RECONFIG: do partial reconfiguration if supported > */ > #define FPGA_MGR_PARTIAL_RECONFIG BIT(0) > +#define FPGA_MGR_FULL_RECONFIG BIT(1) > + > +enum fpga_mgr_capability { > + FPGA_MGR_CAP_PARTIAL_RECONF, > + FPGA_MGR_CAP_FULL_RECONF, > + > +/* last capability type for creation of the capabilities mask */ > + FPGA_MGR_CAP_END, > +}; > + > +typedef struct { DECLARE_BITMAP(bits, FPGA_MGR_CAP_END); } fpga_mgr_cap_mask_t; > + > +#define fpga_mgr_has_cap(cap, mask) __fpga_mgr_has_cap((cap), &(mask)) > +static inline int __fpga_mgr_has_cap(enum fpga_mgr_capability cap, > + fpga_mgr_cap_mask_t *mask) > +{ > + return test_bit(cap, mask->bits); > +} > + > +#define fpga_mgr_cap_zero(mask) __fpga_mgr_cap_zero(mask) > +static inline void __fpga_mgr_cap_zero(fpga_mgr_cap_mask_t *mask) > +{ > + bitmap_zero(mask->bits, FPGA_MGR_CAP_END); > +} > + > +#define fpga_mgr_cap_clear(cap, mask) __fpga_mgr_cap_clear((cap), &(mask)) > +static inline void __fpga_mgr_cap_clear(enum fpga_mgr_capability cap, > + fpga_mgr_cap_mask_t *mask) > + > +{ > + clear_bit(cap, mask->bits); > +} > + > +#define fpga_mgr_cap_set(cap, mask) __fpga_mgr_cap_set((cap), &(mask)) > +static inline void __fpga_mgr_cap_set(enum fpga_mgr_capability cap, > + fpga_mgr_cap_mask_t *mask) > + > +{ > + set_bit(cap, mask->bits); > +} > + > > /** > * struct fpga_manager_ops - ops for low level fpga manager drivers > @@ -105,6 +146,7 @@ struct fpga_manager { > enum fpga_mgr_states state; > const struct fpga_manager_ops *mops; > void *priv; > + fpga_mgr_cap_mask_t caps; > }; > > #define to_fpga_manager(d) container_of(d, struct fpga_manager, dev) > @@ -120,7 +162,9 @@ struct fpga_manager *of_fpga_mgr_get(struct device_node *node); > void fpga_mgr_put(struct fpga_manager *mgr); > > int fpga_mgr_register(struct device *dev, const char *name, > - const struct fpga_manager_ops *mops, void *priv); > + const struct fpga_manager_ops *mops, > + fpga_mgr_cap_mask_t caps, > + void *priv); > > void fpga_mgr_unregister(struct device *dev); > > -- > 2.10.0 > > --8323329-131224924-1479132096=:2786--