From patchwork Tue Jul 25 18:12:25 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helge Deller X-Patchwork-Id: 9862659 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D2DD8601A1 for ; Tue, 25 Jul 2017 18:12:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CC26C2863E for ; Tue, 25 Jul 2017 18:12:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C0D7D2866D; Tue, 25 Jul 2017 18:12:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.4 required=2.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_HI,RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 40A8C2863E for ; Tue, 25 Jul 2017 18:12:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751571AbdGYSMg (ORCPT ); Tue, 25 Jul 2017 14:12:36 -0400 Received: from mout.gmx.net ([212.227.15.18]:57391 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751491AbdGYSMd (ORCPT ); Tue, 25 Jul 2017 14:12:33 -0400 Received: from p100.box ([193.159.17.88]) by mail.gmx.com (mrgmx001 [212.227.17.190]) with ESMTPSA (Nemesis) id 0MMCFR-1dWVYF3yPt-007yw1; Tue, 25 Jul 2017 20:12:27 +0200 Date: Tue, 25 Jul 2017 20:12:25 +0200 From: Helge Deller To: linux-parisc@vger.kernel.org, James Bottomley , John David Anglin Subject: [PATCH] parisc: Show DIMM slot number which holds broken memory module Message-ID: <20170725181225.GA22332@p100.box> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-Provags-ID: V03:K0:6KgYWt4jzZNl72Jy4bj8kYgHzRv8SU6U7jt/mI3BfznCeZiPQYV xeVDZON0fpcp8ig8R9zKJBjYH8+ImBEsaAj2DyT6dCiRM7NFpf/iSKpin06BKprGDbUZUO6 FINA1HDhMnbTf7GrQB4eNactRmxCnanwI/vnkElNwebXRSViZ06BI+fXeNhPEnZRVE5HvVu au89jWSv8tfW7zeR6XIIg== X-UI-Out-Filterresults: notjunk:1; V01:K0:aYmRa4aiGh8=:pL9n5mTvJoAjdm/I2JiQCv 2NxJmtIVdQXU5b5wU9Kl7RFxEUWiRiTzmA3muTGFT6wfOxa1LNipPMfThfXgH5aX8++0RN6mS q83O0SzEbmfI4/tyt0TL1tVWgCgdym9fzDfnsI4TqOU4w1hRW3PpJlFQuuTxy/lcaCRneUBz0 oiT4AMDPtHBYVQo6Y1kY7IgZHkRi8jhT4pIP6OnqKomKfwl0jec+6LS5X526sgsU35zK/ZSrz /BMPu5KEDkLg7zgKw+gXFv2yGq27mmQ+42/wVW3XVRlcCGeK2LKceNfexpNk2PC+d6A30ERky zC4cngotX6cDUUSzHt4EVaJR+HzfI9jopQ64UaV5638byog5sh1hYKlDnyMDToxx82D6OaPD3 EmUQ1R8/dFVn5nWPrmgPnVg1MkfRjcYXRKD1Dt4Ok6t6PzZZkCbE1Tx3DaVFvOVkgjnyJwauE +K+HpzXa4nsoSYTVlqFxF1k57UPw+CJ0yvFpijAhwr3nqxTGtKx4COqQA0bjRmRrhnQX5ILPX /KvhYSjxXDAphKCZswMnHkCq3D6AVu/6qzuXgYsSL6Q0gEYD1Bs5AybK13DTjHFBwzZAWnxpD XlGb/VQTe/0g5pjngZ5j2u97viaFpYzKc3SXjqnrc2uLEOBj+qNwUtyq+3sWqpq8EI0T80e7G L8v5oWcs7gvsFAvLgWHlMRzt97H+GgNUSKoqVpqMXFrmbC7VVCaYRedl5BviL9S4YZmEZzyzN C/v0FPN4sbf2B1K4KDZz5xoc+tzNtTYJzB2qXo67zd8EPct5U60FZaZO5YOSb9e+UodewusU1 7dkssaK57erUuVtgUxHGqjTwu3bVA== Sender: linux-parisc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The Page Deallocation Table (PDT) holds the physical addresses of all broken memory addresses. With the physical address we now are able to show which DIMM slot (e.g. 1a, 3c) actually holds the broken memory module so that users are able to replace it. Signed-off-by: Helge Deller --- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/arch/parisc/kernel/pdt.c b/arch/parisc/kernel/pdt.c index 040d49b..fab374c 100644 --- a/arch/parisc/kernel/pdt.c +++ b/arch/parisc/kernel/pdt.c @@ -133,11 +133,18 @@ void __init pdc_pdt_init(void) } for (i = 0; i < pdt_status.pdt_entries; i++) { - if (i < 20) - pr_warn("PDT: BAD PAGE #%d at 0x%08lx (error_type = %lu)\n", - i, - pdt_entry[i] & PAGE_MASK, - pdt_entry[i] & 1); + struct pdc_pat_mem_phys_mem_location loc; + + /* get DIMM slot number */ + loc.dimm_slot = 0xff; + pdc_pat_mem_get_dimm_phys_location(&loc, pdt_entry[i]); + + pr_warn("PDT: BAD PAGE #%d at 0x%08lx, " + "DIMM slot %02x (error_type = %lu)\n", + i, + pdt_entry[i] & PAGE_MASK, + loc.dimm_slot, + pdt_entry[i] & 1); /* mark memory page bad */ memblock_reserve(pdt_entry[i] & PAGE_MASK, PAGE_SIZE);