Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752037AbdGEOXJ (ORCPT ); Wed, 5 Jul 2017 10:23:09 -0400 Received: from mail-cy1gcc01on0133.outbound.protection.outlook.com ([23.103.200.133]:34663 "EHLO gcc01-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751654AbdGEOWb (ORCPT ); Wed, 5 Jul 2017 10:22:31 -0400 Authentication-Results: spf=pass (sender IP is 131.225.12.125) 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 v2 05/05] drivers/fmc: carrier can program FPGA on registration Date: Wed, 5 Jul 2017 09:22:10 -0500 Message-ID: <1499264530-5859-6-git-send-email-riehecky@fnal.gov> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1499264530-5859-1-git-send-email-riehecky@fnal.gov> References: <20170705102713.GA20907@mail.gnudd.com> <1499264530-5859-1-git-send-email-riehecky@fnal.gov> X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:131.225.12.125;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(39400400002)(39450400003)(39410400002)(39840400002)(39850400002)(39860400002)(2980300002)(438002)(189002)(199003)(106466001)(33646002)(110136004)(107886003)(38730400002)(53416004)(2906002)(86362001)(626005)(8676002)(7636002)(356003)(6266002)(189998001)(104016004)(36756003)(2351001)(5003940100001)(48376002)(50226002)(50466002)(478600001)(54906002)(4326008)(8936002)(6666003)(76176999)(50986999)(2950100002)(5660300001)(6916009)(4720700003)(7596002)(305945005)(47776003);DIR:OUT;SFP:1102;SCL:1;SRVR:MWHPR09MB1488;H:smtp-ux-prd3.fnal.gov;FPR:;SPF:Pass;MLV:sfv;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11OLC002;1:NsXB2V1UZJzU36ejiLt5O7wgmeRxP4x0WSE8ZflX8V6J3iV5IXrja7hIIXcV42Gh2GYy/0AnF4pnVNIQnaDH0j6/4gsFetQbh6Xsl9r9HOMIe/+wS3fEkxxdNte6CYzANWb5pgYs5qTOs/X0xow4Rg9iWOfSi/p0BwflW+RBSrmtBCe9tmuukiolNv5YfqModckaUQoUW3Mkq9smkEKoLmvVo7w5mFmZ7unGx+/SMM1ZlVpOR1ZHW/5y14AB55zy/ffG+9sdxOBZ03xFASkkaAn54ku0UmV+vQSmY/EIM3FOWrl1Sn8aSbhcsJtcUvlDHTl7n7+OOWeTNa/p5KNVIIqsGbBXwZIeaqoYY8IJWnQTgG3L5bTodA09Ao/GwudZR7kE4k3wgAoTH+NK6lCLG/ugxzNbKGTIk5Z/HfEb0u7867QdMudt6wrQfHyoKIT8zT3ONjr6wGhRHXJTIjuTtF2bVZlRcuHoY6OUDEYQDK/xm5RnUzJrBpsB0PFNhXHOP599+m4Ku272/EX9qoP0wUFnUKNgltTrn51l6Eb7eM8P8i7ILsX4nM9mzRrVeACkjGltLsNN3nF8+Kk7JxmqLr7I3i2WHilXN9ZRxJHSeZfjCM8v0nmVxkOQZCzetrTWBDxhMqwgPnXWNJkoHcCNVjX89fMlQW+ioKAksXyg1njxxxoxgM7/1U035TG4XM9wyr/z35/06jSy+kx5huTpIaBGWGumYkCf/pQ6qb5mdd4GNJQ/+9o19fy1r6UaUIUleP1HzJyQuqXX3UJB/I165ZgxE68YguHsUVPaUnNeCfP+dp2p2KfoJfb9+o0vWgPi42DGWtoRBTCEcyQZ39N2hZiY2jvFXvwKydojnBbs6A9YogYI5eIRUcHg+g60FSxXc26su3P3EPCInsJKnPt93w== MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 103c7d0a-8371-4fb6-2564-08d4c3b14435 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(8251501002)(2017030254075)(300000503095)(300135400095)(2017052603031)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:MWHPR09MB1488; X-Microsoft-Exchange-Diagnostics: 1;MWHPR09MB1488;3:98yH/OTcpQokHrWmlAa6UljpAusnm06HWQwICuB/AVzWFa1HrIN6CvbjG9wMlRNXYgaK2GgR2kxgR+CPEmWN27Bn6e+XBAObfwBVNpKaU8jKvIlfEZq8Ad+sQ9Aq2esl3rBBGx5Jv9AJSIU6frIjS52yHZa1bMwAid+NF7pjQwCNZQ9IHRQ17lMDOXDUWkkjj8vntOhmWYLeoFWvm870uGyZcoFlD1we+j5qOsx/pZlIDaEOo3MYYM109z06Q9eJm8mZxQgvR/vYS6JLTEfAYyje0J4DnlGb9ECV4TTVaZ86ouDGkcfqK1JJxQVgkzFP3vtsoMOd5UMpy2TagWxKr3kcayPlHYL+VPtgN+Fqe1RP7VZt1+MooIy+dRQvPwPjl7TvC+4tsD7PB2QrTUe2x6J58CQz1q9YqSsZ5109JtvTfP32hR6b8rcDP2NVBnzxKXKoqN7u64ZYuIMaOMm0WGlOgsrE/3piSdpBU+TEpd+D/FOpujnRAE4DTnBBed8Eamk3G72mQdvW9xkE5aQRNeWKJFMB9ALfc22bnQ5YIWKo6zlOc1GUrTmzaldc+OJKC5nsGWzHP+9wdy91IWOStN7zafV3AA18ueAl3txFo3n0sc9qRmAhwe88FEiVW990lHdwoWUHL8/WKXrV3+ff2g3HB0ESzOymcc7rYXbCuKKNeG+XsUmfyK7e3nU4VMT4UQsb168HpHijArpkwWCE3nOS2iKgm6LAH2VvHuFk3uikk6JqynFqvKm1y2a/TJm/KcTYSPjKUy164lCBwddMSGbf6AlQdkOnRr5+NyPzoaxhQOuJTGTSR1WEWCKjElVHMKwVBD85CKyJUPxsm0I8d2MTUbCbabL+w3TJJcRsUKdO7Gt2f80KfqmGwvyfW/yB9Dsit9MCUpZanS83as+bibBOVhDzhPaWTk5eWV0i5rPQTkYf9ETxrdQ7EsyvcQUz X-MS-TrafficTypeDiagnostic: MWHPR09MB1488:|MWHPR09MB1488: X-Microsoft-Exchange-Diagnostics: 1;MWHPR09MB1488;25:PCO0BlSJDKeQvpQs+n4of3bv0/smd47AWVlG7ZhomcR7OI8I1kltb7uQlaDEhNxXMf64941Px4zqPUl+TfVxUI2xNnRPq6seOsJ1jp8U791SM8ecSJdeHPXRA3LOxt0or72GgG9fMygxghW7UTRxLCC/6qbXiIrNkSM+RX/5atXQvns3yW/NozKJWX0MULAIP7Uk4S/uCewBE6nkCBqFBWYYAsqrbtHPB/VEiQ0t/ASwjunaW+p8im8WYSWbN7uCbQcGZQygYmu0LgvRfiWdMm/vh/pnNmPI05of70KkuirhWfKf5rkmMJck6hegqjH2TI6OeF10YxQi52coVUVTuKy2zbaxpsieA+9ZSBsXdJZ5TurESTT0k4OVbqDw9fHnxXiM7Nf6ynGSrYoneEjkSJrzvKfifNb3ARldgugo4zudUNrCkz+Wzihdr34vc+y5LPrv4xfUM2mP9VBrSfDLC5lSBHBoDeI0U/4RCnIHEvX0BcmUXZ4xUDAqZn9LkggaJje41j2NJ7skalCZ0JkJ5gpbnSa0tAO4ixBzZ43txZjNUzgTxp1XTC2De0JgGzkAqy+AXQDE4ExFFaZo4WJlj/GusOLhteusl3ENBjePcvnxNqXTiDKDzuQ8lCDSwkR+tyx6AD11mfzjCb575PyCiN40E8Xmj0GDY4dPEeCVeE8ND9ChWnkw/WGtHkwv7XlzFDsNyUeE65gOv+H5eZCsOdPt0OKGmiWDrNs4cPNNsC42VMEks4PADzlH3CiWi6V2raAU+pUOysr8HN7MqD6hNa7KAlrpetQcdVWOQ6aW5L2pV/zvyO+S2wkALZpJVggI6rJl4zSz3F+t6LYp4LEMaweiwl5vcuobKyKHTNF7mM0wcQe0T0sMP+jkGDSyhGUgXdmhHJkX2toA9N+OV6xV7GvHDOEEKdhR/kamGF0EA9A= X-Microsoft-Exchange-Diagnostics: 1;MWHPR09MB1488;31:h0Mrk9u5wcbiH3HWFbt+Oh0rIhfgvRNRZG7OhOjx8V58iUHrKgpGduw0I2iC+KUPMVia7rpGUKXkSJwhdgiweWMsO67hctoMws3OBVXmshQQCquC9nepS9WsrJY5AgQtI1VTF36IcOfo90/BHwvRPxNWmD9Je1fcNZAYZRiTUA5tFEIenvkijzEOsC8BAldTPHoQbx3PAVP5nB9gGoVLHObCe7kxGMlSnZ+LO6Eys4Gtz00JSuyL2LuSGZFrroOSE/UJTdpQ4P62dd8Mi9rcXHXK+4kMCq30ySCHE98KiktCIrV/1n9I5IigmyUw1bDH2saLk4dZxhiRuiRYL1YP9THzAlYWHAHpMDLSuBKnCf2Cb2YqdNYCrFivxbA8ZW4R09VSP5Oog7jDtSwAk6rUElnrITPN/svfv4t3N3TRsu3bcd5BqJqbOvlh0bn80QcxpiVTTR3oSknZsG5q/na5QIYlVu0gE0XS4Lj/k/SOiojchMy+UbwP56czTPmcSfYgGJlLHV5Yh2oywiu3JNBB519Ie+u7BCdqcIWaAS6SLMeniW8u5gCB142RLClu08hY5posEWasaiG1xeSIL8g04Cs+HHRSXsNezMwPKG4wqaQ0y2GQRmhI4Ld2VKry40075hbw1ZujoT7K6A/6BnDbWWKNMeMIvAJaFUYPB/Mk/QE= X-Microsoft-Exchange-Diagnostics: 1;MWHPR09MB1488;20:YAjomIWNHnRZ4nkNrc0lhuF6pMahF19zEJY+3tUChFOCyOU3hwcQ0A6iBu5GMmi9PhGr/NIWNnROTWna2Soh3IprZz2ehWLJEr/99U8T1/uyHX2pLEeYcpV/uQWcQlv6hadS3H4AawL0OTRfWGGNRTJaNW2OzTSiSJo9AJWCyhzMqLWr+Ju10/eAAwVeB2EoQUvxl+4bpi5BG9F43Xk+EOyL4QtYXmsZrI11MiEDJ4dh8tm6p1kMUUbhZU+6XNO+j/UOwurQzXVJnR/o/JfvW7jxVLDOLipj9i65xVN8q//4v6vg5XkAMzwy5K72k+HLJq0XF4dvax028NOd5/Iv5DZ5+SzLYbkn+t8vWgwScszYV4JxLwK4Rq5kNjA+WQ3Uyt2QxirM7dZha+URaDRwqkgFByC3knEWibSLiH3A22xTQvOO20nRC8t9xAH3swIZIPF01IFpEHkVDC7iAwxXE+aro6BiFGrzTrX+Csmes3X5S8SrKdxx/l4FjH4eQ1G8 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(40475595445134); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(13016025)(13018025)(93006095)(93004095)(3002001)(100000703101)(100105400095)(10201501046)(6055026)(6041248)(20161123555025)(20161123560025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:MWHPR09MB1488;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:MWHPR09MB1488; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR09MB1488;4:gncDvyllJdus4nD17f0IpF1rhaHAXQr2IscYcycB0u?= =?us-ascii?Q?ASiRuR0YR4TlxI9fZYQDDmZv/DScttiLm0eDz+JnUvC2ra1Up/MJQZXzveYh?= =?us-ascii?Q?z+VI1/cSn4txwYTHWVJOKJdZcFTfgGRUxE5uxC69wud9mG8tcywYAhSLqzVD?= =?us-ascii?Q?U81e10z8J/Fr7sEKg8YpfXqdOdIDCytqVFsSCMm85VPTm+DNs77sOXG0uUBl?= =?us-ascii?Q?jPq+HqBvNad1bEAMAQortPkaIOc3VWTVsRS0N7k2age5t5enkscXpXLL9AGL?= =?us-ascii?Q?z7Jy0wGMUtvjAFGvwKc11oWrJo9rfU4YApF/KPtytdIptR9LxpBHRV9G2yF1?= =?us-ascii?Q?8P5CKcR2aEiN1tBUJS6ozMU979zD5KaRu2gI45hjxYRHbwi8iQSFXTtjYuug?= =?us-ascii?Q?bUFRLgsFwjQV/pTxaEqLAdH0oYnak/rdD28AP3zBex5xRcY4jh4BmzzQoakv?= =?us-ascii?Q?MY46XjQ+QohuLP1TSeJTPDxgSVDMkELtSNeJYu17qfaeCGS6NiaOAxMHUTXM?= =?us-ascii?Q?6EYDoXLGOF91kzQ4+lxS/H4J1TJG52mvIc3uQwGa+d5/FhRfIX6KUvE40DTu?= =?us-ascii?Q?AdsSVSFOX6qdXwWcmYSK8f5F6Q/zj6p71XVTRQZsGItFLVYt+ekVII/W0UKG?= =?us-ascii?Q?BF6B4PbNngIRIwqIXwjFOGdTutqzzOnfgjvfCGlY878Ga3yFGAi6jGM0JaSf?= =?us-ascii?Q?9LRBflREjhRwxTnO9QNTr9fbzqUtsHRsgoWMGqX2A/VmxAxG27JjyPndjr0R?= =?us-ascii?Q?UGqwYD8cTDUaItiltRtPBY26c6jFDRdSEWZh5rEIj9B9coVvIC3Go+YdLTEe?= =?us-ascii?Q?YJ8bYOYBboSAZIKCLSfBWYXArVXo9TXFXKZC8ZGKFC5bHmxS9GzZiterrH66?= =?us-ascii?Q?Zj5Yd7rWAWrzZHeKvk07pgwLTFgwUvf4x41SoYp2/VpWoHk8rSGhGUpxtLA3?= =?us-ascii?Q?N6IjEyP65krDi1XrMOJDhIELz8Rw7rsEl9utXSbwEHIc6/GQvMPcraBO3kdj?= =?us-ascii?Q?lHZK/2rfZ+qgdqbf5f2Ofc3JdVzsgtjDsJYsySsJzkLIapgseyNTIQ1AwRAg?= =?us-ascii?Q?O1IsFBdJzFUwpHbMq7suT6SaBrKd9ckG/yFnz1b8MWGioDtb4bltB0lS6qYf?= =?us-ascii?Q?9EI6FotyLy9qGJLgN8DEidDsjhF/yOGFyL1UL5ZWSoL5mGrbXn4yFqERHqQU?= =?us-ascii?Q?QSs6tnJ8h67u3QRpMsDXs6kBzEMKd2ni6ifDKND1iMt+F0h7NOekxPnaPHPl?= =?us-ascii?Q?qVMg81a9wIdkmNFFmn81QAcwWctqJRsFSneWf0sn3OZ+XMIganWHBEjMl/+Q?= =?us-ascii?Q?=3D=3D?= X-Forefront-PRVS: 0359162B6D X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR09MB1488;23:tbncXyc+xoUQMrbZjLGg1G06qUKXMpnpjwYHLGQ3y?= =?us-ascii?Q?bLl3JTHC9WNVIrVfNZisAsPq6I50y6pQCrIpiDf7gzdk5XOXCjEallObrTBg?= =?us-ascii?Q?b7nLu1ctImY8q4Y6g8W203fCJAWGQGm2qveJxQcIGXCBp3tdoLwphZtUUGRQ?= =?us-ascii?Q?UaZ2rn4A/tExT6whBTu1gty71Kc0xNa9PsN0sY/a+CQ57+ik4prdPgsGz/bt?= =?us-ascii?Q?IRstO2hph2vnS77tIeNZ7g8GiZ7e74ruCIusmf7hmu41WYUzye4w9cRw75ip?= =?us-ascii?Q?J3RjUs8Qfos/Tqr42UhqQ/aH9cGT6A9kqFH4yGr9Vi96ylJhp54O+E15J7us?= =?us-ascii?Q?Ovx8M7g/3SP8OhO7nmBbQ3x7Tt3xAq76j0HUvXhD6G/C9IX9RcKQJqtGWWAt?= =?us-ascii?Q?u7rwDQupdxd/VozyG4x2qOw8RKJSM8TYruoG9JrzGRVPX+0O/gCceHBrp08G?= =?us-ascii?Q?tCPzaBq6jpdFNKJ9yBLjJEIcz14duvALQie7DelyZAyZDmNFQH6ThdysNe9H?= =?us-ascii?Q?8Sc+YaoE1xHCwlLvpVTIxswB0Ma/qeCT2ZQcgMMFfIpvE9dHlahTR55Qm1Rk?= =?us-ascii?Q?BMUntK96sHRVeukOUNz1xFtGLXwG+IeuLBQbCwtvQUKoE6a97mTDJqAQvltm?= =?us-ascii?Q?IklZrQxLqDNX+6/3NHJ43wneU/oIM77Pt+wQNM/ZT19pkgBs8/dBnAV36zrW?= =?us-ascii?Q?bymduQFXEO7CZ+MEzoez0g59imDCfFqvgOWgbvVfO8a/FAB5Jph2b5YtLtW2?= =?us-ascii?Q?aEAVxEi4LKr8/nELed0M/JtcLvhZYElP3ywrbbUQ3PSXOjJI4MG6nprHK8zj?= =?us-ascii?Q?nfERqweD1AoVp4M45RjkylwrmsKPJ5z9t4LCGluW2bCVNpSXZabyUHxR31+k?= =?us-ascii?Q?V1nsyF8E7cbIKsd2426+1ygYnVIlFKRRn+R6GCOkyQXdBasXtIhSi5j03772?= =?us-ascii?Q?qBWV2K2TlJalZkgISb60VnQB7lvdx33zNSQPmh4i+Xpi+Y2EQmo++7YK8Ro3?= =?us-ascii?Q?o+vScgyaAYP+YKT20uL8GPZWJTPMl2hXbkktnedXZW86c2xKfKYWMx+9l9IM?= =?us-ascii?Q?ZNa1ifq80+Dh/5I2QB5zHZyCiJtHMjtjS4F7EdzMXTVCIm/VFR8PHONMUEKD?= =?us-ascii?Q?w4mVHjCIIQ4RvYqKILHSo4KUOpAsSTI?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR09MB1488;6:EiIlCRWD+JDR8zXPMIYccS9q1j4kBTQGQexcW5+D5Z?= =?us-ascii?Q?Jw3/hp9JlMrBEEmIlTOhduoGwKwqF8X8gQmElE5sluugT3iwtYwcsLV5U/2e?= =?us-ascii?Q?iuJl7jc3t0bKCH40QmzorD5KGxTFlsOGJ6Frmf45M2hguxhZU+PZr2z3WKDN?= =?us-ascii?Q?HtrKsYRBMhaMX1KAEOSSqW4vXSdB1dFlKKR/uBE1Bmh4iclXhLPs4dyoo3wS?= =?us-ascii?Q?LCvaPiZcC5H5XuP/ePOwT5rp+MHgQ8PDpybf0izsRcS4fkg75+e5gML6wZAp?= =?us-ascii?Q?UGsg7aTppMAzrvfHkgHSjHlDjVLTmmXrTLlHMDPch/gBTes9MZidsbgGjkD0?= =?us-ascii?Q?jRMS7aVPTbIlcGZcMKTJbrHVcaHnRCpLQ08u2EyL/Ozyw41AMAENeOphHtS0?= =?us-ascii?Q?zTssyLgigfvHKJXOp3JpdanbpoGfmIumns+H5kU1Jo5xlLSWFiPBzZtAB3Fr?= =?us-ascii?Q?e/mbs776R16nLLRTEOneaFwNrM7RLveeCWeriJVJMH1DAUOxLkzR6XtkxeUj?= =?us-ascii?Q?c+pfjSLCc3Ze8gdNUYAbMR8yrX0l8sRyhrTJIuFIdx19y3MlA33MBPzjMC1f?= =?us-ascii?Q?ogpANY1UZ3Nft7Vv+3TK0RMUOv9P+EfLtFIr+LxZsCH7Y5tWqJm3repslaNn?= =?us-ascii?Q?8AJN071Nhyd0AY0mHKrcXnPIUbH3eMnoOQ6SvomHnfYw5nlGQo/mX0ib5+OI?= =?us-ascii?Q?lM9fa3EIB1L9KyVIuCBiCqFbgvTG8eArSfHFhHCtpn3nwNkXvfIbnZX8hQ1g?= =?us-ascii?Q?aV/o3YVlxksoH4x3AIaMhmHf0cS/nI6sNO+KSCuFDfoRvh1zCqZQjITjSVDj?= =?us-ascii?Q?W5TNbWrHh80mDEwSCbaQ3RO8uYS4XzbGpFkPB96zghx/uu02G3EULg7ji7Tq?= =?us-ascii?Q?UCbc21ZUWDV/LHTBcmL93AHvFxxCGGuZEk+O/b+26e2Tikk+p7uEENKZa3Q7?= =?us-ascii?Q?B1Fa7xzgT9cvA6tgRPtDSA8Jj/zzVk+/8S3/YxZx2RsKAmUOYNk4QlGNqUSt?= =?us-ascii?Q?Rwoc11nPMKZ07+LrweTs1p?= X-Microsoft-Exchange-Diagnostics: 1;MWHPR09MB1488;5:BzG7W+Jmatrz5obGzGSNpJkyakblryBlwQKealb59beVMPVHtKOnfovZum2iq2LP8K2M7zlvtR9r8/Vjuv2AmEb2mI5P8ry8L1Cr+DH1bvKtJUGcmBZmYXIjzU5rlQ/7cLatOX1oqfxllcX3wGgnmb49pU96d1jZSCP6x4kPsDMlW5pjsuFoaRH0KNrvy2143uGwp89okmhLxaLfuV6OiNJJ45JOTyJUEwq0IouEW7gGpOD46Yxr+3p9SZz1P/oJxuTlZ1ZesnFBAB2H6DhSRxXJTZgPeVTMXGFfPj6RZ/G+6PEy1lJb3SCd0rx8iOU9X7yPWZg4p8pbvWe0G5eC84X1+Cadj1OYw07kRiDMYvjAfzIukeEdoq5pYLwbNdk5WYO71eeyttZoN0y2czi17MfMtCDwmNL6WilkzEjusWYBfadb4EqdflBRw5NNxmqhI/M530fpNTPzA9df6u2qlYbZ+KImiTONrpRWNfgbZmaDM7W9pSYydmq6Z7cDjc6c;24:cadGwILWlZUJXsA2d8IVbcwnkxDWUF1+KbdhIfyZODhh2W89nAwo3Skuc3fFdRco+32KV/zHp/gCVkgAiyRxUIYKNZh5nFXKhg6xdwEpAYc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;MWHPR09MB1488;7:6piOQIDZnocPJPRBr9zumgGJPZQyM6Gq6e5sBXLX0Ik3S5wA3dmYEXCy61wfKP9ibpoqhQbjRHOf2LesDdXaNthOOV5CsxXAuW7NNnWxBs/nx9/p9whlEhxcicgrkyzBt1TuYNO5CwxO961MzjlzJdUq7ruPP9yFU1yNTHupqmXosuFwGRxwL3z/Vfcy3kz3IPM5PWoCY6OBT1h72QUlPjpAjiyqBxA2BI6jfkoEU7yMDJ+oB4RoTqbQ8QvsajkJ6qk+BuRiaVZFgN5J9aKElhB2qkXLiqwtefk+nJ8ci+5QNEG2K7vXW/OKZOMOXrGV2RgqTlsMdbhaopUEkfq++axOvF8wuLpPgYAtYOiPXQNkuUwNmXA/8lXhjz6z6W4VfspFv1DDzhdEpIRTm3cibRIdjpO/aZXEHiGFJBl6b9F3W9tnxH4hKxXmjPEFu1ErTM4ICFuZt0gApdwl/FhoP7w1AFgdSEVbMwFCFfo8NfadPVYTIlboVLDmwK70Bqjme0cd0J9xW+cRBbAJe7mXxajvQz0Q1980dCvYYK3FmmsP9CcUQxEQbcVQShfTTrv9XrSRkyiCUU8ooX3c4BCsnQBfGddxHEGbzZ4ohCRlG+hmvB2gIbqDWQvOChhebiU62H3ysGwK4Kn3ndWLPcsIVb2kyEYG6vcGqzNP7HyYq1r9PIr9s+7GTtenZFj0ZmcCrNoamXJzlLIz1/DZWD6OBt35cfGKf4xAZeiey25G0MjKNBmYsvAoGRd8xvscfSrbbqZgZceu+nIqrorRY8E2KRD8uY9zntjtr/7k2gEATS0= X-OriginatorOrg: fnal.gov X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2017 14:22:28.6263 (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.125];Helo=[smtp-ux-prd3.fnal.gov] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR09MB1488 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3396 Lines: 106 The initial FPGA may require programming before it is useful. From: Federico Vaga Signed-off-by: Federico Vaga Tested-by: Pat Riehecky --- 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