From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752835AbcHIOuq (ORCPT ); Tue, 9 Aug 2016 10:50:46 -0400 Received: from mail-co1nam03on0085.outbound.protection.outlook.com ([104.47.40.85]:2284 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751688AbcHIOum (ORCPT ); Tue, 9 Aug 2016 10:50:42 -0400 Authentication-Results: spf=fail (sender IP is 66.35.236.227) smtp.mailfrom=opensource.altera.com; vger.kernel.org; dkim=pass (signature was verified) header.d=altera.onmicrosoft.com;vger.kernel.org; dmarc=none action=none header.from=opensource.altera.com; Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=tthayer@opensource.altera.com; From: To: , , , , , , , , , , CC: , , , , , , Subject: [PATCHv2 2/3] EDAC, altera: Add Arria10 SD-MMC EDAC support Date: Tue, 9 Aug 2016 09:40:52 -0500 Message-ID: <1470753653-23465-3-git-send-email-tthayer@opensource.altera.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1470753653-23465-1-git-send-email-tthayer@opensource.altera.com> References: <1470753653-23465-1-git-send-email-tthayer@opensource.altera.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [64.129.157.38] X-ClientProxiedBy: BLUPR0301CA0007.namprd03.prod.outlook.com (10.162.113.145) To BY1PR03MB1481.namprd03.prod.outlook.com (10.162.210.14) X-MS-Office365-Filtering-Correlation-Id: 827de582-971a-46cb-acab-08d3c062898b X-Microsoft-Exchange-Diagnostics-untrusted: 1;BY1PR03MB1481;2:hXVF0gwYgSB2fqtRo8y9FfAhAZogOk+inOqm9daHteaGIf1beLGCiP+z9LZ56/8l/70CpS4SoYaDPhf6lFDMzeyGyT/h6xaliftTyjMWWBydPCr0R7kaitWV3qNnTy/tLY4bgCI79RQ+yZ6aqzw6vp55DUx1JlXVYkp1iw9pzoJjfxRo38OY8Xi78/IraecP;3:NHtkIA6gf/9TsqqC/HKg8SxPXYEoibe0ni/3Wo5oKja3LoKEbLkHobV60XHCFpHF8+LzgkS766IqsX8degFxaVl8zW6f9RNcJ2FH/c/Ut72oVJ9gCISBgsJikgpCivO8;25:dqwIYfYQXZs4NfXoR5sfJQO7erb2sA64YsuwXXV9JhRnsJZod1pve/kuM9J7d3weFvBC54IytdJ1T/TfZ2I2KyGZw/OKrMGR2o/VVlirbmsFN+f2Qcrl57asui1Cpqsdx/ZmdOKriihogNGY+XdLJE5L3UNj1/kkYFHDG8dwWRCFxfJm293JccGKzYkI3Pvio0+UY5jCKPldmEGs+Sw3Y1X7HYyXVpAUNMkrfpW9TR0fRLYIvEFMUcUg0HE33t26MNvStT6mgF3QxDyFHplTQQ/eVGCRNZiIsURAjXN16hj9B06tDJDqtVxpy2qX++hdmspX6iDvcTKA6kJz6fu1SUeGLR2REYN0GV1tp0E7heosCC+0bLWGhNDTS6P2l37d21f/vMI84Kk7H0gzvqe52qFq4Q98wl5BxKV43wrnucY= X-Microsoft-Antispam-Untrusted: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR03MB1481; X-Microsoft-Exchange-Diagnostics-untrusted: 1;BY1PR03MB1481;31:bNXdYKELDutfxZiEymY1uZ6CBs0aFyiEPo9EcRclMxQRBt6yAywRF589ob1cnW1xN870hlECf44hsQeLNiJGiuciAw8XANh9oGlR/lbmc4frCBVGqmJr+fbBkmle85znFm1LSrYCRLptAEuM64cc83Y+9W/Hd2O3QzuPSrKxqk2M+ZpWu+9GVVVKwg3MI2UxGSqTzjB8xUZ5PvknMQI+7cAY23V5fChaKjl9bk0n1GE=;20:JLvv187BE8r0OIWZJW4Bb85swQ3gg22T+9i9UISLrhbBt11XyMhqLuuqmuuz2xUJCFUKp3d6SQjo/0+iGt58cofKpphfZui2yVqaYNenuHXEvYn2O6tOoUTTG1KEr2GRIGzSjWhVTBmN4vAB/pgfjMncstwVkNxCuuHFKh/eGTE=;4:jfJcz33EN08u1oosZAjWpxMTv8yT4bl5iQlK30U+MDRHUNC49KxnT1AUVouhBPzMGtW2fdydbUliGAofDGPalPk9uhUMU4RhLBW0TQMtinwn0ZmJMAqy/RHgoYaH62Jl99nMPNous0NNVuN69Y2smOGUnHi3moROnFY78EFhyjwqpJOlGuTtcMX7cbS3Lo881nQiW+6GlQFYq31s849JNLEBs8Yr2UvSmE6mGG1QHlFXV6TJ4myt71Rb6+iJfChh0GpBTPxwyos3UIS/Y/96OK7Gu6JV9d37++DXU3tYMg6bjigVM1QASpzR7wKfqicIqdWMPmDVSmI7Qb2Van4DZq9/KAIQ8JUmZHUPmnBtqQv3jlW0ijjnx77NZT1irixSEFr8WIYwXZkvpMOSHvs5m2Pfsvp8f2Yct6DOY/ndWtEs25//KutbmuunQz7hDDLt 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:BY1PR03MB1481;BCL:0;PCL:0;RULEID:;SRVR:BY1PR03MB1481;BCL:0;PCL:0;RULEID:(601004)(2401047)(13023025)(13024025)(13015025)(13018025)(13017025)(5005006)(8121501046)(3002001)(10201501046)(6055026);SRVR:DM2PR0301MB0703;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB0703; X-Forefront-PRVS: 0029F17A3F X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(7916002)(189002)(199003)(305945005)(105586002)(586003)(19580405001)(47776003)(2950100001)(5003940100001)(7736002)(4001430100002)(2876002)(86152002)(2201001)(92566002)(42186005)(19580395003)(66066001)(101416001)(7846002)(86362001)(3846002)(4326007)(50466002)(107886002)(48376002)(6116002)(81166006)(81156014)(68736007)(229853001)(77096005)(8676002)(50226002)(106356001)(189998001)(50986999)(7416002)(76176999)(2906002)(5001770100001)(97736004)(33646002)(921003)(217873001)(1121003)(4720700001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR03MB1481;H:tthayer-HP-Z620-Ubuntu.137.57.187.33;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:0;LANG:en; X-Microsoft-Exchange-Diagnostics-untrusted: =?us-ascii?Q?1;BY1PR03MB1481;23:uUCiKx8wj+IkzdEB2b9EH5OTKdcPaAy1DOzoGG4Mn?= =?us-ascii?Q?4hdJRcqHj9T3VE8GHSj6wUCVBSl3biczllkBrwlf5GvparV8MQij5BOGgeAs?= =?us-ascii?Q?I6vbikaAvtfXTPGJSA929hv4THDQe4yNcfLZzJM+SfEgH8zp32/7qrnAR9XC?= =?us-ascii?Q?rtI+hxLAL8KkK7CLQAOsgrEMz8xr2xaDGqYPOq7RmnySeVOMtlD0zGYs1hxr?= =?us-ascii?Q?DtqVU1zq9ogifhNmV/pYzKN9S5qgo3TMmO+zwpSocQctJ8zynC2I0Un5Wwtq?= =?us-ascii?Q?5ZXDDUE6ZauMKgoytgINgEWILU00kWchGRt/aZoc7QLaUMGeoLC4uree4nxr?= =?us-ascii?Q?NX4yfar57ialpZIsAcPJoKNtOhhrVj+Yw059JnJ/p8P9JipJlxnhuDKTtsp3?= =?us-ascii?Q?dVMewy+I5CtyZaJSC6Y4Gn8wQvpVjCoXoO6mUhrx26xW3j4Z0TwlrBRN0UEZ?= =?us-ascii?Q?Y2aeNcoGBrUtQJM2cE1c6oB15Q0gEmnL5PuQy7IvyccBcF9FRpEme2jhfK5i?= =?us-ascii?Q?rHrmlJCMnjiw8qSDQmfK5NGhmXcSvRBAK9QYRp7LQCm+/k69O8waIf6mwIeb?= =?us-ascii?Q?rPBRnkLIRc53HHp+aE0J1h+gfaix95IWRN50JSObAWQLRAtv1cTArYNaAbcA?= =?us-ascii?Q?L/lcAy2GaLAq1qZhbwwjE/cTJ4LCTeiI04uGw1kq6n+x0erL/TDBhiLnv4et?= =?us-ascii?Q?i+BZtzrpNmIN+k0ODioHltA1sge6/xoxocfBmBcZgbPul6QiFhLxnp6TrxG4?= =?us-ascii?Q?r9IvtxaCU41Aa1edPfe92ZNcHAyiO7RF0hFYJw+bLb1o2ZBluKdvu8o7E7AL?= =?us-ascii?Q?lGThp0e7eNIwHtCyV7hCTY95YWC35ul/pJEcFUuSo0yMhlykxEDcCkqFDdJR?= =?us-ascii?Q?uzLzcxauyDVJ6e9OL9kUkRfXzIKsblla/8txBTVoGV0fbK9Uk+HiVb69oDHd?= =?us-ascii?Q?bWGL9x9NqtVpxvF7ddzxDt32DUmAZ5UoUN8muESj4XsVN0gilDTZqBitKL+n?= =?us-ascii?Q?vCq4fHiymZPOWRDQkEdDT1VX8pVJXNDQeYFXcs3hhLHSWnxC8vtzY7PmatCw?= =?us-ascii?Q?dj+ZGyLV7qICZg/ei5nVox2BGELyXbrms23YDnF+khQXJ5pjiyB5d+m38V9v?= =?us-ascii?Q?/SA/pYw9r0nPKIoQyeSi5uGlYdYrwaOoD4nSauFDLsk4NGEUQi0wX67xcQYE?= =?us-ascii?Q?urMwAMYFG7hsXRYhybuKpaHY3Bg8BNP3wf04P8c/r2Kbm7O4K5iFQMnkg=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics-untrusted: 1;BY1PR03MB1481;6:sNTdyc1yVHhvkli/wcFkJCVjcYkvMJCLsBl50o/pNhKuqMDL41DrW+7vS9fu56gmlpRI04aEJxVfnZ+Y1JWOA9tZ2EuN8iFM/Gh/2DPSNZj7TGfBY3c6LGmE+JfpoSOPfVkqDMXiKx6UWSHswil+hIA18N0LIAqB5vEgvzKJPh2u3mIWLm6Mp1OIeUctS7jxvG+NYRm3epAYGXZV3dMl18ST8lskg7EjLI3qNbIdBIDngzPQJr9r9yp9BchU+kLqPOG5KU0mHaj97EgflcojLY63DgL/14zTy+ntUcFIK8W32Bvcdc/E9TcUBNuI0oxxGWCgldSeqsoAv64NnxxVkQ==;5:xovpjmBIn9U8PEwH6H1PLV+z8em+sPywcz/K/2UYw3KEr9IGv/cctpeQS/kq1JKlYna5O/fLids7eXOIm2btLD5wnVboxBLbPQSsqz0uKUBeF+h0B0GxOlZjKb6dfj06WcmSVj7sq0G3Jz6Q9TSyeA==;24:j8Ri+x9Nw5KHLkVFFnd3vkb6WILVXW0RiRFIfYvN60BUz3szTxXVbUuU2g4wIScQRG+leE/bd2iv1UJW/CQbNKNprNRFh+fl2crlJU+KPUs=;7:EbvKXYukgYugxWEM+87E64s4+pftTj4yFczErQb6zvFAGKWOGipTb7K4Xef/sX5pdvBK9fXBzRHS99Udh6x3FaD7y/hLvpxhR7Wo/lI4cyg0Fj6+NmqUj439PAOB0tlHhD3e6i0ofX7VvwnoLayukzmM118XTI17p+NKpM3HeiAzpsW3YelBw36nmunMnYUH6xFdLL8oVkvFP3jPK3qoYIt4snX8dcEWrQUenQvYIPR66I2XEThR4ieczmiowcJ7 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR03MB1481 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.227;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(97736004)(6070500001)(5001770100001)(189998001)(107886002)(4326007)(106466001)(3720700001)(7736002)(305945005)(7846002)(33646002)(4001430100002)(2950100001)(229853001)(48376002)(50466002)(2201001)(86152002)(356003)(86362001)(2906002)(586003)(2876002)(6116002)(3846002)(956001)(50986999)(76176999)(77096005)(11100500001)(8936002)(85426001)(50226002)(19580395003)(19580405001)(5003940100001)(47776003)(66066001)(8676002)(92566002)(7416002)(105606002)(16796002)(81156014)(81166006)(68736007)(87936001)(7099028)(921003)(1121003)(4720700001)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM2PR0301MB0703;H:sj-itexedge03.altera.priv.altera.com;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD044;1:mMQv5jcas79ztTFGLxn3L7TB1Nj9vJaMa1LmX/fNE9YWWBAgNxmSQQR9nXO1x1AYedckxKrL4MljPI7CQRfmwflfK71hvRpAqXc+yW/szj/jPXVjUPK9SaKVk8nbl34+SSvAb1ImTtk7zc6e7mP/4ge95hAaQ4FcdfiQ3YqlnQXHmrnk/N9j6kQEB+1YqLde75B1Iit9JXJLW4fb5dGyCYcAtZ1eG/qrvOPknYou23ZemLTEx9n3RfDAUPXX94PwSmPAyIiqdhXK3rUJz2Uf1AQ/tit6IwUhDZw0uOrLRILteo7paWNkQQmILkTIKEUrf1isEVwenB00Uus3UVpRlWhyq0hWsUwjwEkSOrxlAbZ0AgrLDhNUGkcsdYrhvPznSQdHmhld0zt9eP4rE5WqBs0rlV6b39+gszRpWi/AGbR23CfX6MPdADP2yQVcAf76IcIxNFlab0XVedfFcDnNVGavanuLzz4tR3dt72iYrxZ2NLK3OWx9mNdzPVYFWJf2S+H4XtNacIGrrSeSjZ+v6MxPsUUATfdISJyGAiLtg8hFBMyNS3paTW3+dKatvKKl9qZ5pEtUA17tHgawpCBEfw== X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0703;2:hoMvwRzoWS02GsWHw5/yoQtQOSxXjwHSOmDd/NXZ3kMTaqxYwrbOFR7LGb4RG1VCqQ+ICLrJKreyEStZa8UF3ma3VKtPqTqoJcXf2b24KTaHlDovE6M932cFjzWoygow6I/q2BSWzieYtfDHq2xZ9nB981BKdcRwsnBO4FxP0I9vAxZsPailXEy5ss8uzJ5j;3:To9RPTiJm3yWlwy4rOj3Ux8/XkK1yaCz77aaraHwgWcuzq6pHnEDgdmKk5e7yZl/Yf3bkTcMJhUftQOsHeyJDM7QCCi46MGHMzYNtUVY5fIA020qpZlIzRAd5IBObVQmHDP9nZyKYCh8ZXgCf8F6L5O6Dt44byjpvfa80BNS9pJxe6AvxUAJYJbm0T98d8/kYBqNYO3dR+k/z3w/33vTMyTiuVmSjAsl4rxWT36vkWWX9m3dWO9nn0awyWhIKrh3 X-DkimResult-Test: Passed X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(3001016);SRVR:DM2PR0301MB0703; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0703;25:a84o3cBvY+UUVs/CDhn8jfViq6RN0kTjX+rGlN6Nr4lfUCRhtjlgtFQosunK8bQgcymKRHbDEjRt7LfDPDBcJ9FY1MXZaoqobEnkED36kHNr3UH+4jObgGISmTrsAs1ozckEn3NI7pgPq7FKf/V5X1duNIVYz2HB1iZn499we9iFF0k4vhZERaz2cG4DtvZJWCFqg0xYs9V6X4ErKN3yaJ+Mnqs0g4o1rDnxVo5wi7RupZA6qvI17aIsicRyhiPF0I8yT6/ZLbmYYyvv/LqA4qTXi2EdLEjFR1yZGnB0PKbNtoq2uU//Ny6RTG7BxbqP++hSHOb/mYaNR2Sy5vUKqnx50QdlpW7we3YGpvunR1gdt3dEilW80agXD7K212jNwc0wkMifveC/HlAPfarxUEf5GzmnVrNHqo+n0f1wUh2BEhILK8cZms2dPsZQ5XO0AqUjBEePhmA4B6CFAtOhOBcM6S5gycGih2h/WpQ33slUFvza/LPBMzI3+lf0IVoSreylSEk8ov45o7fso/Y3k0iHfGSiVKZYnKBUHULt0WlRReG1IskUcu7tCW5yO8mfgqi5xglBlePWuMKgTwVJqSBLiTJL6wSI53OSefEnGjLuOEzGWVme2gxCsz7q/+kKNdzUIVnouJsUeS853uCB254E1X8ec3NzY0xdpFLu5aZsEAuwq3pRhek5j+fc1VrpFY+LhZPkM/dwj8ny9nOepPPrPyHEU1qxDB6thbSafmE= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0703;31:+4M2jgjdBM6FmWmBlRFKX5mgjffa8lJsZyiPV1WKDI8Qwqwu4JUgUxWMvIwfuwt6eVLrRA8DAZp0EtNDwky5y6g96xQ7siOikNgWkohr2MWXrYbEGuAQgwz7Ny1vRJhRNJT+/G3KHtxUltqS++nOwh2PzwfiqbcPUSD/kPoZHU5ROKL2ecVBvfxaUZA8YIbZQPW09GIzCRn2PpCV22OG/jQXRNkXIITHuXcnUu+w+VI=;20:+fc6uufzkGvlyhQVhIWeHeIPF9thAejT+yNWFfcBdTuViGdaHYEYlvH2p49vOwVZRCpoDLs2QnQZkUHRms91EiX8OSY6TgMu8ILT+47LDHeU7q4EFdjbWt61kGBEdZHie7g6s2JwSYyV+hsfREEWMbcmvhzGKIaWs2F1iipQvtw=;4:eGbL/jqdzWh3kmVn1Wy3aS1xQBCsNvVNdlyI0svLnBjlvu8JWnxjAQf17X9MrIogsJoe5/wGR8GNmEojB5uBqxN+HtxCOZdsczhBDmRB0Srz2PeQvh6lvQjRypis8vrPKeL9akapdUuMwlnPltX/oVC2TK9QMGVHfMp8WkAY9OSO3v3qHNNZFS7D5Npfcsta/WfKzONTxKnrZvkZRdr+4LB7LfQtTuAfdXgKziLkgEvZHKljxrobzsvi2Ta1qHCrq8ykwe6g3JaRgRc45U5nK0r1EP1VAaFcOrw16Jb5amPM2VUIAhD3nGXhH5/9oy2z1RB921IC+LAYxUftkQtDewTuf3135743W9Dfm/pZaNR7gkQFEUSYxmyqckx35AgZh2/qnxg2Lvo64iBaOZWRUAJj6wVr4p0/CJN3gd3JmAJsKpZ1ztc/pY0NH9S2h7WIdh2+Y1dd3MxHK7cBWR+I1Wa2BYeL4toLdxH2atkpkHaWlOiXu+zwb0j3JbnjIKJm5MaKOEz3XZRprBNK8n62iw== X-Forefront-PRVS: 0029F17A3F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0301MB0703;23:Egzie0kj5THn6d2MlL8httKjKTjClfQg9dasFCS?= =?us-ascii?Q?YEVEBQ5ZDUhJTrbCVLUkmQcP6NDTk2zmMSfVMjYbeld52CUf0+b2elWnLA6m?= =?us-ascii?Q?y5GwroOfTveELkGR65k6TpuPQTLIRQf1GMQMPEVSCAZ3xaeS/+MGSzRDAYii?= =?us-ascii?Q?cnxB8sUteZq1slbvZE3S3cuMVYxeY7892UaegDhz8ImcLgS3HewsQOXmB7x1?= =?us-ascii?Q?nbz2xUYQzZksMqNE5LccCKdEwvUdqBIYQTA/f6N+qyFk+fA7LxYlee2OkM4O?= =?us-ascii?Q?f57g52rlFsNjzygWmGKRomX/YbpPuw7OSmXJukjIWYAStfL/YA2GmJLp0ahF?= =?us-ascii?Q?tTAcNsqB62/Cv3w77yj100Lr1clLwLUo+xtfPSgqxan81eraQ6FZh3auRUuz?= =?us-ascii?Q?/FeMxXroY/4k0ZC+hwzsgy6/WYUUxSugnPvkPNsmjQ+smEO8l9VmXGlqHRFN?= =?us-ascii?Q?q/g6aoCttnkVqpWNiMkpNrxkldN0Y+LkZOgDOpF9qqfD8gEC3VuY5+onrJBZ?= =?us-ascii?Q?6n1xYLTsr2f05fQEVT0jFspToMnCe900g26fkG6Kf02Hto8zhpquCxlrepkW?= =?us-ascii?Q?bucq/tAUMOKUrOZVlQVn0FnE010WeASVEVwM0GAtQwZKnKOAu/uyoSEE+/rS?= =?us-ascii?Q?ZEfXfx09ehXqP7YQRSLsIUPIKiDMdX+yQzoDLV9MtuHpOapLtBPp2BALJlZz?= =?us-ascii?Q?Pwsno9qbkh9Nk8/HGB7uRIdPt47Z+nyl05AdoMnobjrproKsmSwMDLvZgSMK?= =?us-ascii?Q?KMVosKHfsOI2ofxIkun/FkV/vjKOcUK2WTRtYV5NFPixKxVlJIWcqGs1GZtf?= =?us-ascii?Q?U+sTE0F5fHMv4xByCCBAM0UfDrcZ+WAVcgJA365n7T6JdVGc5HfRCxltk/p9?= =?us-ascii?Q?XQC4EpoWIfWdOaNrMlK2JJDPa4GakpsDta35eHsJ4xlivVMEXCGns7sWLtmu?= =?us-ascii?Q?K/Ox32j5c+iW5iGcq1jIxoJ0MGawlrfQqfWSGsZMBcs0GqEzf/jV5Y7QcJWo?= =?us-ascii?Q?aYxDXZl1s9c4qHHCE/itf9gClEYxWalBYGgli7FA/7TAZU4nPbaWGD5E8Bqc?= =?us-ascii?Q?K1rCj5cDeEVs3NaUj+aOKc388N2TiQE52EJKVMiDtGYymNktmf/x/GSdcpft?= =?us-ascii?Q?0dTzH0mbf6u1uDKBHn+jAefT9QhIc0IlYAr7PHv4Ol1v4cbBpogBiRj/uIvG?= =?us-ascii?Q?TmeG6DybI//xbPSHtcM3bpcQrISmbS8usykhpQk1Ju3vnRIEP36l7vePe7tW?= =?us-ascii?Q?UVev2PepR9Fz8nbVWnsWdpvMRC8xa5QaApwtofPxSZGaI0hDmSf37pWsc39/?= =?us-ascii?Q?9S69luyoTdFC4us1CX+/QBdWuEqRLGwQAYVllH0uYGl2Z1OETqxXAS3umMHZ?= =?us-ascii?Q?InO+5c5f6upBtQRKlfSOd/GxWEzs+qxn+RHcGtAkraVyOjXhEUmKLtsCTgZi?= =?us-ascii?Q?T6MxD10yYu/Lcg/VgcNT3GRatAxmJ0FA=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB0703;6:K4z13We3z/1V5llr4x6VxJgrpYTySyJ3xDo/B19SONAFI1JJnTjENLzr6LijNNM5q6x5ti9FeXgu3UveNkT7ZBbFEugYuClmnPEN/qFC109RYFdyFjZZza6ypDC8aDcoWZHXVhuam9OATAKMHxMIZZTeckmvY/Zj0hmqMzuwPY4xgb9UsfaFhb1ud/osJC1J9KVDqY/qIVroOYU5NMnPbICoqIgQlrDQ+r/zuFWOrVjJQyifiUk4SWjPfKtm+zT4yITl/kqLSt4/g+g1i7E8gPZOcZOPpQn+tshmxdsTQwNnbFesAE6+gpa7/deYrILZdpXbBIpL5gRvmSph7W2/5w==;5:e4PnSeF81W9uD+VGJJMe9Sv/NXKEfpH+DiVRodFhMm5eoxwMqD+i9wW8BaJovIJag9wYLdLb8/rVOTul5jARZZ6XHtNkGN9veu0HRK2hR7AwY6twXvcEmNiN3/Xk8Y4hSluzG8l0QRgUjvrvW0/pBw==;24:gR+FvCfOasGI6hGU1SvZXAgAYp9kv+twLHlD4R//gf8F8cYj3MjwxIwe+M3Txra5CqBvLItYlRjNXm2sMp+eFARIPMmRfm0PKhKlr4/Mllk=;7:KuoQ0DtRBgvsWMPsA7Fa0URjSIigjRl1UGdeAPHZgy5LWhgM/VSdxkzzW+sQy+js5XCG8FDa2syo6rMvv3K9drBGQ0dPxrbi5S4OPsQW2EUZjgGHazI+/mnbCkBlb+EZEJM+uvc8Jf3qs2j9VO2OIXC2Mk7/qsvrowmVLHakLPwILqSXwYiYwBFUR+YakXyqbxFRny7IwfGmVIHkh+rm1w== X-OriginatorOrg: opensource.altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Aug 2016 14:36:23.1652 (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: DM2PR0301MB0703 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- v2 Cleanup PortB initialization by moving device tree search to top of function. Improve unhandled IRQ message using WARN_ONCE() with IRQ#. Change KERN_ERR on device tree not found to KERN_WARNING. --- 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..289fd81 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; + + np = of_find_compatible_node(NULL, NULL, "altr,socfpga-sdmmc-ecc"); + if (!np) { + edac_printk(KERN_WARNING, EDAC_DEVICE, "SDMMC node not found\n"); + return -ENODEV; + } + + /* 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; + + /* Update the IRQs for PortB */ + 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_ONCE(1, "Unhandled IRQ%d on Port B.", irq); + + 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_WARNING, EDAC_DEVICE, "SDMMC node not found\n"); + 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 @@ -1418,6 +1600,9 @@ static const struct of_device_id altr_edac_a10_device_of_match[] = { #ifdef CONFIG_EDAC_ALTERA_QSPI { .compatible = "altr,socfpga-qspi-ecc", .data = &a10_qspiecc_data }, #endif +#ifdef CONFIG_EDAC_ALTERA_SDMMC + { .compatible = "altr,socfpga-sdmmc-ecc", .data = &a10_sdmmcecca_data }, +#endif {}, }; MODULE_DEVICE_TABLE(of, altr_edac_a10_device_of_match); @@ -1711,7 +1896,8 @@ static int altr_edac_a10_probe(struct platform_device *pdev) of_device_is_compatible(child, "altr,socfpga-nand-ecc") || of_device_is_compatible(child, "altr,socfpga-dma-ecc") || of_device_is_compatible(child, "altr,socfpga-usb-ecc") || - of_device_is_compatible(child, "altr,socfpga-qspi-ecc")) + of_device_is_compatible(child, "altr,socfpga-qspi-ecc") || + of_device_is_compatible(child, "altr,socfpga-sdmmc-ecc")) altr_edac_a10_device_add(edac, child); diff --git a/drivers/edac/altera_edac.h b/drivers/edac/altera_edac.h index 687d8e7..cf3a68b 100644 --- a/drivers/edac/altera_edac.h +++ b/drivers/edac/altera_edac.h @@ -250,6 +250,8 @@ struct altr_sdram_mc_data { #define ALTR_A10_ECC_INTTEST_OFST 0x24 #define ALTR_A10_ECC_TSERRA BIT(0) #define ALTR_A10_ECC_TDERRA BIT(8) +#define ALTR_A10_ECC_TSERRB BIT(16) +#define ALTR_A10_ECC_TDERRB BIT(24) /* ECC Manager Defines */ #define A10_SYSMGR_ECC_INTMASK_SET_OFST 0x94 @@ -288,6 +290,9 @@ struct altr_sdram_mc_data { /* Arria 10 Ethernet ECC Management Group Defines */ #define ALTR_A10_COMMON_ECC_EN_CTL BIT(0) +/* Arria 10 SDMMC ECC Management Group Defines */ +#define ALTR_A10_SDMMC_IRQ_MASK (BIT(16) | BIT(15)) + /* A10 ECC Controller memory initialization timeout */ #define ALTR_A10_ECC_INIT_WATCHDOG_10US 10000 -- 1.7.9.5