From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752449AbcHHN4e (ORCPT ); Mon, 8 Aug 2016 09:56:34 -0400 Received: from mail-bn3nam01on0051.outbound.protection.outlook.com ([104.47.33.51]:47309 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752187AbcHHN4a (ORCPT ); Mon, 8 Aug 2016 09:56:30 -0400 Authentication-Results: spf=fail (sender IP is 66.35.236.227) smtp.mailfrom=opensource.altera.com; arm.com; dkim=pass (signature was verified) header.d=altera.onmicrosoft.com;arm.com; dmarc=none action=none header.from=opensource.altera.com; Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=tthayer@opensource.altera.com; Reply-To: Subject: Re: [PATCH 2/3] EDAC, altera: Add Arria10 SD-MMC EDAC support References: <1470153381-20517-1-git-send-email-tthayer@opensource.altera.com> <1470153381-20517-3-git-send-email-tthayer@opensource.altera.com> <20160808133615.GA29563@nazgul.tnic> To: Borislav Petkov CC: , , , , , , , , , , , , , , , From: Thor Thayer Message-ID: <4d2b4046-c53c-d2bd-a2b9-dc703202d593@opensource.altera.com> Date: Mon, 8 Aug 2016 09:01:23 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <20160808133615.GA29563@nazgul.tnic> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [64.129.157.38] X-ClientProxiedBy: BLUPR05CA0051.namprd05.prod.outlook.com (10.141.20.21) To BLUPR03MB1476.namprd03.prod.outlook.com (10.163.81.18) X-MS-Office365-Filtering-Correlation-Id: c86f614f-643d-44b0-c8a7-08d3bf93cb1a X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1476;2:nWigYtiC8zdN3+cMzLYBPZCp3E70lxMcglrbAuzSR2vmOzGb4UZu2FK/4bPfI2gldkgiJZZMm6C4WB4HFe/XjKBSndP4qtatqAXgul9485wP8nv5lNr+kBzQ8vKe5QarHO+0h9am9zgOnDblpQz1F4nEjxxY/1UUQUPk8y/e5+6gyunVtQQ0LG96PvYIYmRH;3:alw9vhSfa5bh27RS60zplD53feFlRs/OesBi9LYbPY0E0XCUhd5sGMO5u3BBfoIGOYrjYglZSjY16j1vIBG79ACFib4ywxxNBaTOKU05/az+Pq6YYzu0ncDw3rMy4Y0/ X-Microsoft-Antispam-Untrusted: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB1476; X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1476;25:P6Cy9eI9574Eg/2iVIm5hax89H7A6WCErj+GSJu9trDzKge6VrF157U0Lcrd7jFT8U5Ce6sDfYJX849Eh23W71ciomB9WFaf/RSvKCR9u9j4J3sWGiqmPW/VrRH57YvDGD5IL1No/mpxnp4kywN3+7W2T0oOlQNUa4eZXhz+TqqyM9sbulMp1csOnEqQERkylpMwmsq1rnhBZkM02R3jvo503nCbDFw+kcAI3Pc66dEGX1MabBeleaXXmk4CVNUk30lRqbLY6j+lNx8FKBRwz8gcrIsfwCv388N6zw7rsRDXDfyiWoXYvETiPY/A3/6+QsOEQY8cUS/Y4eaLzIfXryNbZzzL6TTG1tfMHr36HRE+paFhT6+HwmAhvZz7WKelJ/wy7pmjCM/yuod7sd2FkpbQ7/yml4sQSPUzbeNzlUHgLTi9424gkSYS1bJ+kb4CHnuK5SSQwuKzn+it230NAkRtXe4E794bxfbUrwb7mfrEAF/7pIKsTZTfYuVzJqTbGLXX65TH1DIsg9mWtCH6rFgLzhA9AlhN9mbsapxeyLaFVI+XMSLuFRUVVFUkUvKoSjeNjPQHeEj2bV3WWNZdWWhtxauZkgISpDUTvP7gYc9pXU8y5LpOIpfnIma783FudSCun5XC7QYdY/ZxZqennq/kZs6398cszWsrMGfPFQUI9VLKiSrTwr2dGvAj8ewMQ+lapd6TMtRtFV7gwLkke5ewhgY3QwSG0V1jJ5b/Vak= X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1476;31:2bjQF/3jjpcUTYPLbOmdzFwVT6iluDsAWFuKo+CFj3kZo+3CxY1QSlQtICCCPURtvYMWbaVK0V7wrIDZfrYjyoHAUtwalIbPof0Mdlm0uZz17fbi787u/xrHZDu9tCMVHluCK2ym8K2WMgrdyAtWB/yccNPW+UJ+tvTdUdvbQfjDjUnEuxl10SL78EL+q1N3VkZ7XVyyGaOnOHnqeYGxFXM7X4PNcWLphgpEZ0MEa0E=;20:yAqKTASIbJWDSz8yblSqovr83QqEcxl2HMzLCBpnyYNdeabX2rqppV4DXyJ7LdLK9EQGNplLr78Ms7TAv8PX/d6/hwxUs/JcAuiD/QLeASyKmZ7CcbgCVKg5uyGWoduRB0uDQG7zwfQ81TR5qgjRAubKlAggHSuprD9s2M6Ln4k=;4:bFNVsSHAf89xRffRLHuaDDjmMjwGe2gJ0Z7Fp+0zXdHWC4292f1xMinqqnvFSOSgg58v3RPWXWdIG/YrKoY85nxvCNSuRGDkj0U0eWNXkSdzYeOHv0Jchs4Cn7FbJGdJAg7r3b3Wy6EhRfXePfQE8F10eD5u9wUL8BvFHmCA9xSCCsxweA2hOwc2LBNspn+3nEIqeEjq9EhMqmNDfoAkBx+ApI4aM+MzkRDG6w7+EyXoT/1WPZ3sqP1gKP05tsPx3FEaL/PKPzjeWAjGNrJkQbq+talGBIAeYC5BVMCxSluUplu4fSfZwvIfX1jg7YgtIZ34ooWG3jeKs19OFgp1//Q0dkNkGrcSBSXGVfqdBw7fTp2ZVyLwBiCF/mEi/5sUJyi9+K7/rqRQZO/YsDHgzfJPlKd7TtUoeVl/fgGHjYcwm54f5LeciDOcOfue+Nle X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(80048183373757);UriScan:(80048183373757); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:BLUPR03MB1476;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB1476;BCL:0;PCL:0;RULEID:(601004)(2401047)(13023025)(13024025)(13015025)(13018025)(13017025)(5005006)(8121501046)(3002001)(10201501046)(6055026);SRVR:BN6PR03MB2707;BCL:0;PCL:0;RULEID:;SRVR:BN6PR03MB2707; X-Forefront-PRVS: 00286C0CA6 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(6049001)(7916002)(189002)(199003)(377454003)(24454002)(7846002)(4326007)(7736002)(305945005)(43066003)(50466002)(31686004)(83506001)(64126003)(101416001)(54356999)(53806999)(97736004)(3846002)(6116002)(8676002)(81166006)(2906002)(50986999)(76176999)(68736007)(19580395003)(81156014)(7416002)(4001350100001)(19580405001)(2950100001)(66066001)(65806001)(42186005)(189998001)(3450700001)(110136002)(586003)(86362001)(31696002)(230700001)(105586002)(23676002)(33646002)(47776003)(65956001)(106356001)(77096005)(65826006)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR03MB1476;H:[137.57.160.203];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:0;LANG:en; X-Microsoft-Exchange-Diagnostics-untrusted: =?utf-8?B?MTtCTFVQUjAzTUIxNDc2OzIzOnArbWJaL1RvbjkzVWtiQ0NQRDVYK21UZHlh?= =?utf-8?B?Z1Exb3duR015ek1jYS9GdFZqV1J6TXRUeWx6Q2ZsWjM5S3N1MTdmbThjT2k5?= =?utf-8?B?QnJPTTB4RnZrYU9hRG5HWjY5WnJkWGtCVTZ2ZjdMK0tMKzl4Z2lNZlRTL2x6?= =?utf-8?B?bDZ4Y1d6eUFrZmlXUEp4VWpTdEkyeWIvbG1nVXFxV1VIc25NOFZIUE1ZSHZa?= =?utf-8?B?bDBWck9NS3pkOTZPdFlJcFlMRm9MbjFyelhpZUs1UHR4a0tkbUp1UXhWaVlo?= =?utf-8?B?VFhZTmphZ3ZMZjl2UW4wbVJrQUtqT3lxK1YwYjdYd0JQdWhZcy9WSXduQ0dk?= =?utf-8?B?RFdObVlKM1JJNE5iUG1uR2QvQnUrVUFpM1lkcUswSWR5OHV4QVplQVF3a0ht?= =?utf-8?B?aGwwT1hmQ2t3TE5SeTRBUWYycGdScFNMMjZVSzRVd2tpVXM0OENDODNpVmJq?= =?utf-8?B?aE9zZzJNTVpzcVZnNTlLNnpETU14TjU0SFZBZzBsNEpVRFN2NXQzT3Q1ME94?= =?utf-8?B?c1pSaFc4bjRyUjhYMjl1TkhORkNLZ2pjZnA5T2VIbFBMdU1UdEs3K2JXTzU5?= =?utf-8?B?MDR2UGc1TUdrU2VUNWdsWUhMbWYyMUdQQi9NcFFtZXF6ckltejZyRkx0Q2w1?= =?utf-8?B?T0sybE1iZERNc1RHS2RGTHlOWEYyZWJ0NFR1K095eEVWdDUzVW4vNldMelZh?= =?utf-8?B?SDFKcEZ2WmwrVjVPcUtGdjlHOENRbDFYNWF0TEN6RzBnWngzalcxMGVacEFq?= =?utf-8?B?NTBVeWhaeVNweWlJRWJzeFhqZ09HaHk2dS8yTW5wc3dwQUVmczVXejlyaEx5?= =?utf-8?B?UEU1cVlXODZrNHRaWklXNlVHcXlScjRFZkdvQVFwcFpSYkR6OVZ1ODhDVzBR?= =?utf-8?B?Q3hjNmI3eEkvVGpYZW5YeGM1a0Y2dVpiYTN1WDcvZFUzSjkwaG9PMjJSd0pV?= =?utf-8?B?NFNqU3QxTG5nclVhaGZYbnBPYU5lK2lYV3p6RjExekF3TFJzdFdYU3c1SFNu?= =?utf-8?B?c2UzanhJSzF4c0lWUU1ITGN5c3lkZjdsSk9aSHJDZ0lFRFU0NkVHWC92V1RU?= =?utf-8?B?Z2JMWllaRktFakVDV0tZVmJkb0hJdVE2czJaRDMwZnkzd296ZFkzOWdhdzhX?= =?utf-8?B?eWpaTzF2c3pnbjBzWDNGcTh3K0F2VjhIWkw1RVpzQXptaHM5am9HelhVTWti?= =?utf-8?B?RnVJd1U3YklQcGpmbVl2UEtKTGVONzhmSGNOVFZRSklFMlJYSVZlL1Z6Y084?= =?utf-8?B?SE5tWDNWRTFzY2VkY3hPVGFjaCtqQWswOG4vMGE2U3JPd0U5eHNRaDJkNlpk?= =?utf-8?B?Z3NjOFRDR25PNHQzS0JOYVRJZVY5WDQ2MzhUZlV3enRocEplY1dlNWZwTG9F?= =?utf-8?B?aWcyZ1dlZlhVOHJlUHRDeStsdFNjTXBKRFFhaENVU1FrUTNhNlJaMTVQUG9h?= =?utf-8?B?RDRFR0NxKytuN29PVWE3ZFd6Y25KcFJxY3V6Z1kzL0c3eS9vaG1PM3RmSzBE?= =?utf-8?B?WTNIRWhvY2lZVUJKanIrVnpGZ1JWM2U3K3Y5cFBpbVB4ODNjUm4rOUt2azlL?= =?utf-8?B?RHdjRVRadlQ0YmFJNDBRUWlBN0F4RTQ2dW85L25LVDlES2x0N1NjL1JzbTk2?= =?utf-8?B?eWFFajU4aVFHK0xOS2lWdUMxRXhuMFNkTk9WNUhnWnpJcFNKK1BlRXhtM1pw?= =?utf-8?B?YUF1cmZHV1NnWDg5M0N2S1B5WEUva29KUGJTbFV0bmZBRW1Nc3RIaDByMWh2?= =?utf-8?B?c2JYdmZsK0F3cm02algydz09?= X-Microsoft-Exchange-Diagnostics-untrusted: 1;BLUPR03MB1476;6:0nD2xLVPzvphEndXxKwEdzr2pzRBWdZU2u4uynzb6922+y0ELvZAHPiD55cAU1ithenrIs2u8sABCwAF8D2HH+fvO5W0vyo4Gs+vjX1/Z1kmRftuwLGz88D9t5zaoHlON6kBjDiNmjm0StDnwl1HTSarCECaNKvnfDDlMX3ZiRjlIuWbIlRz39Fe9oDCvI+8DJOOLuHyVl5kVAqm6a6yZMGTgDZSci0zi1jGYOyiHYpGRyBmlk/CEP4X4k0XNVLhiJOW5rRUgarLKf3vmzznKyqEP69DbA4bl4kqk38S3KA6UzCXvG08uDw//wllqf0FFwSapWLpMmSFS6VtnHO/jw==;5:R42E/WHbThq4fLQT3nrZ68pyn3x+8s4HTKsg7Z5jOXMHt9RB8Eql7wN3xLtoCq3b4pIpQWAwFIvddNQrr1dneRZZHiNDx1uRWaajWlYVZRWEDhmvbDpYQuy7y6fGhs80WmyAkQSTDdGw7DVAzuWX+g==;24:PC+QtixmGdd39CjLAgZDoSet7oJOGIhVRxjRbJSrxjdptdH3Jpo0GlNUvD96/ysrj6TxV2ffsBJXYoUK9yT/zfRUPVkTYCN4VH89E3ZCfLg=;7:uDgZAe3T9tYeNZ8zjvJY2b4u+k514O3hvkG2V5VOSFInmX6ZwUHbO7b6KeJMxpl1IkJOjj0MSA4bGtu4DbAlAjMUCjqBI/7Q6c5cQhE9quqgYY4bj//by/FeNj2F1Oh+WIZofoZJLeSDgDqPf2DmUQBb8/JzB8of7MdHhzqdWb6pYjgy1p1S5aOYJvJZ3pq0mShSN/M/8hPyTUjm58g7YAiam2bSeX56Sszd0/tpogB1Vx7z9vwx1F8DCS1OvxMh SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB1476 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: BN1AFFO11FD047.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)(1109001)(1110001)(3190300001)(339900001)(24454002)(189002)(377454003)(199003)(7416002)(2906002)(356003)(50986999)(956001)(8936002)(90366008)(2950100001)(4326007)(85426001)(110136002)(83506001)(106466001)(19580405001)(19580395003)(33646002)(31696002)(305945005)(43066003)(54356999)(7846002)(7736002)(4001350100001)(53806999)(6070500001)(97736004)(189998001)(76176999)(3450700001)(86362001)(81156014)(586003)(77096005)(64126003)(81166006)(105606002)(3720700001)(87936001)(8676002)(68736007)(16796002)(23676002)(66066001)(65806001)(65956001)(50466002)(31686004)(47776003)(230700001)(6116002)(3846002)(7099028)(65826006)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR03MB2707;H:sj-itexedge03.altera.priv.altera.com;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:0;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD047;1:buqYM7rWMWiNbW70+YUP+zT9we/Evon8VNHn+BTOlrUVp4HpRO/vDrhzRB3XM8e88dFU5PvQZL3OmZQe5g0u5hFAE4Lz/SQvexnhlogAOYb0ugjnX2VccRZHltU9Lb97zHlRL8phZGtPTQPg/JHjpCzfFby7KHu9RT8i6Bem4skumPkDJ8ZW3CuBONxtpD68JlMpyYGAvak2YTlYq6clcBnuPkJJAeGdXEKUd/+6UpcuPDqqn2HLcvrmcAkD9leoV9/S5Wq0OSdSt2osRZDSq+1cJ/xIg+Vvh9H0WMbzMulVa1kcPDtdQZJGrR+XFk6O7BWNh2Kkq4w9n7RtL+dih3ODL8Fi9p3GS1Efo+uBgRf8bL5rBH+h7irgQ/7DDGAlZz8+tmdzeOK8UFl4+4zswrFKYZRXJ2Klvaa4oLsDXMdaEOGsjxnzMQjdWv7/Pz55EWjAwMsp0+HeiBpzxUUV2XPbuzlpO4AFc4sMID5sL0LUSCUevghM3bdNf6+jNU8nijLm5M4AiQi5YAHKRtDJ5Pqg4vRZmqtTYfTrYIsrmXlKPAqxfMng1Ye0MyfHtofep86uWW+FzDMHblWIMALbxJquMvdM4yTJ+rFmVsZhAORLT/qJ3gKW5Bed5NnmmhUz X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2707;2:CykejVShrGIUx0cFxieamBVXLug3/+I75D1thJaohUnkp9J7C7NpkZxYQkgKIzSXfI1kXCgCi1XkcDA176ssOpzPzWD1z+jRy8s6V9clDyA3GFBwTDZ4OSwAhz5kHkKmQth2eDnRIHTqRb0VqS9kveCqg7dZvIsLpvcqfCI2a0al2Brw1i7Bb7w6aHg//SWp;3:/LZlduSp41kHuTHQAr+mkaduXdhIOGYrZDWgURSOlr6CkCBHuWmAzEnqOQjtg8n/z9hf/P24nh5+J0xJ6nMQFL6A7WkfUrmwGrVxan1ISPEClMK9k2fzjftvjdAm7wihbJxp3Aq4mR4oZ7uvi9cKtCMU6ic6dYeQtOI/0w0QtYH+AdKoL6+5a8JIE4TBNp433g1F8V9ZVixWtIocLeVB+2sSjHZ/8p4dRkasSEgQoHtzugCgoj3J3kSg6h1RcAfA X-DkimResult-Test: Passed X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(3001016);SRVR:BN6PR03MB2707; X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2707;25:e6gujRRdnRD31zcezG69ylFx7gJI9tHmJ6nPQApaHN90ZDyS0mQu4ZuFQCGuRUY/lpaS+7H97LWie/63aQkFthpugUk7hqwu72+WiRWSgyTLxN7DScoWqKmJKhXh+Kb2u3ub9yRf3m95mc1KSGg/mYQucM36fBrEemlt8KqyxvXPqx40GJcMaenRDWqLUa1WS3fhyh+LClbC29ZoE1yNP0g5o9Z7VFwUqPR6KKo/VjT5fZJ3MI9qN4SnHaDcKfyj6GaoXZvXSjsLiMLUzbTBEx+W82JuutIPqUk1w1MjtIpe6ZMhNlrduwa6S7g91tSFFSdFw4i7zMypLDdq0xzJI89ZjvxV9tpfz2ZeoKs3S1ildtf1fud+tdzVWgQ4BbL9pZGpVhCxqTRqrGDjrzF9V5RWyxZc8oz13C8URZvnxt1StdHxo3jOdT+BexNgnibwlEVPc8ALBmaTRWplH0ZJbnqVlce4mFCvZEJ6xj05jeDf8hWEVS391qMZcM+p4PrJiQ3L8JUCTpZBTLWYFgULddpCXZ0ZTbrDHOK2nvM31hQ2b2hw5u5uYWgUiYjOU5gQu9tQ64nmLDs3bsSBOTX1FpqZS3ctpr7lABOqwUaDFz39xawy28RAqZGIIElGuEBqnbfglBjGrhKTM2+e69c7nviVnzzXOVZB2sJYyqY4GHthaweXW83CWRdxWtat0g34kUxzizFEPO5Oo0ypKDgEdM8SVycr9SRU87e+4jyssz5T8PCOyDsk300q4T0Zw4Qs X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2707;31:ZgzSJ8MBN2qLwYCdDeHdExAg1/MZNq4Wyn2LyAAnGmWlYhPAngwXh5fUHCpRyr60ZX1Glhn4A7Wlb+NtskAkWMVkdFIITmbQ8Mz4B4YcpwfmNrJVABNddZapkHiZT35tSyYIDo4b6BTy+6KA6gKlzTMkelC9IJ5maWGYlYyF6mwhdXJ6Y196ouND/s2auF4AibYCru7h/A1I9p09yfRq3+UFM9c5bt/xhheG/5pDQNw=;20:xuYnrVnMu+UGDD2zGh0WDWvCGVOXxEEmug/CoYCIl2195mnHU51ivcfW9FJEjlwc/dkgo8SgmFN+p92+tmivtjTxWiTA/Zi3a3RPw9MhnZWFP7hyISmsSGjvlY2jAypHfGRn3761vnc9PLE9Vb1ghf2Z4p4fplNP4+9F2n5Wg5A=;4:2qsaVzxZQSWLQPOStp1Pv5rPozyPx0SjvOsLm6pZKkKIDn9Uj8Q5CbAQfFZQxuBxGGo6MGYdHfKT1cumSuTI0zUDL+Pb2D2r6VaVbaVWtdrxl5eqqKm8GZVum3pvn6G9/9vl7E1bE7/7P6B9h8hITkTBT95N4kJWDzSzNvh62CXExBN3CpLcrf5PHghY9kBSPeOzlkxyoRxQoyVwNxdQ2XN86oja0hhNiz1fEfi5EJEHo6ZPGIUr9zSgaZQqmm8i6L6x/Bg1C01HAlPCNV6nUCxOlTLphdAoX7afNUPzTk5eMKsTv985XL41x2vMfH7o4L/2BVBVuZcQJttbfKS9m1zan/wsH8GZ7zY/My0vI4cj+j6IIMAchMA2RVOooTca27igjalhPgAqzLKAYHD7RthsLll0VyjUbdBwO3wRjWA+A2hLH6PTo32Pw9hpMbkySljtuW1t9UVKnEwOB5XJ0KCTs9EK9xrMkZlYeuZbXRd4GUf6zoo+VO8OFlc6syz+MfqF4iy6UZHFyNKOnLNhlw== X-Forefront-PRVS: 00286C0CA6 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTjZQUjAzTUIyNzA3OzIzOk5YMlpJMC9PdHBxcTlQekxIMXRMQTVVYU1t?= =?utf-8?B?TUNzVDE2ZFpaaGNNdGtuSExHbk1kZnNKdGJtOFpXalFGRVI3Y2tZZko2TzBL?= =?utf-8?B?NWpNNndNR2dRcUZzai9tSC83WkdGZmxCRlI0OHFjYmIyMU5LYzEyTUVZbmFB?= =?utf-8?B?eTQ2ekJlazIyRGdzMDZpSWhDSjltOHhhcTY3OENEYlBsUUYyODJUUFlVY0VX?= =?utf-8?B?ZzYwQTlFMDZlWElBQVlYUkhSdThpdFh3cVB3RFdPUkVyd043MVpvTW40TmQ0?= =?utf-8?B?cjllcklYV3g0VDF3Qk5NTVl2Q0hTNy9LcGJLTG5xV21aTUJFbHN2UnlkeFZ5?= =?utf-8?B?ektSTGVTWnRFRnpOM3NNZDlROUdHMUFlczgzc0d6aVFJSmxVQjhSMWNrQUxz?= =?utf-8?B?d3BKeFRpYWxTWUhCZlgyM1VlZTJtMzY2NGNLcnNDR21TdEQrSkZBc01INHE0?= =?utf-8?B?Y0VsWG1GakEveXY3RDBXYzRscCsrL2NVRTZCRFE1bm5aZGNBL3JROENvWm4z?= =?utf-8?B?Z0dxTzk4Y0JzV3RXRFVNa2NNcGRLUUloT1ozVmhEQnBYMjdaRE5vaHdwZzJW?= =?utf-8?B?R0s3QUc0Rm45c0EySTBqOFduNzdEeVMwcVAvdzI1T0RQZE5nQ0lMdy9iY1Zn?= =?utf-8?B?SnpwUC9HTmd1aWUrTnBqUGpiREtUZ0huaUp6UjdETGJJUWlJa3BXM21LUU1s?= =?utf-8?B?SVErR3BJbklRSmw4RjA1bGdTbmJVbjJKNDVBYnpEa0JPc01tenY4emQ0U3Js?= =?utf-8?B?bUNwTG9EeUl3REEzWTlZdEgvVlZZT1BWb2FPcHpqMDMvaXN5NWptVEVMVnow?= =?utf-8?B?TFp6eDJMQjZrSWtiaG9iNzlCR2E0TDNRV0gvTU5vQWtOaTZ2N0IvNW9hOFJw?= =?utf-8?B?T1FSNHVOM2hLdTZ5UEFtSkMyTWtsMDVqYnBDN3NwU1VCQlRUaFUzSkY2YXQ0?= =?utf-8?B?YTlyQnU1bEFocmpNYWNWeml1WXkyMkdTMlQ2dXdlNEtMU1E1RDhIYUN4Q3Fk?= =?utf-8?B?QmxtL2lBZGtoMElnVHZCd0x3YmdjcGFKdHZHc0JzLzYyTHMvUmxodVV1QVZ6?= =?utf-8?B?cjRXa05ySjlhL3dVMXdxNmVBV1psajgrQWo1SHcrdUJrZ01xM2RwcGJCUmtN?= =?utf-8?B?VGQrTS9FOFRTeUtMaVU2SHkvZ3dpY0pUYlcxMjk1Ynk5TnFBZHlNZEIvVjlv?= =?utf-8?B?dHBxUm8zWlg3UlFTNW5DZWNyWTVVYmN1VVB3MGFMMFpGako1cHU4MStZT01h?= =?utf-8?B?Uy9JM2w5aHZSR3ZOWTFnSC9aT1FraXh2dXBTRUdid1RuUkFyTmV4aUtDU3Mv?= =?utf-8?B?RXd0L29rWjBKbURybktCZ2twSnVxNVZFRWlycFExNnBtdDB5KzJueUdrOUJP?= =?utf-8?B?SkYvZjJ1RVZRUzRmWUZTeEcvd0EyOFdNOEpHazhzbzZCU0JGbHIwOXYzNGFo?= =?utf-8?B?Q0FjWkNsSHZkMFgyZjg3YnREdWFWc0NadnZLWjRkNkVxNkg1ZldlNVQwMm5s?= =?utf-8?B?ODQ5bVdsSFBkV0FhR3Y3V0FTQlMrWEJ4UHY2ajU3emJEZmhTZVhGeXNFL2JC?= =?utf-8?B?ZzVFN0xEekU1V3EwdG5adzREVHJqcWlUMkFOcnV0TXJMaUEybFZwT01FdnlY?= =?utf-8?B?OWVPRi81WnQrbE5QM0gxenFRMHhnRmQ1U1dVRWFGb09YNEUwNS9wcEUzTE1V?= =?utf-8?B?aU1oNFNEZG5HWHpqK3RGSXdjQ0E2VTdiQ1dqeTN6WDNLanU1emg3RmhzdjJI?= =?utf-8?B?eUpLcmNBa3I0KzhQa1I1blE2WFNtRkxHYnlqM3NNRTdjcjRHRUgzVis1L2gw?= =?utf-8?B?dWJDU2JjdzVETG9CR2w1MWZtSnhZdlVDbU04cXFWWWg3NXJWbWxJTThOL0l2?= =?utf-8?B?ZG1tWXRJYVRidHBXZ0Y0MkkvNjNMNURKbjhPUzZGd21vRlF0TmFxREhBNU1m?= =?utf-8?B?bHhhZDljbGhwdGMwM0hTRzFMTlQyeUtySkRCN2oxU0twQkVpU2FaZVFFYnM3?= =?utf-8?B?S3hRKzIzVXlCT3JaOUlJZlRHUHJXdm1PUHV0WXVQNllMb3pnd2hETDdkOTRP?= =?utf-8?Q?s+rhpXmBLiG6zkc2Qs+5TMyeh?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR03MB2707;6:X2L3X7Tb+Ard9E0Ro6cIN3oREsFZXo3LwottzeuPun13D2JYLldqWeW0xqu1eUYW5ZR+GqgC+TY4u4/C+cfE5XunAdl6unoxb8VzO/CNIhmLyxCT+Kr4KwGEiOVxKrBWj772d933bzJXJYaokojWrap4BrhIJozBaVF4bVeGOUx+9o1y32pbi6MEe9x+J/MfB5dhgH52rNfXmW8+TyHaZ5breaZ1oO7X8iwzo3iuWsAv5yxj5kTbz53rr3kTCzoUKSHg5RokfGFDwOQRlYEcwU6D0I4IwKaOoRhEZ4GpHvBatG+b4abeZkA9av5+lrOoEtZ2P08JNmFFrZu2QnMFkQ==;5:uH7QlrbOkWpG22SemYh1cyAGtwKygUhzCNvS63U/GBu3R5vBO1Xg5nslRI1/1BKdFBS7ETcy6m/HAOXVHZ4KsGGP0CTXgzlwcn//Ye2R0m8U1AK69TLh2YrYckb8kWUGdR93JRtGtEfztd/VCOYR6A==;24:yglbqMPt7Bu2pyyIHxzPh0NSIcqkE1pu3ImmzXf7AoE/FkMKDlwvuR6qVBnn8Lu45p5qcG8aWFc7r4vXWgNXZTxMdw8JgmS4kYf0gozSPYM=;7:ND3rehJwiy/a2We3wpdL6iPb4in0EJsHyuiOs85CFEdIGRarE/XGk4lYo/leAn6m2AzR9QZ8bri8YPDGhORXpp91xlLIKqnWBiO06B+Hwfgn/1/lDJqyFld6jgKmkYFlsklLF474hFsZq+ZB2T3uHFBoOghA4PaNV9DZbRTeeJOMXH8GOqcliLzxSK82H6LiPz7Fb8w90LNWdVYGoYTQSA== X-OriginatorOrg: opensource.altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2016 13:56:27.3163 (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: BN6PR03MB2707 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 08/08/2016 08:36 AM, Borislav Petkov wrote: > On Tue, Aug 02, 2016 at 10:56:20AM -0500, tthayer@opensource.altera.com wrote: >> From: Thor Thayer >> >> Add Altera Arria10 SD-MMC FIFO memory EDAC support. The SD-MMC >> is a dual port RAM implementation which is different than any >> of the other peripherals and therefore requires additional code. >> >> Signed-off-by: Thor Thayer >> --- >> drivers/edac/Kconfig | 7 ++ >> drivers/edac/altera_edac.c | 188 +++++++++++++++++++++++++++++++++++++++++++- >> drivers/edac/altera_edac.h | 5 ++ >> 3 files changed, 199 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig >> index 72752f4..394cd16 100644 >> --- a/drivers/edac/Kconfig >> +++ b/drivers/edac/Kconfig >> @@ -426,6 +426,13 @@ config EDAC_ALTERA_QSPI >> Support for error detection and correction on the >> Altera QSPI FIFO Memory for Altera SoCs. >> >> +config EDAC_ALTERA_SDMMC >> + bool "Altera SDMMC FIFO ECC" >> + depends on EDAC_ALTERA=y && MMC_DW >> + help >> + Support for error detection and correction on the >> + Altera SDMMC FIFO Memory for Altera SoCs. >> + >> config EDAC_SYNOPSYS >> tristate "Synopsys DDR Memory Controller" >> depends on EDAC_MM_EDAC && ARCH_ZYNQ >> diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c >> index 28247f8..8b5177e 100644 >> --- a/drivers/edac/altera_edac.c >> +++ b/drivers/edac/altera_edac.c >> @@ -1393,6 +1393,188 @@ early_initcall(socfpga_init_qspi_ecc); >> >> #endif /* CONFIG_EDAC_ALTERA_QSPI */ >> >> +/********************* SDMMC Device Functions **********************/ >> + >> +#ifdef CONFIG_EDAC_ALTERA_SDMMC >> + >> +static const struct edac_device_prv_data a10_sdmmceccb_data; >> +static int altr_portb_setup(struct altr_edac_device_dev *device) >> +{ >> + struct edac_device_ctl_info *dci; >> + struct altr_edac_device_dev *altdev; >> + char *ecc_name = "sdmmcb-ecc"; >> + int edac_idx, rc; >> + struct device_node *np; >> + const struct edac_device_prv_data *prv = &a10_sdmmceccb_data; >> + >> + rc = altr_check_ecc_deps(device); >> + if (rc) >> + return rc; >> + >> + /* Create the PortB EDAC device */ >> + edac_idx = edac_device_alloc_index(); >> + dci = edac_device_alloc_ctl_info(sizeof(*altdev), ecc_name, 1, >> + ecc_name, 1, 0, NULL, 0, edac_idx); >> + if (!dci) { >> + edac_printk(KERN_ERR, EDAC_DEVICE, >> + "%s: Unable to allocate PortB EDAC device\n", >> + ecc_name); >> + return -ENOMEM; >> + } >> + >> + /* Initialize the PortB EDAC device structure from PortA structure */ >> + altdev = dci->pvt_info; >> + *altdev = *device; >> + >> + if (!devres_open_group(&altdev->ddev, altr_portb_setup, GFP_KERNEL)) >> + return -ENOMEM; >> + >> + /* Update PortB specific values */ >> + altdev->edac_dev_name = ecc_name; >> + altdev->edac_idx = edac_idx; >> + altdev->edac_dev = dci; >> + altdev->data = prv; >> + dci->dev = &altdev->ddev; >> + dci->ctl_name = "Altera ECC Manager"; >> + dci->mod_name = ecc_name; >> + dci->dev_name = ecc_name; >> + >> + /* Find the SD/MMC device tree Node then update the IRQs for PortB */ >> + np = of_find_compatible_node(NULL, NULL, "altr,socfpga-sdmmc-ecc"); > > So why aren't you doing this thing first in the function so that... > >> + if (!np) { >> + rc = -ENODEV; >> + goto err_release_group_1; > > ... you can save yourself the unwind work in err_release_group_1? > > In general, make sure you're doing all the work of poking at the > hardware so that you make sure you have the right resources *before* you > go and allocate and init stuff here. > > Should make the error paths simpler and the function body smaller. > Argh. Missed that. The rest of the IRQ queries require the DCI allocation so the functions below will need to unwind but yes, the of_find_compatible_node should move. Thanks! >> + } >> + >> + altdev->sb_irq = irq_of_parse_and_map(np, 2); >> + if (!altdev->sb_irq) { >> + edac_printk(KERN_ERR, EDAC_DEVICE, "Error PortB SBIRQ alloc\n"); >> + rc = -ENODEV; >> + goto err_release_group_1; >> + } >> + rc = devm_request_irq(&altdev->ddev, altdev->sb_irq, >> + prv->ecc_irq_handler, >> + IRQF_SHARED, ecc_name, altdev); >> + if (rc) { >> + edac_printk(KERN_ERR, EDAC_DEVICE, "PortB SBERR IRQ error\n"); >> + goto err_release_group_1; >> + } >> + >> + altdev->db_irq = irq_of_parse_and_map(np, 3); >> + if (!altdev->db_irq) { >> + edac_printk(KERN_ERR, EDAC_DEVICE, "Error PortB DBIRQ alloc\n"); >> + rc = -ENODEV; >> + goto err_release_group_1; >> + } >> + rc = devm_request_irq(&altdev->ddev, altdev->db_irq, >> + prv->ecc_irq_handler, >> + IRQF_SHARED, ecc_name, altdev); >> + if (rc) { >> + edac_printk(KERN_ERR, EDAC_DEVICE, "PortB DBERR IRQ error\n"); >> + goto err_release_group_1; >> + } >> + >> + rc = edac_device_add_device(dci); >> + if (rc) { >> + edac_printk(KERN_ERR, EDAC_DEVICE, >> + "edac_device_add_device portB failed\n"); >> + rc = -ENOMEM; >> + goto err_release_group_1; >> + } >> + altr_create_edacdev_dbgfs(dci, prv); >> + >> + list_add(&altdev->next, &altdev->edac->a10_ecc_devices); >> + >> + devres_remove_group(&altdev->ddev, altr_portb_setup); >> + >> + return 0; >> + >> +err_release_group_1: >> + edac_device_free_ctl_info(dci); >> + devres_release_group(&altdev->ddev, altr_portb_setup); >> + edac_printk(KERN_ERR, EDAC_DEVICE, >> + "%s:Error setting up EDAC device: %d\n", ecc_name, rc); >> + return rc; >> +} >> + >> +static irqreturn_t altr_edac_a10_ecc_irq_portb(int irq, void *dev_id) >> +{ >> + struct altr_edac_device_dev *ad = dev_id; >> + void __iomem *base = ad->base; >> + const struct edac_device_prv_data *priv = ad->data; >> + >> + if (irq == ad->sb_irq) { >> + writel(priv->ce_clear_mask, >> + base + ALTR_A10_ECC_INTSTAT_OFST); >> + edac_device_handle_ce(ad->edac_dev, 0, 0, ad->edac_dev_name); >> + return IRQ_HANDLED; >> + } else if (irq == ad->db_irq) { >> + writel(priv->ue_clear_mask, >> + base + ALTR_A10_ECC_INTSTAT_OFST); >> + edac_device_handle_ue(ad->edac_dev, 0, 0, ad->edac_dev_name); >> + return IRQ_HANDLED; >> + } >> + >> + WARN_ON(1); > > WARN(1, "Strange IRQ%d on Port B... > > or something like that which is more informative. > Yes, Good point, I will fix this. >> + >> + return IRQ_NONE; >> +} >> + >> +static const struct edac_device_prv_data a10_sdmmcecca_data = { >> + .setup = altr_portb_setup, >> + .ce_clear_mask = ALTR_A10_ECC_SERRPENA, >> + .ue_clear_mask = ALTR_A10_ECC_DERRPENA, >> + .dbgfs_name = "altr_trigger", >> + .ecc_enable_mask = ALTR_A10_COMMON_ECC_EN_CTL, >> + .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST, >> + .ce_set_mask = ALTR_A10_ECC_SERRPENA, >> + .ue_set_mask = ALTR_A10_ECC_DERRPENA, >> + .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST, >> + .ecc_irq_handler = altr_edac_a10_ecc_irq, >> + .inject_fops = &altr_edac_a10_device_inject_fops, >> +}; >> + >> +static const struct edac_device_prv_data a10_sdmmceccb_data = { >> + .setup = altr_portb_setup, >> + .ce_clear_mask = ALTR_A10_ECC_SERRPENB, >> + .ue_clear_mask = ALTR_A10_ECC_DERRPENB, >> + .dbgfs_name = "altr_trigger", >> + .ecc_enable_mask = ALTR_A10_COMMON_ECC_EN_CTL, >> + .ecc_en_ofst = ALTR_A10_ECC_CTRL_OFST, >> + .ce_set_mask = ALTR_A10_ECC_TSERRB, >> + .ue_set_mask = ALTR_A10_ECC_TDERRB, >> + .set_err_ofst = ALTR_A10_ECC_INTTEST_OFST, >> + .ecc_irq_handler = altr_edac_a10_ecc_irq_portb, >> + .inject_fops = &altr_edac_a10_device_inject_fops, >> +}; >> + >> +static int __init socfpga_init_sdmmc_ecc(void) >> +{ >> + int rc = -ENODEV; >> + struct device_node *child = of_find_compatible_node(NULL, NULL, >> + "altr,socfpga-sdmmc-ecc"); >> + if (!child) { >> + edac_printk(KERN_ERR, EDAC_DEVICE, "SDMMC node not found\n"); > > Are you sure you want to issue this error each time the driver loads? Is > that even an error condition? > I see your point. I will change this to a KERN_WARNING so there is some indication why the SDMMC wasn't initialized if SDMMC is enabled in Kconfig. I will make the changes and re-submit. Thanks for reviewing! >> + return -ENODEV; >> + } >> + >> + if (!of_device_is_available(child)) >> + goto exit; >> + >> + if (validate_parent_available(child)) >> + goto exit; >> + >> + rc = altr_init_a10_ecc_block(child, ALTR_A10_SDMMC_IRQ_MASK, >> + a10_sdmmcecca_data.ecc_enable_mask, 1); >> +exit: >> + of_node_put(child); >> + return rc; >> +} >> + >> +early_initcall(socfpga_init_sdmmc_ecc); >> + >> +#endif /* CONFIG_EDAC_ALTERA_SDMMC */ >> + >> /********************* Arria10 EDAC Device Functions *************************/ >> static const struct of_device_id altr_edac_a10_device_of_match[] = { >> #ifdef CONFIG_EDAC_ALTERA_L2C