From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755461AbcFTPD1 (ORCPT ); Mon, 20 Jun 2016 11:03:27 -0400 Received: from mail-bn1on0057.outbound.protection.outlook.com ([157.56.110.57]:9952 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755425AbcFTPCh (ORCPT ); Mon, 20 Jun 2016 11:02:37 -0400 X-Greylist: delayed 887 seconds by postgrey-1.27 at vger.kernel.org; Mon, 20 Jun 2016 11:02:36 EDT 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: [PATCHv4 5/7] EDAC, altera: Add Arria10 ECC memory init functions Date: Mon, 20 Jun 2016 09:50:50 -0500 Message-ID: <1466434252-26107-6-git-send-email-tthayer@opensource.altera.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1466434252-26107-1-git-send-email-tthayer@opensource.altera.com> References: <1466434252-26107-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: SN1PR0501CA0022.namprd05.prod.outlook.com (10.163.126.160) To BN3PR03MB1478.namprd03.prod.outlook.com (10.163.35.141) X-MS-Office365-Filtering-Correlation-Id: ee9aaa9f-24bc-4cd4-16f9-08d39919a84b X-Microsoft-Exchange-Diagnostics-untrusted: 1;BN3PR03MB1478;2:VDXXk1fdEblO49ecV6GEWVo3FYySWOJ3TfGQc4x/KTM8lbsTZTpz4qNWrBtb20jR4s0DJq7V63AHQpw3tsXhdU7UmNR3PD8n2heZgbJ+GIVNdKyytwFT9wEPtVIkNOZ/GTszZVzySXTBQ6jBcvS3kgxcmNXCvbeL0XInLfjj8daVfR54qtGz/4hs766bw69d;3:8dpXUHRJxstjVfRuvTL1IJ1JEjNYdG88SnMhYZ564h/NiHDuobmuEBV4Jf5crpjhNyANZYkdljgnXM2MLm4fF1TGa8Ocs4kp5VghxNfI+mnrbL17ihKBGPllCK0URhql;25:iuf3irlE5yFPoStRQSneYZc+AwFc8Z4RISLAQ/8V9fodPJS2iamtYy60668aN/n9GloA9yv93DPXNjuy9rOEistjIRw6MfHvL7uoyEL4auogxQOzNy7I178TFMbsxoC5k86eUUrSaFPgXOrbVORk7FLD9cBn2ONltn5HuYXHu44stiARAaDZWInh8E3lfUxZ/H30hH7DGnBpF6brNEg/9n1ujer+h/Vv/LvmpeO3OiucJaTJjQWfKgxedOvSySmpf1XUXEKr5/WRo/k5sX+1dB6gTdJSCsb9nXBFNcBi5yepg5YpBSuPNfo+B6QL4OpZK65TG/Y7A+kJ+s6EzL2z80XvlpoNSZZy95XQxDoGb+W7VgXShL1LW2E7jpzJlQ8EyaRYVMsI+x79M7Iqm/jn/o/CZbeyX4+LQzPBJntNd2s=;20:WzlS4C0vuPBvUQWXBDcB3j8sZAFzJYeCO5VtI/5GCfpaBgdMq5bkyOkKEcu8U/4rdBCyV4Y9nwB3ubqtBaTJVdyvPllQ0HCLSatoC3hVgv2Os2Q6VXR/k3SVBED+p7+bUkmZ/KoE4CtMm6/ZwcWVhc6jflpv5DgtPQgC1Okm20M= X-Microsoft-Antispam-Untrusted: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB1478; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(80048183373757)(788757137089);UriScan:(80048183373757)(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026);SRVR:BN3PR03MB1478;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB1478;BCL:0;PCL:0;RULEID:(601004)(2401047)(13017025)(13024025)(13023025)(13015025)(13018025)(8121501046)(5005006)(3002001)(10201501046)(6055026);SRVR:SN1PR0301MB1552;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0301MB1552; X-Microsoft-Exchange-Diagnostics-untrusted: 1;BN3PR03MB1478;4:QbvGv5cwbvMHT8gcChocsjkH+HOAJzeOuqQJMR9emRy8VI78Sef6pKYf6JRU6swJKAK8a3TnWLy3pM7MQjjQBMoTVxPNeSkfRvCNqfkbzArgmGGsqFZxthj7IKIrnNr6C+POylIwTpx1DdNegpsPinRKe5O2RMnda1tI3eO8OiZxwu0gtGRb53pvTGoyP3oof2d4WM+sIz0E61dPdZkALSA1sJPjUAeZ0zUZVg6e7gr4eiqy84XNn6vn0tUv3FUmPpES4WaXk000m9vmb4POz0wvFv+jj7UvbH4Cb39AtlYnWqOtkuAaznokYI4fAdo8pj9F1eZZvHI1gDTa6dFCkCRX3rbhl4jI3dvw1LQpfRxOzNk60iIBawumYaOZgLQT8mofB3DYZEoa/5hqw8NqX9TVTvcz0XGb5iT9+N45m/ZTCtBhL+miMGAcMUUqdw9YGuyuXFZsoF55a3iI/ZRJ4w== X-Forefront-PRVS: 09796A1B83 X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(7916002)(189002)(199003)(42186005)(97736004)(48376002)(5001770100001)(19580395003)(86362001)(86152002)(77096005)(92566002)(50226002)(2201001)(107886002)(19580405001)(47776003)(50466002)(189998001)(68736007)(2950100001)(6116002)(4001430100002)(81156014)(3846002)(5003940100001)(76176999)(101416001)(81166006)(7846002)(8676002)(586003)(66066001)(5004730100002)(105586002)(33646002)(229853001)(106356001)(2906002)(50986999)(2876002)(4326007)(921003)(4720700001)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:BN3PR03MB1478;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;BN3PR03MB1478;23:DPlyXHISeSbg4ESnDvl2Mt39IeELl03LrcNf306xm?= =?us-ascii?Q?BbqZaCdUezMEGgMARfJCzuPT8IJTTjPPMIjytgkKZVfugRBfPmaUeFpSeu7h?= =?us-ascii?Q?FRY2bo6bSq/fHdTuW/JYmYnZlcgplFiAZrU3XGjZIF24efrhX1tfpl0L3UFK?= =?us-ascii?Q?wYB2s2l+ETB22eOez8Jvlr8VTLHSDGhPbhG9//SxCvL4VmOWavDql6NDPhCq?= =?us-ascii?Q?1D5I7c+onqQJVIc706kxkDNOeKfyeUzOW6dQP2nWVYVo5k2hHLYxRmfPM2un?= =?us-ascii?Q?1XqNZZ+I5SK8JfReXD5YgmL3v59ROEGzxZL3U6g2QpXyq2XRrshYPWl9Wjhx?= =?us-ascii?Q?640bg6LzR9aOsabMTszkNVYA5WSdBirzYDrtvMLzymav0LPA5oAA0wwgI95X?= =?us-ascii?Q?Uz1+op9SryYaFej/KXsXp/o8jT6Ji44M2/f0FtZIiNH0H7BBKKWCof3HaLFx?= =?us-ascii?Q?Nx5N+g4+Ve5Wg+e22w1fpv4s1OUCGlaWkGoprNlbONSgCNXY3VQb72EryGT9?= =?us-ascii?Q?oc3MYurHC9JcFp21z+BEPFYtWX2mwHe+otROhiHBpI2q2gli8bx0bRm9Alqa?= =?us-ascii?Q?8dxRmcfpuJC80efxH8/nMIKgO6id0kdFVAuVfM3F3W446lVyNjAJ2fYcGHeK?= =?us-ascii?Q?p4ABLGbhA0rUkIQjC9eLl2DbvofcjXrZKD0msSnTfo4vPt66TgW9MNzUOP3/?= =?us-ascii?Q?/hcW09IG7RLz7ivI1w5HypKJ6nng502HHYI0kWxqST9qhsMhgICO49/qH0QK?= =?us-ascii?Q?a4xXLAbwgeS2+/JQBf22Cv7WR1TTzsQQ+hchkKLhLe1eq63m8Dyyp6ZlTrSb?= =?us-ascii?Q?IKQlkFNR2iH5K0jxbXur6kVHKykuPhp/cPbVyyEg/yORXwOAyaykmaKa168G?= =?us-ascii?Q?01Xs5ICy/xsFAUFRsilMr8Asd1I5XFkFmk6C/RNfxhe63JMWOiR2fHYPfwfO?= =?us-ascii?Q?80P23pDQLUS9g/JrV0TWpS+2BEi7XeIbACmJqTWYbTbaVeh8Z48cCSlsUDb6?= =?us-ascii?Q?28TzzL7IUXdUPxGYJwyMBQu052g42nP7YX693IS62HPQ3xRvSNCGyJMauRbl?= =?us-ascii?Q?bGxJR05zF6NS2ycCDMTP4M37oE651IErZgeZvMb8tgS1mIGw9q9XalviH2tq?= =?us-ascii?Q?monQ57yG4kSiXbQcBndOu8QvNr+mz3jecZnIQmh4UW8iCF33JQMqpdj+U2T4?= =?us-ascii?Q?HvNsifHiQ6aqIY=3D?= X-Microsoft-Exchange-Diagnostics-untrusted: 1;BN3PR03MB1478;6:a4UAFIFgVLN/ki0MfH4Nbns8M3TTPY/CBXMtYmajelj7oF9sWiV6owo7PgKyjZR8iNLt9w+5XjIrGE6MJ8miHUW09uEjge5bm0xrMJwhtwS21+jsxd1J/WxjEBEtZVPklV1RFD8gBb5dpSHqAKcfhegRrsGvPdQvyk/4B56xjoxL4rKqNLKqeLCFbheXNVDcHiyzHHAvBbwAvjvYrFAgFUcWQk8Ba5Z6488nOB0+IzSXrLQ3V3hcYjVzm5jIE7ZplzBYgicdNjIBb0/hkdRsXwPBhkzltJLf4duqK9tn0tGNWtRiiPBqqXaByJKmf1VjUwhdoG0dSgVxJi8OVz0piA==;5:GmITvn0Rfz8tdFOXnxYvWV9R3otNYSfjg/R+Yv99DXC2r24tHzLRUC3oX9S4bTwdWC6/MiSerYjOqNqSRb4YAeKcMVV0/0Yi7unf5vOZJNPjomo2DMKEfLVXUqkwBX6U9QYIXOWcskK4vjDqauc7Gg==;24:nN7S6s3bBXxxJayZAGqKepMBaF9KdiTNvcwIX4QONXXE1/rIfyNMYOTACVJZHM/ArcNoPXh9IVwImnrokO4ghyXfilwfj09gZb1WP0xkQWU=;7:FmvY2wV5n9pOe7s5I28h7Nc1ExXiTLF9RL//RBB6h5pitw9rHQJ3FT9bHXheK2MlTKwgq0rjCkZROf46b8ny/f9l4CvB2BnBl1svkwIFf9WD/W2wKr7WMm9mppkT4rSRca9Ys0SKC/y6MTRRWhOaeETmpzFvec46Ez7+IkbRlwLvKBQeIVOAwonjLxww0RLDj4tFa+tGCfgNBzEZCx5PPFsR5AJ4p/2sp2Tx2/jloSniC0ycUSrELA0WWVA7gFjf SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics-untrusted: 1;BN3PR03MB1478;20:8eJUlgFLd768UvMAsXvkU5wRjM8c3AQc7sLyteuRZVwuL20+39PUj3K/IVykUx7jdIMq29AYlBBhk3UQo0QdBy+FD3gsokUujMQj2rI7kv2GXZDNiKdMAuugTt6467sVKWNHoM59+95LxaNKe57pZZk+FH8UqLb44RLnNonztFo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR03MB1478 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: BL2FFO11FD043.protection.gbl 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)(33646002)(50466002)(48376002)(85426001)(77096005)(47776003)(66066001)(105606002)(106466001)(956001)(16796002)(87936001)(229853001)(86152002)(86362001)(5003940100001)(189998001)(50986999)(76176999)(5004730100002)(2201001)(21840400001)(6116002)(356003)(3846002)(8676002)(7846002)(2906002)(81156014)(4001430100002)(92566002)(50226002)(68736007)(81166006)(2876002)(19580405001)(4326007)(19580395003)(2950100001)(3720700001)(6806005)(107886002)(5001770100001)(6070500001)(97736004)(8936002)(586003)(7099028)(921003)(4720700001)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR0301MB1552;H:sj-itexedge03.altera.priv.altera.com;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD043;1:t8wEY73GT5o0a9k0+kOH2Gj6AyJQy3M04aX813BXmvxUjun7843AFkMKdsKZnYsaLeMcQE1rHVNPJ/EUazRZcWtrKhagZKuh5as5yaVNYD+rDZD9LlWdLhhqAw37xdC3UkSfmTbWSCAZUBzyX+lGlMqCfG+7dDCuq/tmtJ7jxdjjfUDiv7vTz+6Eb3Nps1M9fISG96P13kjj5qFeT8jvKlsry1185uSgzll0/x8SnoVKYK0nSWOiC/SUj3+Id50A6iz44WcHMfUZyxw00elDzOlnPdHxnvOK05edODknJsQmAW7oBIOVESs9mS4wGEq1to0xkTMyYWYKZ+1aQEecWB5G+iFJfWV2wZXk2qPVCs1j75IQeeVVMvUtFi4AmO1DkWjM8Z8WYxkcuBLyIPAM0I5+8xmBK9PKDwqAniQaLnB48KEbOMOzDN/GDTKSnqbYMvhbU+l6Konu2UBR4e9/E8p4DVoODsMvLq25rOz5Y8Kjhw4Xh2uCa0E6PKEY1PUBBaPwfXe+o8Xsaw5ds3dMmoL2e1Ifyri+k0Da/QJzK8Y= X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1552;2:iJkLToCUPcc69Y62CEnBFXeqx9j1AstW/PVoEtvxk7gJfcCYLAMARPz1cwxy7g/oeblyjmz+AH5Sy0fDFg32i1nMQgPuY9loYJj2pz9aX4lW4OiPLpjKPTVU0wiuLuMJwgSaqC0DQmGq/HzBfCYW99/NILxQjDXI8DmO6OsXBt9GOedw2jlF6UWFGGibvXAW;3:iUYW5AqaGWdoK3mFb+QAVbs07PcdBaTa6kdnOaEv8kpNwWxIW7jxeY1zsSVMRna+RDM00BJ8sZUGZFi4wWh87ZTWcRvvxF9EI9yLWsXhcUJjdEioogXz1lDrrK4u6MQqHmBLZ5tRb1YPN/DxA6OFrJ+bcDeqPg9WQcMoQ7tC+PJkgutS3PyHEAcYYoGDOZObgF3uaMOjGiMGvlLT6ZGEzEJGefi9fk9/YU4MCZbR0hAShMrlHQZyc3gSOuD51nCJ X-DkimResult-Test: Passed X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(3001016);SRVR:SN1PR0301MB1552; X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1552;25:jzJem3t2fHtyKCZGdSy+T2TECCk+wybrZ4mgYynSg4F1BxLUyLnnsymIWkw6Dgz31MKpbmOOjTZyWqMuPVoRziUxteroSRiBNxx+17U2Btx3czyBZSeliDj/ykxB13RMWPgnr1Xhe3uoLFAwNO5s2D2D7/Gw6N2KxQAZMvWVPhyTsuJ+zCsf43/qALOu8eJkTPz7Ev++kon6unARxXAfob6tM2R5EQdCplT/2lKJzBqaKmm12mWds7RjsBjzvqVs3+Zq+xYQgTHFk4DcD5saLxk5Plr80tfW0CvdWncFi04ekGzf1fmnt9NVe26JlefeJh0pyizAktls09nJ2qxLPuv0D2au3hFj1opHAolSQ3PcNBrkGudOHeVFv/MTZD4tMZ6LkcPioxEUiuWHegvKwcDJT0fWR0wsegHNsQ222YbOkcjsvlwyz7RJnVAtbT9knnaU2ydGGOryj9OusjOHOYyGs3jQvOMpytqdEOPdfTfSQRUEdbDcggGgtYHt3nqPBevZnL7CJ9yt68Bkm5iQhRWhJqdU6G7gBOdJEcH3DO0sY9OyWcHd1wzlg+XIbBF0tHgtI6CBdcxdm4r+0VLpeKqRbyFr8HhUPAFLfaZsLo9TMjv6gfePRXi9LlIJGi4sh8AVKn+0eH7bLyd7XdnUudmciBGXGpjMLaXuAuJQ4C/XUODJPYCaDe5RWEvLLv9u49RI1dBDTjGqkCS2B901Gku651S6H7KCo7wNNs9XpvI=;20:GOh7Voe3mo8VcA/RvThKm32+Jce7DhA2bwgEfFIYe9QxHj0Cc/zTsljAwor3wEs0aOiycOUy5QAqzMN2hP+dekIrDtbS2YL+uLgUfvF2+QaFyExLbJXefsRfclmJqCBO/qDSTPnLkiIedCf+S5tYQlfyAlE1+Nrh7QTQ4L9US9w= X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1552;4:1QnPlnHYHt2Zu/reiUlRc8E+djzkQXlmXO6sDMQ6FP4qbd8Ds6AzomN9G46hi9rsiKqdjtkotnwk88cePcCvPXZH0Bid8SWc3A0ndgund/ZNLsvEZkj1hmcrx8KIOEOxshRO99wfEnc3r6QN8xjdloCWdPnDwA736rFAOegEw1lgfymsvB/jvYHGCWdLo648poi22v9QBPweqaJqbku7dDVV5gwNjwJEH2C2VabFIpXe7xuIDMKcb73+KKH9vfVCqfltBf0gs4AARJll2GTmMKwELn0V2AMb6Lc2rNA+sBl2YnsAy7Cs+NKEVXmDKDfLTRDuuSMVP/mQ2VCQI2/pfWhsveSNfQ7rVu/Oe6RBNchpZYR49X5RYAqJQsJBufO+6hRjCUImknGl88eeseFfBP3yEnWb1NOwWttAUtzpoFYFjer5X7haQXIBoDZshKTAkIjB5aVKJaro4lmlp4rp/XTy1/mnBuAfd9Z9oz83WB/h/e37cZuZN+eT0oWjWcISqFXcQA4eFaiPVSyOo5rzJQ/Gh+sKFUwUtX9CeJiKGtU= X-Forefront-PRVS: 09796A1B83 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR0301MB1552;23:dnwYG6ZNNPhlb0Raix7XgO6/1lCBckxsoJw2O2E?= =?us-ascii?Q?a5ibMU7O6Tg5ulNs9p5BoxngVoQU0YES+qG0FJtXKDSXRufuBqY4PNNi4jiM?= =?us-ascii?Q?jX+qCoTTibS5QVGZw0DmdInbLnKiFLVgMMPAUC1uemCGuvi6t4MXy9ANu0vW?= =?us-ascii?Q?LhdRn/ikQ96zv0AeyD9sNX0gfU3lWqoGANOkddhh1F49glKMY4BwiMWDr9wi?= =?us-ascii?Q?swaKu7SZDyH+Sppp+k26EUKmuMPQ06Qb9gB+WAPbVm3N8wDZRPdQOJpD1sY7?= =?us-ascii?Q?K/btloX/pXyFCdbfD0q9PvJAlV3i63BzUogeOvh6U06OfZ6a/XNLWFTrQ0O1?= =?us-ascii?Q?49vD+HbMfgT+2NCbEbablCk73xmaP62g3BBHOhDWAjWUjRgK0CApmca8dWdI?= =?us-ascii?Q?fy334r7coYMHd20o3FA8RhKDZrLscPPtrS/kM0YnnHuyH3UZq4y5tRChWhPU?= =?us-ascii?Q?BNsKVFfbSeU7NDQYQip+LR9pV0+UwZcyUFZ5qqsFDEJ888riIlmpnKrYhVNb?= =?us-ascii?Q?ZlC3RAhy6AfHLWHJrAuMnZ9YufcnohNP5xwSxdsT5zpgqcjqu3IrZjw2x/aX?= =?us-ascii?Q?BnNFoya7RtFcNE8qrE/YM+8u6h4SObEP9T4X6hcHxQEqAG30vd9lfptzU0QJ?= =?us-ascii?Q?gUfS/DXzJans04bZJUU44F312C2rG/liRW3aXsUguzRPvi8+ENFrW0zwd8DE?= =?us-ascii?Q?O92PVWKbzZLB6vc/Z5CkxB2vA0dqk7o+8Od1CIcnGj4OB6ZAjzQNJ8yTLZH1?= =?us-ascii?Q?8KwRZIXV9OPQABcBxc1XhcCONElQVpbXkkTFzGZDgLK56ySLCG4PDCLMELSq?= =?us-ascii?Q?9OwBBpqRheXjYhVmxu/zo15M/pCXX0att4zVEB54vA5GdhvvedTqnK4A1b0N?= =?us-ascii?Q?A0jUwssExlNUz7Oq2i6q+djZFL2zAvsWAiituCFoJtNnOlh6WXsF/FtCxLaH?= =?us-ascii?Q?dq4xXKroIUMqz2D7qb36pYFSxssFMjZU0d3qVeCmMvNq8SUo/50SU0iYeagr?= =?us-ascii?Q?i605y/Z/KWnfKLrJqvUd1Z7r64Tda8E1U1EzedPC/t8tqH/JeHA2WYnoGHLf?= =?us-ascii?Q?1T4a1Oc8HE6AIjOPPdsAEvzTDGlMW1URtAI9ewMSpT9vz2EvwHNFrd76FD8D?= =?us-ascii?Q?+Dj/e9IhkdWhLJlHZWPxGkIfsnxdcUmnDOr3iSOwNBhwprLYz3XSKP32uvLO?= =?us-ascii?Q?mn1O4szGIbVQikDrjMgwZELgX+Mc5aZ909wGy28RgkIzc3dDoqd9kHkjhPcb?= =?us-ascii?Q?iHY+/ijqjesj89JDCvnUq12dFw5X0LKyfVHV8GX7lpVUuBfohqAABPjCci6H?= =?us-ascii?Q?eASV4WcTtJq15NnYeCxHqM4+IJJYR+I9OxcPruAIwxjv0AQtVbWp86J1Rd0L?= =?us-ascii?Q?BiQprd9osCTN9rj9nz13ovxN/R/VdRzXVnwtQsvcM6C+EN+I3G+oK7TLWPLX?= =?us-ascii?Q?qDL0yRfV4XA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1552;6:CbseQP7xWIvfvHrsb2amvrNF9wUIEknqpgvu5dfd44OlY9FlDWuXPYtE2lc85sZgmvrX95T8qqGEcGvDmDboRaPTUMml+axSfXd8wJMR5pXb+WkY8fiYb2TH94e0N0IUNYXAQg7a4B0/1pW/foJ3i4uCqOrxSKVWQqVIKUWWePbkBjhGrxew9v9ZHp7VlTNT7ZzXPdg0f9UJcmmyhkSjwbpC150Wg6Na5y48OmUDBM1sgRU8p38nfXdv7a20a0o5mODe67ybcIGpXvQrWQRPDY4RroRJpL6QZx12vRENGau7L/OLtxjh8aL6ieTlsuAi7UNDigQyBv8RHyt2Kz4xnw==;5:9doqWFkkiiFPruK/vRJN06YJifMXAWOXJy/L5QmvNX8wz4qVpZtkxzStipZ6BBaAcTouau4MzozSZWTa+uW4Hgt0CQcyi9E9Tq6C8rxbxhaigsgpXgkd/ydtLdBkJzByZNQGUMwS6tC7llBZ87Terg==;24:k1yNRZYHBy3Pd28zbGrFs+ZWXukpEWvNk6d4fnV8lYAFO4LRcKwwcc09JbP9O0jMEEHVr9pbuT23lHVk0V8cEaWcCrfVE0CkJt5Dx2lRScM=;7:WCutv+Cmb3Yhq/y6N3OZG4senJ73qfc1KC/Zg1uLL/Ag6iLQmwncyg50KEQJtQeFfXU0C3yuHu1Q6R4Ub2NdFuirWHnR7aNGvuxlR7ia+kna/LIZafcDGfmFziATRIhduwH8H2xNj6Ky/zUvHkYmv+OxFhRumeRz0nMu8ZhuCuCocwEE7XrkG9dkzM1Bo4xv8AhWlai9EAz9JxVLl8DE4A== X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1552;20:Cixmml9jQxyFZ8uJ6wxWBFXTp294aWjMuwJEzEuU8pWNA6xaWnyZKydov5fh2FviU+jJUDlSlqSF4VA0/f5XN7zZhLiEG9zsHg6Li2QR0vSfW73ICLmfWTRxho5p4L9qBBQG7WgSqYR5POA+oH7RkeqTT0pWvD9HWuElNlHOks4= X-OriginatorOrg: opensource.altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2016 14:46:26.2665 (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: SN1PR0301MB1552 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thor Thayer In preparation for additional memory module ECCs, add the memory initialization functions and helper functions used for memory initialization. Signed-off-by: Thor Thayer --- v2: Specify INTMODE selection -> IRQ on each ECC error. Insert functions above memory-specific functions so that function declarations are not required. Use ERRINTENS & ERRINTENR registers instead of read/modify/write. v3: Changes for common compatibility string: - Pass node instead of compatibility string. - New altr_init_a10_ecc_device_type() for peripherals. - Add __init to altr_init_a10_ecc_block(). - Add a10_get_irq_mask(). v4 Replace ifdefs with __maybe_unused macro Improve if,else statement in altr_init_memory_port() Remove confusing comment about shared function. --- drivers/edac/altera_edac.c | 192 ++++++++++++++++++++++++++++++++++++++++++++ drivers/edac/altera_edac.h | 8 ++ 2 files changed, 200 insertions(+) diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c index 5f01974..d97f22e 100644 --- a/drivers/edac/altera_edac.c +++ b/drivers/edac/altera_edac.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -874,6 +875,197 @@ static irqreturn_t __maybe_unused altr_edac_a10_ecc_irq(int irq, void *dev_id) return IRQ_NONE; } +/******************* Arria10 Memory Buffer Functions *********************/ + +static inline int a10_get_irq_mask(struct device_node *np) +{ + int irq; + const u32 *handle = of_get_property(np, "interrupts", NULL); + + if (!handle) + return -ENODEV; + irq = be32_to_cpup(handle); + return irq; +} + +static inline void ecc_set_bits(u32 bit_mask, void __iomem *ioaddr) +{ + u32 value = readl(ioaddr); + + value |= bit_mask; + writel(value, ioaddr); +} + +static inline void ecc_clear_bits(u32 bit_mask, void __iomem *ioaddr) +{ + u32 value = readl(ioaddr); + + value &= ~bit_mask; + writel(value, ioaddr); +} + +static inline int ecc_test_bits(u32 bit_mask, void __iomem *ioaddr) +{ + u32 value = readl(ioaddr); + + return (value & bit_mask) ? 1 : 0; +} + +/* + * This function uses the memory initialization block in the Arria10 ECC + * controller to initialize/clear the entire memory data and ECC data. + */ +static int __maybe_unused altr_init_memory_port(void __iomem *ioaddr, int port) +{ + int limit = ALTR_A10_ECC_INIT_WATCHDOG_10US; + u32 init_mask, stat_mask, clear_mask; + int ret = 0; + + if (port) { + init_mask = ALTR_A10_ECC_INITB; + stat_mask = ALTR_A10_ECC_INITCOMPLETEB; + clear_mask = ALTR_A10_ECC_ERRPENB_MASK; + } else { + init_mask = ALTR_A10_ECC_INITA; + stat_mask = ALTR_A10_ECC_INITCOMPLETEA; + clear_mask = ALTR_A10_ECC_ERRPENA_MASK; + } + + ecc_set_bits(init_mask, (ioaddr + ALTR_A10_ECC_CTRL_OFST)); + while (limit--) { + if (ecc_test_bits(stat_mask, + (ioaddr + ALTR_A10_ECC_INITSTAT_OFST))) + break; + udelay(1); + } + if (limit < 0) + ret = -EBUSY; + + /* Clear any pending ECC interrupts */ + writel(clear_mask, (ioaddr + ALTR_A10_ECC_INTSTAT_OFST)); + + return ret; +} + +static __init int __maybe_unused +altr_init_a10_ecc_block(struct device_node *np, u32 irq_mask, + u32 ecc_ctrl_en_mask, bool dual_port) +{ + int ret = 0; + void __iomem *ecc_block_base; + struct regmap *ecc_mgr_map; + char *ecc_name; + struct device_node *np_eccmgr; + + ecc_name = (char *)np->name; + + /* Get the ECC Manager - parent of the device EDACs */ + np_eccmgr = of_get_parent(np); + ecc_mgr_map = syscon_regmap_lookup_by_phandle(np_eccmgr, + "altr,sysmgr-syscon"); + of_node_put(np_eccmgr); + if (IS_ERR(ecc_mgr_map)) { + edac_printk(KERN_ERR, EDAC_DEVICE, + "Unable to get syscon altr,sysmgr-syscon\n"); + return -ENODEV; + } + + /* Map the ECC Block */ + ecc_block_base = of_iomap(np, 0); + if (!ecc_block_base) { + edac_printk(KERN_ERR, EDAC_DEVICE, + "Unable to map %s ECC block\n", ecc_name); + return -ENODEV; + } + + /* Disable ECC */ + regmap_write(ecc_mgr_map, A10_SYSMGR_ECC_INTMASK_SET_OFST, irq_mask); + writel(ALTR_A10_ECC_SERRINTEN, + (ecc_block_base + ALTR_A10_ECC_ERRINTENR_OFST)); + ecc_clear_bits(ecc_ctrl_en_mask, + (ecc_block_base + ALTR_A10_ECC_CTRL_OFST)); + /* Ensure all writes complete */ + wmb(); + /* Use HW initialization block to initialize memory for ECC */ + ret = altr_init_memory_port(ecc_block_base, 0); + if (ret) { + edac_printk(KERN_ERR, EDAC_DEVICE, + "ECC: cannot init %s PORTA memory\n", ecc_name); + goto out; + } + + if (dual_port) { + ret = altr_init_memory_port(ecc_block_base, 1); + if (ret) { + edac_printk(KERN_ERR, EDAC_DEVICE, + "ECC: cannot init %s PORTB memory\n", + ecc_name); + goto out; + } + } + + /* Interrupt mode set to every SBERR */ + regmap_write(ecc_mgr_map, ALTR_A10_ECC_INTMODE_OFST, + ALTR_A10_ECC_INTMODE); + /* Enable ECC */ + ecc_set_bits(ecc_ctrl_en_mask, (ecc_block_base + + ALTR_A10_ECC_CTRL_OFST)); + writel(ALTR_A10_ECC_SERRINTEN, + (ecc_block_base + ALTR_A10_ECC_ERRINTENS_OFST)); + regmap_write(ecc_mgr_map, A10_SYSMGR_ECC_INTMASK_CLR_OFST, irq_mask); + /* Ensure all writes complete */ + wmb(); +out: + iounmap(ecc_block_base); + return ret; +} + +static int validate_parent_available(struct device_node *np); +static const struct of_device_id altr_edac_a10_device_of_match[]; +static int __init __maybe_unused altr_init_a10_ecc_device_type(char *compat) +{ + int irq; + struct device_node *child, *np = of_find_compatible_node(NULL, NULL, + "altr,socfpga-a10-ecc-manager"); + if (!np) { + edac_printk(KERN_ERR, EDAC_DEVICE, "ECC Manager not found\n"); + return -ENODEV; + } + + for_each_child_of_node(np, child) { + const struct of_device_id *pdev_id; + const struct edac_device_prv_data *prv; + + if (!of_device_is_available(child)) + continue; + if (!of_device_is_compatible(child, compat)) + continue; + + if (validate_parent_available(child)) + continue; + + irq = a10_get_irq_mask(child); + if (irq < 0) + continue; + + /* Get matching node and check for valid result */ + pdev_id = of_match_node(altr_edac_a10_device_of_match, child); + if (IS_ERR_OR_NULL(pdev_id)) + continue; + + /* Validate private data pointer before dereferencing */ + prv = pdev_id->data; + if (!prv) + continue; + + altr_init_a10_ecc_block(child, BIT(irq), + prv->ecc_enable_mask, 0); + } + + of_node_put(np); + return 0; +} + /*********************** OCRAM EDAC Device Functions *********************/ #ifdef CONFIG_EDAC_ALTERA_OCRAM diff --git a/drivers/edac/altera_edac.h b/drivers/edac/altera_edac.h index cf4e8cb..aa7c690 100644 --- a/drivers/edac/altera_edac.h +++ b/drivers/edac/altera_edac.h @@ -230,8 +230,13 @@ struct altr_sdram_mc_data { #define ALTR_A10_ECC_INITCOMPLETEB BIT(8) #define ALTR_A10_ECC_ERRINTEN_OFST 0x10 +#define ALTR_A10_ECC_ERRINTENS_OFST 0x14 +#define ALTR_A10_ECC_ERRINTENR_OFST 0x18 #define ALTR_A10_ECC_SERRINTEN BIT(0) +#define ALTR_A10_ECC_INTMODE_OFST 0x1C +#define ALTR_A10_ECC_INTMODE BIT(0) + #define ALTR_A10_ECC_INTSTAT_OFST 0x20 #define ALTR_A10_ECC_SERRPENA BIT(0) #define ALTR_A10_ECC_DERRPENA BIT(8) @@ -280,6 +285,9 @@ struct altr_sdram_mc_data { /* Arria 10 OCRAM ECC Management Group Defines */ #define ALTR_A10_OCRAM_ECC_EN_CTL (BIT(1) | BIT(0)) +/* A10 ECC Controller memory initialization timeout */ +#define ALTR_A10_ECC_INIT_WATCHDOG_10US 10000 + struct altr_edac_device_dev; struct edac_device_prv_data { -- 1.7.9.5