From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934217AbbI1Qjj (ORCPT ); Mon, 28 Sep 2015 12:39:39 -0400 Received: from mail-bl2on0067.outbound.protection.outlook.com ([65.55.169.67]:57298 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933821AbbI1Qjg (ORCPT ); Mon, 28 Sep 2015 12:39:36 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.221) smtp.mailfrom=amd.com; alien8.de; dkim=none (message not signed) header.d=none;alien8.de; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0NVEBLV-07-9ZJ-02 X-M-MSG: From: Aravind Gopalakrishnan To: , , CC: , Subject: [PATCH V2 1/3] EDAC, amd64_edac: Extend scrub rate programmability feature for F15hM60h Date: Mon, 28 Sep 2015 06:43:12 -0500 Message-ID: <1443440593-2316-2-git-send-email-Aravind.Gopalakrishnan@amd.com> X-Mailer: git-send-email 2.4.0 In-Reply-To: <1443440593-2316-1-git-send-email-Aravind.Gopalakrishnan@amd.com> References: <1443440593-2316-1-git-send-email-Aravind.Gopalakrishnan@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.221;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(199003)(189002)(62966003)(77156002)(229853001)(189998001)(19580395003)(97736004)(87936001)(36756003)(19580405001)(68736005)(4001540100001)(5001770100001)(76176999)(105586002)(77096005)(86362001)(101416001)(50986999)(5001830100001)(46102003)(106466001)(5001860100001)(5003940100001)(53416004)(64706001)(50466002)(92566002)(47776003)(2950100001)(5003600100002)(5007970100001)(11100500001)(48376002)(50226001)(2201001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM3PR12MB0860;H:atltwp01.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0860;2:kZQQcc8TJOjHK7YdIlto0MPBXleVa2xhnNJaIz4GaOFT72+DvC8WV+8l58tnhnccgfzAnFZsGyq7F/1tYk5j0lwSUW65Q3SzY6NK3NOt9pOJw5maZ3votywrOUp4yfsGS4fKfPbb+cq2GHA1czVDtbV0su0T7N7LmbbKJJ958/Q=;3:xHN31BXU5gCCEeWOoR0tUwCGXTNkqAOLuV+OthnGtaUXzhDGLh3MnsH+5p15BTENoR0XGc6TXMg5vhp6YjaISC/vXInRN6Y93F6ByjrEo26p9xGyvIROcNEFujDHZKhIRLz1i3dwciheKDgocI3HQbHqLjSlOFQOXP55qL06gHG6wDf7xB1tgklEO0BznD4nIhF0QE9QqF4a1zcuXRgrkCB8sa3AJPqsiXhdaoW9uPaCIVLpYDxqiU47v1TyzY4k;25:suKnnScTPCsMlI6PiXf3h2cyegYdBYHFj9XWLEo02UMeS2JW14CahXoVSJLLxjk7XdbHIleAkBCox9pr2wOV0k3C4Yqd+FClXXYQlOVfGVT7IIqefEllaY1Zxe6Nb/6VIQwIodckDMvUi0H9KKrSOfFmc+bQ9Zx//2qTkWQPCtZPLO8hxVDJJAV4r+xA8sKKrKgk9tNYQfd+gB/jiAyrkklwMpYwvvCwf70mK85H+1VpB3aKh952CleCVBuDNBg+ X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0860; X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0860;20:HMYQ7GlcHED7XiKUuY/3RJ2YILl78NiFYPW0aKiBizKURpKXRypcs4pBtRjsr6V0tIFium4Om9yeuqlo12Xuwl1g2VhR7T5cLk1kl5vmlpjLijl8e0Fsbr37UQ/1+BYlnJwbJZ3DY0V0o6ylumJgpNYj2TjJsuVf2dH6+wqkkoJcni6ePGysWdjxE2zi3mQ1jWNxZFVzA2tRwWJ3/0Xu0h4V8Bq3Q5z5xgbq7T/suQYnGmnjyct+72+RbJFVhy4CK1NkXZHtNKsVhr8wRbQMCL5JKjwzhonMAcN9UPNZ8lIVXEE5eY1N+Gt/KiQj6rFg2zWsbV9Xx6MpWH8nLF0LZTuvDZPyvhYurhR344rsZaxEU6DxV9aHHBvIbTcXjj+TlfusRUh4FGDXVcSR3qnBElGDlpewS4SVLp5kWRgj72Fx48I8O6d+k6p7WgDDk/RtIzbq/lVUj9rMoPH5xZG39OZJbl0jrRVb0tHIeWFWHBS1Nb50dmoyZFXdLCOxYRKx;4:nddoEDCBBoOA22tsOOIq7P5t6YXDBWS83oAWdeEuqfYaH3VVsjVnPw0KGfbD8RCunsfJK+SS48jP2haOP3QiOrIDQqQiaRxkfxbEgTNoDoeF7g79EyzdmNPopiawj0FbNqKMTE39+a/XxaUe9h9OEKy25XuC1+sCzMg0IeZ+9/ZPfp7QidhIx5m3QCSINiJtTbgM+YgDjPvD8jD91dmZ6Zh+RAEbQBVE0ELEBQ6ao2ml0AQsroBGpb2LaEeTbOU5QzzrDqhQ4U4de6Sy4U7Uu+l1VAMRDKzzM9/xu1zXnMMEVUU/sPrwYb7rRPOAo95ino57IfpANeanc93QhLh6QMRFy1u/xVTnpznehNAC6vc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001);SRVR:DM3PR12MB0860;BCL:0;PCL:0;RULEID:;SRVR:DM3PR12MB0860; X-Forefront-PRVS: 0713BC207F X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM3PR12MB0860;23:2NICgDJ6dMOH9m0MILOaCfo0TNn8GBanl+Ad8a1QQ?= =?us-ascii?Q?O6mwQlCC5QOSvGIZwrCgfNE1uv42EugJ51xvGNroQdXlBxOsCfNEdPai867A?= =?us-ascii?Q?3vrg0qv70oOuEUXGzHOC/B+Exqjk8tYNLEoptl7DlQIRHDk6E2RW6ugYer4Y?= =?us-ascii?Q?J05OiMA/rDvcB18cvSmgy4WTRkj+PkUnNIMrR/uy2Rwp0Fk99dFSj9WFm/M8?= =?us-ascii?Q?4fI7Xfe4qO9fmgUsZhZ97r7wtWbiqoovv25LQB7nu+41dPhXctcx0g1eVAGp?= =?us-ascii?Q?EI+74yik8uSxhOY8otFImORG12V0vtQIlaGqBihqPgRTNnO9KkZ6bMwF/i4d?= =?us-ascii?Q?r785KVLdM2UClmnNpOgwxOLdWZXSXZXZVOWKpPOVE+sPuLxeU/AjC3n3Z4oq?= =?us-ascii?Q?aR4qTejzM5q2b94Nc219Y4+H1yZFwBUEETfQ2yrvVngEpiBIjjok5I1LTwsg?= =?us-ascii?Q?81d8IAgK0nCZGXceQPu/EiNMeDEBNDS/FcQ+VFjCGhdeKrY0C2S2eybT2R5g?= =?us-ascii?Q?otcnN8+ewbPuORnee7hFtPDrp/GmbQMQ3Ni7U5UFrtDlplMRuV5BQi5y1BQQ?= =?us-ascii?Q?msApPpYHrhtmPBQ42YGzrYyb5Jsfa2ma7wtIuoM7J9f/YWGhsPYNlPh56+VP?= =?us-ascii?Q?HM6dqPnlDrSlzDDSE+stKPuVSOHAZepq6lL1715xa7UW4UQVz430XU254/TU?= =?us-ascii?Q?Lux77geBfxLZQ2wJ4IMuCUrte+IKHrI1H0ydlCVvU2NB+d2Kn0hPjw8D4Qcf?= =?us-ascii?Q?E1qVgL87EIXnCHxy1NE8tBBkJY9X+OLtsl47u5Iqb9nKxjlRYXJSTZTiT0Zo?= =?us-ascii?Q?QdDfu1Q5bRNFbRGOD/3aqQMGfEEeLYGKF4/sCebv/O/fq4HdlfbZZVRtVE6B?= =?us-ascii?Q?r3tpEFn874TvCCd30dQuzR3ZufTT2sm+UeWTUmNAXQ7r1SeKm4YB56OO/25Z?= =?us-ascii?Q?BZSuCL1GkZXdBg97jcB3674HnWPw3vv7vPR477f+d+MkUFz2qtqVvWWuTc/Q?= =?us-ascii?Q?yJp96g4gH7gyccUk8rHOrHzXxy4zc2fJTaAKqVhwmipc4leaZwmfWU9PsBbs?= =?us-ascii?Q?qg3tT5oEgzpe7E/biGeu8wv9rpRblK9k02ttyYbBpeWHohH6/PuMWup7dvOd?= =?us-ascii?Q?XWfaX2qiMc=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM3PR12MB0860;5:Q2IUfTZGY9wpg8LJDvOxFi3hFaiLfRuDJo0g0cn8nPCGwMF9BfluVxgGNnZwsZ12xBC3eTbRdv1VCssDiLBFJ+qRYfD+fcicgoTNo6PmsUlYI/12lxRkwN0Hx9lGuxMFl8FFPGnOmA+CPr7O5aL8lQ==;24:pCqluP4sYsARzJySZ8qOh4I4gBuTF/wTWR/6X42mXuaWZ18A0PSJqqwY0oT38WNUyrmna0rgVdrALNg8ZR+zKFugOvE9lulQWTAh1mnaR5c=;20:rCFnXDAH91eYvBIWgjdQrHSeuFQw24unQ8vJ/ybL1cPrqAqpWfpaXajcK9OEBzSfROTSTNXBJusz2jg5Lv5Amg== SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2015 16:39:33.2469 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR12MB0860 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org For F15h M60h processor, the scrub rate control register has moved to F2 of PCI config space and is at a different offset from earlier processors. The minimun recommended scrub rate is also different. (Refer D18F2x1c9_dct[1:0][DramScrub] on Fam15hM60h BKDG) Modify the set_scrub_rate() and get_scrub_rate() functions so that they are aware of these changes. Tested on F15hM60h, Fam15h Models 00h-0fh and Fam10h systems and it works fine. Signed-off-by: Aravind Gopalakrishnan --- drivers/edac/amd64_edac.c | 23 +++++++++++++++++++---- drivers/edac/amd64_edac.h | 2 ++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/drivers/edac/amd64_edac.c b/drivers/edac/amd64_edac.c index 73aea40..0ae72b9 100644 --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c @@ -173,7 +173,7 @@ static inline int amd64_read_dct_pci_cfg(struct amd64_pvt *pvt, u8 dct, * scan the scrub rate mapping table for a close or matching bandwidth value to * issue. If requested is too big, then use last maximum value found. */ -static int __set_scrub_rate(struct pci_dev *ctl, u32 new_bw, u32 min_rate) +static int __set_scrub_rate(struct amd64_pvt *pvt, u32 new_bw, u32 min_rate) { u32 scrubval; int i; @@ -201,7 +201,14 @@ static int __set_scrub_rate(struct pci_dev *ctl, u32 new_bw, u32 min_rate) scrubval = scrubrates[i].scrubval; - pci_write_bits32(ctl, SCRCTRL, scrubval, 0x001F); + if (pvt->fam == 0x15 && pvt->model == 0x60) { + f15h_select_dct(pvt, 0); + pci_write_bits32(pvt->F2, F15H_M60H_SCRCTRL, scrubval, 0x001F); + f15h_select_dct(pvt, 1); + pci_write_bits32(pvt->F2, F15H_M60H_SCRCTRL, scrubval, 0x001F); + } else { + pci_write_bits32(pvt->F3, SCRCTRL, scrubval, 0x001F); + } if (scrubval) return scrubrates[i].bandwidth; @@ -216,12 +223,17 @@ static int set_scrub_rate(struct mem_ctl_info *mci, u32 bw) if (pvt->fam == 0xf) min_scrubrate = 0x0; + else if (pvt->fam == 0x15 && pvt->model == 0x60) + min_scrubrate = 0x6; /* Erratum #505 */ if (pvt->fam == 0x15 && pvt->model < 0x10) f15h_select_dct(pvt, 0); - return __set_scrub_rate(pvt->F3, bw, min_scrubrate); + if (pvt->fam == 0x15 && pvt->model == 0x60) + return __set_scrub_rate(pvt, bw, min_scrubrate); + + return __set_scrub_rate(pvt, bw, min_scrubrate); } static int get_scrub_rate(struct mem_ctl_info *mci) @@ -234,7 +246,10 @@ static int get_scrub_rate(struct mem_ctl_info *mci) if (pvt->fam == 0x15 && pvt->model < 0x10) f15h_select_dct(pvt, 0); - amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval); + if (pvt->fam == 0x15 && pvt->model == 0x60) + amd64_read_pci_cfg(pvt->F2, F15H_M60H_SCRCTRL, &scrubval); + else + amd64_read_pci_cfg(pvt->F3, SCRCTRL, &scrubval); scrubval = scrubval & 0x001F; diff --git a/drivers/edac/amd64_edac.h b/drivers/edac/amd64_edac.h index 4bdec75..971dc12 100644 --- a/drivers/edac/amd64_edac.h +++ b/drivers/edac/amd64_edac.h @@ -255,6 +255,8 @@ #define DCT_SEL_HI 0x114 +#define F15H_M60H_SCRCTRL 0x1C8 + /* * Function 3 - Misc Control */ -- 2.4.0