From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752754AbcADRYY (ORCPT ); Mon, 4 Jan 2016 12:24:24 -0500 Received: from mail-by2on0064.outbound.protection.outlook.com ([207.46.100.64]:20363 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751969AbcADRYU (ORCPT ); Mon, 4 Jan 2016 12:24:20 -0500 Authentication-Results: spf=fail (sender IP is 66.35.236.236) smtp.mailfrom=opensource.altera.com; xmission.com; dkim=pass (signature was verified) header.d=altera.onmicrosoft.com;xmission.com; dmarc=none action=none header.from=opensource.altera.com; Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=dinguyen@opensource.altera.com; Message-ID: <568AA929.1020801@opensource.altera.com> Date: Mon, 4 Jan 2016 11:17:29 -0600 From: Dinh Nguyen User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Borislav Petkov CC: , , , , , , Subject: Re: [PATCHv7] EDAC, altera: Add Altera L2 Cache and OCRAM EDAC Support References: <1445978292-29918-1-git-send-email-dinguyen@opensource.altera.com> <20151119183421.GG6065@pd.tnic> In-Reply-To: <20151119183421.GG6065@pd.tnic> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [64.129.157.38] X-ClientProxiedBy: SN1PR0501CA0006.namprd05.prod.outlook.com (25.163.126.144) To CY1PR03MB1375.namprd03.prod.outlook.com (25.163.16.29) X-Microsoft-Exchange-Diagnostics-untrusted: 1;CY1PR03MB1375;2:P60l9YxaeXgDN9MKBhDQ30EbZ+Hoxpxg91gV5D1qC71+cUqs5TmYv8wySRavCa01gWucCq24AgMzUFL3/KjTvfTgHyN6fDt+2xIPxP2A1cvCLvnY5mmO5aXOkZHsCnh3SPCRsacNK3cqaQHlZgJ0Cg==;3:c69xtyOLxcp43AKo73coqhQmQu6MUDJlKzBuE4J1bnHjXZtJt0L5lishp+i3E5aMgDhYjRnBRLM/GRpdvjhGiDCerdzl2Mvz6u0ShznWhyRO5zGpwiQPezX4dL/mAO9J;25:p9vGB0m2trQG34KNf44YakCbnQU0Cxd5I6Kd189+mi3cP6xvgfKJXA0JoCU+tiTXRRGwmwM2PwkEgBcsVdIsem6kKSITPhu0VZDlQwyijMzw/z1xvdqbiRm05gOJxRTk22DTqp/yCpSk5hi94URGybdAqYnoYY/QcPtEc4++WQffAGEffGQ5cs+askoulKxXEoE0sg0b34EylA1brutAXeoEG0W+o9egzkRe74xb9z5WmrjP9e2pOgMUb2cazydgF8nfglLEU7lLRz5gU7xpSQ==;20:dJgYwrFUEOy5aK7O9r1I6i/514PA3G4Tt+ODZ/2Bty5BJd1rvyB9s2VGjtLU63TiUyFlvukTEzyETPanZ44NYoW0p1SrYJHu9cjV069eA12bPkXsLvVOqGpHYk/WKUdagTFCf+/g/ziibI/BQF3CDn1kwxnlYSG4qrho4B5H/To= X-Microsoft-Antispam-Untrusted: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1375; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(80048183373757)(204874498639787);UriScan:(80048183373757)(204874498639787); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(10201501046)(3002001);SRVR:CY1PR03MB1375;BCL:0;PCL:0;RULEID:;SRVR:CY1PR03MB1375;BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(10201501046)(3002001);SRVR:BY2PR03MB444;BCL:0;PCL:0;RULEID:;SRVR:BY2PR03MB444; X-Microsoft-Exchange-Diagnostics-untrusted: 1;CY1PR03MB1375;4:7uKZzP03kC1iGIDZjRMKpBSCbIKix3e4Q1/0c2UZOxRNGDKTaNwqKfC9cHShpmt66L4l4hGTAPs3MEVrucqiQMNwryMZhP+hxu7Ih0XkVAcboPJvDSTItYu0xRj/JJdZ/08rdggc7MPk0kPrJkyjnQWb6pnaiPecObcfR/hEtoJ/LpoOV8wEgJrjSSsXTyI/h6PK+g1FGcAYKFFYJ5iTBbmcuu+lNMONb5uL6A7QoHORu2TZe+L8icze6ukGyHZ7OmYeRcO0cMzztHflyrAGW6O7GU4QSWBRRHNBnLylMTUaI37uBOWVr+UyiK8v4g+XP9WsCj7c/ON6pTUEo9uMcQdoLz3QS+CJcNYpncCgWtuJvuFy0NiRWSb7tqbFcY3Yk23Ny3IqPMoJ+EtVaJn8gkXSrgC9LPXm3ZGHfNo60LYTn2ngy4WqR5U4jmBANWlyXzofjABdu5B6fNexV9DlKA== X-Forefront-PRVS: 08118EFC2B X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;SFS:(10009020)(6009001)(6049001)(479174004)(51914003)(199003)(24454002)(189002)(377454003)(40100003)(65816999)(19580405001)(5008740100001)(87266999)(76176999)(101416001)(64126003)(77096005)(50466002)(5004730100002)(122386002)(19580395003)(105586002)(23676002)(87976001)(4326007)(66066001)(6116002)(54356999)(2950100001)(42186005)(86362001)(586003)(230700001)(47776003)(83506001)(1096002)(189998001)(65806001)(97736004)(80316001)(81156007)(50986999)(5001960100002)(106356001)(3846002)(33656002)(65956001)(4001350100001)(92566002)(59896002)(110136002)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR03MB1375;H:[137.57.160.210];FPR:;SPF:None;PTR:InfoNoRecords;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics-untrusted: =?utf-8?B?MTtDWTFQUjAzTUIxMzc1OzIzOlZtb2grSWREOTZmWTFjRWtGUy9VQlJKbXdq?= =?utf-8?B?Wm9SclkxTWJPUmNsNG5hcXdJcEVoS3RUSWwvOWY5Sk1PVzcyS0xQOUtmdDFE?= =?utf-8?B?RUlINzUxVGNseUJqS0I0NUYzOE5yQ1Bvc1VBRkRiSm9tQ0h5eU9Qd1F5ZjVI?= =?utf-8?B?Z2ZwcjdNVDVHeVEwamM1N0hNKzBjbzhzTzdZNHp4bGQyRkh2bVRzNUNZbUZ6?= =?utf-8?B?Sjc0aTdCVW5vZEp1U0VnK2VQb0Q5TWlYdHZ0eE4zdk1kMno1Y1ltTVo5enBz?= =?utf-8?B?Mk9RMTE0ZUpIZ3dYL2FTQ2tNMkxBbTFPOG1zUER5dTEvclpQQjlvTUhyMGQx?= =?utf-8?B?NHdITVZHOSt1elFUVEh2L05Da3htYXF1NEFrbkRRVSt5MktQcWhWYndhR3B4?= =?utf-8?B?ZmU4Q2xnaTFZd0N5a3J1a1VBUnZiWHlkOStxYkNGNUhQbjdoamRLYTJSRml2?= =?utf-8?B?QXErQ3k0dGNqS2dLTUVnV2tjZW56ZS9NY0xud1NEdjMwYktLNVU3bGYxNDFX?= =?utf-8?B?d0ZOaVltSEUvdFR4NkxMeTJWZm9mUmRSWDlRaWtNWVhsbFAwbzE0ZVNucW15?= =?utf-8?B?UW5xcHp4SzMxSzlzZTN0TXh0bER0OFhJM2Z2YzVrdzI3L2tpYU1oeDVKS2lo?= =?utf-8?B?aE9KTkNFU1V1cisrWEp6dmZNbWkzK055anBjQy9YaGdrZXlBSVdWYWl5ZVdx?= =?utf-8?B?aEdBSE9yRU1selpBamh1bjZHcHlqU243TUZ5bnF3U1BGa3ZHRjE2UXVLOHBi?= =?utf-8?B?NVFLa2VVTTJ6N09odmxnTDEvZmgvb2laN3BUbU5jckpNNHFTQzg0TXh5MVFE?= =?utf-8?B?cUR4SEhENzlIaVlCQ2tpYzVXWlZoVzZXOTRnbFluT1NOTTR5OW83WGVtNzJl?= =?utf-8?B?VUVaSS9EWmUwWjlDWElONnJWMnBPWVptb0RkWXRDTExjS1BlSzd0RnZ0L1B0?= =?utf-8?B?WGpXVkczTDRkcTYxVzh1eitURnM3bi9xNENFMi9TYWpwWlFoeGEvazM2cVk1?= =?utf-8?B?Rm5Mbk9LZENtUjZjUFFHazRzQk1sLzA5SlU4MXRWMUx2ckQxOWt6THVqNGFR?= =?utf-8?B?TDhWclcva3dudmFTaGZFdGt1ZlFEckc2Z3hLUk1lYXlQejhIV1RUVFhKUEs1?= =?utf-8?B?clhYVXh0YVh2UE1PTXd0dm1UQjRvN0pTNzREeXI1VHB2V0F1bWdQc0s4Z0FY?= =?utf-8?B?c1lpMVRnREdENllLU0Z1MTZBRXgwSmxkS2N2d0lBVTdqWGEyc1BndmhURDRU?= =?utf-8?B?amVuTlA1NjdNKzJvUDlla2V0d2szbFZvZGpOWkljZGVCeXlqdDFvMXFWY3Vv?= =?utf-8?B?cFBUSXNMZG8xL2FwRmgwaHE1bE40UW5zUGp2NmdDYTEvbUFpaENPeDNYN201?= =?utf-8?B?TGoxL1RkQmR1RzMvSmlZVFdiTWt6dVVBNjQzYVBZSXZ5R3VOMUR0ajJyd1RF?= =?utf-8?B?REZiQmdDeEpKdWlabkdzdDhlSE5IMm9OTFIzTG1OTmZZeFpHNGxIcXB3K3o5?= =?utf-8?B?R2F5OStncUtFV3I4VlRPWHowazJ6UDM0b25RNWwrenY0dTJUcHEzRWlONU11?= =?utf-8?B?SWE3dTBkQ2xKSTRjUzlmdEo0SkRSYTlCMkV4Uk5qa09oK3ZDLzJiaVo4V0lH?= =?utf-8?B?TmtjZ2p0RDEvamNTYzFjdW05bFlFVGVWZGlOTzZkaDl2ckFtZEhST3lhL3pT?= =?utf-8?B?R0dhTUx1dTdpNHpveThBVENYT1VRMDAxeEtrS0M5N000Y3FYTUlwTGl0c1E1?= =?utf-8?B?VC9UYUtjV2pKdll2LzA4RU91L1I2SkcyRjBsMHpCSlpRYWl6RXdHK3JpV1pm?= =?utf-8?Q?Q6VtyILnCEj0h?= X-Microsoft-Exchange-Diagnostics-untrusted: 1;CY1PR03MB1375;5:byHUiorHFGJclE3e2cjclmW75svl8ukFx4fBtKOZN26a8Pm0VtJhz3YKMtG5IWgqP4lqtDv+4x80JyIxodffZT/Unc0/z1mXBodXIKnPp1yWgjAIiXgR5us70/SsDMzDzFdOL+nIe3EzNJJRX60/yQ==;24:00on8z8Vuwlq+FZmWLAPKZsj2Hru3zD9hqefVAkQ8zS3fXGMo7Ucx9b761HTyvQSdQFKDycj2oCjC6f+dqwWus9rf/rL4duWsQko2bon0+8=;20:QxnPZrWEH3Vlh9Piqe/abfUAkZq45w+YxmOU83biHRc1sByrsX2heuIYUYnO9SNsL60AsWOjN8EdCPG1T9mvi2EF8LmX40vEfMf578MFvUsQiQLw+Dy4+5YlQU9sklHCDwGd9O/hd38h1M7mMDVCSjEnQ18rhOQfPPzqInMWWr4= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR03MB1375 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: BN1AFFO11FD005.protection.gbl X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD005;1:/qhON6Fd93buSilxaD/f0vbgIGFh1H+a7GxRIIyBYdflIoIVP9pyu7EmAxITc5Rh2XZzAqIej9rSRA+3criEjqMlAOwvQXiLs9PCutv3G8sM0NnSznXLiPEpifIkerJikxO4PuQ69PoOcSsodK/l4Th5+0JAc7Z63vDFTIrKmNBqZUCLgcEQ+tgTAamn5Ak5edFZ0CJFSv7SiqksPSVWLxZQRkis/PeQJEHDk1EvfjZD8QyU+WQneALIu4oM42R6+eGOXm7Yb9xR+EkZqwLGtot76PoZL3qpgcQaCapdc24pU8AjadcpxC8ULmhnMIRbUFgD4D+FEpUKepaTwPOwZViJXdwSYCwfdfDLrlYmqpoLb2VzKo5UJG/cv9GKrTqt X-Forefront-Antispam-Report: CIP:66.35.236.236;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(1110001)(1109001)(339900001)(51914003)(24454002)(377454003)(479174004)(199003)(189002)(110136002)(23676002)(5004730100002)(64126003)(5001960100002)(47776003)(1220700001)(76176999)(19580395003)(50986999)(54356999)(77096005)(87936001)(66066001)(87266999)(3846002)(6116002)(4001350100001)(81156007)(956001)(80316001)(97736004)(2950100001)(59896002)(105606002)(6806005)(65816999)(85426001)(40100003)(50466002)(106466001)(90366008)(16796002)(83506001)(65956001)(65806001)(4326007)(6070500001)(33656002)(92566002)(122386002)(189998001)(21840400001)(5008740100001)(230700001)(1096002)(11100500001)(586003)(19580405001)(86362001)(7099028)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR03MB444;H:sj-itexedge04.altera.priv.altera.com;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB444;2:PpGL7CfLPEC7DlXagr8Lnxxez9/AJ3tOvL9R3f9iqYy3U+U3mCUivLdvyu8Rv4TBrnO3Q+KB18M9lvl3rSr7HTKLd3Ast0X/XKEQ3oe2yjvLxSdlcCe/FenCG5wibE/mfjhJZ1ptQu57N+jdaH04ow==;3:/6TMQ26o83tU4Ic1N5nxzt8vBmsuHcxKbG5OWiGVtoag6meiz7RN53xEhLfPaGmqoUhvPGXYovdyqin1Fw1V0HN1+cDNk+4fiUn/5ETFWm9x+Rw/rtrqg5q5eTGygEUHBxbQd/dg5T0snDeNtbvU5uci/hT/uA/Eta/xTAaWQGBsOumbpsAJh3R75QJMkDrs2RxQpS0CPtVW1qteoWWb88PGjGX3lsmsPMeWroqUbB+ZmjbMQrwpxiGNm0K4AxIy;25:ZaepRyi5D1rgZwCbEQKxXxYhULmAV7JcLU0cG4HNh88q6fM7Lmm3NhGWZW2/wQRp1/i5IKVBd4TgWDB/3CZYHL97DT7ofA7sCTxxcUmS6HgxR1HVxi5oCrEbjP84faGwmX8IThPCUKk8lnVcCgNMF/3P3v79gOrPjZANd6pPr71OxK7Pc+7xpBFIyGcdeF+0y7bepIEU88QZWy/yq1XJD9MdD0ntrC7t3niA1uhum7rK5uDsRgVks+s5DXtxBXe9OHkR7h+N6ruaWzG4HX0iyg==;20:zwP6+m6Bi4n20vo07ItBxoto6HmMxBFF8IV9HNlnHf39XEBc/GWpOXvjmroPQckgln+3gOu8y+ahkBtJhvorSwyINx8QPOzY57eJxzyydM6KY+O++f+ZUt9ZeH/T//19Gv70ZsC03aJp7m9PykyQ8XbUZehQIIG/e7D8jyJr+es= X-DkimResult-Test: Passed X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(3001015);SRVR:BY2PR03MB444; X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB444;4:ZhakqKnmLGhUJ+L/UlzkbPTUIRe/eS1TxtP1Rrp3y5gxO/CLFoDCCZ86fbBEEBPsNl0zKOk/4TAy/aIkCDLk72udg0OQqLehXb9e2IwdfBr7CNF+mu9zAhR/JVN6cOn4dkp1UYJsoqwfwQdurkbXYaBiizKhqWHpguaAbi5Ej0IoAeFD2PmgKaNhGBvvxEGSbpd/A6XKnt+WAq8oR1D17SxhrH/f15VPimazlY9OpCNkJHbiC6EZyI70DYpvqrMrcXNSc5C+yoawXib+rOWGgAWbuNosVZjIU7wwZ2YXp4OtpH9KXubgp7il88ltKoQO5CQwKygKU02nvAWqV/zlweqqsGxKm1X9PyRqRtaGrlynIMPBj40cHU8ufODKsTc+dMo5syrTSC6uQKurSf+AI0q5uM2rH6D5Iy93a1dGl6hm5jHGuaUGQIJE37BMXygWbiFSaD8JRZXnZMYBSoIkkg== X-Forefront-PRVS: 08118EFC2B X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJQUjAzTUI0NDQ7MjM6N2VJUlFkWlNaS0FoRmxVcWV2MmZYUHpXTjFv?= =?utf-8?B?bWdLV21TeGhmQWJKNjRZZHJqZW9BcEtOZi95VTBlUEtZV1ZLRWEwWnNub0FC?= =?utf-8?B?RWRlTlRDNjFIRElsOHV4bmNiRUtuZEZON2hSaUdwSzZRUjN3ZktNT1VXdlJq?= =?utf-8?B?YUVFNm51THp0YzJoTWxwL1JSQ2tJeTRNM3NuZkY3NzJ1Rkd2RkJ2WXRKMjN5?= =?utf-8?B?Z0ZiQU9QWjNjZ2o4NmYyR3NJbmgxQWZNdHQzVkNmZFVjWVpQUHJ1QnRRTzUv?= =?utf-8?B?TGo0bGpsb29rRXU5ZnVMTWZ1TjFvTVpMeEtUdkZhTk9FbXBxc1Z1L2Q2NC9I?= =?utf-8?B?MmErOE11MVRBdkxwRzBJTDNVcm05L2JUS3VtNTk4VjlhODdaMDVINE8rVExv?= =?utf-8?B?QXhpZzhLMzhsYTBMU0l6NEFqSWptdmlQVm9Pam9rR1NXUVZJWGd5VzZjQkx5?= =?utf-8?B?cURXWklQUnFNNlJ6bFd0Z3IwNEZiUE5qT21iZG1jVElVdDZyTi9pOW9rbU9I?= =?utf-8?B?alNFMnhqYVJSYzNvMk1xNTU5QjUyaEVDL3ZpUjhaL3VYYmxkRW1lZUVBTWZq?= =?utf-8?B?aU1YVDNhbkxCcEFraENDcUxuZXJvazk4dDY4YzJESVlQM3JscncxQVVIY2ZC?= =?utf-8?B?KzJla2RXSUU3Vm5RZml5TmZKTmRQamEyZlgrTzNOWDRLdGUvNGVCYzBsT2xa?= =?utf-8?B?TlRtclhTR0FnQ0kxT0srZW5TK0pTaEltRUNzYkdNM3haSUVsK3JibEJiTTBy?= =?utf-8?B?VmZYMmlMUmhmRmNSSGRGQjdNOEFDZEJpNzZBRE1YaWZNWmoxdmtSMEx0R1V4?= =?utf-8?B?NnZFUHEwWEtzejNCVE93MnU2RmtnVGVkbGNscEFPU0NJcVpTNjJ1VTR6MklK?= =?utf-8?B?VkI3U3IrMHcwMGtkWnRBWC9PQlk5V3RLR3czeDJ2cjlxOVhVdDZBcW4vVHNl?= =?utf-8?B?SHdBelNpNjByY09RWUxxdnVMMnhHeVZGTHJwRndxMmo5MDNtaEhXcGsvVGY2?= =?utf-8?B?OTRDWisvMFVLSXN4NmFHT1M0MCtWTGNwMC9heFY1MmtIWW8yR283NVA4Tzg3?= =?utf-8?B?UXVSaFByZDZwRnRINkZTVHNQRXpzL3A1RFRmMWVPOEdLd3NMNGhKNHlBQmM0?= =?utf-8?B?TUpnNHF3QzRkRjJSMUwrMHovNVdVNEJYYjBVMnp6YlNRaXNHcXVkOUxkKzhI?= =?utf-8?B?cytMRWNtZ3dQWk9ZSVFCRmdTRjJmOU1ONVFKUG53VkU4NjN0MEVLTGZacHZO?= =?utf-8?B?MlZhUEZMTVoyb1pjNU96YlF5eThTSnBQUWMzdWZNT21kSXQ2N0VtYnZYelRi?= =?utf-8?B?bDhyUnJ1Mlo4QzRPWGRtVWpXVDhUWSt1NFBHZ3BaSjVqclAxeHJ3TVgzQkw3?= =?utf-8?B?NkhGdHJoUTFRZXdvUWRCQnpXVWpoTFFqRER0N1UzWjlMOGlQdFQ2OWo1ZzQ5?= =?utf-8?B?UENtelRpUForV28rNHEwNmRNeWd5cFJMWllDdm5nem1xRC9rQlFTcDByNk5l?= =?utf-8?B?RlBRSGxmY1JwU1phM1h4TnA2bU9sQkZheEw4bmVTc0ZQcCt0SHR0YzlBK1Jh?= =?utf-8?B?dllBdXQ2UWU3SVZtcU9UTnhjeGNQb3I2VTlRVjRLYnFIaTFIQ3ROVG4wZkMz?= =?utf-8?B?Skg3alN2d2ZTN0J2SmRLT2RMZC9lNUhqM0paSGFBTWNkalVJeDF0ckhSRk9I?= =?utf-8?B?Zyt5UUNKYXZ0RitkSElScWJ1bVZsZzJqOXBESU52cFdpLzdZTXRpVGF3NUw1?= =?utf-8?B?WEQ1eDRMaHV1WEJ5NVZEQVRNamJ4MGU5OEFNWWJrUjZCb0JUeExiOHJDOGh3?= =?utf-8?B?R1BIcjhDWlBiSGlQWTFxVXo1YXJHL09Rd0RpRC9MQzB3WWs4cHprazJraVV1?= =?utf-8?B?MVVBSjBBTkkrbVNiUEs2OHJZbUhpY0s0MnJISTU0KytGVDdMYjBCSG1mdzlU?= =?utf-8?B?ejJJZFo2TktVcFUrRzRFZmlRdzNUUkFlOTZOK3BObm5kU1ZWQnhxMzVkUFpN?= =?utf-8?B?TkFXYXdKbGRqYTNTME1DU2FtMDk0VUNNcFNuTk9jUS8vSlVIODZuNlBMcFlv?= =?utf-8?B?N2tNanpYN1pjYjRqRUJPU1BrMjN5YitqV0s1QXp4L1VqOExqcWE2eWpoQjJQ?= =?utf-8?Q?Xo7zz6zdcJIC9arjjKDlJc=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR03MB444;5:9bIPjOf/mH2paZ9Tna/jk9r1+mBYxFRYBl+sStD6XTkXq5A8sErvp4C/Q6p9M/PYXNSqHd8aan5sb1/Jj/vEQbvVfX3IwZ0FKSk7auB4t2hP8pFbtBS+ZDukD7DqpcmWuEoKRS4Xgp9+YTu+QgbncA==;24:xOskhQFXQx84DemNWHNwldWSIiy1a7DfLG0wVOqS9Z4G2eUzt9JG91np7dE0FM9uJdctcsZwLQNUtflqyYX7LZRNBILtE/zaqX/U6db2L04=;20:oxsRCKDDQcbTdMCwdvwmvPgVHqIuBP/3Bh9JBkO0NI1SRZ/i9bUDVjkKQNHWYvHEhgqAeij1SXHkEvzX2diyU8XgNiECjzkOpnBJsNrIH5rQFIY3WDqM6ATqt0WkLtzOLQezvsqBHC6vnwGk3TwmaJiX+GRWTAPZfxLjPR6dGHE= X-OriginatorOrg: opensource.altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Jan 2016 17:24:15.2010 (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.236];Helo=[sj-itexedge04.altera.priv.altera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR03MB444 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/19/2015 12:34 PM, Borislav Petkov wrote: > On Tue, Oct 27, 2015 at 03:38:12PM -0500, dinguyen@opensource.altera.com wrote: >> From: Thor Thayer >> >> Adding L2 Cache and On-Chip RAM EDAC support for the >> Altera SoCs using the EDAC device model. The SDRAM >> controller is using the Memory Controller model. >> >> Each type of ECC is individually configurable. >> >> The SDRAM ECC is a separate Kconfig option because: >> 1) the SDRAM preparation can take almost 2 seconds on boot and some >> customers need a faster boot time. >> 2) the SDRAM has an ECC initialization dependency on the preloader >> which is outside the kernel. It is desirable to be able to turn the >> SDRAM on & off separately. >> >> Signed-off-by: Thor Thayer >> Signed-off-by: Dinh Nguyen >> --- >> v7: s/of_get_named_gen_pool/of_gen_pool_get >> Remove #ifdef for EDAC_DEBUG >> Use -ENODEV instead of EPROBE_DEFER >> >> v6: Convert to nested EDAC in device tree. Force L2 cache >> on for L2Cache ECC & remove L2 cache syscon for checking >> enable bit. Update year in header. >> >> v5: No Change >> >> v4: Change mask defines to use BIT(). >> Fix comment style to agree with kernel coding style. >> Better printk description for read != write in trigger. >> Remove SysFS debugging message. >> Better dci->mod_name >> Move gen_pool pointer assignment to end of function. >> Invert logic to reduce indent in ocram depenency check. >> Change from dev_err() to edac_printk() >> Replace magic numbers with defines & comments. >> Improve error injection test. >> Change Makefile intermediary name to altr (from alt) >> >> v3: Move OCRAM and L2 cache EDAC functions into altera_edac.c >> instead of separate files. >> >> v2: Fix L2 dependency comments. >> --- >> drivers/edac/Kconfig | 16 ++ >> drivers/edac/Makefile | 5 +- >> drivers/edac/altera_edac.c | 488 ++++++++++++++++++++++++++++++++++++++++++++- >> 3 files changed, 507 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/edac/Kconfig b/drivers/edac/Kconfig >> index ef25000..b80b4ad 100644 >> --- a/drivers/edac/Kconfig >> +++ b/drivers/edac/Kconfig [snip] >> diff --git a/drivers/edac/Makefile b/drivers/edac/Makefile >> index dbf53e0..8f1c6fc 100644 >> --- a/drivers/edac/Makefile >> +++ b/drivers/edac/Makefile >> @@ -67,6 +67,9 @@ obj-$(CONFIG_EDAC_OCTEON_L2C) += octeon_edac-l2c.o >> obj-$(CONFIG_EDAC_OCTEON_LMC) += octeon_edac-lmc.o >> obj-$(CONFIG_EDAC_OCTEON_PCI) += octeon_edac-pci.o >> >> -obj-$(CONFIG_EDAC_ALTERA_MC) += altera_edac.o >> +altr_edac-y := altera_edac.o >> +obj-$(CONFIG_EDAC_ALTERA_MC) += altr_edac.o >> +obj-$(CONFIG_EDAC_ALTERA_L2C) += altr_edac.o >> +obj-$(CONFIG_EDAC_ALTERA_OCRAM) += altr_edac.o > > What are those supposed to accomplish? > We tried to jam the L2 and OCRAM EDAC functionality in the same altr_edac.c file. It looks like it might be clean if we split out the L2 and OCRAM functions into their appropriate files(altr_edac_l2.c and altr_edac_ocram.c). Do you agree? >> obj-$(CONFIG_EDAC_SYNOPSYS) += synopsys_edac.o >> obj-$(CONFIG_EDAC_XGENE) += xgene_edac.o >> diff --git a/drivers/edac/altera_edac.c b/drivers/edac/altera_edac.c >> index 9296409..154ac8c 100644 >> --- a/drivers/edac/altera_edac.c >> +++ b/drivers/edac/altera_edac.c >> @@ -17,8 +17,10 @@ >> * Adapted from the highbank_mc_edac driver. >> */ >> >> +#include >> #include >> #include >> +#include >> #include >> #include >> #include >> @@ -34,6 +36,7 @@ >> >> #define EDAC_MOD_STR "altera_edac" >> #define EDAC_VERSION "1" >> +#define EDAC_DEVICE "ALTR_MEM" > > Let's simply call it "Altera" - it is more human-friendly. > Ok. >> static const struct altr_sdram_prv_data c5_data = { >> .ecc_ctrl_offset = CV_CTLCFG_OFST, >> @@ -75,6 +78,33 @@ static const struct altr_sdram_prv_data a10_data = { >> .ue_set_mask = A10_DIAGINT_TDERRA_MASK, >> }; >> >> +/************************** EDAC Device Defines **************************/ >> + >> +/* OCRAM ECC Management Group Defines */ >> +#define ALTR_MAN_GRP_OCRAM_ECC_OFFSET 0x04 >> +#define ALTR_OCR_ECC_EN_MASK BIT(0) >> +#define ALTR_OCR_ECC_INJS_MASK BIT(1) >> +#define ALTR_OCR_ECC_INJD_MASK BIT(2) >> +#define ALTR_OCR_ECC_SERR_MASK BIT(3) >> +#define ALTR_OCR_ECC_DERR_MASK BIT(4) >> + >> +/* L2 ECC Management Group Defines */ >> +#define ALTR_MAN_GRP_L2_ECC_OFFSET 0x00 >> +#define ALTR_L2_ECC_EN_MASK BIT(0) >> +#define ALTR_L2_ECC_INJS_MASK BIT(1) >> +#define ALTR_L2_ECC_INJD_MASK BIT(2) > > Single bit masks? You don't need to call them "_MASK" - simply remove > it. > Ok. >> +#define ALTR_UE_TRIGGER_CHAR 'U' /* Trigger for UE */ >> +#define ALTR_TRIGGER_READ_WRD_CNT 32 /* Line size x 4 */ >> +#define ALTR_TRIG_OCRAM_BYTE_SIZE 128 /* Line size x 4 */ >> +#define ALTR_TRIG_L2C_BYTE_SIZE 4096 /* Full Page */ >> + >> +/*********************** EDAC Memory Controller Functions ****************/ >> + >> +/* The SDRAM controller uses the EDAC Memory Controller framework. */ >> + >> +#ifdef CONFIG_EDAC_ALTERA_MC >> + >> static irqreturn_t altr_sdram_mc_err_handler(int irq, void *dev_id) >> { >> struct mem_ctl_info *mci = dev_id; >> @@ -504,6 +534,462 @@ static struct platform_driver altr_sdram_edac_driver = { >> >> module_platform_driver(altr_sdram_edac_driver); >> >> +#endif /* #ifdef CONFIG_EDAC_ALTERA_MC */ > > #endif /* CONFIG_EDAC_ALTERA_MC */ > > is the usual syntax for those. > Ok.. >> +/************************* EDAC Parent Probe *************************/ >> + >> +static const struct of_device_id altr_edac_device_of_match[]; >> + >> +static const struct of_device_id altr_edac_of_match[] = { >> + { .compatible = "altr,edac" }, >> + {}, >> +}; >> +MODULE_DEVICE_TABLE(of, altr_edac_of_match); >> + >> +static int altr_edac_probe(struct platform_device *pdev) >> +{ >> + of_platform_populate(pdev->dev.of_node, altr_edac_device_of_match, >> + NULL, &pdev->dev); >> + return 0; >> +} >> + >> +static struct platform_driver altr_edac_driver = { >> + .probe = altr_edac_probe, >> + .driver = { >> + .name = "altr_edac", >> + .of_match_table = altr_edac_of_match, >> + }, >> +}; >> +module_platform_driver(altr_edac_driver); > > WARNING: DT compatible string "altr,edac" appears un-documented -- check ./Documentation/devicetree/bindings/ > #176: FILE: drivers/edac/altera_edac.c:543: > + { .compatible = "altr,edac" }, > > WARNING: DT compatible string "altr,l2-edac" appears un-documented -- check ./Documentation/devicetree/bindings/ > #326: FILE: drivers/edac/altera_edac.c:693: > + { .compatible = "altr,l2-edac", .data = (void *)&l2ecc_data }, > > WARNING: DT compatible string "altr,ocram-edac" appears un-documented -- check ./Documentation/devicetree/bindings/ > #329: FILE: drivers/edac/altera_edac.c:696: > + { .compatible = "altr,ocram-edac", .data = (void *)&ocramecc_data }, > These bindings were in a separate patch that you were not CC'd. I'll keep you on the entire patch set in the future. >> + >> +/************************* EDAC Device Functions *************************/ >> + >> +/* >> + * EDAC Device Functions (shared between various IPs). >> + * The discrete memories use the EDAC Device framework. The probe >> + * and error handling functions are very similar between memories >> + * so they are shared. The memory allocation and free for EDAC trigger > > and freeing > >> + * testing are different for each memory. >> + */ >> + >> +const struct edac_device_prv_data ocramecc_data; >> +const struct edac_device_prv_data l2ecc_data; >> + >> +struct edac_device_prv_data { >> + int (*setup)(struct platform_device *pdev, void __iomem *base); >> + int ce_clear_mask; >> + int ue_clear_mask; >> + struct edac_dev_sysfs_attribute *eccmgr_sysfs_attr; >> + void * (*alloc_mem)(size_t size, void **other); >> + void (*free_mem)(void *p, size_t size, void *other); >> + int ecc_enable_mask; >> + int ce_set_mask; >> + int ue_set_mask; >> + int trig_alloc_sz; >> +}; >> + >> +struct altr_edac_device_dev { >> + void __iomem *base; >> + int sb_irq; >> + int db_irq; >> + const struct edac_device_prv_data *data; >> + char *edac_dev_name; >> +}; >> + >> +static irqreturn_t altr_edac_device_handler(int irq, void *dev_id) >> +{ >> + struct edac_device_ctl_info *dci = dev_id; >> + struct altr_edac_device_dev *drvdata = dci->pvt_info; >> + const struct edac_device_prv_data *priv = drvdata->data; >> + >> + if (irq == drvdata->sb_irq) { >> + if (priv->ce_clear_mask) >> + writel(priv->ce_clear_mask, drvdata->base); >> + edac_device_handle_ce(dci, 0, 0, drvdata->edac_dev_name); >> + } >> + if (irq == drvdata->db_irq) { >> + if (priv->ue_clear_mask) >> + writel(priv->ue_clear_mask, drvdata->base); >> + edac_device_handle_ue(dci, 0, 0, drvdata->edac_dev_name); >> + panic("\nEDAC:ECC_DEVICE[Uncorrectable errors]\n"); >> + } >> + >> + return IRQ_HANDLED; >> +} >> + >> +ssize_t altr_edac_device_trig(struct edac_device_ctl_info *edac_dci, >> + const char *buffer, size_t count) > > Is that an error injection function? If so, it should be behind > CONFIG_EDAC_DEBUG or an altera-specific Kconfig item which people can > enable - you don't want people to be able to inject errors on production > systems. > > Also, those injection facilities should be in debugfs and not sysfs - > look at xgene_edac for an example. Yes, there is an injection, and it is using sysfs. Will have to update. > > I'll stop here - that's enough TODO for now :-) > Yes, I'll address all of the above comments in v9. Thanks for the review. Dinh