From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [4.11,085/197] EDAC, amd64: Fix reporting of Chip Select sizes on Fam17h From: Greg Kroah-Hartman Message-Id: <20170523200828.692017010@linuxfoundation.org> Date: Tue, 23 May 2017 22:07:26 +0200 To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Benjamin Bennett , Yazen Ghannam , linux-edac , Borislav Petkov List-ID: NC4xMS1zdGFibGUgcmV2aWV3IHBhdGNoLiAgSWYgYW55b25lIGhhcyBhbnkgb2JqZWN0aW9ucywg cGxlYXNlIGxldCBtZSBrbm93LgoKLS0tLS0tLS0tLS0tLS0tLS0tCgpGcm9tOiBZYXplbiBHaGFu bmFtIDx5YXplbi5naGFubmFtQGFtZC5jb20+Cgpjb21taXQgZWI3N2U2YjgwZjNiZWQyNjJjNzc3 MzIzNmYwZmI4NDY0OWZkMzA5MSB1cHN0cmVhbS4KClRoZSB3cm9uZyBpbmRleCBpbnRvIHRoZSBj c2Jhc2VzL2NzbWFza3MgYXJyYXlzIHdhcyBiZWluZyBwYXNzZWQgdG8KdGhlIGZ1bmN0aW9uIHRv IGNvbXB1dGUgdGhlIGNoaXAgc2VsZWN0IHNpemVzLCB3aGljaCByZXN1bHRlZCBpbiB0aGUKd3Jv bmcgc2l6ZSBiZWluZyBjb21wdXRlZC4gQWRkcmVzcyB0aGF0IHNvIHRoYXQgdGhlIGNvcnJlY3Qg dmFsdWVzIGFyZQpjb21wdXRlZCBhbmQgcHJpbnRlZC4KCkFsc28sIHJlZG8gaG93IHdlIGNhbGN1 bGF0ZSB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIGEgQ1Mgcm93LgoKUmVwb3J0ZWQtYnk6IEJlbmph bWluIEJlbm5ldHQgPGJlbmJlbm5ldHRAZ21haWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBZYXplbiBH aGFubmFtIDx5YXplbi5naGFubmFtQGFtZC5jb20+CkNjOiBsaW51eC1lZGFjIDxsaW51eC1lZGFj QHZnZXIua2VybmVsLm9yZz4KTGluazogaHR0cDovL2xrbWwua2VybmVsLm9yZy9yLzE0OTMzMTMx MTQtMTEyNjAtMS1naXQtc2VuZC1lbWFpbC1ZYXplbi5HaGFubmFtQGFtZC5jb20KWyBSZW1vdmUg dW5uZWVkZWQgaW50ZWdlciBtYXRoIGNvbW1lbnQsIG1pbm9yIGNsZWFudXBzLiBdClNpZ25lZC1v ZmYtYnk6IEJvcmlzbGF2IFBldGtvdiA8YnBAc3VzZS5kZT4KU2lnbmVkLW9mZi1ieTogR3JlZyBL cm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KLS0tCiBkcml2ZXJzL2Vk YWMvYW1kNjRfZWRhYy5jIHwgICA0MCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0p CgoKCi0tClRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1 YnNjcmliZSBsaW51eC1lZGFjIiBpbgp0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21v QHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJu ZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwKCi0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFj LmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtNzgyLDI0ICs3ODIsMjYgQEAg c3RhdGljIHZvaWQgZGVidWdfZHVtcF9kcmFtY2ZnX2xvdyhzdHJ1YwogCiBzdGF0aWMgdm9pZCBk ZWJ1Z19kaXNwbGF5X2RpbW1fc2l6ZXNfZGYoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1OCBjdHJs KQogewotCXUzMiAqZGNzYiA9IGN0cmwgPyBwdnQtPmNzZWxzWzFdLmNzYmFzZXMgOiBwdnQtPmNz ZWxzWzBdLmNzYmFzZXM7Ci0JaW50IGRpbW0sIHNpemUwLCBzaXplMTsKKwlpbnQgZGltbSwgc2l6 ZTAsIHNpemUxLCBjczAsIGNzMTsKIAogCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMs ICJVTUMlZCBjaGlwIHNlbGVjdHM6XG4iLCBjdHJsKTsKIAogCWZvciAoZGltbSA9IDA7IGRpbW0g PCA0OyBkaW1tKyspIHsKIAkJc2l6ZTAgPSAwOworCQljczAgPSBkaW1tICogMjsKIAotCQlpZiAo ZGNzYltkaW1tKjJdICYgRENTQl9DU19FTkFCTEUpCi0JCQlzaXplMCA9IHB2dC0+b3BzLT5kYmFt X3RvX2NzKHB2dCwgY3RybCwgMCwgZGltbSk7CisJCWlmIChjc3Jvd19lbmFibGVkKGNzMCwgY3Ry bCwgcHZ0KSkKKwkJCXNpemUwID0gcHZ0LT5vcHMtPmRiYW1fdG9fY3MocHZ0LCBjdHJsLCAwLCBj czApOwogCiAJCXNpemUxID0gMDsKLQkJaWYgKGRjc2JbZGltbSoyICsgMV0gJiBEQ1NCX0NTX0VO QUJMRSkKLQkJCXNpemUxID0gcHZ0LT5vcHMtPmRiYW1fdG9fY3MocHZ0LCBjdHJsLCAwLCBkaW1t KTsKKwkJY3MxID0gZGltbSAqIDIgKyAxOworCisJCWlmIChjc3Jvd19lbmFibGVkKGNzMSwgY3Ry bCwgcHZ0KSkKKwkJCXNpemUxID0gcHZ0LT5vcHMtPmRiYW1fdG9fY3MocHZ0LCBjdHJsLCAwLCBj czEpOwogCiAJCWFtZDY0X2luZm8oRURBQ19NQyAiOiAlZDogJTVkTUIgJWQ6ICU1ZE1CXG4iLAot CQkJCWRpbW0gKiAyLCAgICAgc2l6ZTAsCi0JCQkJZGltbSAqIDIgKyAxLCBzaXplMSk7CisJCQkJ Y3MwLAlzaXplMCwKKwkJCQljczEsCXNpemUxKTsKIAl9CiB9CiAKQEAgLTI3NTYsMjYgKzI3NTgs MjIgQEAgc2tpcDoKICAqCWVuY29tcGFzc2VzCiAgKgogICovCi1zdGF0aWMgdTMyIGdldF9jc3Jv d19ucl9wYWdlcyhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQsIHU4IGRjdCwgaW50IGNzcm93X25yKQor c3RhdGljIHUzMiBnZXRfY3Nyb3dfbnJfcGFnZXMoc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1OCBk Y3QsIGludCBjc3Jvd19ucl9vcmlnKQogewotCXUzMiBjc19tb2RlLCBucl9wYWdlczsKIAl1MzIg ZGJhbSA9IGRjdCA/IHB2dC0+ZGJhbTEgOiBwdnQtPmRiYW0wOworCWludCBjc3Jvd19uciA9IGNz cm93X25yX29yaWc7CisJdTMyIGNzX21vZGUsIG5yX3BhZ2VzOwogCisJaWYgKCFwdnQtPnVtYykK KwkJY3Nyb3dfbnIgPj49IDE7CiAKLQkvKgotCSAqIFRoZSBtYXRoIG9uIHRoaXMgZG9lc24ndCBs b29rIHJpZ2h0IG9uIHRoZSBzdXJmYWNlIGJlY2F1c2UgeC8yKjQgY2FuCi0JICogYmUgc2ltcGxp ZmllZCB0byB4KjIgYnV0IHRoaXMgZXhwcmVzc2lvbiBtYWtlcyB1c2Ugb2YgdGhlIGZhY3QgdGhh dAotCSAqIGl0IGlzIGludGVncmFsIG1hdGggd2hlcmUgMS8yPTAuIFRoaXMgaW50ZXJtZWRpYXRl IHZhbHVlIGJlY29tZXMgdGhlCi0JICogbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgdGhlIERCQU0g cmVnaXN0ZXIgdG8gZXh0cmFjdCB0aGUgcHJvcGVyIENTUk9XCi0JICogZmllbGQuCi0JICovCi0J Y3NfbW9kZSA9IERCQU1fRElNTShjc3Jvd19uciAvIDIsIGRiYW0pOworCWNzX21vZGUgPSBEQkFN X0RJTU0oY3Nyb3dfbnIsIGRiYW0pOwogCi0JbnJfcGFnZXMgPSBwdnQtPm9wcy0+ZGJhbV90b19j cyhwdnQsIGRjdCwgY3NfbW9kZSwgKGNzcm93X25yIC8gMikpCi0JCQkJCQkJICAgPDwgKDIwIC0g UEFHRV9TSElGVCk7CisJbnJfcGFnZXMgICA9IHB2dC0+b3BzLT5kYmFtX3RvX2NzKHB2dCwgZGN0 LCBjc19tb2RlLCBjc3Jvd19ucik7CisJbnJfcGFnZXMgPDw9IDIwIC0gUEFHRV9TSElGVDsKIAog CWVkYWNfZGJnKDAsICJjc3JvdzogJWQsIGNoYW5uZWw6ICVkLCBEQkFNIGlkeDogJWRcbiIsCi0J CSAgICBjc3Jvd19uciwgZGN0LCAgY3NfbW9kZSk7CisJCSAgICBjc3Jvd19ucl9vcmlnLCBkY3Qs ICBjc19tb2RlKTsKIAllZGFjX2RiZygwLCAibnJfcGFnZXMvY2hhbm5lbDogJXVcbiIsIG5yX3Bh Z2VzKTsKIAogCXJldHVybiBucl9wYWdlczsK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1764568AbdEWUR7 (ORCPT ); Tue, 23 May 2017 16:17:59 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:45796 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1764907AbdEWURl (ORCPT ); Tue, 23 May 2017 16:17:41 -0400 From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Benjamin Bennett , Yazen Ghannam , linux-edac , Borislav Petkov Subject: [PATCH 4.11 085/197] EDAC, amd64: Fix reporting of Chip Select sizes on Fam17h Date: Tue, 23 May 2017 22:07:26 +0200 Message-Id: <20170523200828.692017010@linuxfoundation.org> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170523200821.666872592@linuxfoundation.org> References: <20170523200821.666872592@linuxfoundation.org> User-Agent: quilt/0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.11-stable review patch. If anyone has any objections, please let me know. ------------------ From: Yazen Ghannam commit eb77e6b80f3bed262c7773236f0fb84649fd3091 upstream. The wrong index into the csbases/csmasks arrays was being passed to the function to compute the chip select sizes, which resulted in the wrong size being computed. Address that so that the correct values are computed and printed. Also, redo how we calculate the number of pages in a CS row. Reported-by: Benjamin Bennett Signed-off-by: Yazen Ghannam Cc: linux-edac Link: http://lkml.kernel.org/r/1493313114-11260-1-git-send-email-Yazen.Ghannam@amd.com [ Remove unneeded integer math comment, minor cleanups. ] Signed-off-by: Borislav Petkov Signed-off-by: Greg Kroah-Hartman --- drivers/edac/amd64_edac.c | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) --- a/drivers/edac/amd64_edac.c +++ b/drivers/edac/amd64_edac.c @@ -782,24 +782,26 @@ static void debug_dump_dramcfg_low(struc static void debug_display_dimm_sizes_df(struct amd64_pvt *pvt, u8 ctrl) { - u32 *dcsb = ctrl ? pvt->csels[1].csbases : pvt->csels[0].csbases; - int dimm, size0, size1; + int dimm, size0, size1, cs0, cs1; edac_printk(KERN_DEBUG, EDAC_MC, "UMC%d chip selects:\n", ctrl); for (dimm = 0; dimm < 4; dimm++) { size0 = 0; + cs0 = dimm * 2; - if (dcsb[dimm*2] & DCSB_CS_ENABLE) - size0 = pvt->ops->dbam_to_cs(pvt, ctrl, 0, dimm); + if (csrow_enabled(cs0, ctrl, pvt)) + size0 = pvt->ops->dbam_to_cs(pvt, ctrl, 0, cs0); size1 = 0; - if (dcsb[dimm*2 + 1] & DCSB_CS_ENABLE) - size1 = pvt->ops->dbam_to_cs(pvt, ctrl, 0, dimm); + cs1 = dimm * 2 + 1; + + if (csrow_enabled(cs1, ctrl, pvt)) + size1 = pvt->ops->dbam_to_cs(pvt, ctrl, 0, cs1); amd64_info(EDAC_MC ": %d: %5dMB %d: %5dMB\n", - dimm * 2, size0, - dimm * 2 + 1, size1); + cs0, size0, + cs1, size1); } } @@ -2756,26 +2758,22 @@ skip: * encompasses * */ -static u32 get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr) +static u32 get_csrow_nr_pages(struct amd64_pvt *pvt, u8 dct, int csrow_nr_orig) { - u32 cs_mode, nr_pages; u32 dbam = dct ? pvt->dbam1 : pvt->dbam0; + int csrow_nr = csrow_nr_orig; + u32 cs_mode, nr_pages; + if (!pvt->umc) + csrow_nr >>= 1; - /* - * The math on this doesn't look right on the surface because x/2*4 can - * be simplified to x*2 but this expression makes use of the fact that - * it is integral math where 1/2=0. This intermediate value becomes the - * number of bits to shift the DBAM register to extract the proper CSROW - * field. - */ - cs_mode = DBAM_DIMM(csrow_nr / 2, dbam); + cs_mode = DBAM_DIMM(csrow_nr, dbam); - nr_pages = pvt->ops->dbam_to_cs(pvt, dct, cs_mode, (csrow_nr / 2)) - << (20 - PAGE_SHIFT); + nr_pages = pvt->ops->dbam_to_cs(pvt, dct, cs_mode, csrow_nr); + nr_pages <<= 20 - PAGE_SHIFT; edac_dbg(0, "csrow: %d, channel: %d, DBAM idx: %d\n", - csrow_nr, dct, cs_mode); + csrow_nr_orig, dct, cs_mode); edac_dbg(0, "nr_pages/channel: %u\n", nr_pages); return nr_pages;