Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752398AbdF3QPf (ORCPT ); Fri, 30 Jun 2017 12:15:35 -0400 Received: from mail-dm2gcc01on0092.outbound.protection.outlook.com ([23.103.201.92]:25541 "EHLO gcc01-dm2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751940AbdF3QP2 (ORCPT ); Fri, 30 Jun 2017 12:15:28 -0400 Authentication-Results: spf=pass (sender IP is 131.225.12.126) smtp.mailfrom=fnal.gov; cern.ch; dkim=none (message not signed) header.d=none;cern.ch; dmarc=pass action=none header.from=fnal.gov; From: Pat Riehecky To: CC: , , , , Pat Riehecky Subject: [PATCH 5/5] drivers/fmc: carrier can program FPGA on registration Date: Fri, 30 Jun 2017 11:15:06 -0500 Message-ID: <05e721ac720e15ff0cafeb068d5d83742507395a.1498838809.git.riehecky@fnal.gov> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: References: X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:131.225.12.126;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(39860400002)(39840400002)(39400400002)(39410400002)(39850400002)(2980300002)(438002)(199003)(189002)(4720700003)(47776003)(6916009)(2950100002)(6666003)(48376002)(7636002)(7596002)(305945005)(356003)(118296001)(50986999)(76176999)(86362001)(106466001)(8676002)(50226002)(54906002)(50466002)(33646002)(8936002)(104016004)(53416004)(38730400002)(107886003)(2351001)(110136004)(6266002)(478600001)(4326008)(189998001)(5660300001)(36756003)(2906002)(5003940100001);DIR:OUT;SFP:1102;SCL:1;SRVR:CY4PR09MB1477;H:smtp-ux-prd4.fnal.gov;FPR:;SPF:Pass;MLV:sfv;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11OLC003;1:ERDHDRTo9oEdzQkvvyo7EtkEyd8DIRluD78jXrbpLD2ON+zM8h0GQp1+wMYHoeg9CsiJYsenJGA6JMgkw7vTHRCz8EoS3i+pEuCZwNpmw2QPjNDgJBnkF1D9E6Un2Idd004gT4RBC3yA7lh4D/7P5D07WV7u/fb194arVT1t6FeNux4q8lT2IZQA5ytS35JmZoTU6qq/G92jWBZONHKJWOe57AXHC2Hdc3noVc4uXYJjDqgHg5y4z4n894T4t2qaoqL6pFaxYAJPZZocQjSuBNIe6+cENTP45YdyZsttu9Cdiw3RihCL2grkXziHwo2RelXiKz5QfjQkwqQC6rC9UpsYFC/ogr8ez+sb3mEsumCkVUiDAJ2aPevFPwuXya0tRIEzrUF5eNd/v8DCqW3REGx6n4ZWrHxZSS/VeKmSa3fIazdKBJSTPs9IZFrMqvmcDluO8VaeK6xlhhUnn8sApy+vcs//yKlLNRTKo6YiHQofDMHY8dtbKaah1NZAE+CfP0eQEKPqbb0HLto2vtMpGE6zEbgun0terPnTsXLi4FwOcNV28zgm3vvaf9Fru5bQzKluVqCI6wRCW6BpHcdIruKG6wx5yeS7/vXVYGKwuUarYUdWISpSYV+GIkPozLhgCo5IJt/0HcauJ+6ja/LnZqdEeMolmWQ7cwS3VPi/TY+IJ7NKbwLcWqpfRGgVc/6Q4RNjW+mpnhJPg87I4j4DMQQRhgPb0VOxDK/hA/i0d5E+XVXwPYbZL96UQQTzG2LsJE/+Y7Ww65yQpzof7dcKndC0aPsnnZvdgCOPaqlyI3dkAjkiL4mRun+9npdHR0o05BE1w8j378DEVJpuq9IDFG0Amqxu3ShSu172gKzVmUbu4uD9+iy82DDBVI1n3PUKENFsfHYZXZ/r3gV+zcVJhtCeyU2z0Cjrj+qeQbtlLLs= MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7b9cf36d-2bc6-4a5c-6e25-08d4bfd337aa X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(8251501002)(2017030254075)(300000503095)(300135400095)(2017052603031)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:CY4PR09MB1477; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR09MB1477;3:kqgPtkSNCKklEAjJ75FWTGFfxBgE25Rr+AzeukD64M?= =?us-ascii?Q?VNCFQl7rsirz3Dp7D6ULlc9OoyEugOqhCyoBwL/I9wcQk2aF8YmwydQzu93h?= =?us-ascii?Q?UMnNmXxCI/reYq3S2etP8ADQNeXfw0PNqmZVPUjs98E+CoLXC1aveo1C/n8/?= =?us-ascii?Q?/MulBSzoHECG1JvqqH484pQI7DAkCAog4ZwkmyqPrJgWYxPbcA9merwC2mmP?= =?us-ascii?Q?+r2RP7lFr3AaqZ5r9XVUD2drN9PaH4XCkeaTRQ7g00gFRWx/JTfDCB6JTQbx?= =?us-ascii?Q?iRXGzI6z6GkEFnlEOyoUhQMbVJ8rDP/6MiyByaUHvVDkZ15j7UVvju8NhLbA?= =?us-ascii?Q?Vsi6QnzW+qJdzOzTL4a/Yjvko7ty2HInOuZIRoWinAgFjZZPiUXZ/KCUmtkI?= =?us-ascii?Q?n88L1/ePd24YM/kN0RXyDTy5aIuuWFAGteH+xcGX2nCFYAjxXeagnVBpyJfv?= =?us-ascii?Q?Dz1Ti+gAQg0Mp4tD1nOAyR5b6yVMCao0fCAlwPHgiSjOFQcZmVmEgxVWaCEY?= =?us-ascii?Q?2dl6t0vq9wu8wfoZVqed5GLLCF6ZdKtBKS3oMXjeVawRATTK5tl0SZlIHEjW?= =?us-ascii?Q?yTjG7khq+2dNICR412gbnbyMKbQjfZD9fg08v60SA1jtE4JXO0CJ0ESYUBWG?= =?us-ascii?Q?Go+a/VZBrIDZZN0y8gfnK8RJ5WeyAbEHgR8J+zEfPdCA9WJYTg7vK2/vkiVa?= =?us-ascii?Q?AJUOpamy2GtL5ALIf6z9ERe59NzWT9EQ2O+cxEEK6+ZX1SuwMwRLk5Zgu+aO?= =?us-ascii?Q?QF0/97Tu1LoJQ9ayE7xpiW3B1t9BaLcWlijRCBxtu6tELXgB4j4XLa0hkht4?= =?us-ascii?Q?K6XHtbAYoBl6xAv1/ZP7sAnKJ46K2WetNQ8qRXBow2ZzU4SQPR20ZrzsRZnz?= =?us-ascii?Q?qt5i3vapf1UFfYlxXrk58CWIxQEoVfYtOnSRw4exD8LLxkrroIDNN9unbk8r?= =?us-ascii?Q?r5D4Ak92yp4PIHMPhxReymUjFhMXNHeNylD5pUjw=3D=3D?= X-MS-TrafficTypeDiagnostic: CY4PR09MB1477:|CY4PR09MB1477: X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;25:KRjF8uSdV2yn06rnSyAvwddwFDYTGwCBB2GHNqGRg5puC51EXjUYbhnFVOWLFq6YncW7oODSgA2TXBZCMY4exhMBiihG92u9PngZxb7/MOSTQWgjV3VMtcauST/HVswkGfAGdIdhkX/FL4ayCMr07NLLVZ61CWlN8h70QU8Pw4IpKo7yyvUqlzkMSkWh1W2+RYjFWMhv/6c2j535ZZO67i5Aana7cbwdoBA4Ybs/PwA7Pcwg05IB+U+gXVH6Mg6hCmfP5Kg7J0GnBuZKMl67Kz9Mz0fOnYOfvKXBKt40/lST9Rojc92lqJLJ3BE5F9JdZ7ELExSwi1+Dy/HkSOeKHITlbUzXgN1r/CVg2OjXKSHnUEWn/3AYsftUZkk0D7VK5TdZORLAKN79T8srftxuYhmMy0Uu7C8ho+YN4bpeZ6VbH0I8IQd1yQwtw2y9ATBcePB+Q4+7+Gsio9e1o31eblDiKCr0vxRbMNpOSB7/VmlTEMzznu50uHqRp6Bu8JnfEPEB3KPHq8XlZ+32G58Pvot9D6NTwGToXxqtvSSlwsE8lDXEHeO3WeK2jXsV8BSkSulBrCjNAE9+LwkGrxSiCtubuDMzSc2r6uef5F1W9IWDxh1O5wsCDqSigHtGstx4x/ja2+rqyA3uH57IfDcDC4Y9b5QN1wT/tBJSrYn/D+43Su0OS1cFw5Uf1mcomNh74MHMrhEkbWFNvlOcn7CTbcvLSDG+5vxClHhRBlu4kNV2AUOxI3LGp+PGhUC6KPqzI6Z5gwZ+Z3xBgNNqI5iYcVF68EMM0pruK5l50TC+B0vBMU7bPFyq1ZEBza36GiE9zNQtk0+q0F3VEXo6Bf83UGbXMHCfgsNdrJu88TvqJwik55PyzPzT68m4ztuZkv1qfJomQSMh0cJUW/6TkDRfBSYrCCzEJ26CNBWDoIS1LYc= X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;31:Dbv5bmGeifWWRVKHrJDzome0pmf4hlj+JUh8vHaW5E6wy1CSDljaXRaCncCIACBZgQ+ipRL7O0LyxGf8CEtkJ7EspOtKnoeVqnJ+IHhCbZ7PKOlA0TC6fpMD5KW2rRJ71F02ywNX/2xW6h//Yl2tl/NxO7SzS+encHgUXpAM+WzrJt+w8lIBiMATN6MHQSW10PdesxhTLF7grC5gEzZl7RfOQoSfYF6tnbaYp5SCxZI9OReMTG7Uvuno3po5vzWKRhntO24nPL3IJD7t0kefheIjwxNxI9LeTYm+v42CbTyGQ9niV0ydfkJEd8SdV9njBd46DsAnGsesXhGIdIOZlrU/p3YxYOlFybA1e+kQSMGm3SXZj3Xk1T2kEVRcBAscMNWA8KS/CqtDCfbIkqSUdA8KNs23d1HVNkgsgQdbRcbJMvoCu9Kp9LN78cZiNv6PnQ50O0aRie04AbDQNvgpt0v6NLIe3t+55SFCfx8hN5iKmP3x5FPB2IEqLF5kddKWLajDUq98UQrWsqbXd0RscvBEZFVR0uHjWWc5nDJ/FamFRzrOcdQgwgRei0fFjfcW0O0xHPzCZUEKm0RO9Pv/csrvGL4GHpbo+E0n6YqRvPsGfUedw6AD7Wbff9V/ij0RMeq+sPG5nB2UIOiHsTWJ95oUdFd29boeP7QgKRy0V9s= X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;20:mcts8xsJ0rykc4+MMQOd2BGlgRMkWNcvLiLIzo/mmG1/kRqV3fV3fEgBa/dNjfdtJno/SVQw7oj9ker09hNLPgXK2kJsbJx0QUdLslgrOCx4kuLSWwGat2qSLTpH4vkqWrDIh6O/Oj9bBiTRbbC8xkAfDy9209iyjU9O/eM/yI+ZOxbZr5WPmwrH69d2NiKQDSq9JqcMsZCJji8Lg2IaKJeMsLvwbv07WuBL1Ly7k0yPxxpwwAANzTTtegVkdpyPIKeooUt1bn91Cj5r8Btx+g/P4drX+LICddr1BzNmLVpcCPSU2BJvDzCNXqHFAc5ou9iqC4Ux5v2LKVjP28oS9btfoJoPSB63TUjoSmSvTFVimuTGigerh/RJCE4/6m1OcP8hQKKjunekkiW/48lsvgIKx9GWIE/iC3TBCNTEgcPylikQ0zfZWWBVZijPDwLLo8MZLDRV+CEQ6XDZUvBzijsqacIss2bmQnNPeQHagybd8DGqv5KNMK5n8QjZtfH5 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(13018025)(8121501046)(5005006)(13016025)(93006095)(93004095)(100000703101)(100105400095)(3002001)(10201501046)(6055026)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR09MB1477;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR09MB1477; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR09MB1477;4:7jdsHkCkmdjKEPhFTuedjzAzNlwydrvu74Nblc7Rin?= =?us-ascii?Q?IBUSTgdv8e2ZuvaX8kBYSenhgvkjx9f5DOj8LoN6Ev/eKip/blfC8R7OqgNB?= =?us-ascii?Q?Oldr+Cc23Eh/zH+sLu2T/EjMacyIO1fTaQTO0XhkPUcMyJ4yq1jfj4V70TLT?= =?us-ascii?Q?RcOl4J6cQIH7aJHrMweVINhlSF1bDV6reWnweH2zd5b4QawUebzoJMRuejEI?= =?us-ascii?Q?hL3vOYi/5H/C/qkbqKzcBy84mqHW03lkiM0/XfeI3WYWqcB76YxlsU7kJYph?= =?us-ascii?Q?Jxdf6LPf+5x6S84lzHuczoyVqNBTjnxs//ilNQNEI5UzQXuhkjWX1/Ti5TNN?= =?us-ascii?Q?KSF+CH5QCwlYsyHiT1zQKZgbCgs3n01lZZSkNr3fT59ojVZioyNIQCvULbyz?= =?us-ascii?Q?amgZ62tBW3D8LJo31dAbuWZgImk34d6CRTS31IQ7sJR8qRYxKigFPuJtA5Ne?= =?us-ascii?Q?DbiyMUsxUBH/g2EMkuLOmmJIzfTl7jydSNyi/LPc5VV57w2+2zmjTiGEJjCZ?= =?us-ascii?Q?2hmz+cbiWq+cosVt2585U7tiqQAJCwPVWGLPlNYqlBx342c3EnWHn7WvHWo9?= =?us-ascii?Q?40uzlA0ZMdGPKmr2yWlO7V9piJh7tYxNFiOJZPJXoEpbO6j3wdPo0U9gBJ5u?= =?us-ascii?Q?xQmyChkafCuNOgjTxWixrt00iPvubbfNG+BTJujQLZ5HPQF84o6Coj8dRWda?= =?us-ascii?Q?vgLLVqDNfAYyH8WipwSf9PwXZ5fyclkFsepZ93VEdovt2tSYhnG7xPCjpJtq?= =?us-ascii?Q?KKLsSMs9tBMPVe3g2lxae5UlWBlYYJsaD1GHz9cjUN2X4REXpkicpOCK1gTj?= =?us-ascii?Q?62wjSZO91XOxDNWlHCYK1a3PBik4WeW18DRX4A6EJGkzxCCwSlGcfZECZl5j?= =?us-ascii?Q?tkXosdl9UjgCGnMZgnqM43oEa8OhncupFeCohUxEevaMpzimow7DyHd3b21n?= =?us-ascii?Q?WSdwwDf0EpGH1egjy+DsjGOeBuLhP1HDTP0J9gulHgws/JyW1j9+kz+DAZZi?= =?us-ascii?Q?kUPPSCw5OMbU8CKSQCh4aAHWzr3IUWghqEGOkibkny9TupDhmKMZFKKBAk0z?= =?us-ascii?Q?B1aKPZVs/0qs97rqGgIjJ3FH6wNDSBLkH3Owy3C43um6/WCu0Q3RL16VzItU?= =?us-ascii?Q?QVmppSPgvhg8FHvWZY0o1gfS9LgPnDr5fY+ds1wT4AtTAySO4p8GCCwueeke?= =?us-ascii?Q?/RI8q2Byhm4gObEkPpcXhTkgBmkQzaUtsQq3olFu8Zl84E/LhiLiLD9mxiY+?= =?us-ascii?Q?kbCp/gcuLqNS49deg=3D?= X-Forefront-PRVS: 0354B4BED2 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR09MB1477;23:LZ0woIvW9e2X9YcKUpms+IjJgtgN9lcYhjGdn4iSs?= =?us-ascii?Q?cPLexOIfJuQ7mGKxEhpeUd6bsFGMdu/sbs6UPYe41jc1DU1AIFa1aMdlihDe?= =?us-ascii?Q?NIRcpv7JhIPJEwwiRThyF8W0DWHEOtXNxxxx47jvMF3RAc2r0pH8ltjo1Um4?= =?us-ascii?Q?rOmhyigHuw0tj/INaFMPKmjfRkQiSH20hu+sB90VisCOWxMU+BPSjEBmP6Pw?= =?us-ascii?Q?68i01ziHyMKFjOFq9vlfX5s3zBVK2p30Pcel0j/TKVk5881LjBEuLqtJdL0N?= =?us-ascii?Q?rf4p2cVOQSLZXaMJt2Bk9wbZW9f4qQ6t/HsgXcXuYgx2HzWqVSY5Znqq9ma7?= =?us-ascii?Q?I3u7kUl0JpnuHY+99+Zoq84tEWE5KgtAhDdeji9S+dgVWp9iVjM+pi9h+HmV?= =?us-ascii?Q?GQqlSA/idut+O9L46vJsDvHajBjXWoOkZUaHIOb8I8DdNO/rXduZJUiXVx4N?= =?us-ascii?Q?cmkoKQ7I9aGzKT/M7TqtuSg6p8uxTeEZo0YPVzFVe4JwoDXbEjZbJGedbUxH?= =?us-ascii?Q?xRFQBtfdBJRjdhsWtRAuvZ2sXlvmTD/xX+JBhw4IsLxtXyps+5fzGXN85Q8y?= =?us-ascii?Q?1ndBnuadPRi3+QDhB6igUK+mSUfwrrjX+Cy0EaCVuSRQcFFp5EdmPkGe7QHp?= =?us-ascii?Q?C+03E6DGEElkhP1e/VlLj9XlvmyuaXsLIB6SZca3C4a+qb3ghcuHg5Py9Mud?= =?us-ascii?Q?gCJGNl1jGis7vY/m97N8C8zT2m1IyQlzpy7zYJFtrX5/0Y4iQT4WvvfYF8FB?= =?us-ascii?Q?SU9UbcrYeIn/Vfn1lF5/WSDIJrXDd6m7V/XWNr/TVrEAmjdPMDP3r/mwcN8S?= =?us-ascii?Q?ihsPz06kEH3jzKarqRJBSrNaufQK8LC583MFja8IWvjXgG3u0HspjoLbWPU3?= =?us-ascii?Q?F0l7sbqKXqelNMQ9h7hEfd8++8Qm8rhfF3Jt1URGEAhGv+uRO1eg3woR5OFp?= =?us-ascii?Q?ztlGD4U4HK7WCEbPUtk8fUHnd23iw5RTKCH8TOReJxwu9RRrjMM90KXadQZ0?= =?us-ascii?Q?tNXjOCts512j+Bj0Ke2kTorFBZzuqauaQtsPaAt10gqJd5GnI8vS5wCz5KGA?= =?us-ascii?Q?VYx3GiF/7Q3K6DPPUtC5T5P7vu+ew5F6qGqEl1yssZT2YJ8me8acoyjWnWCg?= =?us-ascii?Q?L4sR+SLxNc=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR09MB1477;6:jechIEF1YsRcyXY5dV+d6MRhrBHzFIoLSSwYQePKqy?= =?us-ascii?Q?ZMsvWAAbHU0DaNYZKEEL4swVzfbOzkDtwlIkAU7v2UKdNYpZB9SgixrpFdI1?= =?us-ascii?Q?0lGS00ygS0Jwmq8hMJdUEMpYMzeOuKOyx70yf2PSaYsg+90gr9qPQixWNgbQ?= =?us-ascii?Q?XpO/qjXjZatO3TriO07exMpi0bGH1okNP5Upv9dOD23Lsi7ykqYNwHvMQjnb?= =?us-ascii?Q?AkQ+ky77orC9wxgda8NV/V1fAUEqeoY9tdaFtDM6USGEdkiVuFCR7+9LvhYw?= =?us-ascii?Q?E/trd2LdGS0/jGDzoXRqzMOp8zvXWrn2udJ1qzeIbajGt0+5WzpVEV+1C93O?= =?us-ascii?Q?iaZiPESDtYeuHhOxfM4qdiv6tAVoVOYRrcqbm1uNuQ4VxWmKKsj55XYri+3w?= =?us-ascii?Q?Q6hcMd2+wiUHU6GAw0XbUvNBxj/0cTZ7AdRqQYylbg11/D1oo6AqXGdsXCWm?= =?us-ascii?Q?Isy6KEvNbNV+8du/1rRyuVlF7jbRbiQketh3av2J/8n/TNOyeNLhJ4K4kZvy?= =?us-ascii?Q?8ULpdRzEDr9RzdCVMVbWAAjR1pn7BHlChh7a2ZaV1qlBp6eZLQZowhrkf4k7?= =?us-ascii?Q?nrg4/ulI7vvednePmKv1Lct8NBxFBy3SQLKm1wPUICs7isbtiPVtYi+LRBBg?= =?us-ascii?Q?Dbz1f++pzggZHZHOobGitAdIG3RsXn/x1PZuxr/wjLAzpJfbIpjEtHVU68nR?= =?us-ascii?Q?e+276lqr8nL+JlLUlUlau5qOyehXycBmLXe1MLLjU2WQ2qHlip7tW9Xz+rZa?= =?us-ascii?Q?jlbi5Vr2FkLki4Yq+lBQBbD4z/dDbp2AyzjcmQwoKxhcUHgTzZhlsxTYU2SN?= =?us-ascii?Q?eOWSM+Rq1OHEL/isv7ODQk+QY5uLP1h8sR1dh9oX6dxQ6U2S/jWDKyT0ZfkJ?= =?us-ascii?Q?pgI4wNsSYw+xk3HSQAsWtI69qQeg41GcwxCveyEKZeJHz8Yt54qqqlrZj/w0?= =?us-ascii?Q?6rMRr0SEkiV0s4+2Pv9b3sQtsVbT10ta/jP3HjZWcdK3iUwjy31J5OwX/OGr?= =?us-ascii?Q?a90QchHhRX8plGvjKlr/7b?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;5:EWF5yIHZEP1YSDQ/9LSItWhlIwWHCBRy2bnBSla+vsbdGnnRK6sCqahncDR8w/z2RB5cEnZJwKiDGbwNcV3d+hvPLeOHsikscyEzhv/etlIQD74n9PUU6SXDrMbdWFRajLE+4OL5D/QM5Bn7ymm7jnCdRK2b5QVZ2ve/zuyHCxId9ipLAWltMRCrtgqsO8yMs309Z8yxhmpsqQgBtwunee30c5SZ7MFTr10vWZa1cG7wDpxhVdUC99gX2Ot7kc74hPqgb4pqC6MiyViCfH7Ue0IG1gzjBjK5wiiUFVsyrrk+ealwrHPq17BIDfS/h4X5QKmXXEIvjkxMfQibAKoH+Y8mPFpLeNBhJvEnXNdDPIy+hTlgYwoMQRATBM/JoBuX0UE84zidnaUtlcXvy+268U5ljgyoWKPLcv/98tDqClPDlfmX51/slOCFZblu2FtVLhzPzdW4bBltYQ4aDKnbiVwWmyjgABIRaozNO8lKvSGlcvkzlhZOq5/VVBzsUgk2;24:rxmYyN1WZm1ztVdFc1vfVE6V1pRuRrN7CjPp40ecp+3Z46MWFQAG7k/k8SDygGD6G6dPAKmwzfpWhpBh5mox2hpwmqnOeeZd4s1puy+ItGI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR09MB1477;7:prbvJ81UqKufQC+ykjp2t/ADl4pzS2BNcJ9i0eu3eb2SKyVpjC+9TKDEPb9x6v2du4rrnE75Fpn6IKQFxKSv1RYBQdcRSApLT3XPnmwvcbUmamGkq/y14SXLGp9br4Yq++T59HPQIv1kjrxDNlHUY2kYlGNlq3mJgd9dm+X0sF4z36shtTQ9gsmT3HqfbdqF00q1MmLDUWKUuOWFdAD7L8oP7gSLnaHTRfh8hH8NDq9C6MVScxTKRgwvHbND+Nzz08eQBqUnxg+gTYrwmUHG80b154tR1fdl5xA8zTwh4el/5982PQiPKhuHNbVF+XWEC+M9gXvMw3G5cZIm/XjPW35qDRyHY6s4+lA51dvBcP9z6E2UH6KOJm9zXF8cHJ+dB8QxmOr6mkEtdugUnRNseyWkILOp42zYN19LeTXWgSKHDFgVkK3d9akxXMsiYRWoPZbgvi0CI5DC57TX4eonsbrD/CZNUEVbck8QILlrvs4Jrp3YqmC8HCK+yM2mtDpovP4khNpiIwfrH1W/tBveENwWyXR0lBQOyHSZIyYSw2Ani5ksSxYf3mDBkMsQmn/UYi3gt5+KXBm/5kns2e5By6lCJELRuL9mHlbUqnaKC/tHCtJb5eFZyK7GVUFrH10RQS8QXt3YvAf+EKz/eVOzAHHJUQYZF3Vd5nN1DbfsYBGNy18jzADZSb9ut+rlXTo80cRaqtUuYZOYX8iGz7wgITmeDzD23V9sflcDpD+Q4Gt3UqziEPQ2v8+NWBvNzLa9MsrF1d82a1f79at4VjmTrtC8P6QFFc22iW4lvLesFVI= X-OriginatorOrg: fnal.gov X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jun 2017 16:15:25.7911 (UTC) X-MS-Exchange-CrossTenant-Id: 9d5f83d3-d338-4fd3-b1c9-b7d94d70255a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=9d5f83d3-d338-4fd3-b1c9-b7d94d70255a;Ip=[131.225.12.126];Helo=[smtp-ux-prd4.fnal.gov] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR09MB1477 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3308 Lines: 104 The initial FPGA may require programming before it is useful. Signed-off-by: Federico Vaga --- drivers/fmc/fmc-core.c | 18 +++++++++++++++--- drivers/fmc/fmc-sdb.c | 24 ++++++++++++++++++++++++ include/linux/fmc.h | 4 ++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/drivers/fmc/fmc-core.c b/drivers/fmc/fmc-core.c index eabeac0..cec3b8d 100644 --- a/drivers/fmc/fmc-core.c +++ b/drivers/fmc/fmc-core.c @@ -280,6 +280,21 @@ int fmc_device_register_n_gw(struct fmc_device **devs, int n, else dev_set_name(&fmc->dev, "%s-%04x", fmc->mezzanine_name, device_id); + + if (gw) { + /* + * The carrier already know the bitstream to load + * for this set of FMC mezzanines. + */ + ret = fmc->op->reprogram_raw(fmc, NULL, + gw->bitstream, gw->len); + if (ret) { + dev_warn(fmc->hwdev, + "Invalid gateware for FMC mezzanine\n"); + goto out; + } + } + ret = device_add(&fmc->dev); if (ret < 0) { dev_err(fmc->hwdev, "Slot %i: Failed in registering " @@ -300,9 +315,6 @@ int fmc_device_register_n_gw(struct fmc_device **devs, int n, out1: device_del(&fmc->dev); out: - fmc_free_id_info(fmc); - put_device(&fmc->dev); - kfree(devarray); for (i--; i >= 0; i--) { fmc_debug_exit(devs[i]); diff --git a/drivers/fmc/fmc-sdb.c b/drivers/fmc/fmc-sdb.c index 89e37a6..ffdc176 100644 --- a/drivers/fmc/fmc-sdb.c +++ b/drivers/fmc/fmc-sdb.c @@ -127,6 +127,30 @@ int fmc_free_sdb_tree(struct fmc_device *fmc) EXPORT_SYMBOL(fmc_free_sdb_tree); /* This helper calls reprogram and inizialized sdb as well */ +int fmc_reprogram_raw(struct fmc_device *fmc, struct fmc_driver *d, + void *gw, unsigned long len, int sdb_entry) +{ + int ret; + + ret = fmc->op->reprogram_raw(fmc, d, gw, len); + if (ret < 0) + return ret; + if (sdb_entry < 0) + return ret; + + /* We are required to find SDB at a given offset */ + ret = fmc_scan_sdb_tree(fmc, sdb_entry); + if (ret < 0) { + dev_err(&fmc->dev, "Can't find SDB at address 0x%x\n", + sdb_entry); + return -ENODEV; + } + + return 0; +} +EXPORT_SYMBOL(fmc_reprogram_raw); + +/* This helper calls reprogram and inizialized sdb as well */ int fmc_reprogram(struct fmc_device *fmc, struct fmc_driver *d, char *gw, int sdb_entry) { diff --git a/include/linux/fmc.h b/include/linux/fmc.h index b6c73d5..3dc8a1b 100644 --- a/include/linux/fmc.h +++ b/include/linux/fmc.h @@ -132,6 +132,8 @@ struct fmc_operations { uint32_t (*read32)(struct fmc_device *fmc, int offset); void (*write32)(struct fmc_device *fmc, uint32_t value, int offset); int (*validate)(struct fmc_device *fmc, struct fmc_driver *drv); + int (*reprogram_raw)(struct fmc_device *f, struct fmc_driver *d, + void *gw, unsigned long len); int (*reprogram)(struct fmc_device *f, struct fmc_driver *d, char *gw); int (*irq_request)(struct fmc_device *fmc, irq_handler_t h, char *name, int flags); @@ -144,6 +146,8 @@ struct fmc_operations { }; /* Prefer this helper rather than calling of fmc->reprogram directly */ +int fmc_reprogram_raw(struct fmc_device *fmc, struct fmc_driver *d, + void *gw, unsigned long len, int sdb_entry); extern int fmc_reprogram(struct fmc_device *f, struct fmc_driver *d, char *gw, int sdb_entry); -- 1.8.3.1